パスには重要なセキュリティ問題があります。パス設定の間違いを悪用して、システム にクラック(原文:hack)するのによく使われる方法です。もしクラッカー (原文:hacker)がroot、一般ユーザーでクラッカーのコマンドを実行すると、簡単に 「トロイの木馬(Trojan horse)」攻撃がなされてしまいます。
昔(?)のよくあったミスはrootのパスに.
(カレントパス)を入れる
といったものです。悪意のあるハッカー(クラッカー)は彼のホームディレクトリ
でプログラムls
を作り、もしrootが
# cd ~hacker
# ls
と実行するとクラッカーのlsコマンドを実行してしまいます。
間接的にこれはrootとして実行されるプログラム全てに適用されます。
重要なデーモンプロセスでは他のユーザーが書き込めないようにするべきです。
あるシステムでは/usr/local/bin
にセキュリティ的に不十分な
プログラムでも置くことができます - そのためrootユーザーのパスから
/usr/local/bin
を除外しておくべきです。しかしもしあるデーモンが
パス/usr/local/bin/:...
を使ったfooを実行していると、
/bin/fooではなく/usr/local/bin/fooを実行することも
可能です。そして/usr/local/binに書き込めるユーザーはだれでも
システムを壊すことができてしまいます。
パスのディレクトリの順番に注意を払うのも大変重要です。例えば、
/usr/local/bin
が/bin
の前にあるとセキュリティリスクが
生じます - もし/bin
の後に/usr/local/bin
があれば、
/bin/foo
コマンドを/usr/local/bin/foo
とローカルに修正した
もので上書きすることはできません(つまりこの方がセキュリティ的に安全です)。
Linuxでは、パスの評価がオペレーティングシステムコールレベル(operating
system call level)で行われていることを思い出して下さい。
実行ファイルのパスが与えられているところならどこでも、(少なくとも)
/bin、/usr/bin
から検索される短い名前(short name)が与えられます -
他の場所でも同様です。