UNIXの世界では、バイナリを実行するには現在のディレクトリにバイナリプレフィックスを付ける必要があることがよく知られています。./
デフォルトでは.
バイナリはありません$PATH
。これは、悪意のあるバイナリがシステムユーティリティを上書きするのを防ぐためです(例:ls
コード実行のインポート)。
私はこの決定の歴史を知りたいです。最初からUNIXにいましたか?シェル?
はっきりしたいです。探しているものではありません。一般的な理由なぜ実装したのか理解しています。私はそれを引き起こしたイベントを探しているか、少なくとも変更が行われたときに発生したイベントを探しています。
見積もりをいただきありがとうございます。
bash
興味深いことに、この内容は実際に含まれるように意図されているようです.
。少なくともこのコンテンツのソースは次のとおりです(config-top.h
)。
/* The default value of the PATH variable. */
#ifndef DEFAULT_PATH_VALUE
#define DEFAULT_PATH_VALUE \
"/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
#endif
(一部の人々はこの質問の妥当性に疑問を投げかけました。少し会話Windowsの多くの実行可能なインストーラは、同様の攻撃に対して脆弱です。デフォルトでは、実行可能ファイルはexecからDLLを検索するため、exec.
に悪意のあるDLLを植えると、通常はDownloads
管理者IDを適用して実行されるコードが得られます。 「歴史を勉強しない人は歴史を繰り返す運命」になる瞬間だ。 )
ベストアンサー1
この決定に関する「歴史的な文書」を見つけることは容易ではありませんが、StackExchange傘下の別の答えを引用すると、あなたの質問に最も適切な答えであると思われるものが見つかります。「sh## 発生」の状況を避けてください。:
- 大きな打撃:なぜそうです。デフォルトではパスにありませんか?
質問:
長年にわたり、UNIXシリーズシステム(私にとって最も関連性の高いLinux)では、基本的に(現在のディレクトリ)が$ PATHに表示されないことがわかりました。なぜこれですか?数年前にこれがセキュリティ問題であるという記事を読んだことを思い出してください。しかし、私が読んだ記事では、問題が正確に何であるかを説明していません。誰かがディレクトリに「ls」または「cp」の悪意のあるバージョンを残して、それがそこにあることに気付かずに実行するようになったからですか?
答え:
あなたの質問に正しく答えられたので、無邪気なウイルスや正直な間違いを防ぐことが重要ではない理由です。
もちろん、これは非常に不都合で無駄なアンチウィルス対策なので、パスに直接ポイントを追加するのを防ぐことはできません。
続けるこのリンク、にドットを入れた理由の別の例を見つけることができます$PATH
。
脚注:
rm -r /
極端な例には、ユーザーが書き込みアクセス権を持っているシステム上のすべてのファイルやディレクトリを削除するなどのシェルスクリプトを作成してスクリプト名を指定する一般ユーザーがありますls
。システム管理者がこのスクリプトを含むディレクトリに移動し、そのディレクトリのls
内容を表示するために標準コマンドを実行しようとすると、シェルは代わりに同じ名前のスクリプトを実行して、現在マウントされているすべてのパーティションの内容を削除します。コンピュータ!
また、PATHの目的は、バイナリへのフルパスを覚えたり入力したりする必要がないようにコマンドへのパスを完成することです。現在存在するディレクトリを索引付けするコマンドはありません。これらのプログラムがどこに保存されているかを知っていれば、まったく役に立ちません。
編集する:
しかし、いくつかの研究は、検索パスの基本的な概念が以下に由来することを発見しました。マルチプレックスシステムただし、内部的にしか検索できないという制限があります/bin
。Unix v3これは単一のディレクトリ制限なしでそれを実装した最初の製品です。次のマニュアルのセキュリティページを確認してください。.
PATH変数を使用すると問題が発生しました。これはsu
、環境にマルウェアを注入する際のセキュリティ上の問題にも適用されるだけでなく、強化されています。
13ページの引用:
MorrisとFred Grampは、進行中のゲームでトロイの木馬のヒントと対策を見つけました。たとえば、
login(1)
8章が削除され/etc/
(Grampp、v8)の概要が挿入されました。これらのガジェットは、su
不注意なシステム管理者が入力したパスワードをキャプチャするためにプログラム名を誤って指定または配置する古い問題を解決します。login
su
その他の微妙な最新機能su
:シェル検索パスからドットが除外され、泥棒が好むシェル変数がIFS
リセットされます。
概念以来、ドットを$PATH
。