web-dev-qa-db-ja.com

一部のコマンドをSudoできないのはなぜですか? (例:vim)

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>_を機能させるにはどうすればよいですか?

16
JaredMcAteer

Sudoを実行すると、ホワイトリストに登録されていないすべての値の環境がクリアされ、PATH変数がサニタイズされた値にリセットされるように多くのシステムが構成されます。

前者はDefaults env_resetとして、いくつかのDefaults env_keep += "SOME_VARIABLE_NAME"/etc/sudoersにあります。後者の「安全な」PATHオーバーライドはDefaults secure_path = /sbin:/bin:/usr/sbin:/usr/binとして指定されます– Sudoingのときにこの動作を削除するには、この行を削除します。


Sudo -Vrootとして実行すると、どの環境変数がどのように処理されるかが出力されます。


これらのデフォルトを削除したくない場合は、常にフルパス(Sudo /usr/local/bin/vim)を使用してプログラムを指定できます。

または、SETENVファイルでアカウントにsudoersを許可することもできます。次に例を示します。

%wheel  ALL=(ALL)       SETENV: ALL

これにより、コマンドが実行される前に変数がシェルによって解釈され、継承されたPATH(ただし、Sudo PATH=$PATH which vimなどは含まれない可能性があります)のように、/sbinのような環境のデフォルトをオーバーライドできます。

18
Daniel Beck
Sudo echo $PATH

あなたが思うことをしません。 $PATHは(お使いの)シェルに置き換えられますbeforeコマンドを実行します。

目的の動作を実現するには、Sudo -iを使用できます。

から man Sudo

-i [コマンド]

-isimulate initial login)オプションは、passwdで指定されたシェルを実行します(5)ログインシェルとしてのターゲットユーザーのエントリ。これは、.profile.loginなどのログイン固有のリソースファイルがシェルによって読み取られることを意味します。コマンドが指定されている場合、コマンドはシェルに渡されて実行されます。

7
Dennis

Sudo <command>を機能させるにはどうすればよいですか?

パスの問題を解決するまでは、フルパス名を使用してください

  Sudo /usr/local/bin/vim /var/www/html/index.html
1
RedGrittyBrick