CodeGym /Cursos /Docker SELF /Gestión de permisos de acceso con ACL (`setfacl`, `getfac...

Gestión de permisos de acceso con ACL (`setfacl`, `getfacl`)

Docker SELF
Nivel 5 , Lección 3
Disponible

Gestión de permisos de acceso con ACL setfacl, getfacl

1. Introducción a ACL

Imagínate que eres el organizador de una fiesta (o el administrador del sistema). Quieres que los invitados puedan entrar a ciertas habitaciones, y a otras, solo con tu permiso. Los permisos básicos de acceso en Linux rwx te permiten gestionar el acceso solo para tres categorías: el propietario (user), el grupo (group) y todos los demás (others). Pero, ¿y si necesitas dar acceso a una habitación solo a un amigo especial? El guardián del modelo estándar de permisos te dirá: "Oye, eso no se puede hacer así". Aquí es donde ACL entra en acción para echarte una mano.

ACL (Access Control Lists) resuelve el problema de la limitación del clásico sistema de permisos de tres niveles, permitiendo definir derechos de acceso para usuarios y grupos específicos.

Características principales de ACL:

  1. Configurar permisos individuales en archivos y directorios para usuarios y grupos específicos.
  2. Herencia de permisos para nuevos archivos dentro de un directorio.
  3. Configuración más flexible que el enfoque tradicional con chmod.

2. ¿Cómo saber si están activadas las ACL?

Antes de empezar a gestionar las ACL, vamos a averiguar si tu sistema las soporta. Puedes comprobarlo con el comando:

mount | grep acl

Si el sistema de archivos fue montado con la opción acl, ¡estás listo para empezar! De lo contrario, será necesario volver a montar la partición agregando acl:

sudo mount -o remount,acl /your/mount/point

¡Eso es todo, ahora estás listo para la acción! Es hora de sumergirse en la práctica.


3. Comandos principales para trabajar con ACL

Comando Descripción
getfacl Obtener la lista actual de ACL para un archivo o directorio.
setfacl Configurar o modificar los ACL para un archivo o directorio.
setfacl -m Modificar los permisos actuales.
setfacl -x Eliminar permisos específicos.
setfacl -b Eliminar todas las entradas de ACL para un archivo o directorio.
setfacl -d Establecer permisos predeterminados para un directorio que se heredan por los archivos.

¡Ahora vamos a entender cada uno de estos comandos con ejemplos!


Obtener los ACL actuales getfacl

Supongamos que tenemos un archivo llamado example.txt. Queremos ver los permisos actuales utilizando ACL. Para esto basta un solo comando:

getfacl example.txt

El resultado aproximado será algo así:

# file: example.txt
# owner: user1
# group: group1
user::rw-
group::r--
other::---

Esta lista muestra los permisos estándar: el propietario user1 puede leer y escribir, el grupo group1 solo puede leer, y otros usuarios no tienen acceso en absoluto.


Configuración de permisos individuales (setfacl)

Ahora imaginemos que el usuario user2 necesita permiso para escribir en el archivo example.txt. Esto se puede hacer así:

sudo setfacl -m u:user2:rw example.txt

El comando significa:

  • -m: modificación de permisos.
  • u:user2:rw: añadir o modificar permisos para el usuario user2 (lectura-escritura).

Verifiquemos el resultado:

getfacl example.txt

Ahora el resultado se ve así:

# file: example.txt
# owner: user1
# group: group1
user::rw-
user:user2:rw  # ¡Regla adicional!
group::r--
other::---

Eliminar permisos individuales setfacl -x

Si decides que el usuario user2 ya no debe tener permiso para escribir, los permisos se pueden eliminar:

sudo setfacl -x u:user2 example.txt

Verifiquemos:

getfacl example.txt

¡Ya no hay reglas adicionales para user2!


Configuración de permisos para grupos

Los permisos a través de ACL se pueden establecer no solo para usuarios individuales, sino también para grupos enteros. Por ejemplo, para dar al grupo devteam acceso de lectura y escritura, ejecuta:

sudo setfacl -m g:devteam:rw example.txt

Configuración de permisos predeterminados setfacl -d

A menudo es necesario establecer permisos automáticamente para todos los nuevos archivos y directorios dentro de un directorio específico. Por ejemplo, quieres que todos los archivos en el directorio project_dir tengan permiso de escritura para el usuario developer. En este caso:

sudo setfacl -d -m u:developer:rw project_dir

Para verificar los permisos:

getfacl project_dir

Ahora para todos los nuevos archivos y subdirectorios en project_dir se aplicará esta regla predeterminada.


Eliminar todos los ACL setfacl -b

Si quieres limpiar completamente todos los ACL de un archivo:

sudo setfacl -b example.txt

El archivo volverá al modelo estándar de permisos user:group:others.


4. Uso práctico de ACL

Escenario: Trabajo colaborativo en un proyecto

Supongamos que tienes un proyecto almacenado en el directorio /project. En él trabajan tres personas:

  • Alice debe tener acceso completo (lectura, escritura, ejecución).
  • Bob solo debe poder leer los archivos.
  • Eve no debe poder ver el directorio en absoluto.

Configuramos esto usando ACL:

  1. Dar a Alice acceso completo:

    sudo setfacl -m u:alice:rwx /project
    
  2. Dar a Bob acceso solo a lectura:

    sudo setfacl -m u:bob:r-- /project
    
  3. Para Eve no hacemos nada: no tendrá acceso por defecto.

Veamos la lista actual de ACL:

getfacl /project

Salida:

# file: /project
# owner: root
# group: root
user::rwx
user:alice:rwx
user:bob:r--
group::---
other::---

Ahora Alice puede trabajar sin restricciones, Bob solo puede visualizar los archivos, y Eve queda fuera.


5. Errores potenciales y sus soluciones

  1. Los ACL no funcionan aunque los configuraste. Es posible que la partición no esté montada con la opción acl. Usa mount para verificar y vuelve a montarla si es necesario.

  2. Conflicto entre permisos estándar y ACL. ACL siempre tiene prioridad sobre los permisos estándar. Por ejemplo, incluso si "otros" tienen denegada la lectura, ACL puede permitir el acceso a un usuario específico.

  3. Olvidar los ACL heredados. Si configuraste permisos -d (default), verifica si estas reglas se heredaron en los archivos nuevos.

¿Por qué es importante?

Gestionar permisos a través de ACL te permite configurar el acceso de forma flexible para diferentes usuarios y grupos. Esto es especialmente útil en servidores de trabajo, donde se requiere una distribución de permisos teniendo en cuenta las roles. Por ejemplo, en empresas, las ACL se utilizan para restringir el acceso sólo a quienes "están al tanto": una de las claves de la seguridad.

Adicionalmente, puedes consultar la guía oficial de ACL para entender aún mejor sus capacidades.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION