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 -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で始まるので、権限の問題はないようです。

ベストアンサー1

バイナリ実行はSELinuxによってブロックされる可能性があります。ログログまたは監査ログ()で/var/log/audit/audit.log"avc"エラーを検索してこれを確認できます。

/usr/local/binこの問題を解決するには、rootユーザーのホームディレクトリではなくスクリプトとバイナリが通常存在するディレクトリ(たとえば)でこのスクリプトをホストすることをお勧めします。

このスクリプトをそこに移動し、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

おすすめ記事