特定ユーザー・プログラムにのみcronでのsudoをパスワード無しで許可する設定
2024年8月9日
Cent OS 6.5 の cron 処理内で sudo を使ったら、
sudo: sorry, you must have a tty to run sudo
というエラーが出たので対処。
ついでになので、「特定ユーザーが特定プログラムを実行する場合のみ、cron からパスワード無しで sudo できる設定」もまとめておきます。
まず、/etc/sudoers に、
Defaults requiretty
があるか確認。次に、
# vi /etc/sudoers.d/01_backupuser
で、/etc/sudoers.d/ 以下にドロップインを作成。内容は以下。(ユーザー名「backupuser」やパスは自分の環境に合わせてください)
Defaults:backupuser !requiretty backupuser ALL=(root) NOPASSWD: /path/to/nopass/*.sh
1行目の !requiretty で cron での sudo を許可。2行目で特定パスのみパスワード無しで sudo を許可しています。
その後、以下で文法チェック。(ドロップインもチェック対象)
# visudo –c
最後にパーミションを440に。
# chmod 440 /etc/sudoers.d/01_backupuser
以上です。
ドロップイン(/etc/sudoers.d/)でなく、visudo で直接 /etc/sudoers に書いても動作すると思います。が、個人的にはドロップインが好みです。
なお、今回の設定を入れると、特定ユーザーだけとは言え tty 無しでの sudo を許可する上、特定プログラムについてはパスワード無しで sudo できるようになってしまうため、セキュリティ面で十分注意が必要です。
正直、個別要素についての説明記事はあったのですが、微妙に納得がいかないモノがちょこちょことあった気がしたので、書いておきました。