Este tutorial detalla las listas de control de acceso en Linux, para qué se utilizan y cómo gestionarlas.

Como administrador del sistema, es probable que pases bastante tiempo configurando los permisos para los usuarios y grupos de tu sistema.

Los permisos de archivos ya son bastante prácticos para dar permisos de lectura, escritura o ejecución a directorios o archivos.

¿Pero qué pasa si necesitamos una forma más precisa de dar permisos a carpetas o archivos?

¿Qué pasa si quiero dar acceso a un archivo a un usuario específico o a un grupo específico, que no es el propietario actual del archivo?

Esto es exactamente lo que resuelven las listas de control de acceso, también abreviadas ACL, en un sistema Linux.

En el tutorial de hoy, estamos echando un vistazo muy de cerca a las listas de control de acceso, qué son y cómo se utilizan para configurar un sistema Linux correctamente.

¿Listo?

Tabla de contenidos

Lo que aprenderás

Si sigues este tutorial hasta el final, vas a aprender sobre los siguientes temas:

  • Qué son las listas de control de acceso y cómo se pueden leer desde el comando ls;
  • Cómo establecer los permisos básicos en un archivo utilizando el comando setfacl:
  • Cómo leer las listas de control de acceso utilizando el comando getfacl;
  • Qué es la máscara de la lista de control de acceso y cómo debe leerse;
  • Qué son los valores por defecto de las listas de control de acceso y cómo pueden utilizarse de forma efectiva

Ese es un programa bastante largo, así que sin más preámbulos, vamos a empezar con una definición rápida de lo que son las listas de control de acceso.

Las Listas de Control de Acceso Básicas en Linux

En Linux, hay dos maneras de establecer los permisos para los usuarios y grupos : con los permisos de archivos regulares o con las listas de control de acceso.

Definición de las Listas de Control de Acceso

Las listas de control de acceso se utilizan en los sistemas de archivos de Linux para establecer permisos personalizados en archivos y carpetas. Las ACL permiten a los propietarios de los archivos o a los usuarios privilegiados conceder derechos a usuarios específicos o a grupos específicos.

En Linux, como probablemente sepas, los permisos se dividen en tres categorías : una para el propietario del fichero, otra para el grupo y otra para los demás.

Sin embargo, en algunos casos, es posible que quieras conceder acceso a un directorio (el permiso de ejecución, por ejemplo) a un usuario concreto sin tener que meter a este usuario en el grupo del fichero.

Este es exactamente el motivo por el que se inventaron las listas de control de acceso en primer lugar.

Las listas de control de acceso

En Linux, las listas de control de acceso no se habilitan cuando se crea un nuevo archivo o directorio en el host (excepto si un directorio padre tiene algunas ACL predefinidas).

Para ver si las listas de control de acceso están definidas para un archivo o directorio, ejecute el comando ls y busque un carácter «+» al final de la línea de permiso.

$ ls -l

Para mostrar la diferencia, aquí está la diferencia al listar archivos en una instancia mínima.

Ahora que tienes algunos fundamentos sobre las listas de control de acceso, vamos a ver cómo puedes empezar a crear ACL básicas para tus archivos y directorios.

Creando listas de control de acceso en Linux

Antes de empezar con los comandos ACL, es importante tener los paquetes instalados en tu host.

Comprobando la instalación de los paquetes ACL

Puede que no sea el caso si se opta por tener un servidor mínimo en funcionamiento.

Comienza comprobando la ayuda relacionada con el setfacl ejecutando el siguiente comando

$ setfacl --help

Si tu host no encuentra el comando setfacl, asegúrate de haber instalado los paquetes necesarios para la gestión de ACL.

$ sudo apt-get install acl -y

Tenga en cuenta que necesitará privilegios sudo en Debian 10 para ejecutar este comando.

Ejecute el comando setfacl y asegúrese de que esta vez puede ver los comandos de ayuda.

Ahora que su host está correctamente configurado, veamos cómo funciona el comando setfacl.

Configuración de listas de control de acceso usando setfacl

Con las listas de control de acceso, hay dos comandos principales que necesitas recordar : setfacl y getfacl.

En este capítulo, vamos a echar un vistazo al comando setfacl ya que el getfacl es bastante auto-explicativo.

El comando setfacl se utiliza en Linux para crear, modificar y eliminar listas de control de acceso en un archivo o directorio.

El setfacl tiene la siguiente sintaxis

$ setfacl {-m, -x} {u, g}:<name>: <file, directory>

Donde los corchetes significan una de las siguientes opciones y los corchetes regulares significan uno o varios elementos.

  • -m : significa que desea modificar una o varias entradas de ACL en el archivo o directorio.
  • -x : significa que desea eliminar una o varias entradas de ACL en un archivo o directorio.
  • {u, g} : si desea modificar la ACL para un usuario o para un grupo.
  • nombre : es un parámetro opcional, puede omitirse si desea establecer las entradas de la ACL para cada usuario o para cada grupo en su host.
  • : para establecer los permisos de lectura, escritura o ejecución en el archivo o directorio.

Por ejemplo, para establecer permisos de escritura específicos para un usuario en un archivo, escribirías el siguiente comando

$ setfacl -m u:user:w <file, directory>

Para establecer permisos de ejecución para todos los usuarios de tu host, escribirías el siguiente comando

$ setfacl -m u::x <file, directory>

Para establecer permisos completos para un grupo específico en tu host, escribirías el setfacl de esta manera

$ setfacl -m g:group:rwx <file, directory>

Ahora digamos que quieres eliminar una entrada ACL de un archivo.

Para eliminar una entrada específica de un usuario de un archivo, se especificaría la opción x.

