sudoersのsecure_pathについて
タグ: linux / 初版公開: 2013-10-11

sudoを使う際に環境変数PATHは意外とつまづきやすい部分だ。

env_resetオプションが有効になっている場合(sudoのデフォルト)、sudoは実行時に各種環境変数を初期化する。PATHも例外ではなく、最小限のパスだけが指定された状態に初期化される。

そのためsudo実行時に/sbin, /usr/sbin, /usr/local/sbinにパスが通っていない状態になり、明らかに特権で実行できるはずのコマンドが実行できない、という状況に陥る。

解決方法は、/etc/sudoerssecure_pathを設定することだ。secure_pathが指定されていると、sudoは実行時に環境変数PATHをsecure_pathに指定されたパスで初期化する。設定を抜粋すると、以下のようにすれば意図どおりに動作するはずだ。

Defaults	env_reset
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

大抵はOSインストール時に正しく設定されているのだが、VPS等の普及で初期設定が良くわからない環境を使う機会も増えているので覚えておきたい。個人的にはS@@SesのOsukiniサーバを借りた際に、自分でパスを設定してやる必要があった。