memocon プログラミングのメモや物欲日記、雑記等

crontabでsudoを利用する時の注意点など

2013年05月20日 14時15分

crontabでタスクを実行して日次や週次処理を実行するようなこと多いと思います。

その時に何も考えずにログインしたユーザでcrontabを設定していたらその時に生成されるログファイル等の所有者がapacheでなく仕掛けたユーザになって正常にログが出力されないというとても残念なことになるのでその対応。

これだとcrontabを仕掛けた時のユーザ権限で実行されてしまうのでsudoしました。

しかしsudoにてパスワードを求められてしまいうまくいかないのでvisudoでsudoに関する設定を変更します。

ユーザ設定の記述方法(rootの例)

ユーザ名 ホスト名= 変更可能ユーザ 実行可能コマンド
root ALL= (ALL) ALL

パスワードを入力無しで実行できるようにしたい場合は実行可能コマンドの箇所にNOPASSWD: コマンド名で記述する。
今回はcronで使用するenvとphpだけ許可したいので下のように記述。

ここで設定が終わったと思って明日を迎えると痛い目をみる。(みた)
デフォルトの設定でrequirettyというのが設定されていてこれだとsorry, you must have a tty to run sudoというエラーが発生して上手くいかない。

エラーメッセージそのままでttyからじゃないと許可されないので特定ユーザだけ許可するように以下を追加。

Defaults requirettyの行をコメントアウトや!requirettyにすると全てのユーザでttyからじゃなくても許可されるけどセキュリティの面で気持ち悪いので特定ユーザに限定。

微妙にはまったのがvisudoの変更が反映されるタイミング。
これは一度viを抜けないと反映されないので:wで上書きして別コンソ―ルで試してみても上手くいきませんのでご注意を。


参考サイト