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

一部のコマンドを 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>どうやって仕事場へ行けばいいですか?

答え1

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

前者は およびでDefaults env_resetいくつか見つかります。後者の「セキュア」オーバーライドは として指定されています。 を するときにこの動作を削除するには、この行を削除します。Defaults env_keep += "SOME_VARIABLE_NAME"/etc/sudoersPATHDefaults secure_path = /sbin:/bin:/usr/sbin:/usr/binsudo


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


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

SETENVあるいは、次のようにファイル内でアカウントを許可することもできますsudoers

%wheel  ALL=(ALL)       SETENV: ALL

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

答え2

sudo echo $PATH

思った通りには動作しません。$PATH(あなたの)シェルに置き換えられます前にコマンドを実行します。

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

から男須藤:

-i [コマンド]

-私初期ログインをシミュレートする)オプションは、パスワード(5) 対象ユーザをログインシェルとして登録します。これは、ログイン固有のリソースファイル(.profileまたはなど).loginがシェルによって読み込まれることを意味します。コマンドが指定されている場合は、シェルに渡されて実行されます。

答え3

sudo <command>どうやって仕事場へ行けばいいですか?

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

  sudo /usr/local/bin/vim /var/www/html/index.html

関連情報