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?
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:
Satu-satunya direktori yang dimandatkan FHS yang umumnya dapat ditulis oleh dunia adalah /tmp
dan /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/mail
atau /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 /tmp
direktori 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
/tmp
,, /var/tmp
dan /var/lock
dapat ditulisi dunia secara default. Mungkin ada symlink, seperti /usr/tmp
→ /var/tmp
, disediakan untuk kompatibilitas dengan aplikasi yang lebih lama.
/tmp
dan /var/tmp
dapat ditulis oleh dunia karena dimaksudkan untuk digunakan oleh pengguna mana pun untuk penyimpanan sementara. /var/lock
dapat 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 1
adalah 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.
/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
fopen
timpa tetapi tidak mereset izin, sehingga pengguna jahat masih dapat melakukan perubahan. Juga, pengguna jahat bisa melakukan sesuatu seperti ln -s /bin/bash /tmp/shadow
sebelum baris pertama, sehingga sistem biner yang esensial akan ditimpa.
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
/var/lock
→/run/lock