Apakah mungkin untuk mengizinkan beberapa pengguna tertentu (misalnya anggota grup) untuk memasang sistem file apa pun tanpa hak pengguna superuser di Linux?
Pertanyaan lain mungkin adalah "dalam hal apa pengguna dapat membahayakan sistem dengan memasang sistem file?"
linux
mount
not-root-user
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
sumber
gvfs-mount
-d /dev/sdX
Jawaban:
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 daribash
—running yang secara instan memberikan root (kemungkinan tanpa logging, di luar fakta yangmount
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 satusu
atausudo
. 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 termasukudisks
,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:
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.
sumber
mount
untuk dapat me-mount sistem file seperti yang dilakukan root? Saya akan membaca dokumen ruang nama yang telah Anda tautkan, dan mencoba menerapkan hal mount group ini, setidaknya sebagai latihan.Anda dapat melakukannya, tetapi Anda perlu memodifikasi entri yang
/etc/fstab
sesuai dengan sistem file yang ingin Anda pasang, menambahkan tandauser
pada entri ini. Pengguna yang tidak memiliki hak istimewa kemudian dapat memasangnya.Lihat
man mount
untuk lebih jelasnya.sumber
vfs.usermount
). Saya ingin sth. analog dengan itu. Saya menggunakan banyak drive yang dapat dilepas dengan banyak partisi pada masing-masing partisi dan akan sulit untuk menambahkan selusin atau dua entri ke fstab untuk masing-masing partisi.udev
mengelola entri saat perangkat baru muncul dan menghilang.Berikut adalah wiki untuk mengonfigurasi aturan polkit untuk udisks / udisks2 untuk me-mount partisi oleh grup non-root (misalnya pengguna).
Simpan kode di bawah ini ke /etc/polkit-1/rules.d/50-udisks.rules
Asumsikan Anda berada di grup "pengguna", menggunakan perintah berikut untuk me-mount partisi (tidak perlu sudo).
sumber
1 Lihat di mana ia bekerja
Pada Xubuntu ia berfungsi di luar kotak untuk memasang dan mengeluarkan penyimpanan massal USB, partisi hard disk, CD / DVD dan mungkin lebih.
Mari kita asumsikan bahwa solusi yang dipilih Ubuntu, menggunakan policyKit, cukup aman.
2 Pilih bagian yang relevan
Pada XFCE pada Debian 8.3 saya harus mengizinkan pengguna untuk memasang dan mengeluarkan sistem file dari thunar tanpa kata sandi. Yang berhasil bagi saya adalah memilih file izin dari Ubuntu.
Menambahkan baris di bawah ini sebagai root ke file bernama
/var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
harus melakukan trik:3 Untung!
(Apa yang saya lakukan sebenarnya adalah mengambil sedikit lebih banyak dari file dengan nama yang sama di Ubuntu 16.04 dan itu bekerja untuk saya. Jika Anda membutuhkannya, sebagian besar sepertinya isi https://gist.github.com/kafene/5b4aa4ebbd9229fa2e73 )
sumber
Anda dapat mengonfigurasi
sudo
untuk mengizinkan sekelompok pengguna untuk menjalankanmount
perintah.Pembaruan : bagaimana Anda dapat merusak sistem dengan memasang? Sebagai contoh, Anda dapat membuat shell root setuid pada sistem file yang kemudian bisa Anda mount dan jalankan untuk mendapatkan privilege root.
sumber
sudo
? Juga, bukankah pengguna root memasang sistem file, hanya di belakang layar, dengan metode ini?mount
untuksudo mount
atau menggunakan script wrapper.user
ke fstab hanya berfungsi karenamount
setuid root. Kernel memeriksa root atauCAP_SYS_ADMIN
kapabilitas sehingga Anda tidak bisa benar-benar melibatkan root.Untuk menjawab pertanyaan Anda dalam tanda kurung, karena sistem file adalah pengganti untuk file, maka pengguna dapat berpotensi melakukan operasi berbahaya pada sistem file tersebut, seperti menghapus file.
Meringkas 2 pertanyaan lain saya akan mengatakan ini:
fstab
sangat bagus untuk pemasangan pada penyimpanan permanen saat booting . Tidak begitu bagus ketika Anda ingin mencolokkan drive usb atau sesekali mount beberapa jaringan.sudo mount
juga tidak masalah jika Anda menggunakan sistem ubuntu *. Anda masih harus mengetikkan kata sandi.udev
akan menangani pemasangan hal-hal seperti stik usb, kamera dan kartu flash di sistem ubuntu * (tetapi tidak dalam distro yang kurang ramah pengguna seperti debian, slackware, dll)Saya akan menambahkan bahwa, secara historis, cara unix untuk memberikan otoritas kepada beberapa pengguna (atau grup) untuk melakukan hal-hal adalah melalui
sudoers
file.Ada banyak panduan untuk menggunakannya di luar sana jadi saya tidak akan menyarankan yang khusus. Saya akan mengatakan bahwa saya menggunakan situs web proyek dokumentasi Linux untuk mempelajarinya.
Yang lebih penting
sudoers
adalah Anda dapat memasang perangkat dan berbagi secara transparan - bahkan tanpa memberikan kata sandi jika Anda memilih untuk melakukannya (ekstra hati-hati tentang hal itu).Apa yang biasanya saya lakukan dalam lingkungan kontrol adalah saya menggunakan
sudoers
file untuk memungkinkan pengguna grup tertentu untuk me-mount berbagi jaringan secara transparan. Jadi saya menambahkan perintahmount.nfs
danmount.cifs
dalam file sudoers yang memungkinkan operasi seperti "me-mount folder home pengguna dari server file jaringan, ketika pengguna log on ke terminal klien" dan belajar seperti itu.sumber
autofs
sendiri untuk me-mount/home/$USER
dari fileserver, ke lokasi/home/$USER/fromFS/
di pc klien.guestmount
tipu daya libguestfsBergantung pada:
Documents: http://libguestfs.org/guestmount.1.html
Diuji pada Ubuntu 18.04, libguestfs-tools 1: 1.36.13-1ubuntu3.
sumber