本来sudoコマンドで実行する処理を行う場合、root権限のパスワードを指定する必要がある。この処理をシェルプログラムで記述する場合は、以下のようにパスワードを記述すれば、シェルから実行することができる。
#!/bin/sh
pass="root_password"
echo $pass | sudo -S /usr/sbin/service squid3 start
ただシェルプログラム内にrootのパスワードをべた書きすることになり、極力避けたい。そこで、sudoコマンドの設定の一部を変更して、特定ユーザおよびコマンドだけパスワード未入力で実行できるようにする。
sudoコマンド設定変更(visudo)
visudo
コマンドを実行すると、sudoコマンドの振る舞いを定義することができる。またこのコマンドで修正すると、構文チェックを実行して問題ないときに保存される安全設計になっている。/etc配下に定義ファイルがあるが、絶対に直接編集してはいけない
。
今回は、ユーザーhogeがserviceコマンドを実行するときだけ、パスワード入力を回避する設定を行う。設定ファイルの末端に以下を追加する。
> sudo visudo
:
hoge ALL=(ALL) NOPASSWD: /usr/sbin/service
ちなみに以下のように定義すると、hogeユーザはsudoコマンド時にパスワード入力はまったく不要になる。
hoge ALL=(ALL) NOPASSWD: ALL
この設定をした後、再ログイン?したら以下のシェルが実行できることを
確認する。
#!/bin/sh
sudo -S /usr/sbin/service squid3 restart