El comando Setfacl en Linux

“Este tutorial explica cómo usar el comando setfacl para definir los permisos de ACL (Lista de control de acceso).

Las Listas de Control de Acceso (ACL) nos permiten gestionar permisos con opciones adicionales a las que ofrecen los permisos POSIX (Permisos comunes que gestionamos con el comando chmod ).

Al leer este tutorial, aprenderá las opciones más importantes relacionadas con setfacl .

Este documento está optimizado tanto para usuarios que buscan instrucciones rápidas para implementar como para usuarios que no están familiarizados con ACL, quienes pueden encontrar todo el contenido teórico necesario para comprenderlo después de la sección práctica. También agregué una tabla que resume las opciones del comando setfacl que se describen a continuación.

Todos los ejemplos incluidos en este artículo contienen capturas de pantalla, lo que facilita que todos los usuarios de Linux los entiendan”.

Las opciones del comando Setfacl

Antes de comenzar con el comando setfacl , verifiquemos los permisos actuales del archivo llamado <file1> . Para verificar los permisos actuales de ACL, ejecute el comando getfacl usando la siguiente sintaxis:

getfacl < archivo >

En mi caso, ejecuto el comando que se muestra en la captura de pantalla a continuación.

obtener archivo facl1

Como puede ver en la captura de pantalla anterior, el archivo tiene permisos POSIX estándar para el propietario llamado linuxhint (lectura y escritura), para el grupo linuxhint (lectura) y para otros (lectura). El usuario y el grupo son linuxhint .

Estos son los permisos que aplicamos mediante el comando chmod , que nos permite definir permisos para el propietario, el grupo y otros.

Ahora digamos que queremos agregar permisos personalizados para otro usuario específico usando los permisos extendidos de ACL.

En el siguiente ejemplo, otorgaré permisos de lectura, escritura y ejecución sobre el mismo archivo al usuario linuxhint2 . Luego, ejecuto getfacl nuevamente para verificar los cambios.

setfacl -m u:linuxhint2:rwx archivo1

Donde:

  • setfacl : Invoca el programa para administrar los permisos.
  • -m : esta bandera se usa para modificar permisos.
  • u:linuxhint2:rwx : especifica el usuario linuxhint2 (u:linuxhint2) y le otorga permisos de lectura, escritura y ejecución (:rwx).
  • file1 : el archivo de destino al que se modifican/aplican los permisos.

NOTA : Como puede ver en la captura de pantalla anterior, además de los permisos normales, podemos ver que se agregó un nuevo usuario ( linuxhint2 ) con permisos personalizados y una nueva línea llamada máscara ; esto se explicará más adelante.

Pero ahora, supongamos que queremos otorgar permisos a un grupo diferente en lugar de a un usuario diferente. La sintaxis es casi la misma, excepto por la opción u :, que debe ser reemplazada por g : como mostré en la siguiente figura, donde al grupo linuxhint3 se le otorgan permisos de lectura y escritura. Luego ejecuto getfacl para verificar las modificaciones.

setfacl -m g:linuxhint3:rw archivo1

Como puede ver, se agregó un nuevo grupo ( linuxhint3 ) con permisos de lectura y escritura.

Ahora expliquemos la línea de máscara que apareció después de que solicitamos permisos extendidos de ACL.

La máscara permite sobrescribir permisos para usuarios, grupos u otros, excepto el propietario. Si la máscara es r , los usuarios, grupos y otros (Todos excepto el propietario) con permisos previos de escritura o ejecución efectivos los perderán. El límite de máscaras afecta a todos los usuarios excepto al propietario. Es una función para sobrescribir los permisos existentes, limitándolos o aumentándolos.

Para modificar la máscara, no necesita especificar usuarios o grupos; simplemente especifique la máscara seguida de los permisos usando m:<Permisos> como se muestra en el siguiente ejemplo.

setfacl -m m:r archivo1

Como puede ver, después de configurar una máscara con un límite de lectura, el usuario linuxhint2 , que anteriormente tenía permisos de lectura, escritura y ejecución, y el grupo linuxhint3 , que tenía permisos de lectura y escritura, ahora solo tienen permiso efectivo de lectura. El límite de lectura de la máscara sobrescribió sus permisos anteriores. Solo los permisos del propietario permanecen intactos.

Pero si la máscara está configurada para leer permisos, y usted le otorga a un usuario, grupo u otros más que permisos de lectura, la máscara se modificará automáticamente, aumentando su límite de acuerdo con los nuevos permisos otorgados. De forma predeterminada, el límite de la máscara no puede ser inferior a los permisos otorgados existentes a otros que no sean el propietario (veremos cómo evitar esto más adelante).

Esto significa que si la máscara se establece en r (Lectura) y le otorgo a un usuario permisos adicionales de escritura y ejecución (rwx), la máscara se convertirá en rwx .

Primero, veamos nuestro escenario actual, donde la máscara es r– (solo permiso de lectura).

Ahora, veamos qué sucede si agrego permisos de ejecución y escritura para el usuario linuxhint2 , que actualmente solo tiene permisos de lectura efectivos (como todos, excepto el propietario).

setfacl -m u:linuxhint2:rwx archivo1

Como puede ver, no solo se actualizaron los permisos de usuario de linuxhint2 , sino también la máscara. Esto se debe a que, por defecto, la máscara representa un límite, y si el límite es superado por un nuevo pedido, aumenta.

Puede tener permisos de máscara específicos y otorgar permisos adicionales a un usuario, grupo u otros específicos sin modificar la máscara implementando el indicador -n.

