Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Listas de control de acceso y uso de getfacl y setfacl.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2016 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.

Introducción.

Los procedimientos de este documento requieren haber estudiado y comprendido previamente los conceptos del documento titulado «Permisos del sistema de archivos

Las listas de control de acceso (ACL, access control lists) se utilizan para controlar los permisos de acceso de los archivos y directorios con mayor exactitud que con chmod. Cada objeto del sistema puede ser asociado a una ACL que controla el acceso de modo discrecional hacia ese objeto. Además, los directorios pueden tener asociado un ACL que controla los permisos de acceso iniciales para los objetos creados en el interior de éste, a los que se le denomina ACL predeterminado.

En resumen, cuando el sistema de archivos ha sido montado con la opción acl, es posible asignar permisos de lectura, escritura y ejecución por usuarios y/o grupos. El soporte necesario viene habilitado de modo predeterminado en CentOS, Fedora™, Red Hat™ Enterprise Linux, openSUSE™ y SUSE™ Linux Enterprise.

Nota.

En el caso de SUSE™ Linux Enterprise 10, se requiere añadir la opción acl en la columna de opciones de la configuración de los sistemas de archivos presentes en el sistema, editando el archivo /etc/fstab:

vi /etc/fstab

Ejemplo:

/dev/sda1  /      ext3  acl,user_xattr  1 2 /dev/sda2  /home  ext3  acl,user_xattr  1 2 /dev/sda3  /var   ext3  acl,user_xattr  1 2

Para aplicar los cambios de manera inmediata, sin necesidad de reiniciar, se ejecutaría:

mount -o remount,acl,user_xattr / mount -o remount,acl,user_xattr /home mount -o remount,acl,user_xattr /var

Equipamiento lógico necesario.

En ALDOS, CentOS, Fedora™ y Red Hat™ Enterprise Linux.

La instalación estándar incluye el paquete acl. Si se realiza una instalación mínima, es necesario ejecutar lo siguiente:

yum -y install acl

Si se utiliza ALDOS, CentOS 6, Red Hat™ Enterprise Linux 6 —utilizando los almacenes yum de AL-Server— o Fedora™ se puede instalar además el paquete eiciel, el cual permite gestionar las listas de control de acceso desde el administrador de archivos (Nautilus) del escritorio de GNOME.

yum -y install eiciel

En openSUSE™ y SUSE™ Enterprise Linux.

La instalación estándar incluye el paquete acl. Si se realizó una instalación minimalista, probablemente sea necesario ejecutar lo siguiente:

yast -i acl

Si se utiliza openSUSE™ 11 o SUSE™ Enterprise Linux 11 y versiones posteriores de éstos, se puede instalar además el paquete nautilus-eiciel, el cual permite gestionar de manera gráfica las listas de control de acceso desde el administrador de archivos (Nautilus) del escritorio de GNOME.

yast -i nautilus-eiciel

Procedimientos.

¿Qué herramientas se utilizan?

Cuando el soporte para listas de control de acceso está habilitado en los sistemas de archivos y el paquete acl está instalado, se pueden utilizar lo siguiente:

getfacl
Se utiliza para determinar los permisos establecidos en las listas de control de acceso de un archivo o directorio dado.
setfacl
Se utiliza para cambiar los permisos en las listas de control de acceso de un archivo o directorio dado.

Para obtener una descripción completa del uso de getfacl, ejecute:

man 1 getfacl

Para obtener una descripción completa del uso de setfacl, ejecute:

man 1 setfacl

Para obtener una descripción completa del formato de las listas de control de acceso, ejecute:

man 5 acl

Ver el ACL de un archivo o directorio.

Para ver el contenido de las listas de control de acceso de un archivo o directorio particular, se ejecuta getfacl con la ruta del archivo o directorio como argumento. Ejemplo:

getfacl /home/fulano

Lo anterior devolvería una salida similar la siguiente:

getfacl: Eliminando '/' inicial en nombres de ruta absolutos
# file: home/fulano
# owner: fulano
# group: fulano
user::rwx
group::---
other::---

Lo anterior muestra que sólo el propietario del directorio tiene permisos de lectura, escritura y acceso.

Respaldar y restaurar el ACL de un archivo o directorio.

