我正在尝试启动一项服务来签署 VirtualBox 内核模块,遵循https://nidomiro.de/2018/04/automatic-virtualbox-module-signing-for-uefi/
在调整 Fedora 的 bash 脚本中引用的路径后,该脚本在以 root 身份手动运行时可以工作。但是,服务总是失败:
$ systemctl status sign-virtualbox.service
● sign-virtualbox.service - Signing VirtualBox Kernel Modules for UEFI
Loaded: loaded (/etc/systemd/system/sign-virtualbox.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code)
Process: 3018 ExecStart=/root/module-signing/sign-vbox-modules.sh (code=exited, status=203/EXEC)
Main PID: 3018 (code=exited, status=203/EXEC)
的输出sudo journalctl -xe
说sign-virtualbox.service: Failed at step EXEC spawning /root/module-signing/sign-vbox-modules.sh: Permission denied
文件权限:
$ sudo ls -l /root/module-signing/sign-vbox-modules.sh
-rwx------. 1 root root 309 Aug 7 11:35 /root/module-signing/sign-vbox-modules.sh
由于该服务以root身份启动,因此不应该存在权限问题,应该吗?
SELinux 可能阻止了二进制文件的执行。您可以从日志日志或审计日志(在 中
/var/log/audit/audit.log
)搜索“avc”错误来确认这一点。要解决此问题,我建议您从脚本和二进制文件通常所在的目录(例如 )托管此脚本
/usr/local/bin
,而不是在 root 用户的主目录下。一旦你把这个脚本移到那里,运行
restorecon
它以使其成为正确的 SELinux 类型(应该是system_u:object_r:bin_t:s0
或类似的。)所以:
并编辑您的 systemd 服务文件以更新路径。
如果您想检查它是否具有适当的 SELinux 类型: