Systemd는 루트로 서비스를 시작할 수 없습니다

Systemd는 루트로 서비스를 시작할 수 없습니다

다음과 같이 VirtualBox 커널 모듈에 서명하는 서비스를 시작하려고 합니다.https://nidomiro.de/2018/04/automatic-virtualbox-module-signing-for-uefi/

Fedora bash 스크립트에서 참조되는 경로를 조정한 후 루트로 수동으로 실행하면 스크립트가 올바르게 작동합니다. 그러나 서비스는 항상 실패합니다.

$ 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

서비스가 루트로 시작되기 때문에 권한 문제는 없을 것 같은데요?

답변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

시스템 서비스 파일을 편집하여 경로를 업데이트하십시오.

적절한 SELinux 유형이 있는지 확인하려면 다음을 수행하세요.

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

관련 정보