El indicador -n indica a ACL que mantenga la máscara sin cambios, incluso si algunos permisos la superan.

Veamos el nuevo escenario, donde la máscara se establece en r–

En el siguiente ejemplo, el usuario linuxhint2 recibe permisos de escritura y ejecución, pero se implementa el indicador -n para evitar que se cambie la máscara.

Como puede ver a continuación, al usuario de linuxhint2 se le otorgaron derechos de escritura y ejecución, pero la máscara permanece sin cambios según las instrucciones del indicador -n .

setfacl -n -m u:linuxhint2:wx archivo1

El indicador -d se usa para definir permisos predeterminados para el contenido de un directorio. Esta bandera no afecta los permisos del directorio sino solo el contenido, incluidos los archivos y subdirectorios.

Esta bandera puede ser útil, por ejemplo, para crear permisos predeterminados para un usuario o grupo específico sobre el contenido del directorio. Cuando se crean nuevos archivos dentro de ese directorio, los usuarios o grupos definidos obtienen sus permisos definidos por defecto.

En el escenario actual, hay un directorio con los siguientes permisos.

En el ejemplo a continuación, Otros (todos los usuarios que no son propietarios o grupos) recibirán permisos de lectura predeterminados para el contenido del directorio llamado » directorio «.

setfacl -d -m o:r directorio

Como puede ver en la captura de pantalla anterior, los permisos predeterminados para el usuario y el grupo se mantienen, mientras que los permisos predeterminados para Otro se cambiaron a solo lectura. Ahora, si se crean nuevos archivos y subdirectorios en el » directorio «, Otros tendrán permisos de lectura por defecto.

El indicador -R le permite aplicar reglas de ACL de forma recursiva. Cuando se implementa -R , los permisos definidos afectarán el directorio especificado y todos sus archivos y subdirectorios. Este indicador está presente en muchos comandos de Linux para tareas recursivas.

El siguiente comando otorga otros permisos de lectura y escritura para el directorio 1 de forma recursiva.

setfacl -R -m o:rw directorio1

ACL le permite hacer una copia de seguridad de los permisos para restaurarlos más tarde.

En la siguiente imagen, el comando getfacl se usa para hacer una copia de seguridad recursiva del » directorio » en un archivo llamado » aclpermissions.txt». ”

getfacl -R directorio > aclpermissions.txt

Para restaurar la copia de seguridad, use la opción –restore seguida de = <BackUpName>

En mi caso:

setfacl –restore =aclpermissions.txt

También puede usar el comando setfacl para copiar los permisos de un archivo a otro.

El escenario actual para el inventario de archivos es el siguiente:

En el siguiente ejemplo, copio los permisos del archivo 1 a un archivo llamado » inventario «.

getfacl archivo1 | setfacl –set-file =- inventario

¿Qué es una ACL (Lista de control de acceso)?

Una ACL es un sistema de permisos nativo de Windows para administrar el acceso a recursos como archivos, directorios, particiones, etc. Este sistema se basa en objetos para los cuales se definen permisos para usuarios, grupos y otros, incluso individualmente, como se muestra arriba.

Los permisos se adjuntan al archivo, directorio o sistema de archivos definido, lo que define el acceso para el propietario, los usuarios, los grupos u otros.

Diferencia entre ACL y permiso POSIX

Mientras que con los permisos POSIX, los usuarios pueden administrar los permisos para el Propietario, el Grupo y Otros, ACL permite la administración de permisos personalizados para todos, incluidos los usuarios y los grupos.

Además, ACL implementa nuevos tipos de permisos, como los permisos predeterminados que se explican en este tutorial.

Esto brinda una flexibilidad que no podemos disfrutar con los permisos POSIX normales. Sin embargo, como puede ver, ambos funcionan en combinación, y su combinación brinda una estructura de permisos sólida.

El comando setfacl se usa para establecer permisos de ACL para archivos, directorios y sistemas de archivos.
Esto se usa para especificar archivos, directorios, usuarios, grupos u otros con los permisos deseados cuando se necesita romper los límites de POSIX. El propietario del recurso y los procesos con CAP_FOWNER tienen derecho a modificar los permisos de las ACL.

La siguiente tabla resume algunas opciones de ACL

OPCIONES
FUNCIÓN

-metro
Modificar LCA

-X
Eliminar todo ACLEliminar ACL

-b
Quitar todas las LCA

-k
Eliminar permisos predeterminados

-R
Aplica ACL recursivamente

-L
Sigue enlaces simbólicos

-PAG
No sigue enlaces simbólicos

metro:
Definir máscara

–restaurar=
Restaura ACL desde un archivo de copia de seguridad creado con getfacl -R

-prueba
No aplica cambios pero muestra el resultado

-norte
No afecte la máscara.

Puede encontrar mucha más información sobre ACL y el comando setfacl en https://linux.die.net/man/5/acl y https://linux.die.net/man/1/setfacl .

Conclusión

Como puede ver, ACL permite a los usuarios personalizar los permisos sobre los límites del sistema de permisos POSIX. Esto es extremadamente útil cuando los recursos deben compartirse con tipos de acceso específicos. Como puede ver, ACL es fácil de entender e implementar y cualquier usuario de Linux puede aprenderlo independientemente de su nivel de conocimiento. La ACL es una excepción histórica en la que Linux importó una característica de Windows. Puede obtener información adicional sobre ACL en la página del manual.

Gracias por leer este tutorial que explica cómo usar el comando setfacl en Linux. Siga nuestro blog para obtener más contenido profesional de Linux.