In realtà è molto facile montare più o meno quello che vuoi come un normale utente senza i privilegi di root, a condizione che sia stata creata la voce giusta /etc/fstab
.
Naturalmente, le modifiche /etc/fstab
richiedono privilegi di root. Ma una singola voce può essere utilizzata con molta flessibilità per (u) montare molti file diversi su punti di montaggio diversi, senza ulteriori modifiche di /etc/fstab
.
Ecco due script Bash molto brevi (5 righe + commenti) che faranno il lavoro:
per il montaggio
#!/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.
e per smontare
#!/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 :-)
La directory /tmp/UFS/
viene creata per isolare i collegamenti ed evitare gli scontri. Ma i collegamenti simbolici possono trovarsi ovunque nello spazio utente, purché rimangano nello stesso posto (stesso percorso). /etc/fstab
Nemmeno la voce cambia.
AVVISO VITAL: il
montaggio è limitato per buoni motivi di sicurezza. Renderlo più flessibile può aprire le porte a software dannoso. Non sono un esperto di sicurezza e consiglierei di aprire le porte non più di quanto assolutamente necessario ... utilizzando le opzioni per limitare ciò che può essere fatto con i file system che possono quindi essere montati. Se un collaboratore esperto potesse commentare ulteriormente i problemi di sicurezza, potrebbe essere utile.
Sono disponibili varie opzioni per limitare l'uso dei file system montati, ad esempio noexec
che impedisce l'esecuzione di file binari o nosuid
, e quindi contribuisce alla sicurezza. In realtà, queste opzioni sono aggiunti come opzioni predefinite quando le opzioni user
o users
sono utilizzati, che è necessariamente il caso in quello che facciamo qui di seguito. Pensaci due volte prima di ignorare queste impostazioni predefinite. http://en.wikipedia.org/wiki/Fstab
Altre opzioni possono essere aggiunte per ulteriore protezione. Ad esempio, l'opzione owner
nella /etc/fstab
voce consentirà agli utenti di gestire solo file o dispositivi di loro proprietà. Vedere man mount
per un elenco di opzioni: http://linux.die.net/man/8/mount .
L'uso di questa /etc/fstab
voce può anche essere limitato tramite la proprietà user.group della directory (o directory) contenente i collegamenti simbolici.
Spiegazione
Questa spiegazione è stata scritta prima che mi rendessi conto che potevo semplificare le cose ai due script sopra. Non li ho pensati subito in parte perché ho a portata di mano un problema leggermente più complesso che non risolvono senza qualche macchinario aggiuntivo. Quindi la mia spiegazione potrebbe essere un po 'più complessa di quanto dovrebbe, ma non ho il coraggio di riscriverla da zero.
L'idea di base è creare voci /etc/fstab
che includano l'opzione user
o users
così che un utente possa chiedere mount
di eseguire il montaggio specificato in quella voce fornendo come argomento il file da montare o il punto di montaggio da usare (ma non entrambi nella mia esperienza) .
Hai anche bisogno di una voce corretta per umount
(che è un problema leggermente diverso - vedi sotto). L'opzione user
è di solito migliore rispetto a users
quando limita l'autorizzazione umount
all'utente che ha montato il file system, mentre users
lo consentirà a tutti. Sfortunatamente l'opzione user
non funziona sempre e può comportare alcuni altri passaggi per funzionare. Questo è discusso nell'opzione "user" work per mount, non per umount .
Per prima cosa aggiungi /etc/fstab
una voce come:
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
e utilizzare /tmp/UFS/drive
come collegamento simbolico (o collegamento simbolico) a qualsiasi dispositivo o file che si desidera montare, ad esempio un file contenente l'immagine di un file system ISO /home/johndoe/john-image-file.iso
.
Definisci anche /tmp/UFS/mountpoint
un collegamento simbolico al punto di montaggio che desideri utilizzare, per esempio /mnt/iso
.
È quindi possibile montare john-image-file.iso
con il comando:
$ mount /tmp/UFS/drive
Questo è sufficiente sul mio Mageia Linux, dal momento che l'uso dei dispositivi loop è stato ora implicito e non richiede più l'uso -o loop
esplicito. Non so quanto sia generale oggi. Vedi
Durante il montaggio, quando dovrei usare un dispositivo loop?
Questo montaggio appare in tabelle e comandi:
$ 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
L'operazione di montaggio potrebbe funzionare per qualsiasi file o unità e richiede solo di creare un collegamento simbolico /tmp/UFS/drive
a quel file o al dispositivo per l'unità. Naturalmente, un altro nome e posizione potrebbero essere scelti per il collegamento simbolico, purché non cambi mai.
Lo smontaggio del file si basa allo stesso modo sull'uso appropriato dei collegamenti simbolici. Nel caso di un normale dispositivo corrispondente ad alcune unità harware, basta usare gli stessi collegamenti.
Tuttavia, i file contenenti l'immagine di un file system vengono montati tramite un tipo speciale di dispositivo chiamato dispositivo loop, allocato automaticamente quando si monta il file.
Per smontare il file, è necessario fare riferimento al dispositivo loop, non al file. Quindi è necessario in /etc/fstab
una voce che corrisponda sia al dispositivo loop utilizzato in /etc/mtab
, qui /dev/loop0
, sia al punto di montaggio, qui
/mnt/iso
.
Non è possibile creare una voce di questo tipo in anticipo poiché il dispositivo loop può variare, poiché sono allocati in modo dinamico. Si noti che è anche possibile utilizzare un dispositivo ad anello fisso, ma è scomodo in altri modi. Vedi
http://igurublog.wordpress.com/2011/01/22/how-to-allow-mounting-of-iso-files-by-a-regular-user/ ( questo blog in realtà ha ispirato la risposta qui ).
Tuttavia, puoi trovare il nome del dispositivo loop, qui /dev/loop0
, chiedendo al sistema, come abbiamo fatto sopra in diversi modi. Quindi la nostra /etc/fstab
voce standard può essere fatta per puntare al dispositivo ad anello destro tramite il collegamento simbolico /tmp/UFS/drive
e al punto di montaggio come fatto precedentemente /tmp/UFS/mountpoint
. Ciò fatto, il file può essere disinstallato con uno dei seguenti comandi (a condizione che non vi sia alcuna ambiguità /etc/mtab
, che è un problema diverso):
$ umount /tmp/UFS/drive
$ umount /dev/loop0
$ umount /mnt/iso
$ umount /tmp/UFS/mountpoint
Poiché i due collegamenti simbolici sono necessari solo quando vengono emessi i comandi, possono essere modificati in modo dinamico. Quindi la nostra singola /etc/fstab
voce consente di montare un numero qualsiasi di file e di smontarli in qualsiasi ordine, senza i privilegi di root.
Altre referenze:
mount
binario non richiede autorizzazioni SUID, dovresti essere in grado di usare fakeroot senza problemi.