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


16

私はのようないくつかのコマンドを実行しようとすると、私は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>られますか?


そのユーザーをCentos OSのsudoersに既に追加しましたか?
AAlvz

回答:


18

を実行すると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 -Vとして実行すると、どの環境変数が処理されるかが出力さ  れrootます。


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

また、あなたはにアカウントを許可することができますSETENVsudoers、たとえば、ファイル:

%wheel  ALL=(ALL)       SETENV: ALL

これは、あなたがこのような環境のデフォルト設定を上書きすることができます:sudo PATH=$PATH which vimコマンドが実行される前に、変数は、その結果、シェルによってintepretedされるように、継承されたPATH(おそらく含まないであろう/sbinなどが)。


ありがとう。所有者にsudoersファイルを追加してもらうまで、デニスの回避策を使用します。
JaredMcAteer

6
sudo echo $PATH

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

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

man sudoから:

-i [コマンド]

-iシミュレート初期ログイン)オプションがで指定されたシェルで実行さpasswdのログインシェルとして対象ユーザのエントリ(5)。この手段などのログイン固有のリソースファイルという.profileか、.loginシェルによって読み込まれます。コマンドが指定されている場合、実行のためにシェルに渡されます。


1
これは、所有者にsudoersファイルを調整させるまで、適切な回避策です。
JaredMcAteer

1

どうすれば仕事を始めsudo <command>られますか?

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

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

5
私はあなたをdownvoteするつもりはないが、私はちょうど働くのは決して好きだ周りの問題をではなく、それらを把握し、それらを固定するポイントに権利を取得します。
ニコールハミルトン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.