web-dev-qa-db-ja.com

PATH環境変数の順序

ローカルでここにUbuntu 14.04、私の$PATHは次のようになります。

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Cronジョブのパスを手動で定義するとき、またはPuppet/Ansibleプロビジョニング構成で、通常、PATH環境変数を次のように反転させます。

PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"

PATH環境変数のエントリを順序付けるためのセキュリティのベストプラクティスはありますか? sbinディレクトリのエントリよりもbinディレクトリのエントリを優先するのが最善だと思います。一部のRHELボックスではPATHが省略されていることに気づきました/sbinデフォルト。

つまり、PATH環境変数のセキュリティのベストプラクティスは次のとおりです。

  1. ユーザーのUnixアカウント。
  2. 管理者のUnixアカウント。
  3. Cronジョブ/構成管理プロセス。
6
Naftuli Kay

信頼できない誰かがファイルを書き込むことができるディレクトリが検索パスにある場合、そのディレクトリはパス、ピリオドに含めるべきではありません。

順序が重要になるのは、コマンドがリストの複数のエントリに存在する場合だけです。したがって、考慮すべき唯一のケースは、信頼できる誰かが、意図的に、または意図的に、1つのエントリを別のエントリにシャドウイングするように手配した場合です。

それが意図的なものであった場合、順序はローカル管理の順序でディレクトリを検索する必要があります。通常、これは最初に~/binまたはそのようなディレクトリを持つアカウントで実行している場合は同等のものを意味します(ほとんどのシステムアカウントには適用されません)。次に/usr/local/bin、次にパッケージマネージャーによって管理されるディレクトリ/usr/bin/および/bin

原則として、sbinディレクトリーとbinディレクトリーの間にシャドウがあってはなりません。 sbinディレクトリは、システム管理者のみに役立つコマンド用です(これが、これらのディレクトリが通常、root以外のユーザーのパスにない理由です)。原則として、別の実行可能ファイルをrootとして実行するコマンド名が存在する可能性があるため、sbinディレクトリは対応するbinディレクトリの前にある必要があります。そうでない場合、…/sbin/fooは決してすべての人のために…/bin/fooによってシャドウされるため、実行されます。

あいまいさがある唯一のケースは、偶発的なシャドウイングがあった可能性がある場合です。その場合、明確な答えはありません。一般に、/usr/local/bin/usr/binの後に置いても意味がありません。ローカル管理者がコマンドを選択したくない場合は、検索パスに/usr/local/binを含めないでください。まったく(およびライブラリ検索パスから/usr/local/libを削除するなど)。

/usr/bin/binの間では、原則として、/bin(ブート時のみの小さいバージョン)からの実行可能ファイルを/usr/bin(大きいバージョンから別々にマウントされた/usrパーティション)ですが、個別の/usrを持つ小さなルートパーティションは、最近では非常に一般的ではありません。これは、オペレーティングシステムが大量のディスク領域を使用した時代にはより一般的な方法でしたが、それでも/binのユーティリティを/usr/binのバージョンでシャドウイングすることは一般的ではありませんでした。もう1つの順序は、/binを最初にすると、パフォーマンスがわずかに向上します(/binは通常、はるかに小さくなります)。ほとんどのシステムでは、一方の注文をもう一方の注文よりも優先する強い理由はありません。 (一部のシステムでは、/bin/usr/binは同じディレクトリですが、これを行うディストリビューションのいずれかの最新バージョンでのみ作業する場合を除いて、これを前提にしないでください。)

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin(またはPATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin)は、通常、rootとして実行されているジョブには適切な設定であり、PATH=/usr/local/bin:/usr/bin:/binはrootとして実行されていないジョブには適切な設定です。それから逸脱する正当な理由はありません(/usr/の反転を除いて)。ただし、ローカルのバリエーション(たとえば、パッケージとは異なる* BSDのサイト固有のディレクトリ)に対応するためです/usr/localにインストール)。セキュリティ面では問題ありませんが、機能面では/usr/local/usr/の前に置くことは無関心か必要です。