Sebenarnya sangat mudah untuk memasang kurang lebih apa pun yang Anda inginkan sebagai pengguna normal tanpa hak akses root, asalkan entri yang tepat telah dibuat /etc/fstab
.
Tentu saja, modifikasi /etc/fstab
membutuhkan hak akses root. Tetapi satu entri dapat digunakan dengan banyak fleksibilitas untuk (u) me-mount banyak file berbeda pada titik mount yang berbeda, tanpa mengedit lebih lanjut /etc/fstab
.
Berikut adalah dua skrip Bash yang sangat pendek (5 baris + komentar) yang akan melakukan pekerjaan:
untuk pemasangan
#!/bin/sh
# usage: usmount device dir
# author: babou 2013/05/17 on https://unix.stackexchange.com/questions/32008/mount-an-loop-file-without-root-permission/76002#76002
# Allows normal user to mount device $1 on mount point $2
# Use /etc/fstab entry :
# /tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto 0 0
# and directory /tmp/UFS/
# Both have to be created (as superuser for the /etc/fstab entry)
rm -f /tmp/UFS/drive /tmp/UFS/mountpoint
ln -s `realpath -s $1` /tmp/UFS/drive
ln -s `realpath -s $2` /tmp/UFS/mountpoint
mount /tmp/UFS/drive || mount /tmp/UFS/mountpoint
# The last statement should be a bit more subtle
# Trying both is generally not useful.
dan untuk turun
#!/bin/sh
# usage: usumount device dir
# author: babou 2013/05/17 on https://unix.stackexchange.com/questions/32008/mount-an-loop-file-without-root-permission/76002#76002
# Allows normal user to umount device $1 from mount point $2
# Use /etc/fstab entry :
# /tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto 0 0
# and directory /tmp/UFS/
# Both have to be created (as superuser for the /etc/fstab entry)
rm -f /tmp/UFS/drive /tmp/UFS/mountpoint
ln -s `realpath -s $1` /tmp/UFS/drive
ln -s `realpath -s $2` /tmp/UFS/mountpoint
umount /tmp/UFS/drive || umount /tmp/UFS/mountpoint
# One of the two umounts may fail because it is ambiguous
# Actually both could fail, with careless mounting organization :-)
Direktori /tmp/UFS/
dibuat untuk mengisolasi tautan dan menghindari bentrokan. Tetapi symlink dapat berada di mana saja di ruang pengguna, selama mereka tetap di tempat yang sama (jalur yang sama). The /etc/fstab
entri tidak pernah berubah baik.
PERINGATAN VITAL:
Pemasangan dibatasi untuk alasan keamanan yang baik. Membuatnya lebih fleksibel dapat membuka pintu bagi perangkat lunak berbahaya. Saya bukan ahli keamanan dan saya akan merekomendasikan agar Anda membuka pintu tidak lebih dari yang diperlukan ... menggunakan opsi untuk membatasi apa yang dapat dilakukan dengan sistem file yang dapat dipasang. Jika kontributor yang berpengetahuan luas dapat berkomentar lebih lanjut tentang masalah keamanan, mungkin bermanfaat.
Berbagai opsi tersedia untuk membatasi penggunaan sistem file yang dipasang, seperti noexec
yang mencegah eksekusi binari, atau nosuid
, dan dengan demikian berkontribusi terhadap keamanan. Sebenarnya, opsi-opsi ini ditambahkan sebagai opsi default ketika opsi user
atau users
digunakan, yang tentu terjadi dalam apa yang kita lakukan di bawah ini. Berpikir dua kali sebelum Anda menimpa default ini. http://en.wikipedia.org/wiki/Fstab
Opsi lain dapat ditambahkan untuk perlindungan lebih lanjut. Misalnya, opsi owner
dalam /etc/fstab
entri akan memungkinkan pengguna hanya berurusan dengan file atau perangkat yang mereka miliki. Lihat man mount
daftar opsi: http://linux.die.net/man/8/mount .
Penggunaan /etc/fstab
entri ini juga dapat dibatasi melalui kepemilikan user.group dari direktori (atau direktori) yang berisi symlinks.
Penjelasan
Penjelasan ini ditulis sebelum saya menyadari bahwa saya dapat menyederhanakan banyak hal dengan dua skrip di atas. Saya tidak langsung memikirkan mereka sebagian karena saya punya masalah yang sedikit lebih rumit yang tidak dapat mereka selesaikan tanpa mesin tambahan. Jadi penjelasan saya mungkin sedikit lebih rumit dari yang seharusnya, tetapi saya tidak memiliki keberanian untuk menulis ulang semuanya dari awal.
Ide dasarnya adalah membuat entri /etc/fstab
yang menyertakan opsi user
atau users
agar pengguna dapat meminta mount
untuk melakukan pemasangan yang ditentukan dalam entri itu dengan memberikan argumen file yang akan dipasang atau titik mount untuk digunakan (tetapi tidak keduanya dalam pengalaman saya) .
Anda juga perlu entri yang tepat umount
(yang merupakan masalah yang sedikit berbeda - lihat di bawah). Opsi user
ini biasanya lebih baik daripada users
karena membatasi izin untuk umount
pengguna yang memasang sistem file, sementara itu users
akan memungkinkan itu untuk semua. Sayangnya opsi user
ini tidak selalu berfungsi, dan mungkin memerlukan beberapa langkah lain untuk dibuat berfungsi. Ini dibahas dalam Opsi "pengguna" berfungsi untuk mount, bukan untuk umount .
Pertama, Anda menambahkan /etc/fstab
entri seperti:
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
dan gunakan /tmp/UFS/drive
sebagai tautan simbolik (atau symlink) ke perangkat atau file apa pun yang ingin Anda pasang, katakan file yang berisi gambar sistem file ISO /home/johndoe/john-image-file.iso
.
Anda juga mendefinisikan /tmp/UFS/mountpoint
sebagai symlink ke titik mount yang ingin Anda gunakan, katakanlah /mnt/iso
.
Anda kemudian dapat melakukan mount john-image-file.iso
dengan perintah:
$ mount /tmp/UFS/drive
Ini sudah cukup di Mageia Linux saya, karena penggunaan perangkat loop sekarang telah dibuat tersirat, dan tidak lagi memerlukan penggunaan -o loop
secara eksplisit. Saya tidak tahu seberapa umum hari ini. Lihat
Saat memasang, kapan saya harus menggunakan perangkat loop?
Pemasangan ini muncul dalam tabel dan perintah:
$ df | tail -1
/dev/loop0 5,1G 5,1G 0 100% /mnt/iso
$ tail -1 /etc/mtab
/dev/loop0 /mnt/iso udf ro,nosuid,nodev,noexec,relatime,utf8 0 0
$ mount | tail -1
/home/johndoe/john-image-file.iso on /mnt/iso type udf (ro,nosuid,nodev,noexec,relatime,utf8)
$ tail -1 /proc/mounts
/dev/loop0 /mnt/iso udf ro,nosuid,nodev,noexec,relatime,utf8 0 0
$ tail -1 /proc/self/mountinfo
46 22 7:0 / /mnt/iso rw,nosuid,nodev,noexec,relatime - udf /dev/loop0 ro,utf8
$ tail -1 /proc/self/mountstats
device /dev/loop0 mounted on /mnt/iso with fstype udf
Operasi pemasangan dapat berfungsi untuk file atau drive apa pun dan hanya perlu membuat tautan simbolis dari /tmp/UFS/drive
ke file itu atau ke perangkat untuk drive tersebut. Tentu saja, nama dan lokasi lain dapat dipilih untuk tautan simbolik, asalkan tidak pernah berubah.
Turun dari file bergantung pada cara yang sama pada penggunaan yang tepat dari tautan simbolik. Dalam hal perangkat normal yang terkait dengan beberapa drive harware, Anda cukup menggunakan tautan yang sama.
Namun, file yang berisi gambar sistem file dipasang melalui jenis khusus perangkat yang disebut perangkat loop, secara otomatis dialokasikan ketika Anda memasang file.
Untuk turun dari file, Anda harus merujuk ke perangkat loop, bukan file. Karenanya, Anda perlu /etc/fstab
entri yang cocok dengan perangkat loop yang digunakan /etc/mtab
, di sini /dev/loop0
, dan titik pemasangan, di sini
/mnt/iso
.
Anda tidak dapat membuat entri seperti itu sebelumnya karena perangkat loop dapat bervariasi, karena dialokasikan secara dinamis. Perhatikan bahwa juga dimungkinkan untuk menggunakan perangkat loop tetap, tetapi tidak nyaman dengan cara lain. Lihat
http://igurublog.wordpress.com/2011/01/22/how-to-allow-mounting-of-iso-files-by-a- Regular-user/ ( blog ini sebenarnya mengilhami balasan di sini ).
Namun, Anda dapat menemukan nama perangkat loop, di sini /dev/loop0
, dengan menanyakan sistem, seperti yang kami lakukan di atas dalam beberapa cara berbeda. Kemudian /etc/fstab
entri standar kami dapat dibuat untuk menunjuk ke perangkat loop kanan melalui symlink /tmp/UFS/drive
, dan ke titik mount seperti yang dilakukan sebelumnya dengan /tmp/UFS/mountpoint
. Ini dilakukan, file dapat diturunkan dengan salah satu dari perintah berikut (asalkan tidak ada ambiguitas dengan /etc/mtab
, yang merupakan masalah yang berbeda):
$ umount /tmp/UFS/drive
$ umount /dev/loop0
$ umount /mnt/iso
$ umount /tmp/UFS/mountpoint
Karena dua symlink hanya diperlukan ketika perintah dikeluarkan, mereka dapat diubah secara dinamis. Jadi /etc/fstab
entri tunggal kami memungkinkan pemasangan sejumlah file, dan membuat umountnya dalam urutan apa pun, tanpa hak akses root.
Referensi lain:
mount
biner Anda tidak memerlukan izin SUID maka Anda harus dapat menggunakan fakeroot tanpa masalah.