web-dev-qa-db-ja.com

サービスとして実行するとSudoが失敗する

通常のユーザーとして実行するプログラムがありますが、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の権限は正しいです。

1
Rnhmjoj

ユニットファイルにNoNewPrivileges=trueを設定しました

ドキュメントから:

Trueの場合、サービスプロセスとそのすべての子が新しい特権を取得できないようにします。このオプションは、あらゆる種類のUID変更も禁止するため、それぞれのセキュアビットフラグ(上記を参照)よりも強力です。これは、プロセスとその子が特権を二度と昇格させないようにするための最も簡単で効果的な方法です。

したがって、実行可能ファイルにsuidビットが設定されていても、Sudoはroot権限を取得しません。

2
Dan