¿Es posible permitir que algunos usuarios particulares (por ejemplo, miembros de un grupo) monten cualquier sistema de archivos sin privilegios de superusuario en Linux?
Otra pregunta podría haber sido "¿de qué manera un usuario puede dañar un sistema al montar sistemas de archivos?"
linux
mount
not-root-user
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
fuente
gvfs-mount
-d /dev/sdX
Respuestas:
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 quemount
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 consu
osudo
. 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í incluyenudisks
,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:
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.
fuente
mount
puedan montar sistemas de archivos como lo hace root? Leeré el documento de espacios de nombres que ha vinculado e intentaré implementar esta cosa del grupo de montaje, al menos como ejercicio.Puede hacerlo, pero debe modificar la entrada
/etc/fstab
correspondiente al sistema de archivos que desea montar, agregando la banderauser
a esta entrada. Los usuarios sin privilegios podrían montarlo.Ver
man mount
para más detalles.fuente
vfs.usermount
). Yo quiero algo análogo a eso. Utilizo muchas unidades extraíbles con muchas particiones en cada una y sería engorroso agregar una docena o dos entradas a fstab para cada una de ellas.udev
administrar las entradas a medida que aparecen y desaparecen nuevos dispositivos.Aquí está la wiki para configurar las reglas de Polkit para udisks / udisks2 para montar particiones por grupo no root (por ejemplo, usuarios).
Guarde el siguiente código en /etc/polkit-1/rules.d/50-udisks.rules
Suponga que está en el grupo "usuarios", utilizando el siguiente comando para montar una partición (no es necesario sudo).
fuente
1 Mira donde funciona
En Xubuntu, funciona de inmediato para montar y expulsar almacenamiento masivo USB, particiones de disco duro, CD / DVD y probablemente más.
Supongamos que la solución elegida por Ubuntu, usando policyKit, es lo suficientemente segura.
2 Elija la parte relevante
En XFCE en Debian 8.3 necesitaba permitir al usuario montar y expulsar sistemas de archivos de Thunar sin contraseña. Lo que funcionó para mí es elegir un archivo de permiso de Ubuntu.
Agregar las siguientes líneas como raíz a un archivo llamado
/var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
debería ser el truco:3 Beneficio!
(Lo que hice en realidad fue elegir un poco más del archivo con el mismo nombre en Ubuntu 16.04 y funcionó para mí. Si lo necesita, en su mayoría parece el contenido de https://gist.github.com/kafene/5b4aa4ebbd9229fa2e73 )
fuente
Puede configurar
sudo
para permitir que un conjunto de usuarios ejecute elmount
comando.Actualización : en cuanto a cómo puede dañar un sistema montando? Por ejemplo, puede crear un shell raíz setuid en un sistema de archivos que luego puede montar y ejecutar para obtener privilegios de root.
fuente
sudo
? Además, ¿no es el usuario root el que monta el sistema de archivos, solo detrás de escena, con este método?mount
asudo mount
o utilizar un guión envoltorio.user
a fstab solo funciona porquemount
es setuid root. El núcleo está buscando la raíz o laCAP_SYS_ADMIN
capacidad, por lo que realmente no puede evitar involucrar a la raíz.Para responder a su pregunta entre paréntesis, dado que un sistema de archivos es un marcador de posición para los archivos, entonces un usuario puede llevar a cabo operaciones dañinas en ese sistema de archivos, como eliminar archivos.
Resumiendo las otras 2 preguntas, diré esto:
fstab
es ideal para montar en el momento del arranque almacenamiento permanente . No es tan bueno cuando desea conectar unidades USB o montar ocasionalmente algunos recursos compartidos de red.sudo mount
también está bien si estás en sistemas ubuntu *. Sin embargo, aún deberá escribir una contraseña.udev
se encargará de montar cosas como memorias USB, cámaras y tarjetas flash en sistemas ubuntu * (pero no en distribuciones menos fáciles de usar como debian, slackware, etc.)Agregaré que, históricamente, la forma unix de otorgar autoridad a algunos usuarios (o grupos) para hacer cosas es a través del
sudoers
archivo.Hay MUCHAS guías para usarlo, así que no sugeriré nada en particular. Diré que utilicé el sitio web del proyecto de documentación de Linux para conocerlo.
Además
sudoers
, puede montar dispositivos y recursos compartidos de forma transparente, incluso sin proporcionar una contraseña si decide hacerlo (tenga mucho cuidado al respecto).Lo que generalmente hago en un entorno de control es que uso el
sudoers
archivo para permitir a los usuarios de cierto grupo montar recursos compartidos de red de forma transparente. Así que agrego los comandosmount.nfs
ymount.cifs
en el archivo sudoers que permiten operaciones como "montar la carpeta de inicio del usuario desde un servidor de archivos de red, cuando el usuario inicia sesión en un terminal de cliente" y tachuelas así.fuente
autofs
solo para montarlo/home/$USER
desde el servidor de archivos, a la ubicación/home/$USER/fromFS/
en la PC del cliente.guestmount
truco de libguestfsSe basa en:
Documentos: http://libguestfs.org/guestmount.1.html
Probado en Ubuntu 18.04, libguestfs-tools 1: 1.36.13-1ubuntu3.
fuente