Ir al contenido principal

Listas de acceso (ACL) en GNU/Linux


Introducción
El presente artículo muestra las posibilidades del modelo de permisos basado en listas de control de acceso o ACLs. Sobre todo debido a que el modelo de permiso de accesos UGO (User, Group, Others) tradicional de GNU/Linux es bastante limitado. Una de las características que se echan en falta en los sistemas GNU/Linux actuales, especialmente en entornos corporativos, es la posibilidad de especificar los permisos de acceso a los ficheros con mayor granularidad que en el sistema tradicional.

Hay un dato que se suele desconocer sin embargo y es que el sistema de ficheros ext2, desde su diseño original, previó la inclusión de este tipo de sistemas de control de acceso y estaban incluidos los enganches (hooks) necesarios para su implementación posterior, de forma 100% transparente y compatible hacia atrás.

Listas de control de acceso (ACL)
  1. Es un estándar Posix que extiende las posibilidades de los permisos admitiendo permisos específicos para usuarios/grupos sobre objetos concretos. 
  2. En GNU/Linux está disponible en ext2/ext3/xfs/jfs/Reiserfs... 
  3. Cada fichero/directorio tiene asociado una lista ACL compuesta por una serie de entradas (Access Control Entry, ACE). Cada ACE define un par (usuario/grupo, permiso).
Prerrequisitos
  • El sistema de ficheros tiene que estar montado con la opción acl:
$sudo mount -o remount,acl /
  • Instalación de las utilidades para la gestión de las listas de acceso:
$sudo apt-get install acl
  • Configurar el fstab para que el sistema de ficheros soporte las ACLs:
    • Editar el fichero y buscar la línea correspondiente a (raíz) o al sistema de ficheros que le vamos a aplicar las ACLs.
    • Añadir acl, (ojo con la coma, es obligatoria) justo antes de donde pone errors=remount, pegadito y sin espacios, es decir, al inicio de la sección de opciones.
    • Realizar el montaje del sistema de ficheros:
      $sudo mount -a
Buscar el programa a restringir
Hay veces que no sabemos el nombre del programa al que queremos aplicarle las ACL. La mejor opción de que disponemos es ejecutar el programa y, a continuación, ver que se está ejecutando por ese usuario:
$sudo ps -ef | grep "nombre_usuario"
En la lista buscaremos el programa, casi siempre estará en último lugar, si no es lo último que se ha ejecutado.

Restringir los permisos
Establecer los permisos al fichero /usr/bin/gnome-control-center, por ejemplo. Tienes que ser root, no te vale con el sudo.
  • Quitar acls anteriores:
    setfacl -b -k -R /usr/bin/gnome-control-center
  • Permiso de solo lectura para el usuario que especifiques:
    setfacl -m u:nombre_usuario:r /usr/bin/gnome-control-center
  • Ver los permisos poniendo: 
    getfacl /usr/bin/gnome-control-center
Problemas
  • Si por alguna razón el sistema da el mensaje: setfacl: /usr/bin/gnome-control-center: La operación no está soportada, hay que comprobar si el sistema de ficheros se montó correctamente con la opción acl. Ejecutamos el comando mount para ver los sistemas de archivos montados:
    #mount
    Este comando debe mostrar las opciones de montado de los sistemas de ficheros, algo así como:
    
    /dev/sda1 on / type ext4 (rw,acl,errors=remount-ro)
    proc on /proc type proc (rw,noexec,nosuid,nodev)
    none on /sys type sysfs (rw,noexec,nosuid,nodev)
    fusectl on /sys/fs/fuse/connections type fusectl (rw)
    none on /sys/kernel/debug type debugfs (rw)
    none on /sys/kernel/security type securityfs (rw)
    none on /dev type devtmpfs (rw,mode=0755)
    none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
    none on /dev/shm type tmpfs (rw,nosuid,nodev)
    none on /var/run type tmpfs (rw,nosuid,mode=0755)
    none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
    binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
    
    Vemos que la partición raíz ha sido montada con opciones para las acl. En el caso de que no aparezca con esas opciones habría que ejecutar el comando mount -o, tal y como se explicó más arriba, para que se vuelva a montar y así el comando setfacl no de error.

El uso de las ACLs en GNU/Linux puede sernos de gran utilidad. Recomiendo, como siempre, consultar las páginas del manual para ver una referencia completa de cada comando utilizado en este artículo. Las acciones llevadas a cabo en este artículo han sido probadas en sistemas con la distribución de Ubuntu 10.10, 11.04, 11.10 instaladas. 

Comentarios

Entradas populares de este blog

Añadir disco en caliente a un Ubuntu virtualizado

  En este artículo vamos a explicar cómo aumentar un volumen de discos en una máquina virtual. Pongamos por caso que tenemos un servidor que se nos ha quedado corto de espacio en disco y que no podemos parar. La solución es añadir un nuevo disco virtual a nuestra máquina y, con ese espacio añadido, extender el volumen de discos.  En principio, este es un proceso en el que no hay pérdida de datos. Sin embargo, es conveniente que exista una copia de seguridad antes de llevarlo a cabo como precaución. He de decir que yo lo he hecho en un par de ocasiones y no ha habido problemas con la máquina virtual ni con los datos. De hecho, los usuarios ni se enteraron de que se amplió el espacio en disco. Consideraciones iniciales En primer lugar, este es un proceso que sólo se puede llevar a cabo en una máquina virtual. Para añadir un disco nuevo en una máquina física hay que pararla y, por lo tanto, no se puede añadir en caliente. Cierto es que la parte de extender el volumen sí que se realiza igu

Atom ha muerto, viva Zed

El día 8 de junio de 2022, Microsoft anunció que a partir del día 31 de diciembre de este mismo año dejaría de dar soporte para el editor de código Atom .  ¿En qué nos afecta esto a nosotros? Bueno, pues si me han seguido en artículos anteriores saben que tras una comparativa de varios IDEs había decidido utilizar Atom para los ejemplos que tuviera que hacer en este blog. Sobre todo los artículos que prepararé para ilustrar el uso de Laravel . Amén de los miles de programadores que actualmente usan Atom  en sus proyectos, claro. Pero, ¿qué editor de código abierto podremos utilizar para sustituir a Atom ? En el mismo comunicado, Microsoft explicaba que el abandono del proyecto Atom  se debía a que querían volcar todos sus esfuerzos en el Visual Studio Code y, por supuesto, recomendó a los usuarios de Atom la utilización del mismo como alternativa natural. No quiero entrar en las bondades o defectos del Visual Studio Code  si quieres elegirlo como tu IDE para desarrollo predeterm

Zed: ahora un editor de código de código abierto

  Zed: ahora un editor de código de código abierto Introducción Como ya les comenté en un artículo anterior  Atom ha muerto, viva ZED , Microsoft dejó de dar soporte para el editor de código Atom en el año 2022 en beneficio del Visual Studio Code . En aquel artículo les comentaba que para mi el sucesor de Atom era Zed pues era un editor que se estaba creando por el mismo grupo de trabajo que creó el Atom . Además de que parecía que iba a seguir con la misma filosofía con la que nació  Atom . El editor Zed, una descripción de sus características Zed es un editor de código desarrollado en Rust que, como deberíamos saber, es un lenguaje de programación de sistemas que se enfoca en la seguridad, el rendimiento y la concurrencia. Pues, como decíamos, Zed acaba de dar el salto a ser de código abierto bajo la licencia GPL v3 . Este cambio no solo representa una nueva era para Zed , sino que también nos dirige a un nuevo mundo de colaboración y desarrollo en el ámbito de la programación.