Apa direktori dunia yang dapat ditulis secara default?


14

Dalam sistem file Linux standar, mana dari direktori umum ini yang dapat ditulis secara dunia ?

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

Mengapa mereka bisa ditulis dunia? Apakah itu menimbulkan risiko keamanan?

Jawaban:


16

Satu-satunya direktori yang dimandatkan FHS yang umumnya dapat ditulis oleh dunia adalah /tmpdan /var/tmp. Dalam kedua kasus, itu karena mereka dimaksudkan untuk menyimpan file sementara yang dapat dibuat oleh siapa saja.

Juga umum adalah /dev/shm, sebagai tmpfs (sistem file yang didukung oleh RAM), untuk akses cepat ke data menengah yang dibagi di antara proses, atau hanya membuat file yang dijamin akan dihancurkan saat reboot.

Mungkin juga ada /var/mailatau /var/spool/mail, dan kadang-kadang direktori spooler lainnya. Itu digunakan untuk menyimpan surat sementara sebelum diproses. Mereka tidak selalu dapat ditulis oleh dunia, tergantung pada alat yang digunakan. Ketika itu, itu karena file dapat dibuat di sana oleh alat pengguna untuk diproses oleh daemon.

Semua direktori ini biasanya memiliki set sticky bit ( t), yang berarti bahwa hanya pemilik file atau direktori yang dapat memindahkan atau menghapus file di dalamnya.

Program apa pun yang berjalan sebagaimana pengguna dapat membuat file di direktori ini, dan terserah program pembuatan untuk melakukan hal yang benar sejauh keamanan untuk data tertentu berjalan. Tidak ada masalah keamanan umum tertentu selain seseorang yang berpotensi mengisi sistem file, tetapi banyak ruang bagi program untuk melakukan kesalahan.

Ada beberapa gerakan menuju /tmpdirektori khusus layanan . Ini menghindari beberapa bug potensial yang dapat muncul, sehingga tidak begitu penting bagi program untuk bebas bug dalam cara menggunakan direktori.


Anda dapat menemukan direktori yang dapat ditulis oleh dunia di sistem Anda dengan:

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

8

/tmp,, /var/tmpdan /var/lockdapat ditulisi dunia secara default. Mungkin ada symlink, seperti /usr/tmp/var/tmp, disediakan untuk kompatibilitas dengan aplikasi yang lebih lama.

/tmpdan /var/tmpdapat ditulis oleh dunia karena dimaksudkan untuk digunakan oleh pengguna mana pun untuk penyimpanan sementara. /var/lockdapat ditulis oleh dunia sehingga proses apa pun, berjalan seperti pengguna mana pun, dapat membuat file kunci di lokasi pusat.

Apakah ada risiko keamanan? Tidak, tapi semacam ya.

Izin untuk semua direktori tersebut adalah 1777, dengan yang utama 1adalah bagian yang lengket . Itu berarti bahwa sementara siapa pun dapat membuat file di direktori dunia yang dapat ditulis itu, hanya pemilik yang dapat menghapus file sendiri (dan tentu saja, pengguna root juga bisa).

Risiko keamanan yang mungkin timbul dari pembuatan file temp yang tidak aman. Karena direktori tersebut adalah gratis untuk semua, pengguna perlu mengambil tindakan pencegahan untuk memastikan bahwa file yang mereka buat adalah file yang benar-benar baru, daripada membuka file yang ada atau symlink yang mungkin telah ditanam di sana oleh pengguna jahat. Jika file dibuat menggunakan teknik yang tepat, seperti open(…, O_EXCL)atau mkstemp(3), maka risiko tersebut dihindari.


1
Pada sistem modern, salah satu symlink kompatibilitas adalah /var/lock/run/lock
camh

2

/tmp

Ini berisiko, karena Anda perlu menambahkan kode tambahan untuk menggunakannya dengan aman. Jelas ini diabaikan.

Contoh terbaru diberikan oleh 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");

Jika Anda (penyerang) mengganti / tmp / shadow sebelum baris kedua, Anda bisa mengganti kata sandi semua orang. (Saya kira serangan itu mengharuskan Anda untuk membuat file sebelum baris pertama, dan membuat file tersebut dapat ditulisi dunia).

Systemd di linux memungkinkan mengurangi kerentanan seperti itu dengan mengisolasi / tmp untuk banyak layanan sistem. (Kecuali yang "menyalahgunakan / tmp sebagai lokasi soket IPC dan komunikasi primitif lainnya").

Di Fedora Linux - http://fedoraproject.org/wiki/Features/ServicesPrivateTmp

Penjelasan Systemd - http://0pointer.de/blog/projects/security.html


"Saya kira serangan itu mengharuskan Anda untuk membuat file sebelum baris pertama" - Memang. Jika file belum ada, baris pertama akan membuatnya sebagai pengguna yang berjalan (mungkin root), dan pengguna jahat lainnya tidak akan memiliki izin untuk menggantinya sebelum baris kedua. Jika file tersebut sudah ada, fopentimpa tetapi tidak mereset izin, sehingga pengguna jahat masih dapat melakukan perubahan. Juga, pengguna jahat bisa melakukan sesuatu seperti ln -s /bin/bash /tmp/shadowsebelum baris pertama, sehingga sistem biner yang esensial akan ditimpa.
hvd

2

Untuk menemukan direktori dunia yang dapat ditulis, Anda dapat menggunakan

find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print

Untuk file, ubah ke f

Untuk jenis symlinks ke l

Untuk mengatur bit lengket:

find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print0| xargs -0 chmod +t
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.