Centos-6.3を実行しているフレンドサーバーにSudoアクセスがありますが、_Sudo vim /var/www/html/index.html
_などのコマンドを実行しようとすると、エラーが発生します_Sudo: vim: command not found
_ただし、_Sudo su
_を実行してから、 _vim /var/www/html/index.html
_と期待どおりに動作します。
_echo $PATH
_と_Sudo echo $PATH
_の両方が生成されます:
_/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin
_
_Sudo which vim
_ただし、次の結果になります。
_which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)
_
追加してみました
_export PATH=$PATH:/usr/local/bin
_
_/root/.bashrc
_ではなく_Sudo su
_を使用する場合の問題を修正した_Sudo <command>
_に。
_Sudo <command>
_を機能させるにはどうすればよいですか?
Sudo
を実行すると、ホワイトリストに登録されていないすべての値の環境がクリアされ、PATH変数がサニタイズされた値にリセットされるように多くのシステムが構成されます。
前者はDefaults env_reset
として、いくつかのDefaults env_keep += "SOME_VARIABLE_NAME"
は/etc/sudoers
にあります。後者の「安全な」PATH
オーバーライドはDefaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
として指定されます– Sudo
ingのときにこの動作を削除するには、この行を削除します。
Sudo -V
をroot
として実行すると、どの環境変数がどのように処理されるかが出力されます。
これらのデフォルトを削除したくない場合は、常にフルパス(Sudo /usr/local/bin/vim
)を使用してプログラムを指定できます。
または、SETENV
ファイルでアカウントにsudoers
を許可することもできます。次に例を示します。
%wheel ALL=(ALL) SETENV: ALL
これにより、コマンドが実行される前に変数がシェルによって解釈され、継承されたPATH
(ただし、Sudo PATH=$PATH which vim
などは含まれない可能性があります)のように、/sbin
のような環境のデフォルトをオーバーライドできます。
Sudo echo $PATH
あなたが思うことをしません。 $PATH
は(お使いの)シェルに置き換えられますbeforeコマンドを実行します。
目的の動作を実現するには、Sudo -i
を使用できます。
から man Sudo :
-i [コマンド]
-i(simulate initial login)オプションは、passwdで指定されたシェルを実行します(5)ログインシェルとしてのターゲットユーザーのエントリ。これは、
.profile
や.login
などのログイン固有のリソースファイルがシェルによって読み取られることを意味します。コマンドが指定されている場合、コマンドはシェルに渡されて実行されます。
Sudo <command>
を機能させるにはどうすればよいですか?
パスの問題を解決するまでは、フルパス名を使用してください
Sudo /usr/local/bin/vim /var/www/html/index.html