GNU/Linux >> Tutoriales Linux >  >> Linux

Una introducción a las listas de control de acceso (ACL) de Linux

Entre los desafíos de administrar Linux en el entorno empresarial moderno está la expectativa de que podemos y debemos administrar quién tiene acceso a qué información. Érase una vez, las únicas personas que necesitaban acceso a los sistemas de archivos de Linux podían clasificarse de una manera general:a través de los permisos del sistema de archivos de Linux.

Repasando los conceptos básicos

El sistema de archivos de Linux nos da tres tipos de permisos. Aquí hay una revisión simplificada:

  • T ser (o propietario del usuario)
  • G grupo (o grupo propietario)
  • O ellos (todos los demás)

Con estos permisos, podemos otorgar tres (en realidad cinco, pero hablaremos de eso en un minuto) tipos de acceso:

  • R cabeza
  • M rito
  • eX ejecutar

Estos niveles de acceso suelen ser adecuados en muchos casos. Digamos que tiene un directorio donde viven los archivos del departamento de contabilidad. Puede configurar estos permisos para:

drwxrwxr-x  2 accounting accounting  12 Jan  8 15:13

El usuario del servicio de contabilidad (el propietario del usuario) puede leer y escribir en el directorio, y los miembros de accounting grupo (o grupo propietario) puede leer y escribir. Sin embargo, otros (usuarios que no pertenecen al departamento de contabilidad) pueden ver y ejecutar lo que hay allí, lo que algunos podrían pensar que es una mala idea.

[ También popular: Conceptos básicos de administrador de sistemas de Linux:administración de cuentas de usuario]

Entonces, podríamos cambiar los permisos a esto:

drwxrwx---  2 accounting accounting  12 Jan  8 15:13 .

Nota: También puede usar permisos especiales para controlar configuraciones como quién posee realmente los nuevos archivos creados en ese directorio, así como el bit adhesivo. que controla si los miembros del grupo pueden eliminar los archivos de los demás. Sin embargo, eso está fuera del alcance de esta discusión.

Ver la ACL actual

¿Qué sucede si tiene un pasante de contabilidad (Kenny) que necesita poder leer ciertos archivos (o incluso solo los archivos que pertenecen a Fred, su gerente)? O tal vez las personas del departamento de ventas también necesiten acceso a la accounting archivos del propietario para crear facturas para el equipo de Fred con el fin de facturar a los clientes, pero no desea que el equipo de ventas vea los otros informes que genera el equipo de Fred. Esta situación puede ser complicada porque, con permisos regulares, cada archivo y directorio puede tener solo un propietario de usuario y grupo a la vez. Este tipo de situación es lo que las Listas de control de acceso (ACL) de Linux pretendían resolver.

Las ACL nos permiten aplicar un conjunto más específico de permisos a un archivo o directorio sin (necesariamente) cambiar la propiedad y los permisos básicos. Nos permiten "añadir" acceso para otros usuarios o grupos.

Podemos ver la ACL actual usando getfacl comando:

[root]# getfacl /accounting
getfacl: Removing leading '/' from absolute path names
# file: accounting
# owner: accounting
# group: accounting
user::rwx
group::rwx
other::---

Podemos ver que en este momento, no hay ACL en este directorio porque los únicos permisos enumerados son para el usuario, el grupo y otros. En este caso, eso es de esperar, porque acabo de crear este directorio en el laboratorio y no he hecho nada más que asignar la propiedad. Entonces, comencemos agregando una ACL predeterminada:

Configurar una ACL

La sintaxis para establecer una ACL se ve así:

setfacl [option] [action/specification] file

La 'acción' sería -m (modificar) o -x (eliminar), y la especificación sería el usuario o grupo seguido de los permisos que queremos establecer. En este caso, usaríamos la opción -d (predeterminado). Entonces, para establecer la ACL predeterminada para este directorio, ejecutaríamos:

[root]# setfacl -d -m accounting:rwx /accounting

Después de lo cual ahora podemos ver la información de ACL predeterminada para ese directorio:

[root]# getfacl /accounting
[root]# getfacl: Removing leading '/' from absolute path names
# file: accounting
# owner: accounting
# group: accounting
user::rwx
group::rwx
other::---
default:user::rwx
default:user:accounting:rwx
default:group::rwx
default:mask::rwx
default:other::---

¿Qué pasa si Fred crea un archivo en ese directorio?

[fred]$ touch test
[fred]$ ls -la
drwxrwx---+  2 accounting accounting  18 Jan  8 17:51 .
dr-xr-xr-x. 18 root  root  262 Jan  8 15:13 ..
-rw-rw----+  1 fred  accounting  0 Jan  8 17:51 test
[fred]$ getfacl test
# file: test
# owner: fred
# group: accounting
user::rw-
user:accounting:rwx  #effective:rw-
group::rwx  #effective:rw-

¿Qué sucede si Kenny intenta crear un archivo? Es posible que puedas adivinarlo porque kenny no está en la accounting grupo, no tendrá permiso. Pero queremos que Kenny tenga una buena experiencia trabajando con nosotros, por lo que debemos darle la capacidad de ver qué archivos hay en la accounting. directorio, y queremos que pueda crear nuevos archivos:

[root@lab1 accounting]setfacl -m kenny:rwx /accounting
[root]getfacl ./
# file: .
# owner: accounting
# group: accounting
user::rwx
user:kenny:rwx

Hasta aquí todo bien. Pero, ¿y si no queremos que este usuario cree archivos en la accounting? ¿directorio? En su lugar, solo queremos dejarle leer los archivos allí, y puede crear nuevos archivos en su propia carpeta.

