Ads 468x60px

viernes, 15 de marzo de 2013

Lista De Control De Acceso (ACL) POSIX

Lista De Control De Acceso

Si ya estas introducid@ en el mundillo de la administracion avanzada en linux, seguramente conoces que la manera como este sistema operativo maneja los permisos es con 3 caracteristicas, las cuales tambien aplican para cualquier sistema operativo POSIX compatible entre los cuales estan Unix. Sin embargo, en linux no solo existe la clasificacion de los permisos mediante propietario-grupo-otros. Sino que hay algo mas, la lista de control de acceso o ACL.

Aunque este mecanismo es antiguo, much@s administradores linux y unix de hoy en dia, incluyendome a mi en sus tiempos, desconocen que existen las ACL. Para los que aun no se aclaran en el tema, he aqui un trozo de definicion de ACL de Wikipedia:

Una Lista de Control de Acceso o ACL (del inglés, Access Control List) es un concepto de seguridad informática usado para fomentar la separación de privilegios. Es una forma de determinar los permisos de acceso apropiados a un determinado objeto, dependiendo de ciertos aspectos del proceso que hace el pedido.

 En resumen, las ACL nos permiten determinar que usuario o grupo tiene que atributos o permisos a una entidad del sistema. Diras seguramente, pero si es lo mismo que se hace con los permisos por defecto, sin embargo con las ACL puedes definir que usuarios pertenecientes a un grupo en especifico que pueden hacer parte de esos usuarios que otros no puedan hacer, aun perteneciendo al mismo grupo. Me explico, suponte que tienes un grupo llamado Manzana y que en el grupo Manzana hay 3 usuarios llamados: manzana1, manzana2, manzana3. Tu quieres que manzana1 tenga permisos de escritura y lectura sobre el archivo /home/manzanita.txt, sin embargo tu tambien quieres que el usuario manzana2 solo tenga permisos de lectura sobre /home/manzanita.txt y el usuario manzana3 solo pueda modificar o escribir en el archivo /home/manzanita.txt mas no podra leerlo. Con los permisos por defecto del sistema operativo, y los 3 usuarios perteneciendo al mismo grupo Manzana no puedes definir esto cierto? pero con las ACL si puedes.

Las ACL operan a nivel de sistemas de archivos, o sea funcionan siempre y cuando el Filesystem que tengas lo soporte o lo tenga habilitado, es una capacidad del sistema de archivos para asignar atributos. ACL es soportado por los sistemas de archivos ext2, ext3, ext4, reiserfs, xfs y otros, para que esten activos en tu sistema necesitan estar habilitados dentro del kernel, por lo que deberas verificar si tus ACL estan activas en tu sistema linux asi:

root@nagios:/boot# cat config-2.6.32-5-amd64 | grep _ACL 
CONFIG_EXT2_FS_POSIX_ACL=y 
CONFIG_EXT3_FS_POSIX_ACL=y 
CONFIG_EXT4_FS_POSIX_ACL=y 
CONFIG_REISERFS_FS_POSIX_ACL=y 
CONFIG_JFS_POSIX_ACL=y 
CONFIG_FS_POSIX_ACL=y 
CONFIG_XFS_POSIX_ACL=y 
CONFIG_OCFS2_FS_POSIX_ACL=y 
CONFIG_BTRFS_FS_POSIX_ACL=y 
CONFIG_GENERIC_ACL=y 
CONFIG_TMPFS_POSIX_ACL=y 
CONFIG_JFFS2_FS_POSIX_ACL=y 
CONFIG_NFS_V3_ACL=y 
CONFIG_NFSD_V2_ACL=y 
CONFIG_NFSD_V3_ACL=y 
CONFIG_NFS_ACL_SUPPORT=m
 
Sustituyendo 2.6.32-5-amd64  por la version de tu kernel config que esta en /boot. Sino te sale un resultado similar al anterior, significa que tu kernel no tiene habilitado las ACL o no trae soporte para ello (Cosa muy poco probable, al menos que tengas un kernel version 2.5.x y si fuese el caso no tendrias casi soporte de dispositivos de un computador actual).

Luego verifica que tienes las herramientas para manejar las ACL, son 2 comandos llamados  setfacl y getfacl. En caso que tampoco los tengas instalado, instalalo:

root@nagios:/boot# yum install acl

Sustituyendo yum por tu gestor de paquetes de tu distribucion linux obviamente :)   . Luego verifica si las particiones que tienes montadas tienen habilitado el ACL o no:

root@nagios:/boot# mount 
/dev/sda1 on / type ext3 (rw,errors=remount-ro) 
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755) 
proc on /proc type proc (rw,noexec,nosuid,nodev) 
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) 
udev on /dev type tmpfs (rw,mode=0755) 
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev) 
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620) 
/dev/sda7 on /home type ext3 (rw) 
/dev/sda8 on /tmp type ext3 (rw) 
/dev/sda5 on /usr type ext3 (rw) 
/dev/sda6 on /var type ext3 (rw)

Debe salirte la palabrita "acl"  dentro de cada particion, en caso que no, es porque ACL no esta habilitado para dicha particion, para eso tendrias que desmontar la particion en cuestion o en caso que no se pueda desmontar porque este en uso y sea del sistema, agregar una entrada a /etc/fstab. Aunque, yo recomiendo que tengas una particion de prueba para primero testear como te sale todo antes de proceder a aplicar algun cambio al sistema operativo en si. Tengo una particion de prueba en /dev/sda6 la cual es un directorio donde solo guardo musica y videos, activare la ACL alli:

root@nagios:/boot# mount -o remount,acl /dev/sda6

Volvemos a ejecutar el comando "mount" para verificar que los cambios se aplicaron:

root@nagios:/boot# mount 
/dev/sda1 on / type ext3 (rw,errors=remount-ro) 
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755) 
proc on /proc type proc (rw,noexec,nosuid,nodev) 
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) 
udev on /dev type tmpfs (rw,mode=0755) 
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev) 
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620) 
/dev/sda7 on /home type ext3 (rw) 
/dev/sda8 on /tmp type ext3 (rw) 
/dev/sda5 on /usr type ext3 (rw) 
/dev/sda6 on /musica type ext3 (rw,acl)

Como podran ver, la parte sombreada en rojo demuestra que se activo la ACL para la particion /dev/sda6 pertenediente a /musica.


Ahora es tiempo de juguetear con las ACL dentro del directorio /musica. Recuerden tener usuarios creados para probar los cambios, en mi caso tengo a root y manzanita. Asi que procedo a crear un documento de texto en el directorio  /musica y le cambio los permisos para que solo root pueda acceder al mismo :

root@nagios:~# echo "Projecto Prueba" >> /musica/Testeo.txt
root@nagios:~# chmod 700 /musica/Testeo.txt 
root@nagios:~# ls -l /musica 
local/      lock/       log/        lost+found/ 
root@nagios:~# ls -l /musica/Testeo.txt 
-rwx------ 1 root root 11 Feb 19 17:32 /musica/Testeo.txt 
root@nagios:~# getfacl /musica/Testeo.txt 
getfacl: Removing leading '/' from absolute path names 
# file: musica/Testeo.txt 
# owner: root 
# group: root 
user::rwx 
group::--- 
other::---

Luego se comprueba que otros usuarios tampoco tengan acceso de leer o escribir dicho archivo:

manzanita@nagios:~$ cat /musica/Testeo.txt 
cat: /musica/Testeo.txt: Permission denied

Bien, ahora ni root ni manzanita pueden acceder a dicho documento de texto, sin embargo diremos que manzanita si podra tener acceso asi:

root@nagios:~# setfacl -m user:manzanita:r /musica/Testeo.txt 
root@nagios:~# ls -l /musica/Testeo.txt 
-rwxr-----+ 1 root root 11 Feb 19 17:32 /musica/Testeo.txt 
root@nagios:~# getfacl /musica/Testeo.txt 
getfacl: Removing leading '/' from absolute path names 
# file: /musica/Testeo.txt# owner: root 
# group: root 
user::rwx 
user:manzanita:r-- 
group::--- 
mask::r-- 
other::---

 Al ejecutar "ls -l"  se marca un simbolo de mas (+) en la definicion de los permisos de dicho archivo, que quiere decir que ese archivo tiene ACL aplicado en el. Ahora, dijimos que el usuario manzanita tiene acceso de solo lectura a dicho archivo, por lo cual comprobamos si es cierto:

manzanita@nagios:~$ cat /musica/Testeo.txt 
Projecto Prueba

Y con esto puedes continuar jugando, y agregar mas usuarios aun pertenecientes a un mismo grupo, pero que cada usuario tenga un permiso especifico o atributo que poder realizar sobre un archivo en cuestion.  

Recuerda, si quieres guardar los cambios de un ACL sobre un sistema de archivos, debes agregarlo a /etc/fstab y reiniciar el sistema operativo.

Hasta una proxima......





No hay comentarios:

Publicar un comentario