Serie RHCSA: uso de ACL (listas de control de acceso) y montaje de recursos compartidos de Samba / NFS - Parte 7


En el último artículo (serie RHCSA Parte 6) comenzamos a explicar cómo instalar y configurar el almacenamiento del sistema local usando parted y ssm.

También discutimos cómo crear y montar volúmenes cifrados con una contraseña durante el arranque del sistema. Además, le advertimos que evite realizar operaciones críticas de administración de almacenamiento en sistemas de archivos montados. Con eso en mente, ahora revisaremos los formatos de sistema de archivos más utilizados en Red Hat Enterprise Linux 7 y luego procederemos a cubrir los temas de montaje, uso y desmontaje de sistemas de archivos de red tanto manual como automáticamente (CIFS y NFS), junto con la implementación. de listas de control de acceso para su sistema.

Antes de continuar, asegúrese de tener un servidor Samba y un servidor NFS disponibles (tenga en cuenta que NFSv2 ya no es compatible con RHEL 7).

Durante esta guía usaremos una máquina con IP 192.168.0.10 con ambos servicios ejecutándose en ella como servidor, y una caja RHEL 7 como cliente con dirección IP 192.168.0.18. Más adelante en el artículo le diremos qué paquetes necesita instalar en el cliente.

Formatos del sistema de archivos en RHEL 7

A partir de RHEL 7, XFS se ha introducido como el sistema de archivos predeterminado para todas las arquitecturas debido a su alto rendimiento y escalabilidad. Actualmente admite un tamaño máximo de sistema de archivos de 500 TB según las últimas pruebas realizadas por Red Hat y sus socios para hardware convencional.

Además, XFS habilita user_xattr (atributos de usuario extendidos) y acl (listas de control de acceso POSIX) como opciones de montaje predeterminadas, a diferencia de ext3 o ext4 (ext2 se considera obsoleto a partir de RHEL 7 ), lo que significa que no necesita especificar esas opciones explícitamente ni en la línea de comandos ni en/etc/fstab al montar un sistema de archivos XFS (si desea deshabilitar tales opciones en este último caso, debe usar explícitamente < b> no_acl y no_user_xattr ).

Tenga en cuenta que los atributos de usuario extendidos se pueden asignar a archivos y directorios para almacenar información adicional arbitraria, como el tipo de mime, el juego de caracteres o la codificación de un archivo, mientras que los permisos de acceso para los atributos de usuario se definen mediante los bits de permisos de archivo normales.

Como todo administrador de sistema, ya sea principiante o experto, está bien familiarizado con los permisos de acceso regulares a archivos y directorios, que especifican ciertos privilegios (leer, escribir y ejecutar) para el propietario, el grupo y "el mundo" (todos los demás). . Sin embargo, no dude en consultar la Parte 3 de la serie RHCSA si necesita refrescar un poco su memoria.

Sin embargo, dado que el conjunto estándar ugo/rwx no permite configurar diferentes permisos para diferentes usuarios, se introdujeron ACL para definir derechos de acceso más detallados para archivos y directorios que los especificados por los permisos regulares.

De hecho, los permisos definidos por ACL son un superconjunto de los permisos especificados por los bits de permisos de archivos. Veamos cómo se aplica todo esto en el mundo real.

1. Hay dos tipos de ACL: ACL de acceso, que se pueden aplicar a un archivo o directorio específico) y ACL predeterminadas, que solo se pueden aplicar a un directorio. Si los archivos que contiene no tienen una ACL establecida, heredan la ACL predeterminada de su directorio principal.

2. Para comenzar, las ACL se pueden configurar por usuario, por grupo o por un usuario que no está en el grupo propietario de un archivo.

3. Las ACL se configuran (y eliminan) mediante setfacl, con las opciones -m o -x, respectivamente.

Por ejemplo, creemos un grupo llamado tecmint y agreguemos los usuarios johndoe y davenull a él:

# groupadd tecmint
# useradd johndoe
# useradd davenull
# usermod -a -G tecmint johndoe
# usermod -a -G tecmint davenull

Y verifiquemos que ambos usuarios pertenecen al grupo suplementario tecmint:

# id johndoe
# id davenull

Creemos ahora un directorio llamado playground dentro de/mnt, y un archivo llamado testfile.txt dentro. Configuraremos el propietario del grupo en tecmint y cambiaremos sus permisos ugo/rwx predeterminados a 770 (permisos de lectura, escritura y ejecución otorgados tanto al propietario como al propietario del grupo del archivo):

# mkdir /mnt/playground
# touch /mnt/playground/testfile.txt
# chmod 770 /mnt/playground/testfile.txt

Luego cambie de usuario a johndoe y davenull, en ese orden, y escriba en el archivo:

echo "My name is John Doe" > /mnt/playground/testfile.txt
echo "My name is Dave Null" >> /mnt/playground/testfile.txt

Hasta aquí todo bien. Ahora hagamos que el usuario gacanepa escriba en el archivo, y la operación de escritura fallará, lo que era de esperar.

Pero, ¿qué pasa si realmente necesitamos que el usuario gacanepa (que no es miembro del grupo tecmint) tenga permisos de escritura en /mnt/playground/testfile.txt? Lo primero que te puede venir a la mente es agregar esa cuenta de usuario al grupo tecmint. Pero eso le dará permisos de escritura en TODOS los archivos donde el bit de escritura está configurado para el grupo, y no queremos eso. Solo queremos que pueda escribir en /mnt/playground/testfile.txt.

# touch /mnt/playground/testfile.txt
# chown :tecmint /mnt/playground/testfile.txt
# chmod 777 /mnt/playground/testfile.txt
# su johndoe
$ echo "My name is John Doe" > /mnt/playground/testfile.txt
$ su davenull
$ echo "My name is Dave Null" >> /mnt/playground/testfile.txt
$ su gacanepa
$ echo "My name is Gabriel Canepa" >> /mnt/playground/testfile.txt

Démosle al usuario gacanepa acceso de lectura y escritura a /mnt/playground/testfile.txt.

Ejecutar como root,

# setfacl -R -m u:gacanepa:rwx /mnt/playground

y habrá agregado con éxito una ACL que permite a gacanepa escribir en el archivo de prueba. Luego cambie al usuario gacanepa e intente escribir en el archivo nuevamente:

$ echo "My name is Gabriel Canepa" >> /mnt/playground/testfile.txt

Para ver las ACL de un archivo o directorio específico, use getfacl:

# getfacl /mnt/playground/testfile.txt

Para establecer una ACL predeterminada para un directorio (cuyo contenido heredará a menos que se sobrescriba de otro modo), agregue d: antes de la regla y especifique un directorio en lugar de un nombre de archivo:

# setfacl -m d:o:r /mnt/playground

La ACL anterior permitirá a los usuarios que no están en el grupo de propietarios tener acceso de lectura al contenido futuro del directorio/mnt/playground. Tenga en cuenta la diferencia en la salida de getfacl/mnt/playground antes y después del cambio:

El capítulo 20 de la Guía oficial de administración de almacenamiento RHEL 7 proporciona más ACL ejemplos, y le recomiendo que le eche un vistazo y lo tenga a mano como referencia.