sudoの時のPATH
sudoでコマンド実行しようとしたらcommand not foundになる。
sudo -iなら動きはするんだけど、カレントディレクトリが~rootになるのがあまり面白くない。
sudoの環境変数ってどこから読まれるんだろう……という話。
最初はrootとかそのユーザの環境変数が読まれるのかと思ってたけども、そうではないっぽい。というかそのためのsudo -iですし、セキュリティ的にも制限しておいた方がいいのかもしれないしね。
その辺の設定はsudoersにありました。
env_keepって値で指定した環境変数は、sudoを実行した元の環境から引き継がれるらしい。
なんかこういうの。
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS" Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE" Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES" Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE" Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
これに以下を追加してあげればいいんじゃないでしょうか。
Defaults env_keep += "PATH"
と思ったけどこれではうまくいかなかった。
もうちょいよく見るとこういうのがあった。
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
これじゃないか?
% sudo env (略) PATH=/sbin:/bin:/usr/sbin:/usr/bin (略)
これじゃないか。
信頼出来るパスならsecure_pathに書いてあげるといいらしいです。
詳しくはsudoers(5)で。