デフォルトで世界の書き込み可能なディレクトリは何ですか?


14

標準のLinuxファイルシステムでは、これらの共通ディレクトリのどれがデフォルトで誰でも書き込み可能ですか?

 /tmp 
 /etc
 /var 
 /proc 
 /bin 
 /boot
 /....
 ....

なぜ彼らは世界で書き込み可能ですか?それはセキュリティ上のリスクをもたらしますか?

回答:


16

一般的に世界で書き込み可能な唯一のFHSで義務付けられたディレクトリは/tmp/var/tmp。どちらの場合も、それは誰でも作成できる一時ファイルを保存することを目的としているためです。

また/dev/shmtmpfsとして一般的です、プロセス間で共有される中規模データへの高速アクセス、または再起動時に破棄されることが保証されているファイルを作成する(RAMに裏打ちされたファイルシステム。

またあるかもしれません/var/mail/var/spool/mail、そして時には他のスプーラディレクトリ。これらは、処理される前にメールを一時的に保持するために使用されます。使用中のツールによっては、常に世界書き込み可能であるとは限りません。存在するのは、デーモンが処理するためのユーザーツールによってファイルを作成できるためです。

通常、これらのディレクトリにはすべてスティッキビットt)が設定されており、ファイルまたはディレクトリの所有者のみがその中のファイルを移動または削除できます。

任意のユーザーとして実行されているプログラムは、これらのディレクトリにファイルを作成できます。特定のデータのセキュリティに関する限り、正しいことを行うのは作成プログラム次第です。ファイルシステムが潜在的にいっぱいになることを除いて、特定の一般的なセキュリティの問題はありませんが、プログラムがそれを間違える可能性は十分にあります。

サービス固有のディレクトリに向かう動きいくつかありました/tmp。これらは、発生する可能性のあるバグの一部を回避するため、ディレクトリの使用方法がプログラムにバグがないことはそれほど重要ではありません。


次のコマンドを使用すると、システム上の誰でも書き込み可能なディレクトリを見つけることができます。

find / -maxdepth 3 -type d -perm -777

8

/tmp/var/tmp、および/var/lockデフォルトでは、世界的に書き込み可能です。古いアプリケーションとの互換性のために提供される/usr/tmp→ などのシンボリックリンクが存在する場合があり/var/tmpます。

/tmpそして/var/tmp世界的に書き込み可能な彼らは、任意の一時的に記憶するための任意のユーザーが使用することを意図しているので。 /var/lockすべてのユーザーとして実行されるプロセスが中央の場所にロックファイルを作成できるように、誰でも書き込み可能です。

セキュリティ上のリスクはありますか?いいえ、しかし、そうです。

これらすべてのディレクトリのアクセス許可は1777、先頭1スティッキービットであるため、です。つまり、誰でもこれらの誰でも書き込み可能なディレクトリにファイルを作成できますが、所有者だけが自分のファイルを削除できます(そしてもちろん、rootユーザーも削除できます)。

潜在的なセキュリティリスクは、安全でない一時ファイルの作成から発生する可能性があります。これらのディレクトリはすべて無料であるため、ユーザーは、悪意のあるユーザーによって作成された既存のファイルまたはシンボリックリンクを開くのではなく、作成するファイルが実際に新しいファイルであることを確認する必要があります。open(…, O_EXCL)またはなどの適切な手法を使用してファイルが作成される場合mkstemp(3)、そのようなリスクは回避されます。


1
最新のシステムでは、これらの互換性シンボリックリンクの1つは/var/lock/run/lock
camh 14年

2

/tmp

安全に使用するにはコードを追加する必要があるため、リスクが伴います。明らかにこれは見落とされます。

最近の例は、スティーブケンプによって与えられます。 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を分離することにより、このような脆弱性を緩和できます。(「/ tmpをIPCソケットおよびその他の通信プリミティブの場所として誤用する」ものを除く)。

Fedora Linuxの場合-http://fedoraproject.org/wiki/Features/ServicesPrivateTmp

Systemdの説明-http://0pointer.de/blog/projects/security.html


「攻撃では、最初の行の前にファイルを作成する必要があると思います」-確かに。ファイルがまだ存在しない場合、最初の行で実行ユーザー(おそらくルート)として作成され、別の悪意のあるユーザーには2行目より前にファイルを置き換える権限がありません。ファイルが既に存在する場合はfopen上書きしますが、アクセス許可はリセットしないため、悪意のあるユーザーは引き続き変更を加えることができます。また、悪意のあるユーザーがln -s /bin/bash /tmp/shadow最初の行の前のようなことをして、重要なシステムバイナリが上書きされる可能性があります。
hvd 14年

2

世界で書き込み可能なディレクトリを見つけるには、次を使用できます。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.