sudo するときに sbin にパスを設定する方法

September 27th, 2011 by naoya | Filed under day.

CentOS 5.x で、次のように sudo コマンドを実行すると、次のようなエラーがでますよね。


$ sudo service httpd restart
sudo: service: command not found

これは、当然ながら /sbin にパスが通っていないからです。
PATH を見てみると、次のような感じになっています。ちなみに sudo する前の通常ユーザ naoya のシェルは bash で .bashrc などはデフォルトのまま何も変更していません。


$ sudo sh -c 'echo $PATH'
/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/naoya/bin

この PATH に、/sbin や /usr/sbin を追加するには、/etc/sudoers に次の内容を追加します。


$ sudo /usr/sbin/visudo
--- sudoers-org 2011-05-09 00:19:09.000000000 +0900
+++ sudoers 2011-09-27 22:50:50.000000000 +0900
@@ -48,6 +48,7 @@
Cmnd_Alias DRIVERS = /sbin/modprobe

# Defaults specification
+Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

#
# Disable "ssh hostname sudo ", because it will show the password in clear.
@@ -61,6 +62,7 @@
LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
+ PATH \
_XKB_CHARSET XAUTHORITY"

## Next comes the main part: which users can run what software on

この設定を追加したあと、再度確認すると /sbin と /usr/sbin が追加されることが分かると思います。

$ sudo sh -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin

@komagata さんの話によると、Debian ではデフォルトで sbin 系がパスに追加されている様子なので、CentOS だといささか不便だったようです。

これで、また一つ sudo を利用できますね!

Special Thanks to @komagata!

Tags:

One Response to “sudo するときに sbin にパスを設定する方法”

Leave a Reply