Estou tentando iniciar um serviço para assinar os módulos do kernel do VirtualBox, seguindo https://nidomiro.de/2018/04/automatic-virtualbox-module-signing-for-uefi/
Após ajustar os caminhos referenciados no script bash para o Fedora, o script funciona quando executado manualmente como root. No entanto, o serviço sempre falha:
$ 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)
A saída de sudo journalctl -xe
dizsign-virtualbox.service: Failed at step EXEC spawning /root/module-signing/sign-vbox-modules.sh: Permission denied
Permissões de arquivo:
$ 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
Como o serviço é iniciado como root, não deveria haver um problema de permissão, deveria?
A execução do binário provavelmente está sendo bloqueada pelo SELinux. Você pode confirmar isso nos logs de diário ou talvez nos logs de auditoria (em
/var/log/audit/audit.log
) procurando por erros "avc".Para resolver esse problema, recomendo que você hospede esse script em um diretório onde os scripts e binários normalmente estão localizados, como
/usr/local/bin
, em vez de no diretório inicial do usuário root.Depois de mover este script para lá, execute
restorecon
-o para obter o tipo SELinux adequado (que deve sersystem_u:object_r:bin_t:s0
ou similar).Então:
E edite seu arquivo de serviço systemd para atualizar o caminho.
E se você quiser inspecionar se ele possui um tipo SELinux apropriado: