標準のLinuxファイルシステムでグローバルに書き込むことができる共通ディレクトリは何ですか?基本的に?
/tmp
/etc
/var
/proc
/bin
/boot
/....
....
なぜ世界的に書くことができますか?これはセキュリティリスクをもたらしますか?
答え1
ただFHS 必須要件一般的に誰でも書き込み可能なディレクトリ/tmp
はとです/var/tmp
。どちらの場合も、誰でも作成できる一時ファイルを保存するように設計されているためです。
/dev/shm
と見るのも一般的だ。一時ファイルシステム(RAM対応ファイルシステム)プロセス間で共有される中規模のデータにすばやくアクセスしたり、単に再起動時に削除が保証されるファイルを生成するためのものです。
/var/mail
時には/var/spool/mail
他のスプーラディレクトリがあるかもしれません。これは、メッセージが処理される前にメッセージを一時的に保持するために使用されます。使用されるツールによっては、常にグローバルに書き込めるわけではありません。存在する場合、これはユーザーツールがデーモンが処理するファイルを生成できるためです。
これらすべてのディレクトリには通常粘り強いビット(t
)設定は、そのファイルまたはディレクトリの所有者だけがその中のファイルを移動または削除できることを意味します。
すべてのユーザーとして実行されるすべてのプログラムはこれらのディレクトリにファイルを生成できます。特定のデータのセキュリティに関する限り、正しい作業を行うことは作成プログラムによって異なります。誰かがファイルシステムをいっぱいにする可能性があることに加えて、特に広く普及しているセキュリティ上の問題はありませんが、プログラムが間違っている可能性があります。
があったいくつかのタスクサービス別/tmp
カタログの場合。これは、発生する可能性のあるいくつかの潜在的なエラーを防ぐため、エラーがないことは、プログラムがディレクトリを使用する方法にはあまり重要ではありません。
以下では、システムでグローバルに書き込み可能なディレクトリを見つけることができます。
find / -maxdepth 3 -type d -perm -777
答え2
/tmp
、/var/tmp
および/var/lock
は基本的にグローバルに書き込むことができます。/usr/tmp
→などのシンボリックリンクは、/var/tmp
以前のアプリケーションとの互換性のために提供できます。
/tmp
/var/tmp
すべてのユーザーが一時ストレージとして使用できるという点で、グローバルに書き込みが可能です。/var/lock
グローバルに書き込みが可能なため、すべてのユーザーとして実行されるすべてのプロセスは中央の場所にロックファイルを作成できます。
セキュリティリスクがありますか?いいえ、しかしある程度そうです。
これらすべてのディレクトリに対する権限はです1777
。ここで前の部分は次1
のとおりです。粘り強いビット。つまり、誰でも書き込み可能なディレクトリにファイルを作成できますが、所有者だけが自分のファイルを削除できます(もちろん、ルートも同じです)。
安全でない一時ファイルを生成すると、潜在的なセキュリティリスクが発生する可能性があります。これらのディレクトリは無料なので、ユーザーは自分が作成したファイルが実際に新しいファイルであるか、悪意のあるユーザーが植える可能性のある既存のファイルやシンボリックリンクを開かないように予防措置を講じる必要があります。ファイルがopen(…, O_EXCL)
または等の正しい技術を使用して作成された場合mkstemp(3)
、それはそのような危険を避けることができます。
答え3
/tmp
安全に使用するには別のコードを追加する必要があるため危険です。明らかにこれは見落とされた。
Steve Kempが最近のケースを提示します。 http://blog.steve.org.uk/sometimes_reading_code_makes_you_scream_.html
./mgmt/tools/SysAPI.cc: tmp = fopen("/tmp/shadow", "w"); ./mgmt/tools/SysAPI.cc: system("/bin/mv -f /tmp/shadow /etc/shadow");
攻撃者が2行目の前に/tmp/shadowを変更すると、誰もがパスワードを変更できます。 (攻撃するには、最初の行の前にファイルを作成し、ファイルをグローバルに書き込むことができるようにする必要があります。)
LinuxのSystemdを使用すると、多くのシステムサービスに対して/ tmpを分離することでこれらの脆弱性を軽減できます。 (「IPCソケットおよびその他の通信基本要素の場所として/ tmpを乱用する場合」を除く)
Fedora Linuxで -http://fedoraproject.org/wiki/Features/ServicesPrivateTmp
答え4
グローバルに書き込み可能なディレクトリを見つけるには、次のものを使用できます。
find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
ファイルの場合、タイプを次に変更します。f
シンボリックリンクの場合は、次のように入力します。l
固定ビットを設定します。
find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print0| xargs -0 chmod +t