Búsqueda de sitios web

Proteger archivos/directorios usando ACL (listas de control de acceso) en Linux


Como administrador del sistema, nuestra primera prioridad será proteger y asegurar los datos contra el acceso no autorizado. Todos conocemos los permisos que configuramos usando algunos comandos útiles de Linux como chmod, chown, chgrp… etc. Sin embargo, estos permisos predeterminados Los conjuntos tienen algunas limitaciones y, en ocasiones, es posible que no funcionen según nuestras necesidades. Por ejemplo, no podemos configurar diferentes conjuntos de permisos para diferentes usuarios en el mismo directorio o archivo. Así, se implementaron Listas de Control de Acceso (ACLs).

Digamos que tienes tres usuarios, 'tecmint1', 'tecmint2' y 'tecmint3'. Cada uno que tiene un grupo común dice 'acl'. El usuario 'tecmint1' quiere que solo el usuario 'tecmint2' pueda leer y acceder a archivos propiedad de ' tecmint1' y nadie más debería tener acceso a eso.

Las ACL (Listas de control de acceso) nos permiten hacer el mismo truco. Estas ACL nos permiten otorgar permisos para un usuario, un grupo y cualquier grupo de usuarios que no estén en la lista de grupos de un usuario.

Nota: Según la documentación del producto Redhat, proporciona compatibilidad con ACL para el sistema de archivos ext3 y los sistemas de archivos exportados NFS.

Cómo comprobar la compatibilidad con ACL en sistemas Linux

Antes de seguir adelante, debe tener soporte para ACL en el Kernel actual y en los sistemas de archivos montados.

1. Verifique el kernel para obtener compatibilidad con ACL

Ejecute el siguiente comando para verificar la compatibilidad con ACL para el sistema de archivos y la opción POSIX_ACL=Y (si hay N en lugar de Y, entonces significa Kernel no es compatible con ACL y es necesario volver a compilarlo).

[root@linux ~]# grep -i acl /boot/config*

CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_GENERIC_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_CIFS_ACL=y
CONFIG_9P_FS_POSIX_ACL=y

2. Verifique los paquetes requeridos

Antes de comenzar a jugar con las ACL, asegúrese de tener instalados los paquetes necesarios. A continuación se muestran los paquetes necesarios que deben instalarse mediante yum o apt-get.

[root@linux ~]# yum install nfs4-acl-tools acl libacl		[on RedHat based systems]
[tecmint@linux ~]$ sudo apt-get install nfs4-acl-tools acl	[on Debian based systems]

3. Verifique el sistema de archivos montado para ver si admite ACL

Ahora, verifique si el sistema de archivos montado está montado con la opción ACL o no. Podemos usar el comando 'mount' para verificar lo mismo que se muestra a continuación.

[root@linux ~]# mount  | grep -i root

/dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)

Pero en nuestro caso no muestra ACL de forma predeterminada. Entonces, a continuación tenemos la opción de volver a montar la partición montada usando la opción acl. Pero, antes de seguir adelante, tenemos otra opción para asegurarnos de que la partición esté montada con la opción acl o no, porque en sistemas recientes puede estar integrada con la opción de montaje predeterminada.