Para respaldar el ACL de un archivo o directorio, se ejecuta getfacl con la opción -R, la ruta del archivo o directorio como argumento, el signo > —para redirigir la salida estándar— y la ruta del archivo donde se quiere guardar el respaldo. Ejemplo:

getfacl -R /home/fulano > /var/respaldos/respaldo-home-fulano.txt

Para restaurar el respaldo, hay que cambiarse primero al directorio /:

cd /

Y ejecutar setfacl con la opción --restore y la ruta del archivo de respaldo como argumento. Ejemplo:

setfacl --restore=/var/respaldos/respaldo-home-fulano.txt

Opciones de setfacl.

Es importante destacar las opciones de setfacl pues son relevantes para cualquier procedimiento.

-m --modify
Indica que se modificará el ACL un directorio.
-M --modify-file
Indica que se modificará el ACL de un archivo.
-x --remove
Indica que se eliminará el ACL de un directorio.
-X --remove-file
Indica que se eliminará el ACL de un archivo.
-b --remove-all
Indica que se eliminarán todos los ACL de un archivo o directorio.
-k --remove-default
Indica que se eliminarán todos los ACL predeterminado de un archivo o directorio.
--mask
Fuerza el calculo de la máscara de los permisos efectivos de un ACL, aún si se ha proporcionado una de manera explícita.
--d --default
Todas las operaciones se aplican sólo en el ACL predeterminado.
--restore=archivo
Restaura un respaldo de permisos de un ACL obtenidos con getfacl -R.
-R
Aplica los cambios de ACL de modo descendente en un directorio.
-L --logical
Al aplicar los cambios de ACL de modo descendente en un directorio, se hace de modo lógico siguiendo enlaces simbólicos.
-P --physical
Al aplicar los cambios de ACL de modo descendente en un directorio, se hace de modo físico sin seguir enlaces simbólicos.
--test
Modo de pruebas. en lugar de cambiar los ACL de los archivos o directorios, sólo se listan los resultados.

Asignando permisos a otro usuario.

Para lograr que un usuario en particular pueda acceder también a este directorio, se ejecuta setfacl, con la opción -m para modificar la lista de control de acceso, [u,g,o]:[usuario,grupo]:[r,w,x] y la ruta del directorio como argumentos. Ejemplo:

setfacl -m u:zutano:rX /home/fulano

En el ejemplo anterior se utilizó X mayúscula para indicar que sólo se aplicará el bit de acceso de a directorios evitando aplicar el bit de ejecución a los archivos.

Nota.

Si lo prefiere, también pude utilizar notación octal:

setfacl -m u:zutano:5 /home/fulano

Lo anterior establece que se añaden permisos de lectura y acceso al directorio /home/fulano para el usuario zutano.

Para verificar, ejecute de nuevo getfacl con la ruta del directorio modificado como argumento:

getfacl /home/fulano

Lo anterior devolvería una salida similar a la siguiente:

getfacl: Eliminando '/' inicial en nombres de ruta absolutos
# file: home/fulano
# owner: fulano
# group: fulano
user::rwx
user:zutano:r-x
group::---
mask::r-x
other::---

Asignando permisos a múltiples usuarios.

Pueden asignarse permisos diferentes para otros usuarios. Ejemplo:

setfacl -m u:perengano:rwX /home/fulano

Lo anterior establece que se añaden permisos de lectura, escritura y acceso al directorio /home/fulano para el usuario perengano. Si utiliza X mayúscula se indicará que se trata específicamente del bit de acceso en lugar de acceso y ejecución.

Para verificar lo anterior, se ejecuta de nuevo getfacl con la ruta del directorio modificado como argumento:

getfacl /home/fulano

Lo anterior devolvería una salida similar a la siguiente:

getfacl: Eliminando '/' inicial en nombres de ruta absolutos
# file: home/fulano
# owner: fulano
# group: fulano
user::rwx
user:perengano:rwx
user:zutano:r-x
group::---
mask::rwx
other::---

Estos permisos que se establecieron en la lista de control de acceso del directorio /home/fulano son exclusivamente para éste. Cualquier nuevo archivo o directorio creado carecerá de estos nuevos permisos. Si se desea que éstos permisos se vuelvan los predeterminados para los nuevos archivos y directorios que sean creados en lo sucesivo dentro del directorio /home/fulano, se ejecuta setfacl pero añadiendo la opción -d para definir que serán los permisos predeterminados para nuevos archivos y directorios. Ejemplo:

