標準のLinuxファイルシステムでは、これらの一般的なディレクトリのどれが誰でも書き込み可能ですデフォルト?
/tmp
/etc
/var
/proc
/bin
/boot
/....
....
なぜ彼らは誰でも書けるの?セキュリティ上のリスクはありますか?
一般に誰でも書き込み可能な FHS-mandated ディレクトリは/tmp
と/var/tmp
のみです。どちらの場合も、誰でも作成できる一時ファイルを格納するためのものです。
また、/dev/shm
は tmpfs (RAMでバックアップされたファイルシステム)として、プロセス間で共有されている中規模データへの高速アクセス、または再起動時に破棄されることが保証されているファイルを作成するために一般的です。
/var/mail
または/var/spool/mail
が存在することもあり、他のスプーラディレクトリが存在する場合もあります。これらは、処理される前にメールを一時的に保持するために使用されます。使用しているツールによっては、必ずしも誰でも書き込みできるとは限りません。それらがそうであるとき、それはデーモンによって処理するためのユーザーツールによってそこにファイルが作成されることができるからです。
これらのすべてのディレクトリには通常 スティッキービット (t
)が設定されています。つまり、ファイルまたはディレクトリの所有者だけがその中のファイルを移動または削除できます。
どのユーザーとして実行されているプログラムでも、これらのディレクトリにファイルを作成できます。特定のデータのセキュリティに関する限り、正しいことを行うかどうかは作成プログラムにかかっています。誰かがファイルシステムをいっぱいにしてしまう可能性があることを除けば、特定の一般的なセキュリティ問題はありませんが、プログラムがそれを誤解する可能性は十分あります。
サービス固有の/tmp
ディレクトリに向けて 一部移動 が行われました。これらは、発生する可能性のある潜在的なバグの一部を回避するため、プログラムがディレクトリを使用する方法にバグがないことはそれほど重要ではありません。
次のコマンドを使用して、システム上で誰でも書き込み可能なディレクトリを見つけることができます。
find / -maxdepth 3 -type d -perm -777
_/tmp
_、_/var/tmp
_、および_/var/lock
_は、デフォルトで誰でも書き込み可能です。古いアプリケーションとの互換性のために提供されている_/usr/tmp
_→_/var/tmp
_などのシンボリックリンクがある場合があります。
_/tmp
_および_/var/tmp
_は、すべてのユーザーが一時的なストレージとして使用することを目的としているため、誰でも書き込み可能です。 _/var/lock
_は誰でも書き込み可能であるため、任意のユーザーとして実行されている任意のプロセスが中央の場所にロックファイルを作成できます。
セキュリティ上のリスクはありますか?いいえ、でもそうです。
これらすべてのディレクトリの権限は_1777
_であり、先頭の_1
_は スティッキービット です。つまり、誰でもこれらの誰でも書き込み可能なディレクトリにファイルを作成できますが、所有者だけが自分のファイルを削除できます(もちろん、rootユーザーも削除できます)。
安全でない可能性のある一時ファイルの作成により、セキュリティ上のリスクが発生する可能性があります。これらのディレクトリは自由に使用できるため、ユーザーは、作成したファイルが実際に新しいファイルであることを確認するために、悪意のあるユーザーによって作成された既存のファイルやシンボリックリンクを開くのではなく、予防策を講じる必要があります。 open(…, O_EXCL)
または mkstemp(3)
などの適切な手法を使用してファイルが作成されている場合、そのようなリスクは回避されます。
誰でも書き込み可能なディレクトリを見つけるには、
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
/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