Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.
Cómo Configurar las Listas de Control de Acceso - ACL's
Cómo configurar las Listas de Control de Acceso - ACL's.
Autor: John Jairo Toro A.Correo electrónico: JohnToro en gmail punto com Sitio de Red:
Jabber ID: johntoro@jabber.org
Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1
© 1999-2007 John Jairo Toro A. 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.
Acerca de ACL.
ACL (Access Control List) o Listas de Control de Acceso, corresponden a un conjunto de permisos complementarios a los tradicionales UGO (Usuario/Propietario, Grupo, Otros) dentro del sistema de archivos ext2, ext3, nfs. Básicamente es un parche (complemento) al núcleo (kernel) del sistema operativo que esta disponible desde la versión 2.4 (la versión 2.6 del kernel incluye soporte para: jfs, xfs).
Las ACL cumplen con el estándar POSIX (Portable Operating System for UnIX).
En algunos casos, la asignación de permisos mediante el modelo UGO puede quedarse corto, cuando, por ejemplo, queremos dar permisos a más de un usuario o grupo en un directorio o archivo, cosa que es muy común en ambientes corporativos.
Equipamiento lógico necesario.
Si utiliza CentOS 4 o White Box Enterprise Linux 4, estos ya incluyen el soporte para ACL's.
Los paquetes básicos son: acl, libacl
Los parches se pueden descargar en: http://acl.bestbits.at/download.html
Procedimientos.
Habilitar las ACL's en el volumen deseado
En el archivo /etc/fstab habilitamos el empleo de las ACL's, simplemente agregando el parámetro: acl
Ejemplo:
# /etc/fstab |
||||
# This file is edited by fstab-sync - see 'man fstab-sync' for details |
||||
/dev/VolGroupJT/LogVol0 |
/ |
ext3 |
defaults,acl |
1 1 |
Se debe debe desmontar (umount) y volver a montar (mount) el dispositivo o reiniciar el servidor (en el caso del directorio raíz - /)
Asignar permisos adicionales a los directorios.
Para asignación de permisos se emplea el comando: setfacl (set file access control list), el cual permite:
-
Asignar permisos básicos a: Usuario, Grupo, Otros (UGO). Equivalente a lo que hace el comando: chmod.
-
Asignar permisos por defecto (Para nuevos directorios/archivos).
-
Asignar permisos máximos (Mascaras).
-
Asignar permisos adicionales a grupos y usuarios.
Su sintaxis básica es:
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ... |
Los parámetros (opciones) básicos son:
Opción |
Descripción |
-R |
Cambia permisos a archivos y directorios de forma descendente a partir de un directorio dado. |
-d |
Asigna los permisos por defecto. |
-b |
Borra todos los permisos adicionales, conservando únicamente los básicos de UGO. |
-k |
Borra los permisos por defecto. |
-m |
Modifica los permisos agregando/cambiando por los nuevos valores. |
Ejemplos:
setfacl -b -k -R "/dir/sub dir" |
setfacl -R -d -m group:grupo1:rwx "/dir" |
setfacl -m group:grupo2:rx "/dir/sub dir" |
setfacl -m group::rx "/dir/sub dir" |
setfacl -m user:usuario1:rwx "/dir/sub dir/script.sh" |
Conocer permisos adicionales a los directorios.
Para conocer los permisos asignados a un directorio/archivo, se emplea el comando: getfacl (get file access control list).
Su sintaxis básica es:
getfacl [-dRLPvh] file ... |
Los parámetros (opciones) básicos son:
Opción |
Descripción |
-R |
Cambia permisos a archivos y directorios de forma descendente a partir de un directorio dado. |
-d |
Muestra los permisos por defecto. |
El resultado de su ejecución incluye valores como estos:
[user@servidor ]# getfacl dir |
(Comando) |
Ejemplo Practico.
La empresa X tiene centralizada la información en un servidor SAMBA corriendo bajo CentOS 4 (ext3), la cual es accesible desde la red interna tanto por estaciones Linux (smb://servidor/Empresa) como Windows (servidorEmpresa).
La información esta almacenada dentro del directorio: /share/Empresa y esta organizada en directorios que corresponden a sus diferentes Departamentos (D. Administrativo, D. Comercial, etc.)
Existe un grupo general (empresa) al que pertenecen todos los usuarios y grupos para cada uno de los departamentos (d_administrativo, d_comercial, etc.) y estos tienen asignados los diferentes usuarios (Pedro, Juan, Maria, etc.) según su labor, al departamento correspondiente.
Aplicaremos una política de seguridad sencilla:
-
Veamos los permisos actuales.
[ ]# getfacl -R /share/Empresa
getfacl: Removing leading '/' from absolute path names
# file: share/Empresa
# owner: root
# group: root
user::r-x
group::-wx
other::r-x
# file: share/Empresa/D.?40Comercial
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# file: share/Empresa/D.?40Contable
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# file: share/Empresa/D.?40Sistemas
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# file: share/Empresa/D.?40Administrativo
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# file: share/Empresa/D.?40Administrativo/Correspondencia
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# file: share/Empresa/D.?40Administrativo/Correspondencia/2006
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# file: share/Empresa/D.?40Administrativo/Correspondencia/2007
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# file: share/Empresa/D.?40Compras
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# file: share/Empresa/D.?40Producci303263n
# owner: root
# group: root
user::rwx
group::r-x
other::r-x -
Apliquemos las política de seguridad
-
Todo los empleados deben tener acceso a la carpeta/directorio de la Empresa (/share/Empresa), pero no pueden crear directorios/archivos adicionales.
[ ]# setfacl -m -d group:empresa:rx /share/Empresa
[ ]# setfacl -m group:empresa:rx /share/Empresa -
Cada usuarios debe tener acceso al departamento en el cual labora.
[ ]# setfacl -R -m -d group:d_administrativo:rwx "/share/Empresa/D. Administrativo"
[ ]# setfacl -R -m group:d_administrativo:rwx "/share/Empresa/D. Administrativo"
[ ]# setfacl -R -m -d group:d_comercial:rwx "/share/Empresa/D. Comercial"
[ ]# setfacl -R -m group:d_comercial:rwx "/share/Empresa/D. Comercial"
[ ]# setfacl -R -m -d group:d_compras:rwx "/share/Empresa/D. Compras"
[ ]# setfacl -R -m group:d_compras:rwx "/share/Empresa/D. Compras"
[ ]# setfacl -R -m -d group:d_contable:rwx "/share/Empresa/D. Contable"
[ ]# setfacl -R -m group:d_contable:rwx "/share/Empresa/D. Contable"
[ ]# setfacl -R -m -d group:d_produccion:rwx "/share/Empresa/D. Producción"
[ ]# setfacl -R -m group:d_produccion:rwx "/share/Empresa/D. Producción"
[ ]# setfacl -R -m -d group:d_sistemas:rwx "/share/Empresa/D. Sistemas"
[ ]# setfacl -R -m group:d_sistemas:rwx "/share/Empresa/D. Sistemas" -
Todos los empleados tienen acceso al Directorio de "Correspondencia" ubicado en el "D. Administrativo" (/share/Empresa/D. Administrativo/Correspondencia), podrán consultar la correspondencia de otros años (solo lectura), pero solo podrán guardar correspondencia en el directorio correspondiente al año actual (2007).
[ ]# setfacl -m group:empresa:rx "/share/Empresa/D. Administrativo"
[ ]# setfacl -R -m -d group:empresa:rx "/share/Empresa/D. Administrativo/Correspondencia"
[ ]# setfacl -R -m group:empresa:rx "/share/Empresa/D. Administrativo/Correspondencia"[ ]# setfacl -R -m mask::rx "/share/Empresa/D. Administrativo/Correspondencia"
[ ]# setfacl -R -m -d group:empresa:rwx "/share/Empresa/D. Administrativo/Correspondencia/2007"
[ ]# setfacl -R -m group:empresa:rwx "/share/Empresa/D. Administrativo/Correspondencia/2007"
[ ]# setfacl -R -m mask::rwx "/share/Empresa/D. Administrativo/Correspondencia/2007" -
"Juan" como Gerente desea ver toda la información almacenada.
[ ]# setfacl -R -m -d user:juan:rx "/share/Empresa"
[ ]# setfacl -R -m user:juan:rx "/share/Empresa" -
Las personas del "D. Sistemas", esta construyendo una base de datos con la información de clientes (Clientes.xls) existente en el "D. Comercial".
[ ]# setfacl -m group:d_sistemas:rx "/share/Empresa/D. Comercial"
[ ]# setfacl -m group:d_sistemas:rwx "/share/Empresa/D. Comercial/Clientes.xls"
-
-
Veamos el Resultado.
-
[ ]# getfacl -R /share/Empresa
getfacl: Removing leading '/' from absolute path names
# file: share/Empresa
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:empresa:r-x
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:empresa:r-x
default:mask::rwx
default:other::r-x
# file: share/Empresa/D.?40Comercial
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:d_comercial:rwx
group:d_sistemas:r-x
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:d_comercial:rwx
default:mask::rwx
default:other::r-x
# file: share/Empresa/D.?40Comercial/Clientes.xls
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:d_comercial:rwx
group:d_sistemas:rwx
mask::rwx
other::---
# file: share/Empresa/D.?40Contable
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:d_contable:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:d_contable:rwx
default:mask::rwx
default:other::r-x
# file: share/Empresa/D.?40Sistemas
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:d_sistemas:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:d_sistemas:rwx
default:mask::rwx
default:other::r-x
# file: share/Empresa/D.?40Administrativo
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:empresa:r-x
group:d_administrativo:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:d_administrativo:rwx
default:mask::rwx
default:other::r-x
# file: share/Empresa/D.?40Administrativo/Correspondencia
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:empresa:r-x
group:d_administrativo:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:empresa:r-x
default:group:d_administrativo:rwx
default:mask::rwx
default:other::r-x
# file: share/Empresa/D.?40Administrativo/Correspondencia/2006
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:empresa:r-x
group:d_administrativo:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:empresa:r-x
default:group:d_administrativo:rwx
default:mask::rwx
default:other::r-x
# file: share/Empresa/D.?40Administrativo/Correspondencia/2007
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:empresa:rwx
group:d_administrativo:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:empresa:rwx
default:group:d_administrativo:rwx
default:mask::rwx
default:other::r-x
# file: share/Empresa/D.?40Compras
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:d_compras:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:d_compras:rwx
default:mask::rwx
default:other::r-x
# file: share/Empresa/D.?40Producci303263n
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:d_produccion:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:d_produccion:rwx
default:mask::rwx
default:other::r-x
Como vimos en el ejemplo, en muchos casos debemos asignar los permisos por defecto iguales a los permisos efectivos, para que cada nuevo directorio/archivo asuma estos permisos. por lo que para facilitar un poco las cosas he creado este script: setACL.sh:
# Script: setACL.sh |
Y para facilitar aun mas las cosas se puede crear otro script, donde registramos todos los permisos asignados (política de seguridad), el cual he llamado: setEmpACL.sh.
# Script: setEmpACL.sh |