べにやまぶろぐ

技術寄りの話を書くつもり

sudoers の NOPASSWD コマンド指定は絶対パスで!

以前、Capistrano でデプロイした後に PHP-FPM 再起動したりしたいときはコマンド限定でノーパス sudo 許可するのも悪くないかも - べにやまぶろぐ という記事の中で /etc/sudoers に

php_app_user  ALL=(ALL) NOPASSWD: /etc/init.d/php-fpm

と書くと php_app_user ユーザーは /etc/init.d/php-fpm コマンドをパスワードなしの root 権限で実行できると書いたんですが、コマンドによって visudo のパースエラーになってしまうことがあり困っていました。

何が原因かしばらくわからなかったのですが、

php_app_user  ALL=(ALL) NOPASSWD: /etc/init.d/php-fpm, make

と書くとダメで

php_app_user  ALL=(ALL) NOPASSWD: /etc/init.d/php-fpm, /usr/bin/make

とすると大丈夫なことに気づきました。どうも相対パスではなく絶対パスでないとダメなようです。

下記の記事、

のコメント中に

You should specify the absolute path in the first example, for security reasons -- an unscrupulous user could change $PATH and steal root access with an unqualified command name.

とあるように、確かに相対パスのコマンド指定だと sudo 昇格を許可していない同名のコマンドを実行できてしまいますね。一つ勉強になりました。

参考)