GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo permitir que los no superusuarios monten cualquier sistema de archivos?

Hay un par de enfoques, algunos de ellos en su mayoría seguros, otros no en absoluto.

La forma insegura

Deje que cualquier uso ejecute mount , por ejemplo, a través de sudo. También podría darles raíz; es lo mismo. El usuario podría montar un sistema de archivos con una copia raíz suid de bash —ejecutar que da root al instante (probablemente sin ningún tipo de registro, más allá del hecho de que mount fue ejecutado).

Alternativamente, un usuario podría montar su propio sistema de archivos encima de /etc , que contiene su propia copia de /etc/shadow o /etc/sudoers , luego obtenga la raíz con su o sudo . O posiblemente enlazar-montar (mount --bind ) sobre uno de esos dos archivos. O un nuevo archivo en /etc/sudoers.d .

Se podrían realizar ataques similares sobre /etc/pam.d y muchos otros lugares.

Recuerde que los sistemas de archivos ni siquiera necesitan estar en un dispositivo, -o loop montará un archivo que es propiedad (y, por lo tanto, modificable) del usuario.

La forma más segura:udisks o similar

Los diversos entornos de escritorio ya han creado soluciones para esto, para permitir a los usuarios montar medios extraíbles. Funcionan montando en un subdirectorio de /media solamente y desactivando la compatibilidad con set-user/group-id a través de las opciones del kernel. Las opciones aquí incluyen udisks , udisks2 , pmount , usbmount ,

Si es necesario, 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 vulnerabilidades de root. Si no quiere 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" "[email protected]"
fi

# rest of script goes here 

La forma de estar seguro 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, any usuario en el sistema puede crear su propio entorno en el que son root. Esto les permitiría montar sistemas de archivos, excepto que se ha bloqueado explícitamente a excepción de unos pocos sistemas de archivos virtuales. Eventualmente, los sistemas de archivos FUSE probablemente estarán permitidos, 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 usen espacios de nombres de usuario; por ejemplo, Debian tiene un kernel.unprivileged_userns_clone que por defecto es 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 usuario es un artículo de LWN Espacios de nombres en funcionamiento, parte 5:Espacios de nombres de usuario.

Por ahora, iría con udisks2.


Puedes hacerlo, pero necesitas modificar la entrada en /etc/fstab correspondiente al sistema de archivos que desea montar, agregando la bandera user a esta entrada. Los usuarios sin privilegios podrían montarlo.

Ver man mount para más detalles.


Aquí está la wiki para configurar polkit reglas para udisks/udisks2 para montar particiones por grupo no raíz (por ejemplo, usuarios).

Guarde el código siguiente en /etc/polkit-1/rules.d/50-udisks.rules

polkit.addRule(function(action, subject) {
  var YES = polkit.Result.YES;
  var permission = {
    // only required for udisks1:
    "org.freedesktop.udisks.filesystem-mount": YES,
    "org.freedesktop.udisks.filesystem-mount-system-internal": YES,
    "org.freedesktop.udisks.luks-unlock": YES,
    "org.freedesktop.udisks.drive-eject": YES,
    "org.freedesktop.udisks.drive-detach": YES,
    // only required for udisks2:
    "org.freedesktop.udisks2.filesystem-mount": YES,
    "org.freedesktop.udisks2.filesystem-mount-system": YES,
    "org.freedesktop.udisks2.encrypted-unlock": YES,
    "org.freedesktop.udisks2.eject-media": YES,
    "org.freedesktop.udisks2.power-off-drive": YES,
    // required for udisks2 if using udiskie from another seat (e.g. systemd):
    "org.freedesktop.udisks2.filesystem-mount-other-seat": YES,
    "org.freedesktop.udisks2.encrypted-unlock-other-seat": YES,
    "org.freedesktop.udisks2.eject-media-other-seat": YES,
    "org.freedesktop.udisks2.power-off-drive-other-seat": YES
  };
  if (subject.isInGroup("users")) {
    return permission[action.id];
  }
});

Suponga que está en el grupo de "usuarios", usando el siguiente comando para montar una partición (no es necesario sudo).

# udisks2
udisksctl mount --block-device /dev/sda1

# udisks
udisks --mount /dev/sda1

Linux
  1. Cómo cifrar un solo sistema de archivos Linux

  2. ¿Cómo canalizar comandos a cualquier terminal?

  3. Linux:¿cómo montar un sistema de archivos remoto especificando un número de puerto?

  4. Cómo montar y desmontar sistemas de archivos/particiones en Linux (ejemplos de comandos de montaje/desmontaje)

  5. Cómo montar automáticamente un sistema de archivos usando Systemd

Cómo montar un recurso compartido NFS en Linux

Cómo montar un archivo ISO en Linux

Cómo montar un sistema de archivos Linux remoto usando SSHFS

Cómo montar NFS en Debian 11

¿Cómo montar un sistema de archivos NTFS, permitiendo a todos los usuarios acceso completo?

¿Cómo hacer pruebas del sistema de archivos?