Mengapa Linux mengharuskan pengguna untuk melakukan root / menggunakan sudo / secara khusus diotorisasi per mount untuk me-mount sesuatu? Sepertinya keputusan apakah akan mengizinkan pengguna memasang sesuatu harus didasarkan pada hak akses mereka ke volume sumber / jaringan berbagi dan ke titik pemasangan. Beberapa kegunaan untuk pemasangan non-root adalah pemasangan gambar sistem file ke arah yang dimiliki pengguna dan pemasangan berbagi jaringan ke direktori milik pengguna. Sepertinya jika pengguna memiliki kontrol atas kedua sisi persamaan mount semuanya harus keren.
Klarifikasi pembatasan akses:
Saya merasa saya harus bisa me-mount apa pun yang pengguna akan memiliki akses ke titik-mount bahwa pengguna adalah pemilik.
Sebagai contoh, di komputer saya / dev / sda1 dimiliki oleh root pengguna dan disk grup dengan izin brw-rw----
. Oleh karena itu pengguna non-root tidak dapat mengacaukan / dev / sda1 dan jelas me-mount seharusnya tidak memungkinkan mereka untuk me-mount. Namun jika pengguna memiliki /home/my_user/my_imagefile.img dan mount point / home / my_user / my_image / mengapa mereka tidak bisa me-mount file gambar itu pada mount point itu dengan:
mount /home/my_user/my_imagefile.img /home/my_user/my_image/ -o loop
Seperti yang ditunjukkan kormac, ada masalah suid. Jadi beberapa pembatasan harus ditambahkan untuk mencegah suid menjadi masalah serta berpotensi beberapa masalah lainnya. Mungkin salah satu cara untuk melakukan ini adalah membuat OS memperlakukan semua file sebagai milik pengguna yang melakukan pemasangan. Namun untuk sederhana baca / tulis / eksekusi, saya tidak melihat mengapa ini akan menjadi masalah.
Gunakan kasus:
Saya memiliki akun di lab tempat ruang rumah saya dibatasi hingga 8GB. Ini kecil dan sangat menjengkelkan. Saya ingin memasang volume nfs dari server pribadi saya untuk meningkatkan jumlah ruang yang saya miliki. Namun, karena Linux tidak mengizinkan hal-hal seperti itu saya terjebak dengan scp'ing file bolak-balik untuk tetap di bawah batas 8GB.
sumber
sshfs
? Ini akan memasang direktori jarak jauh, melaluissh
, seperti Anda sendiri, tanpa perlu akses root. Hanya perlu FUSE (Filesystem di UserSpacE) untuk diinstal.sftp
sedikit lebih baik untuk digunakan daripadascp
.Jawaban:
Ini adalah batasan historis dan keamanan.
Secara historis, sebagian besar drive tidak dapat dilepas. Jadi masuk akal untuk membatasi pemasangan pada orang yang memiliki akses fisik yang sah, dan mereka kemungkinan akan memiliki akses ke akun root. Entri fstab memungkinkan administrator untuk mendelegasikan pemasangan ke pengguna lain untuk drive yang dapat dilepas.
Dari sudut pandang keamanan, ada tiga masalah utama yang memungkinkan pengguna sewenang-wenang untuk memasang perangkat blok sewenang-wenang atau gambar sistem file di lokasi yang sewenang-wenang.
/etc
, dengan/etc/shadow
kata sandi root yang berisi yang Anda ketahui. Ini diperbaiki dengan memungkinkan pengguna untuk me-mount sistem file hanya pada direktori yang dimilikinya.nosuid
dannodev
pilihan yang tersirat dengan memilikiuser
di/etc/fstab
.Sejauh ini menegakkan
user
kapanmount
tidak dipanggil oleh root sudah cukup. Tetapi lebih umum bisa membuat file yang dimiliki oleh pengguna lain bermasalah: konten dari file itu berisiko dikaitkan oleh pemilik yang mengaku bukan mounter. Salinan pelestarian atribut biasa dengan root ke sistem file yang berbeda akan menghasilkan file yang dimiliki oleh pemilik yang dinyatakan tetapi tidak terlibat. Beberapa program memeriksa bahwa permintaan untuk menggunakan file itu sah dengan memeriksa bahwa file tersebut dimiliki oleh pengguna tertentu, dan ini tidak lagi aman (program juga harus memeriksa bahwa direktori di jalur akses dimiliki oleh pengguna itu; jika pemasangan sewenang-wenang diizinkan, mereka juga harus memeriksa bahwa tidak ada direktori ini yang merupakan titik pemasangan di mana pemasangan dibuat bukan oleh root atau oleh pengguna yang diinginkan).Untuk tujuan praktis, saat ini dimungkinkan untuk me-mount sistem file tanpa menjadi root, melalui FUSE . Driver FUSE dijalankan sebagai pengguna pemasangan sehingga tidak ada risiko eskalasi hak istimewa dengan mengeksploitasi bug dalam kode kernel. FUSE filesystems hanya dapat mengekspos file yang diizinkan oleh pengguna untuk dibuat, yang memecahkan masalah terakhir di atas.
sumber
Jika pengguna memiliki akses tulis langsung ke perangkat blok, dan dapat memasang perangkat blok itu, maka mereka dapat menulis suid yang dapat dieksekusi ke perangkat blok, me-mount, dan mengeksekusi file itu, dan dengan demikian, mendapatkan akses root ke sistem. Inilah sebabnya mengapa pemasangan biasanya dibatasi pada root.
Sekarang root dapat memungkinkan pengguna normal untuk me-mount dengan batasan tertentu, tetapi ia perlu memastikan bahwa jika pengguna memiliki akses tulis ke perangkat blok, bahwa mount tidak mengizinkan suid, dan juga devnodes, yang memiliki masalah serupa (pengguna dapat membuat devnode yang memberi mereka akses tulis ke perangkat penting yang seharusnya tidak mereka miliki akses tulisnya).
sumber
Itu tidak selalu membutuhkan super privs. Dari
man mount
sumber
mount()
panggilan sistem selalu membutuhkan root. utilitas suid dapat menjadi root dan memungkinkan pengguna non root untuk melakukan mount, dan jikamount
perintah diinstal suid, maka ia akan melakukan ini berdasarkan pada flag pengguna di fstab. Executable suid lainnya telah ditulis untuk memungkinkan pengguna melakukan mount, sepertipmount
, yang memungkinkan pengguna untuk me-mount media eksternal, dan memberlakukan batasan yang sesuai, seperti nosuid, nodev.Kormac dan yang lainnya telah mengindikasikan bahwa ini bukan dilema yang Anda sajikan; menurut saya ini bermuara pada filosofi pemberian hak istimewa pengguna secara eksplisit vs. sistem di mana semua pengguna akan memiliki hak yang tidak dapat diubah untuk me-mount sistem file.
Gilles mengatasi beberapa masalah keamanan yang terkait dengan pemasangan sistem file. Saya akan secara retroaktif menghindari diskusi prolog dan tangensial tentang masalah teknis potensial yang terkait dengan hal ini (lihat komentar) tetapi saya pikir wajar jika pengguna yang tidak dipercaya tidak memiliki hak abadi untuk memasang hard drive.
Masalah yang berkaitan dengan filesystem virtual dan jarak jauh (atau filesystem jarak jauh melalui filesystem virtual, ala FUSE) kurang signifikan, tetapi ini tidak menyelesaikan pertanyaan keamanan (walaupun FUSE mungkin, dan tentu saja akan menyelesaikan masalah Anda). Penting juga untuk mempertimbangkan bahwa data dalam sistem file semacam itu hampir selalu dapat diakses tanpa perlu memasang perangkat, baik melalui transfer file atau alat yang mengekstraksi dari gambar tanpa pemasangan, sehingga sistem yang tidak memungkinkan Anda untuk me-mount sesuatu tidak tidak mewakili masalah yang tidak dapat diatasi terkait dengan mengakses data yang telah Anda tempatkan dengan aneh di file gambar, atau (lebih mudah dimengerti) ingin dapatkan dari sistem jarak jauh. Jika Anda memiliki situasi di mana ini bukan masalahnya, mungkin ada baiknya saat bertanya:
Apa yang sebenarnya saya coba lakukan?
Di mana saya mencoba melakukannya?
Jika administrasi sistem itu adil, maka # 2 menjelaskan mengapa # 1 tidak mungkin bagi Anda. Jika administrasi sistem tidak adil, itu politik . Solusi untuk masalah ini, "Admin sistem saya tidak adil" adalah tidak mendesain ulang OS sehingga sistem admin di mana-mana tidak dapat membatasi pengguna.
Sistem ini memungkinkan pengguna super untuk membatasi aktivitas Anda, baik secara eksplisit, atau karena kelalaian ("Kami tidak menyediakan FUSE", dll.). Keistimewaan adalah salah satu mekanisme yang dengannya hal ini tercapai. Mungkin tidak baik untuk diberitahu, "Anda tidak perlu melakukan ini," tetapi jika itu benar ... que sera ... Anda tidak perlu melakukan ini. Gunakan ftp, dll. Jika itu tidak benar, Anda harus mengganggu mereka yang bertanggung jawab.
sumber
FYI: Kernel terbaru memiliki dukungan "namespace". Pengguna biasa dapat membuat namespace, dan di dalam namespace itu, menjadi
root
dan melakukan hal-hal menyenangkan seperti me-mount sistem file.Itu tidak memberi Anda izin super-user "nyata" - Anda hanya bisa melakukan apa yang sudah diizinkan (yaitu Anda hanya bisa memasang perangkat yang sudah bisa Anda baca).
http://lwn.net/Articles/531114/ Lihat bagian 4.
sumber
root
di dalam namespace pengguna, tetapi itu tidak memungkinkan Anda memasang tipe sistem file normal bahkan jika Anda dapat membaca & menulis perangkat blokir. Lihat percobaan 2 di sini: unix.stackexchange.com/questions/517317/…Karena data pada sistem file yang ingin mereka pasang mungkin membahayakan keamanan server, atau bahkan crash (jika sengaja dibuat seperti itu).
sumber
owner
danuser(s)
ditetapkannosuid
. Anda tidak ingin seseorang dapat memotong dengan mudah dengan membiarkan mereka menghapus secara manualnosuid
Di GNOME, gvfs tidak memerlukan root untuk memasang sistem file jarak jauh (ftp atau ssh) dan gnome-mount juga tidak perlu root untuk memasang penyimpanan eksternal (drive usb, CD / DVD, dll).
Sebagian besar sistem mungkin tidak ingin memiliki seluruh GNOME hanya untuk beberapa pemasangan jarak jauh, maka Anda dapat menggunakan lufs , sshfs atau ftpfs .
gvfs, lufs, sshfs, dan ftpfs menggunakan FUSE untuk memungkinkan pengguna non-root untuk me-mount sistem file virtual; dan tidak seperti mount
-o user
, FUSE tidak memerlukan sysadmin untuk mengatur mount tertentu. Selama Anda memiliki hak istimewa untuk direktori mount dan sumber daya apa pun yang diperlukan untuk membangun sistem file, Anda dapat membuat mount FUSE.Karena
mount
terutama / awalnya ditujukan untuk sistem file lokal, yang hampir selalu melibatkan perangkat keras.sumber