Nota : no se puede especificar los derechos de una sola entrada ACL, lo que significa que no se pueden eliminar los permisos de escritura, manteniendo los permisos de lectura de la ACL activos.

$ setfacl -x u:<user> <file, directory>

De forma similar, para eliminar las ACL relacionadas con grupos en tu host, escribirías el siguiente comando

$ setfacl -x g:<group> <file, directory>

Ahora que has visto cómo puedes crear listas de control de acceso fácilmente en Linux, es hora de ver cómo puedes comprobar las listas de control de acceso existentes en archivos y directorios.

Listado de listas de control de acceso usando getfacl

El comando getfacl se usa en Linux para imprimir un listado completo de todos los permisos regulares y de los permisos de las listas de control de acceso en un archivo o directorio.

El getfacl se puede utilizar con la siguiente sintaxis

$ getfacl <file, directory>

El comando getfacl se divide en múltiples categorías :

  • Nombre del archivo, propietario y grupo : la información sobre la propiedad del usuario y del grupo se muestra en la parte superior;
  • Permisos de usuario : en primer lugar, se encontrarían los permisos del usuario normal, también llamado usuario propietario, seguido de cualquier entrada ACL específica del usuario (llamada usuarios con nombre)
  • Permisos de grupo : se presentan los grupos propietarios, seguidos de las entradas ACL específicas de grupo, también llamadas grupos nombrados
  • Máscara : que restringe los permisos otorgados a las entradas ACL, la máscara se detallará en la siguiente sección;
  • Otros permisos : estos permisos están siempre activos y esta es la última categoría explorada cuando ningún otro permiso coincide con el usuario o grupo actual.

Trabajando con la máscara de las listas de control de acceso

Como probablemente has visto en la última captura de pantalla, hay una entrada de máscara entre los grupos con nombre y los otros permisos.

¿Pero para qué se utiliza esta máscara?

La máscara ACL es diferente de la máscara de creación de archivos (umask) y se utiliza para restringir las entradas ACL existentes en un archivo o directorio.

La máscara ACL se utiliza como el conjunto máximo de permisos ACL sin tener en cuenta los permisos existentes que superan la máscara ACL.

Como siempre, un diagrama dice más que cien palabras.

La máscara ACL se actualiza cada vez que se ejecuta un comando setfacl a menos que se especifique que no se desea actualizar la máscara con la bandera -n.

Para evitar que la máscara se actualice, ejecute el setfacl con el siguiente comando

$ setfacl -n -m u:antoine:rwx <file, directory>

Como puede ver en este ejemplo, he configurado al usuario «antoine» para que tenga permisos completos sobre el archivo.

La máscara está configurada para restringir los permisos a los de lectura y escritura.

Como consecuencia, los «permisos efectivos» establecidos en este fichero para este usuario son los de lectura y escritura, el permiso de ejecución no está concedido.

Nota : si su conjunto máximo de permisos difiere de la entrada de la máscara, se le presentará una línea efectiva calculando el conjunto «real» de entradas ACL utilizadas.

Creación de listas de control de acceso por defecto en directorios

Como ya se ha mencionado en este artículo, es posible crear entradas ACL en directorios y funcionan de la misma manera que las listas de control de acceso a archivos.

Sin embargo, hay una pequeña diferencia cuando se trata de directorios : tienes la opción de crear listas de control de acceso por defecto.

Las listas de control de acceso por defecto se utilizan para crear entradas ACL en un directorio que serán heredadas por los objetos de este directorio como archivos o subdirectorios.

Al crear entradas ACL por defecto :

  • Los archivos creados en este directorio heredan las entradas ACL especificadas en el directorio padre
  • Los subdirectorios creados en este directorio heredan las entradas ACL así como las entradas ACL por defecto del directorio padre.

Para crear entradas ACL por defecto, especifique la opción -d cuando configure ACL utilizando el comando setfacl.

$ setfacl -d -m {u, g}:<name>: <directory>

Por ejemplo, para asignar permisos de lectura a todos los archivos creados en un directorio, se ejecutaría el siguiente comando

$ setfacl -d -m u::r directory

Ahora, cuando se crea un archivo en este directorio acl, se puede ver que las entradas ACL por defecto se aplican al archivo.

De manera similar, cuando se crea un directorio en el directorio acl, heredará las entradas ACL por defecto especificadas en el directorio padre.

Nota que se recomienda especificar los permisos por defecto para las tres categorías (usuario, grupo y otros).

De hecho, al especificar una de las tres entradas se crearán las dos restantes con permisos relacionados con la máscara de creación de archivos.

Eliminación de las listas de control de acceso por defecto en los directorios

Para eliminar las listas de control de acceso existentes por defecto en los directorios, utilice el indicador -k con el comando setfacl.

$ setfacl -k <directory>

Dado el ejemplo que hemos especificado antes, a continuación se explica cómo borrar las entradas por defecto

$ setfacl -k acl-directory

Note que borrar las entradas ACL del directorio padre no borra las entradas ACL de los archivos o directorios contenidos en el directorio padre.

Para eliminar las entradas ACL por defecto en un directorio y todos los subdirectorios, tendría que utilizar una opción recursiva (-R)

$ setfacl -kR <directory>

Conclusión

En este tutorial, ha aprendido sobre las listas de control de acceso en Linux, el comando getfacl y el setfacl.

Aprendiste más sobre la máscara de las listas de control de acceso y cómo se usan las ACL por defecto para crear entradas ACL en archivos y subdirectorios contenidos en el directorio padre.

Si tienes curiosidad por la administración de sistemas Linux, tenemos muchos más tutoriales sobre el tema, ¡asegúrate de leerlos!

Deja una respuesta

Tu dirección de correo electrónico no será publicada.