setfacl -d -m u:zutano:rX /home/fulano
setfacl -d -m u:perengano:rwX /home/fulano

Se recomienda utilizar X mayúscula para indicar que sólo se aplicará el bit de acceso de a directorios evitando aplicar el bit de ejecución a los archivos.

Nota.

Lo anterior también se puede hacer en notación octal:

setfacl -d -m u:zutano:5 /home/fulano
setfacl -d -m u:perengano:7 /home/fulano

Y la opción -d también se puede integrar a los argumentos:

setfacl -m d:u:zutano:5 /home/fulano
setfacl -m d:u:perengano:7 /home/fulano

Y además simplificar todo lo anterior en una sola operación:

setfacl -m d:u:zutano:5,d:u:perengano:7 /home/fulano

Para verificar todo lo anterior, se ejecuta de nuevo getfacl con la ruta del directorio modificado como argumento:

getfacl /home/fulano

Lo anterior devolvería una salida similar a la siguiente:

getfacl: Eliminando '/' inicial en nombres de ruta absolutos
# file: home/fulano
# owner: fulano
# group: fulano
user::rwx
user:perengano:rwx
user:zutano:r-x
group::---
mask::rwx
other::---
default:user::rwx
default:user:perengano:rwx
default:user:zutano:r-x
default:group::---
default:mask::rwx
default:other::---

Asignando permisos de forma descendente.

Para aplicar los permisos de forma descendente, se ejecuta setfacl con la opción -R (mayúscula), la opción -m, [u,g,o]:[usuario,grupo]:[r,w,X,x] y la ruta del directorio como argumento. Ejemplo:

setfacl -R -m u:zutano:rX /home/fulano
setfacl -R -m u:perengano:rwX /home/fulano

En el ejemplo anterior se utilizó X mayúscula para indicar que sólo se aplicará el bit de acceso de a directorios evitando aplicar el bit de ejecución a los archivos.

Nota.

También puede simplificar todo lo anterior en una sola operación:

setfacl -R -m u:zutano:rX,u:perengano:rwX /home/fulano

En el ejemplo anterior se utilizó X mayúscula para indicar que sólo se aplicará el bit de acceso de a directorios evitando aplicar el bit de ejecución a los archivos.

Lo anterior asignaría permisos r-x para el usuario zutano y rwx para el usuario perengano sobre el directorio /home/fulano y todo su contenido, pero aplicando sólo el bit de acceso a directorios y evitando asignar bit de ejecución a los archivos.

Eliminar permisos asignados por listas de control de acceso.

Eliminar permisos asignados por listas de control de acceso.

Para eliminar los permisos de un usuario en particular de la lista de control de acceso de un directorio en particular, se ejecuta setfacl con la opción -x, el nombre del usuario o grupo y la ruta del directorio como argumento. Ejemplo:

setfacl -x perengano /home/fulano

Para hacer lo mismo, pero de forma descendente, se ejecuta setfacl con la opción -R (mayúscula), la opción -x, el nombre del usuario o grupo y la ruta del directorio como argumento. Ejemplo:

setfacl -R -x perengano /home/fulano

Para eliminar los permisos predeterminados en la lista de control de acceso, se ejecuta setfacl con la opción -k (--remove-default) y la ruta del directorio como argumento. Ejemplo:

setfacl -k /home/fulano

Para eliminar todos los permisos en la lista de control de acceso, dejando todo como en el punto inicial, se ejecuta setfacl con la opción -b (--remove-all) y la ruta del directorio como argumento. Ejemplo:

setfacl -b /home/fulano

Para hacer lo mismo, pero de forma descendente, se ejecuta setfacl con la opción -R (mayúscula), la opción -b (--remove-all) y la ruta del directorio como argumento. Ejemplo:

setfacl -R -b /home/fulano

Copiar listas de control de acceso.

Para copiar la lista de control de acceso de un archivo y aplicarla en otro, se ejecuta:

getfacl archivo1 | setfacl --set-file=- archivo2

Para copiar la lista de control de acceso principal como la lista de control de acceso predeterminada, se ejecuta:

getfacl --access /home/fulano | setfacl -d -M- /home/fulano

Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Última Edición: 24/09/2016, 14:13|Hits: 42,386 Ver la versión para imprimir