[root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep acl

Default mount options:    user_xattr acl

En el resultado anterior, puede ver que la opción de montaje predeterminada ya es compatible con acl. Otra opción es volver a montar la partición como se muestra a continuación.

[root@linux ~]# mount -o remount,acl /

A continuación, agregue la siguiente entrada al archivo '/etc/fstab' para hacerlo permanente.

/dev/mapper/fedora-root /	ext4    defaults,acl 1 1

Nuevamente, vuelva a montar la partición.

[root@linux ~]# mount -o remount  /

4. Para servidor NFS

En el servidor NFS, si el sistema de archivos exportado por el servidor NSF admite ACL y los clientes NFS pueden leer las ACL, entonces el sistema cliente utiliza las ACL.

Para deshabilitar las ACL en el recurso compartido NFS, debe agregar la opción "no_acl" en el archivo '/etc/exportfs' en el servidor NFS. Para deshabilitarlo nuevamente en el lado del cliente NSF, use la opción “no_acl” durante el tiempo de montaje.

Cómo implementar el soporte ACL en sistemas Linux

Hay dos tipos de ACL:

  1. ACL de acceso: las ACL de acceso se utilizan para otorgar permisos en cualquier archivo o directorio.
  2. ACL predeterminadas: las ACL predeterminadas se utilizan para otorgar/configurar la lista de control de acceso en un directorio específico únicamente.

Diferencia entre ACL de acceso y ACL predeterminada:

  1. La ACL predeterminada solo se puede utilizar a nivel de directorio.
  2. Cualquier subdirectorio o archivo creado dentro de ese directorio heredará las ACL de su directorio principal. Por otro lado, un archivo hereda las ACL predeterminadas como ACL de acceso.
  3. Usamos “–d” para configurar las ACL predeterminadas y las ACL predeterminadas son opcionales.
Antes de configurar las ACL predeterminadas

Para determinar las ACL predeterminadas para un archivo o directorio específico, use el comando 'getfacl'. En el siguiente ejemplo, getfacl se utiliza para obtener las ACL predeterminadas para una carpeta 'Música'.

[root@linux ~]# getfacl Music/

file: Music/
owner: root
group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::rw-
Después de configurar las ACL predeterminadas

Para configurar las ACL predeterminadas para un archivo o directorio específico, use el comando 'setfacl'. En el siguiente ejemplo, el comando setfacl establecerá nuevas ACL (lectura y ejecución) en una carpeta 'Música' . .

[root@linux ~]# setfacl -m d:o:rx Music/
[root@linux ~]# getfacl Music/
file: Music/
owner: root
group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::r-x

Cómo configurar nuevas ACL

Utilice el comando 'setfacl' para configurar o modificar cualquier archivo o directorio. Por ejemplo, para dar permisos de lectura y escritura al usuario ‘tecmint1‘.

setfacl -m u:tecmint1:rw /tecmint1/example

Cómo ver las ACL

Utilice el comando 'getfacl' para ver ACL en cualquier archivo o directorio. Por ejemplo, para ver ACL en '/tecmint1/example' use el siguiente comando.

getfacl /tecmint1/example

file: tecmint1/example/
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

Cómo eliminar las ACL

Para eliminar ACL de cualquier archivo/directorio, utilizamos las opciones x y b como se muestra a continuación.

setfacl -x ACL file/directory  	# remove only specified ACL from file/directory.

setfacl -b  file/directory   		#removing all ACL from file/direcoty

Implementemos ACL en los siguientes escenarios.

Dos usuarios (tecmint1 y tecmint2), ambos con un grupo secundario común denominado 'acl'. Crearemos un directorio propiedad de 'tecmint1' y proporcionaremos el permiso de lectura y ejecución en ese directorio al usuario 'tecmint2 '.

Paso 1: cree dos usuarios y elimine la contraseña de ambos

[root@linux ~]# for user in tecmint1 tecmint2

> do
> useradd $user
> passwd -d $user
> done
Removing password for user tecmint1.
passwd: Success
Removing password for user tecmint2.
passwd: Success

Paso 2: cree un grupo y usuarios en un grupo secundario.

[root@linux ~]# groupadd acl
[root@linux ~]# usermod -G acl tecmint1
[root@linux ~]# usermod -G acl tecmint2

Paso 3: cree un directorio /tecmint y cambie la propiedad a tecmint1.

[root@linux ~]# mkdir /tecmint1
[root@linux ~]# chown tecmint1 /tecmint1/
[root@linux ~]# ls -ld /tecmint1/

drwxr-xr-x 2 tecmint1 root 4096 Apr 17 14:46 /tecmint1/
[root@linux ~]# getfacl /tecmint1

getfacl: Removing leading '/' from absolute path names
file: tecmint1
owner: tecmint1
group: root
user::rwx
group::r-x
other::r-x

Paso 4: Inicie sesión con tecmint1 y cree un directorio en la carpeta /tecmint.

[tecmint@linux ~]$ su - tecmint1

Last login: Thu Apr 17 14:49:16 IST 2014 on pts/4
[tecmint1@linux ~]$ cd /tecmint1/
[tecmint1@linux tecmint1]$ mkdir example
[tecmint1@linux tecmint1]$ ll

total 4
drwxrwxr-x 2 tecmint1 tecmint1 4096 Apr 17 14:50 example
[tecmint1@linux tecmint1]$ whoami 
tecmint1

Paso 5: Ahora configure ACL usando 'setfacl', de modo que 'tecmint1' tenga todos los permisos rwx, 'tecmint2' solo tendrá permiso de lectura en la carpeta 'ejemplo' y el resto no tendrá permisos.

setfacl -m u:tecmint1:rwx example/
setfacl -m u:tecmint2:r-- example/
setfacl -m  other:--- example/
getfacl example/

file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::r-x
mask::rwx
other::---

Paso 6: Ahora inicie sesión con otro usuario, es decir, 'tecmint2' en otro terminal y cambie el directorio a '/tecmint1'. Ahora intente ver el contenido usando el comando 'ls' y luego intente cambiar el directorio y vea la diferencia como se muestra a continuación.

[tecmint@linux ~]$ su - tecmint2

Last login: Thu Apr 17 15:03:31 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/
[tecmint2@linux tecmint1]$ ls -lR example/
example/:
total 0
[tecmint2@linux tecmint1]$ cd example/

-bash: cd: example/: Permission denied
[tecmint2@linux tecmint1]$ getfacl example/

file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

Paso 7: Ahora otorgue permiso 'ejecutar' a 'tecmint2' en la carpeta 'ejemplo' y luego use < comando'cd' para ver el efecto. Ahora 'tecmint2' tiene permisos para ver y cambiar directorio, pero no tiene permisos para escribir nada.

[tecmint1@linux tecmint1]$ setfacl -m u:tecmint2:r-x example/
[tecmint1@linux tecmint1]$ getfacl example/

file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r-x
group::rwx
mask::rwx
other::---
[tecmint@linux ~]$ su - tecmint2

Last login: Thu Apr 17 15:09:49 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/
[tecmint2@linux tecmint1]$ cd example/
[tecmint2@linux example]$ getfacl .
[tecmint2@linux example]$ mkdir test

mkdir: cannot create directory ‘test’: Permission denied
[tecmint2@linux example]$ touch test

touch: cannot touch ‘test’: Permission denied

Nota: Después de implementar ACL, verá un signo '+' adicional para la salida 'ls –l' como se muestra a continuación.

[root@linux tecmint1]# ll

total 4
drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example

Enlaces de referencia

Documentación de ACL