Perhatian pada keamanan
Menulis dan menggunakan sistem file FUSE dapat memiliki beberapa masalah keamanan berukuran Metrodome yang mungkin atau mungkin tidak jelas, tetapi patut disebutkan. Di bagian ini, saya akan berbicara tentang peningkatan hak istimewa, memberikan beberapa catatan tentang memeriksa hak akses, dan menyebutkan kondisi ras.
Eskalasi Privilege
Poin utama yang harus dibuat adalah bahwa filesystem itu sendiri dijalankan dengan hak akses dari proses yang menjalankannya, bukan pada proses yang menggunakan filesystem tersebut. Berikut ini cara bermainnya dalam beberapa skenario umum:
Kasus Umum: Pengguna Menjalankan Sistem File Tanpa allow_other
Opsi
Ini adalah kasus normal; filesystem berjalan dengan hak istimewa dari pengguna yang menjalankannya, dan hanya pengguna yang dapat mengakses filesystem tersebut. FUSE tidak membuka masalah keamanan tertentu dalam kasus ini.
Seorang Pengguna Menjalankan Sistem File Dengan Opsi allow_other
Dalam hal ini, filesystem berjalan dengan hak istimewa pengguna yang memintanya, bukan hak istimewa dari pengguna mana pun yang memanfaatkan sistem berkas. Adalah tanggung jawab pengguna yang memasang sistem file untuk memastikan hak akses yang tidak pantas tidak diberikan kepada pengguna lain. Secara umum, pengguna hanya bisa melukai diri mereka sendiri dengan cara ini, karena mereka hanya bisa memberikan hak istimewa yang sudah mereka miliki.
Perlu dicatat bahwa opsi user_allow_other
,, harus diatur /etc/fuse.conf
untuk mengaktifkan opsi ini.
Root Menjalankan Sistem File
Ini benar-benar sama dengan dua kasus sebelumnya (tergantung pada apakah allow_other
opsi diatur), tetapi root adalah kasus yang cukup khusus yang layak disebutkan. Dalam hal ini, setiap pengguna yang menggunakan sistem file memiliki hak root pada sistem file itu! Jika proses memiliki akses ke sistem file yang sebenarnya, ini dapat dengan mudah digunakan untuk mendapatkan akses yang tidak terbatas.
Subbagian berikutnya akan berbicara sedikit tentang memeriksa hak akses, tetapi cara paling sederhana di sini adalah dengan tidak mengizinkan root untuk me-mount sistem file. [...]
Memeriksa Hak Akses
Secara umum, sistem file yang mungkin dijalankan dengan allow_other
flag perlu mengambil langkah-langkah untuk memastikan keamanannya sendiri. fuse.h
dokumen yang memerlukan beberapa panggilan untuk memeriksa apakah akses yang diminta diizinkan; selain itu, ada beberapa orang lain yang juga memerlukan pemeriksaan akses (seperti chown()
). Merupakan tanggung jawab programmer untuk memastikan peringatan ini diikuti!
[...]
Akses Serentak dan Kondisi Ras
Secara default, FUSE menjalankan multi-threaded: ini berarti (secara singkat) bahwa permintaan kedua dapat ditangani oleh sistem file sebelum permintaan sebelumnya selesai; ini pada gilirannya meningkatkan kemungkinan bahwa utas yang berbeda dapat secara bersamaan memodifikasi struktur data tunggal, yang akan menyebabkan bug yang sangat sulit untuk di-debug.
[...]