¿Puedo montar una imagen del sistema de archivos sin permiso de root? Normalmente haría:
mount -o loop DISK_IMAGE FOLDER
Sin usar sudo o configurar el suid mount
, ¿hay alguna forma adecuada de hacerlo?
Sé que puedo usar fusermount
con algunas imágenes ISO, pero eso es bastante limitado, incluso para las imágenes ISO, algunas de mis imágenes no se pueden montar, pero mount
siempre funcionan.
mount
binario no requiere permisos SUID, entonces debería poder usar fakeroot sin problemas.fakeroot
no va a ayudar aquí: pretende que la propiedad del archivo es diferente, pero no puede otorgarle permisos que no tiene, como llamarmount(2)
cuando no es root.Respuestas:
No puede montar nada que el administrador de alguna manera no le haya dado permiso para montar. Solo root puede llamar a la llamada del
mount
sistema. La razón de esto es que hay muchas formas de escalar privilegios mediante el montaje, como montar algo sobre la ubicación de un sistema, hacer que los archivos parezcan pertenecer a otro usuario y explotar un programa que depende de la propiedad del archivo, crear archivos setuid o explotar errores en controladores de sistema de archivos.El
mount
comando es setuid root. Pero solo te permite montar cosas que se mencionan enfstab
.El
fusermount
comando es setuid root. Solo le permite montar cosas a través de un controlador FUSE, y restringe sus habilidades para proporcionar archivos con propiedad arbitraria o permisos de esa manera (en la mayoría de las configuraciones, todos los archivos en un montaje FUSE le pertenecen).Su mejor opción es encontrar un sistema de archivos FUSE que sea capaz de leer su imagen de disco. Para las imágenes ISO 9660, intente con fuseiso y el soporte ISO 9660 de UMfuse (disponible en Debian como
fuseiso9660
paquete ).fuente
sudo
(aunque tiene el bit SUID establecido) solo permite montarfstab
entradas. De esto se deduce que (a) el bit SUID tiene sentido, ya que un usuario normal puede montarfstab
entradas (y se le permite realizar lamount
llamada al sistema) y (b) quemount
la restricción de la utilidad es permitir que solo lasfstab
entradas sean montadas por usuarios root.fstab
son para rootfs y boot. Para montar unidades USB mirolsblk
y enmount
consecuencia. No he tenido problemas para hacer esto.El Wiki de Debian muestra varias formas de hacerlo. Aquí hay una manera. (Esto requiere el
udisks2
paquete).primero
/dev/loop0
se usará para lo siguiente.Pero si el
udisksctl loop-setup
comando hubiera regresado/dev/loop1
, entonces/dev/loop1
se habría utilizado para lo siguiente.Es posible que deba ejecutar si el dispositivo de bucle invertido (creado anteriormente) no se monta automáticamente:
Puedes mirar los archivos en el disco
Puedes desmontarlo cuando hayas terminado
y si es necesario:
fuente
sudo
solo. setsid o travesuras relacionadas ?-r
opción deudisksctl loop-setup
significa solo lectura, que el OP no solicitó, así que suéltelo para obtener un montaje grabable.Puede usar el módulo FUSE guestmount para montar varios tipos de imágenes de disco. Es parte del ecosistema guestfs y no requerirá permisos de root.
Echa un vistazo a la página del manual para más detalles.
Ejemplos
1. Para un invitado típico de Windows que tiene su sistema de archivos principal en la primera partición:
2. Para un invitado típico de Linux que tiene un sistema de archivos / boot en la primera partición y el sistema de archivos raíz en un volumen lógico:
fuente
La forma posible sería agregar una
/etc/fstab
entrada para la ISO con el parámetro 'usuario', como/test.iso /mnt/iso auto defaults,user 0 1
Pero generalmente necesita acceso root de todos modos para editar este archivo, por lo que no es muy útil.
fuente
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
y para desmontar
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, ynosuid
, por lo tanto, contribuyen a la seguridad. En realidad, estas opciones se agregan como opciones predeterminadas cuando se usan las opcionesuser
ousers
, 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/FstabSe 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. Consulteman 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ónuser
ousers
para que un usuario pueda solicitarmount
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ónuser
generalmente es mejor queusers
ya que restringe el permiso alumount
usuario que montó el sistema de archivos, mientras queusers
lo permitirá a todos. Lamentablemente, la opciónuser
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: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: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:
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):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:
¿Es posible montar y modificar un archivo loopback sin sudo / root?
http://www.tuxfiles.org/linuxhelp/fstab.html
fuente
mount
comando para cada usuario normal? ¿Y los problemas de seguridad asociados con él? Corrígeme si me equivoco.device
omountpoint
de fstab no apunta a una entrada válida. El usuario debe iniciar sesión a través de la sesión de consola e ingresarstartx
para iniciar explícitamente un administrador de pantalla.El paquete libguestfs-tools-c tiene un comando guestmount
df mostrará image.iso montado
para desmontar tenemos:
fuente