イライラする頭とレンガの壁の接触の後、私はこれを発見しました:
$ 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を使用しています。
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の回答SO質問 (SudoがPATHを変更する-理由?) は、理由に関する多くの理由をカバーしています。主なのは、通常Sudo
は、Ubuntuの場合と同様にコンパイルされ、これらのスイッチは役に立たないものになります。Launchpadにはこれらに関して長い未解決の問題があり、これらは修正されていないため、Canonicalの方が優れていると認識しています。この動作をデフォルトのままにします。
sudoers
のルールがユーザーに特定のコマンドwibble
を実行することを許可する場合、PATH
を安全な値に設定する必要があることがよくあります。彼自身のプログラムを植えることはできません。 wibble
が外部コマンドfoo
を呼び出し、PATH
がリセットされなかった場合、ユーザーは~/bin
彼のPATH
の前に、リンク/bin/sh
から~/bin/foo
を実行してからSudo wibble
呼び出す ~/bin/foo
これにより、任意のシェルコマンドを入力できます。
したがって、PATHのリセットは安全なデフォルトです。すべての場合に必要なわけではありませんが、デフォルト設定にすることははるかに簡単で安全です。
sudoers
のルールがユーザーに任意のコマンドの実行を許可する場合、PATHをリセットしても直接的なセキュリティ上の利点はありません。間接的な利点があります。つまり、ユーザーが誤って有害な可能性のあるプログラムを含むPATHを設定した可能性があり、PATHをリセットすると、これらのプログラムが誤って呼び出されるリスクを回避できます。機能的な利点もあります。/usr/local/sbin
、/usr/sbin
および/sbin
コマンドをrootとして実行するが、通常のユーザーとしては実行しない場合。
Sudo
を実行したときにパスがリセットされないようにするには、sudoers
の除外グループに自分を追加します。
Defaults exempt_group+=stevebennet
ログインシェル(Sudo -I
またはSudo bash -l
または他のメソッド)、シェルは通常.profile
ターゲットユーザーのホームディレクトリにあります。そのファイルはPATHを変更する可能性があります。
これはセキュリティ上の理由によるものです。 PATHは明確に定義されたものに設定され、ソースユーザーが持つ可能性のあるハッキングされたPATHには設定されません。
回避策の種類については https://superuser.com/questions/98686/passing-path-through-Sudo を参照してください。