パスワードなしでSudo-iと同様に、important_script.shを実行する必要があります。
私がsudoersにいる場合:
Apache ALL = (root) NOPASSWD: /blah/important_script.sh
「Sudo/blah/important_script.sh」を実行します。パスワードなしで実行できます。
ただし、「Sudo -i /blah/important_script.sh」を実行すると、Apacheのパスワードを入力する必要があります。
Sudoersの行を次のように変更した場合:
Apache ALL = (root) NOPASSWD:ALL
パスワードなしで "Sudo -i /blah/important_script.sh"コマンドを実行できます。
ただし、すべてのコマンドではなく、/ blah /important_script.shのみを実行できるようにしたい。
したがって、パスワードなしでSudo-iを使用して/blah/important_script.shのみを実行できるように設定する方法。
これを試してみると、問題の手がかりとなるエラーメッセージが表示されます
Sorry, user bob is not allowed to execute '/bin/bash -c /blah/important_script.sh' as root on Host.
Sudoersファイル/bin/bash -c...
で指定したコマンドとは異なるコマンド/blah/important_script...
へのアクセスが拒否されていることに注意してください。ユーザーが特定のコマンドを実行できるようにSudoに指示する場合、ユーザーはsudoersで指定されたとおりの正確なコマンドラインを使用する必要があるため、sudoerを適切に変更する必要があります。
bob ALL=(root) NOPASSWD: /bin/bash -c /blah/important_script.sh
これはボブで機能するようになりました
$ Sudo -i /bin/bash -c /blah/important_script.sh
では、なぜこれを行うのですか?さて、須藤のマニュアルページに答えがあります
‑i [コマンド] ‑i(初期ログインのシミュレーション)オプションは、ターゲットユーザーのパスワードデータベースエントリで指定されたシェルをログインシェルとして実行します。これは、.profileや.loginなどのログイン固有のリソースファイルがシェルによって読み取られることを意味します。 コマンドが指定されている場合、コマンドはシェルの‑cオプションを介して実行するためにシェルに渡されます。コマンドが指定されていない場合、対話型シェルが実行されます。