通常のユーザーとして実行するプログラムがありますが、root権限を必要とするコマンドを実行する必要がある場合があります。そこで、シェルスクリプトを作成し、Sudoでそのスクリプトを実行する権限をユーザーに付与しました。
シェルからプログラムを実行するとスクリプトは正常に実行されますが、サービスとして実行すると失敗します。 Sudoは次のエラーで終了します:
Sudo: effective uid is not 0, is /usr/bin/Sudo on a file system with
the 'nosuid' option set or an NFS file system without root privileges?0
This はサービスのユニットファイル、 this はスクリプトで、sudoers
に追加しました
user ALL = (root) NOPASSWD: /path/to/script
理由がわかりません。 Sudoは正常に動作し、/usr/bin
と/usr/bin/Sudo
の権限は正しいです。
ユニットファイルにNoNewPrivileges=true
を設定しました
ドキュメントから:
Trueの場合、サービスプロセスとそのすべての子が新しい特権を取得できないようにします。このオプションは、あらゆる種類のUID変更も禁止するため、それぞれのセキュアビットフラグ(上記を参照)よりも強力です。これは、プロセスとその子が特権を二度と昇格させないようにするための最も簡単で効果的な方法です。
したがって、実行可能ファイルにsuidビットが設定されていても、Sudoはroot権限を取得しません。