Ada beberapa pendekatan, sebagian dari mereka sebagian besar aman, yang lain tidak sama sekali.
Cara tidak aman
Biarkan semua penggunaan berjalan mount
, misalnya, melalui sudo. Anda mungkin juga memberi mereka root; itu adalah hal yang sama. Pengguna dapat me-mount sistem file dengan salinan root suid dari bash
—running yang secara instan memberikan root (kemungkinan tanpa logging, di luar fakta yang mount
dijalankan).
Sebagai alternatif, pengguna dapat memasang sistem file sendiri di atas /etc
, berisi salinannya sendiri /etc/shadow
atau /etc/sudoers
, kemudian mendapatkan root dengan salah satu su
atau sudo
. Atau mungkin bind-mount ( mount --bind
) pada salah satu dari dua file tersebut. Atau file baru menjadi /etc/sudoers.d
.
Serangan serupa dapat ditarik dari atas /etc/pam.d
dan banyak tempat lainnya.
Ingat bahwa filesystem tidak perlu ada di perangkat, -o loop
akan me-mount file yang dimiliki (dan dengan demikian dapat dimodifikasi) oleh pengguna.
Cara yang paling aman: udisks atau sejenisnya
Berbagai lingkungan desktop sebenarnya sudah membangun solusi untuk ini, untuk memungkinkan pengguna memasang media yang dapat dilepas. Mereka bekerja dengan memasang di subdirektori /media
hanya dan dengan mematikan dukungan set-user / group-id melalui opsi kernel. Pilihan di sini termasuk udisks
, udisks2
, pmount
, usbmount
,
Jika harus, Anda dapat menulis skrip Anda sendiri untuk melakukan hal serupa, dan memohonnya melalui sudo — tetapi Anda harus benar-benar berhati-hati menulis skrip ini untuk tidak meninggalkan eksploitasi root. Jika Anda tidak ingin pengguna Anda harus mengingat sudo, Anda dapat melakukan sesuatu seperti ini dalam sebuah skrip:
#!/bin/bash
if [ $UID -ne 0 ]; then # or `id -u`
exec sudo -- "$0" "$@"
fi
# rest of script goes here
Cara yang akan aman suatu hari nanti: ruang nama pengguna
Ruang nama Linux adalah bentuk virtualisasi yang sangat ringan (wadah, untuk lebih spesifik). Secara khusus, dengan ruang nama pengguna, setiap pengguna pada sistem dapat membuat lingkungan mereka sendiri di mana mereka root. Ini akan memungkinkan mereka untuk me-mount sistem file, kecuali yang telah diblokir secara eksplisit kecuali untuk beberapa sistem file virtual. Akhirnya, filesystem FUSE mungkin akan diizinkan, tetapi tambalan terbaru yang saya temukan tidak mencakup perangkat blok, hanya hal-hal seperti sshfs.
Lebih lanjut, banyak kernel distro (untuk alasan keamanan) default untuk tidak mengizinkan pengguna yang tidak memiliki hak menggunakan ruang nama pengguna; misalnya Debian memiliki kernel.unprivileged_userns_clone
default ke 0. Distro lain memiliki pengaturan yang serupa, walaupun seringkali dengan nama yang sedikit berbeda.
Dokumentasi terbaik yang saya ketahui tentang ruang nama pengguna adalah artikel LWN ruang
nama operasi, bagian 5: Ruang nama pengguna .
Untuk saat ini, saya akan menggunakan udisks2.
gvfs-mount
-d /dev/sdX