Systemd 无法以 root 身份启动服务

Systemd 无法以 root 身份启动服务

我正在尝试启动一项服务来签署 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 -xesign-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 身份启动的,因此不应该存在权限问题,不是吗?

答案1

二进制文件的执行可能被 SELinux 阻止。您可以从日志日志或可能从审核日志(在/var/log/audit/audit.log)中搜索“avc”错误来确认这一点。

为了解决这个问题,我建议您从脚本和二进制文件通常所在的目录(例如 )托管此脚本,/usr/local/bin而不是在根用户的主目录下。

一旦你把这个脚本移到那里,运行restorecon它以获得正确的 SELinux 类型(应该是system_u:object_r:bin_t:s0或类似的。)

所以:

mv /root/module-signing/sign-vbox-modules.sh /usr/local/bin/
restorecon /usr/local/bin/sign-vbox-modules.sh

并编辑您的 systemd 服务文件以更新路径。

如果您想检查它是否具有适当的 SELinux 类型:

ls -lZ /usr/local/bin/sign-vbox-modules.sh

相关内容