[ Artículo relacionado: Conceptos básicos de administrador de sistemas de Linux:administración de cuentas de usuario con UID y GID]

Podemos configurar el acceso de Kenny en accounting carpeta como esta:

[root@lab1 accounting]# setfacl -m kenny:r-x /accounting
[root]# getfacl ./
# file: .
# owner: accounting
# group: accounting
user::rwx
User:kenny:r-x

Ahora hacemos de Kenny su propia carpeta, le damos propiedad y luego hacemos la accounting agrupar al propietario del grupo para que otras personas en el accounting el grupo puede ver lo que hay allí:

[root@lab1 accounting]# mkdir ./kenny
[root]# chown kenny:accounting ./kenny
[root]# getfacl ./kenny
# file: kenny
# owner: kenny
# group: accounting
user::rwx
user:accounting:rwx
group::rwx

Has creado una carpeta dentro de la accounting grupo que es propiedad del usuario kenny . Ahora puede ver la carpeta de contabilidad, pero solo crea archivos en su propia carpeta:

[root@lab1 accounting]# su kenny
[kenny]$ touch test
touch: cannot touch ‘test’: Permission denied
[kenny]$ cd ./kenny
[kenny]$ touch test
[kenny]$ ls
test

Tenga en cuenta que debido a que la carpeta es propiedad de accounting grupo, cualquiera en ese grupo puede poner archivos allí. Debido a que estamos tratando con un interno, este factor probablemente esté bien. Sin embargo, ¿qué pasa si le damos a Kenny un ascenso a auditor jefe y queremos mantener su trabajo en secreto de Fred?

[root]# setfacl -m fred:- ./kenny
[root]# getfacl ./kenny
# file: kenny
# owner: kenny
# group: accounting
user::rwx
user:accounting:---
user:fred:---

¿Qué pasa si no queremos a nadie para ver en qué está trabajando Kenny?

[root]# setfacl -m g:accounting:- ./kenny

Nota: Cuando queremos configurar un grupo ACL, necesitamos especificar esto poniendo g: delante del nombre del grupo. Para los usuarios, simplemente cambie el g a una u , pero setfacl asumirá que estamos hablando de un usuario si no coloca nada en ese lugar.

Todavía tenemos que eliminar los permisos básicos para el propietario del grupo para que el resto del equipo de contabilidad no pueda husmear en los informes de Kenny:

[root]# chmod g-rwx ./kenny
[root]# ls -al
total 0
drwxrwx-wx+  3 accounting accounting  44 Jan  9 16:38 .
dr-xr-xr-x. 18 root       root       262 Jan  8 15:13 ..
drwx------+  2 kenny      accounting  18 Jan  9 17:07 kenny
-rw-rw----+  1 root       root         0 Jan  9 16:33 test
-rw-rw----+  1 kenny      accounting   0 Jan  9 16:27 test2
[root]# getfacl ./kenny
# file: kenny
# owner: kenny
# group: accounting
user::rwx
user:accounting:---
user:fred:---
group::rwx  #effective:---
[root]# su jan
[jan]$ touch ./kenny/test
touch: cannot touch ‘./kenny/test’: Permission denied

Ahora podemos administrar quién más puede ver o escribir en la carpeta de Kenny sin cambiar la propiedad. Démosle al CEO (Lisa, que no es miembro del equipo de contabilidad y no tendrá acceso al resto de la carpeta) acceso a las cosas de Kenny:

[root@lab1 accounting]# useradd lisa
[root]# setfacl -m u:lisa:rwx ./kenny
[root]# su lisa
[lisa]$ touch ./kenny/lisa
[lisa]$ ls ./kenny
lisa  test
[lisa]$ touch test
touch: cannot touch ‘test’: Permission denied
[root]# getfacl ./kenny
# file: kenny
# owner: kenny
# group: accounting
user::rwx
user:accounting:---
user:fred:---
user:lisa:rwx
group::rwx
group:accounting:---

Tenga en cuenta nuevamente que los permisos del propietario del grupo permanecen abiertos, pero el grupo de contabilidad (que sigue siendo el propietario) ya no tiene acceso a esa carpeta. Entonces, ¿quién es el dueño?

drwxrwx---+  2 kenny  accounting  30 Jan  9 17:16 kenny

Esta parte es complicada. Es útil saber que podemos retirar los permisos del propietario sin cambiar la propiedad, pero es posible que desee considerar si este es el resultado que desea.

Conclusión

Así que estos son los conceptos básicos. Las ACL pueden ser confusas, por lo que le animo a proporcionar las páginas man para setfacl y getfacl una buena lectura Hay muchas más cosas interesantes y útiles que puede hacer con estas herramientas, pero espero que ahora comprenda lo suficiente para comenzar.

[ ¿Quiere probar Red Hat Enterprise Linux? Descárgalo ahora gratis. ]


Linux
  1. Listas de control de acceso y unidades externas en Linux:lo que necesita saber

  2. Introducción a los comandos chgrp y newgrp de Linux

  3. Introducción a Nmap en Kali Linux

  4. Listar miembros de un grupo en Linux

  5. UNIX/Linux:Conceptos básicos de las listas de control de acceso (ACL)

Control de audio avanzado en Linux

Una introducción al navegador Vivaldi en Linux

Introducción a la gestión de contenedores de Linux

Introducción al sistema de control de versiones

Cómo permitir o denegar el acceso SSH a un usuario o grupo en particular en Linux

Explicación de las listas de control de acceso en Linux