cronで実行するスクリプトやPHPなどのスクリプトの中で、sudoを使用して特定のユーザーでコマンドを実行したい場合に、通常sudoコマンドは、コンソール上でパスワードの入力を求められるのでコマンドを実行できない。
どうしても、sudoを使用する必要があったので、上記を実現する方法を調べてみた。
■ 特定のユーザーでのみパスワードなしでsudoできるようにする設定
# visudo
admin2 ALL=(admin) NOPASSWD: /home/admin/test.sh
上記の設定をした場合、admin2ユーザーがパスワードなしで、adminユーザーの権限でNOPASSWDで指定したプログラムのみを実行できるようになる。
■ コンソールなしでsudoを実行できるようにする設定
パスワードなしで、sudoを実行できるようにしても、デフォルトの設定では、コンソールなしでは、sudoすることができないのでcronやPHPのスクリプトなどの中ではコンソールがないのでsudoを実行することができないので下記の設定をする。
端末なしで、sudoを実行できるようにする設定を調べてみると、visudoで/etc/sudoersファイルの下記の行をコメントにすればいいと出てきたが、この設定だとすべてのユーザーがコンソールなしでsudoを実行できてしまうのでセキュリティ上、好ましくなさそう。
# visudo
#Defaults requiretty
下記のように、特定のユーザーのみ、コンソールなしでのsudoの許可をしたほうがセキュリティ上好ましいと思われる。
# visudo
Defaults requiretty
Detaults:admin2 !requiretty