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はこの動作をデフォルトにするのが最善だと思ったことに気づきました。

答え2

ルールがsudoersユーザーに特定のコマンドを実行する権限を付与する場合は、通常wibbleセキュリティ値を設定する必要がありますPATH。つまり、ユーザーが自分のプログラムを植えることができないディレクトリのみを含める必要があります。wibble外部コマンドが呼び出され、fooリセットがPATHない場合、ユーザーは~/binコマンドの前にリンクPATHを置き、呼び出しを実行して/bin/sh任意のシェルコマンドを入力できます。~/bin/foosudo wibble~/bin/foo

したがって、PATHをリセットするのは安全なデフォルトです。すべての場合にこれが必要なわけではありませんが、デフォルトに設定する方が簡単で安全です。

ルールsudoersに従ってユーザーにランダムなコマンドを実行する権限が与えられている場合、PATHをリセットしても直接的なセキュリティ上の利点はありません。また、間接的な利点もあります。つまり、ユーザーが不要なプログラムを含むPATHを誤って設定でき、PATHをリセットすると、これらのプログラムが誤って呼び出されるリスクを回避できます。機能的な利点もあります。 rootでコマンドを実行するには通常、および/usr/local/sbin/usr/sbin必要です/sbinが、通常のユーザーでは必要ありません。

実行時にパスがリセットされたくない場合は、次の場所sudoで免疫グループに自分自身を追加してくださいsudoers

Defaults exempt_group+=stevebennet

ログインシェル(sudo -Iまたはsudo bash -l他の方法)を実行している場合、シェルは通常ターゲット.profileユーザーのホームディレクトリを読み取り、そのファイルがPATHを変更する可能性があります。

答え3

これはセキュリティ上の理由です。 PATHは、元のユーザーが持つことができるハッキングされたPATHではなく、明確に定義されたパスに設定されます。

バラよりhttps://superuser.com/questions/98686/passing-path-through-sudo回避策として。

関連情報