Hay un par de enfoques, algunos de ellos en su mayoría seguros, otros en absoluto.
El camino inseguro
Deje que cualquier uso se ejecute mount
, por ejemplo, a través de sudo. También podrías darles raíz; es lo mismo. El usuario podría montar un sistema de archivos con una copia raíz suid de: bash
ejecución que proporciona instantáneamente la raíz (probablemente sin ningún registro, más allá del hecho de que mount
se ejecutó).
Alternativamente, un usuario podría montar su propio sistema de archivos encima /etc
, que contenga su propia copia de /etc/shadow
o /etc/sudoers
, y luego obtener la raíz con su
o sudo
. O posiblemente bind-mount ( mount --bind
) sobre uno de esos dos archivos. O un nuevo archivo en /etc/sudoers.d
.
Ataques similares podrían llevarse a cabo en /etc/pam.d
muchos otros lugares.
Recuerde que los sistemas de archivos ni siquiera necesitan estar en un dispositivo, -o loop
montarán un archivo que sea propiedad (y por lo tanto modificable) del usuario.
La forma más segura: udiscos o similares
Los diversos entornos de escritorio ya han creado soluciones para esto, para permitir a los usuarios montar medios extraíbles. Funcionan montando solo en un subdirectorio /media
y desactivando el soporte de set-user / group-id a través de las opciones del kernel. Opciones aquí incluyen udisks
, udisks2
, pmount
, usbmount
,
Si debe hacerlo, puede escribir su propio script para hacer algo similar e invocarlo a través de sudo, pero debe tener mucho cuidado al escribir este script para no dejar exploits raíz. Si no desea que sus usuarios tengan que recordar sudo, puede hacer algo como esto en un script:
#!/bin/bash
if [ $UID -ne 0 ]; then # or `id -u`
exec sudo -- "$0" "$@"
fi
# rest of script goes here
La forma segura algún día: espacios de nombres de usuario
Los espacios de nombres de Linux son una forma muy ligera de virtualización (contenedores, para ser más específicos). En particular, con espacios de nombres de usuario, cualquier usuario en el sistema puede crear su propio entorno en el que sea root. Esto les permitiría montar sistemas de archivos, excepto que se ha bloqueado explícitamente, excepto por unos pocos sistemas de archivos virtuales. Eventualmente, los sistemas de archivos FUSE probablemente se permitirán, pero los parches más recientes que pude encontrar no cubren dispositivos de bloque, solo cosas como sshfs.
Además, muchos núcleos de distribución tienen (por razones de seguridad) el valor predeterminado de no permitir que los usuarios sin privilegios utilicen espacios de nombres de usuario; por ejemplo, Debian tiene un valor kernel.unprivileged_userns_clone
predeterminado de 0. Otras distribuciones tienen configuraciones similares, aunque a menudo con nombres ligeramente diferentes.
La mejor documentación que conozco sobre los espacios de nombres de usuarios es un artículo LWN
Espacios de nombres en funcionamiento, parte 5: Espacios de nombres de usuarios .
Por ahora, iría con udisks2.
gvfs-mount
-d /dev/sdX