ローカルでここに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つのエントリを別のエントリにシャドウイングするように手配した場合です。
それが意図的なものであった場合、順序はローカル管理の順序でディレクトリを検索する必要があります。通常、これは最初に~/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
と/
の前に置くことは無関心か必要です。