다음과 같이 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