En realidad, es muy fácil montar más o menos lo que desee como usuario normal sin privilegios de root, siempre que se haya creado la entrada correcta /etc/fstab
.
Por supuesto, modificaciones para /etc/fstab
requerir privilegios de root. Pero una sola entrada se puede usar con mucha flexibilidad para (u) montar muchos archivos diferentes en diferentes puntos de montaje, sin necesidad de editarlos /etc/fstab
.
Aquí hay dos scripts de Bash muy cortos (5 líneas + comentarios) que harán el trabajo:
para montar
#!/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.
y para desmontar
#!/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 :-)
El directorio /tmp/UFS/
se crea para aislar los enlaces y evitar conflictos. Pero los enlaces simbólicos pueden estar en cualquier lugar del espacio del usuario, siempre y cuando permanezcan en el mismo lugar (misma ruta). La /etc/fstab
entrada nunca cambia tampoco.
ADVERTENCIA VITAL: El
montaje está restringido por buenas razones de seguridad. Hacerlo más flexible puede abrir puertas para software malicioso. No soy un experto en seguridad y recomendaría que abra las puertas no más de lo absolutamente necesario ... utilizando opciones para restringir lo que se puede hacer con los sistemas de archivos que se pueden montar. Si un colaborador experto pudiera comentar más sobre problemas de seguridad, podría ser útil.
Hay varias opciones disponibles para restringir el uso de sistemas de archivos montados, como el noexec
que impide la ejecución de archivos binarios, y nosuid
, por lo tanto, contribuyen a la seguridad. En realidad, estas opciones se agregan como opciones predeterminadas cuando se usan las opciones user
o users
, lo cual es necesariamente el caso en lo que hacemos a continuación. Piénselo dos veces antes de anular estos valores predeterminados. http://en.wikipedia.org/wiki/Fstab
Se pueden agregar otras opciones para mayor protección. Por ejemplo, la opción owner
en la /etc/fstab
entrada permitirá a los usuarios lidiar solo con los archivos o dispositivos que poseen. Consulte man mount
para obtener una lista de opciones: http://linux.die.net/man/8/mount .
El uso de esta /etc/fstab
entrada también puede restringirse a través de la propiedad user.group del directorio (o directorios) que contiene los enlaces simbólicos.
Explicación
Esta explicación fue escrita antes de darme cuenta de que podía simplificar las cosas a los dos scripts anteriores. No pensé en ellos de inmediato, en parte porque tengo a mano un problema un poco más complejo que no resuelven sin un poco de maquinaria adicional. Por lo tanto, mi explicación puede ser un poco más compleja de lo que debería, pero no tengo el coraje de volver a escribir todo desde cero.
La idea básica es crear entradas /etc/fstab
que incluyan la opción user
o users
para que un usuario pueda solicitar mount
el montaje especificado en esa entrada dando como argumento el archivo a montar o el punto de montaje a usar (pero no ambos en mi experiencia) .
También necesita una entrada adecuada para umount
(que es un problema ligeramente diferente, ver más abajo). La opción user
generalmente es mejor que users
ya que restringe el permiso al umount
usuario que montó el sistema de archivos, mientras que users
lo permitirá a todos. Lamentablemente, la opción user
no siempre funciona y puede implicar algunos otros pasos que deben realizarse para funcionar. Esto se discute en la opción "usuario" para el montaje, no para el montaje .
Primero agrega a /etc/fstab
una entrada como:
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
y úselo /tmp/UFS/drive
como un enlace simbólico (o enlace simbólico) a cualquier dispositivo o archivo que desee montar, digamos un archivo que contenga la imagen de un sistema de archivos ISO /home/johndoe/john-image-file.iso
.
También se define /tmp/UFS/mountpoint
como un enlace simbólico al punto de montaje que desea utilizar, por ejemplo /mnt/iso
.
Luego puede montar john-image-file.iso
con el comando:
$ mount /tmp/UFS/drive
Esto es suficiente en mi Mageia Linux, ya que el uso de dispositivos de bucle ahora se ha hecho implícito y ya no requiere su uso -o loop
explícito. No sé cuán general es eso hoy. Consulte
Al montar, ¿cuándo debo usar un dispositivo de bucle?
Este montaje aparece en tablas y comandos:
$ 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
La operación de montaje podría funcionar para cualquier archivo o unidad y solo requiere hacer un enlace simbólico desde /tmp/UFS/drive
ese archivo o al dispositivo para la unidad. Por supuesto, podría elegirse otro nombre y ubicación para el enlace simbólico, siempre que nunca cambie.
Desmontar el archivo se basa de la misma manera en el uso apropiado de los enlaces simbólicos. En el caso de un dispositivo normal correspondiente a una unidad de hardware, solo usa los mismos enlaces.
Sin embargo, los archivos que contienen la imagen de un sistema de archivos se montan a través de un tipo especial de dispositivo llamado dispositivo de bucle, que se asigna automáticamente al montar el archivo.
Para desmontar el archivo, debe hacer referencia al dispositivo de bucle, no al archivo. Por lo tanto, necesita /etc/fstab
una entrada que coincida con el dispositivo de bucle utilizado /etc/mtab
aquí /dev/loop0
y el punto de montaje aquí
/mnt/iso
.
No puede crear dicha entrada de antemano ya que el dispositivo de bucle puede variar, ya que se asignan dinámicamente. Tenga en cuenta que también es posible usar un dispositivo de bucle fijo, pero es inconveniente de otras maneras. Ver
http://igurublog.wordpress.com/2011/01/22/how-to-allow-mounting-of-iso-files-by-a-regular-user/ ( este blog realmente inspiró la respuesta aquí ).
Sin embargo, puede encontrar el nombre del dispositivo de bucle, aquí /dev/loop0
, preguntando al sistema, como lo hicimos anteriormente de varias maneras diferentes. Luego, /etc/fstab
se puede hacer que nuestra entrada estándar apunte al dispositivo de bucle correcto a través del enlace simbólico /tmp/UFS/drive
y al punto de montaje como se hizo anteriormente con /tmp/UFS/mountpoint
. Hecho esto, el archivo se puede desmontar con cualquiera de los siguientes comandos (siempre que no haya ambigüedad /etc/mtab
, lo cual es un problema diferente):
$ umount /tmp/UFS/drive
$ umount /dev/loop0
$ umount /mnt/iso
$ umount /tmp/UFS/mountpoint
Dado que los dos enlaces simbólicos son necesarios solo cuando se emiten los comandos, se pueden cambiar dinámicamente. Por lo tanto, nuestra /etc/fstab
entrada única permite montar cualquier número de archivos y desmontarlos en cualquier orden, sin privilegios de root.
Otras referencias:
mount
binario no requiere permisos SUID, entonces debería poder usar fakeroot sin problemas.