レンガの壁に何度も触れた後、私は次の事実を見つけました。
$ 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はこの動作をデフォルトにするのが最善だと思ったことに気づきました。