sudoコマンドでPATHがリセットされるのはなぜですか? [コピー]

sudoコマンドでPATHがリセットされるのはなぜですか? [コピー]

レンガの壁に何度も触れた後、私は次の事実を見つけました。

$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/steve/bin

$ sudo bash
# echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin

しかし、

$ sudo bash -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin

$ sudo bash -Ec 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin

私から集めたその他の投稿パスはsudo次から読み取られます/etc/sudoers。ところで、なぜそうなのでしょうか?設定は$PATH意味がありますか/root/.profile、それともこれが上記の混乱の原因$PATHですかsudo

RHEL 6.4でbashを使用しています。

ベストアンサー1

保護

sudoこれらのコマンドのいくつかを実行するときに知ることができる保護機能が組み込まれています。これらの保護は、セキュリティの強化など、さまざまなタスクを実行できます$PATH

/etc/sudoersドキュメントから:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

これはコマンドの実行時に表示される内容ですsudo -c ....-E切り替えてこの動作を無効にできますsudo

メモ:一部の設定では、この-Eスイッチは効果がありません。これを「解決」するには、を使用できますsudo env "PATH=$PATH" bash。これにより、$PATH現在の電流がsudo環境に転送されます。

対話とログイン

このコマンドを実行すると:

$ sudo bash

bashログインシェルと対話型シェルを実行していますbash。これはbash設定ファイルのソースに関連しています。

  • インタラクティブ、別名bashまたはbash -i、源泉$HOME/.bashrc
  • ログインしてください。bash -l、源泉$HOME/.bash_profile

それでは、なぜ機能しないのですか-E

この質問に対するTylerRickの答え(sudoはルートを変更します - なぜ?)多くの理由が扱われます。主sudoにUbuntuの場合と同様に、コンパイル時にハードコードされ、これらのスイッチを無駄にします。 Launchpadには長い間解決されていない未解決の問題があり、Canonicalはこの動作をデフォルトにするのが最善だと思ったことに気づきました。

おすすめ記事