以前、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 昇格を許可していない同名のコマンドを実行できてしまいますね。一つ勉強になりました。
参考)