
Los permisos de linux están bien siempre que no dispongamos de un grupo muy grande de usuarios , si es asi se haria muy lioso ya que tendrÃamos un /etc/group muy grande. Una forma Elegante de arreglar este problema es usando las ACL (Listas de Control de Acceso)
A groso modo una ACL es una lista de usuarios o grupos Linux y sus correspondientes permisos de acceso que tienen a un fichero o directorio.
Instalando y activando las ACL
Para aumentar la granularidad de los permisos en tu sistema debes tener en cuenta:
- El nucleo debe soportar y estar compilado para soportar atributos extendidos y ACL
- El sistema de ficheros tiene de montarse con atributos extendidos y ACL
- Se tienen de instalar las utilidades de espacio de usuario (chacl,getfacl y setfacl) para establecer el ACL.
Una vez claros estos conceptos pasamos a activar ACL.
Soporte ACL del núcleo de sistema
La gran mayorÃa de distros actuales ya soportan ACL puedes comprobar si tienes soporte con este comando.
# grep POSIX_ACL /boot/config-`uname -r`
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT3_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_TMPFS_POSIX_ACL is not set
Como podéis tenemos activados en el kernel si no es asi recompilamos el kernel marcando estas opciones.
File systems —>
[*] ReiserFS extended attributes
[*] ReiserFS POSIX Access Control Lists
Soporte ACL en /etc/fstab
Una vez que tengamos soporte ACL necesitaremos configurar /etc/fstab para activar los susodichos permisos .
Los sistemas de ficheros montados con acl tendrán la palabra clave “acl” en las porciones de opciones de montaje de sus entradas en el fichero.
Ejemplo
/dev/sda6 /usr reiserfs noatime,acl,user_xattr 1 2
/dev/hda1 /opt ext3 defaults 0 0
Como podéis ver sda6 tiene soporte acl en el punto de montaje , si quisiéramos dar soporte acl a hda1 seria tan fácil como al punto de montaje acl
/dev/hda1 /opt ext3 defaults,acl 0 0
Una vez actualizado el fichero /etc/fstab debemos remontar el sistema de fichero.
Ejemplo para hda1
# mount -o remount,acl /dev/hda1
Soporte ACL en el espacio de usuario
El último paso para usar ACL asegurarse de que las aplicaciónes de espació de usuario estén presentes en el sistema
En Debian o Ubuntu puedes comprobar asi
# dpkg -l |grep acl
ii acl 2.2.42-1ubuntu1 Access control list utilities
ii libacl1 2.2.42-1ubuntu1
Tambien puedes comprobar buscando las herramientas
# type -a getfacl
getfacl is /usr/bin/getfacl
Si ACL no esta instalado puedes instalarlo desde el manejador de paquetes de tu distribución en debian por ejemplo.
# apt-get install acl
Formato ACL
Linux soprta 2 tipos básicos de ACL:
- ACL de control de directorios y ficheros
- ACL de directorio (Mascaras) ACL que toman por defecto los ficheros creados en ese directorio.
La ACL se representa por tres campos separados por “:”
Campo 1
Entrada
- “u” Ususario
- “g” Grupo
- “o” Otro
- “m” Mascara
Campo 2
El segundo campo esta formado por:
- UID (ID numérico de usuario)
- GID (ID numérico de grupo)
- VacÃo (Asume UID,GID del Creador)
Campo 3
- El tercer campo es el de acceso y puede ser representado de 2 maneras.
- Cadena estándar RWX (las cadenas se pueden remplazar por - sino queremos dar acceso de ese tipo)
- Cadena simbólica + ^
Herramientas
- chacl : Permite cambiar,examinar o eliminar ACL
- getfacl : Permite examinar acl para encontrar archivos o directorios
- setfacl : Establece ACL a fichero o directorio.
Mostrar ACL
Para el ejemplo usare un directorio con archivos que he creado con touch.
> ls -l
total 0
-rw-r–r– 1 tuxed tuxed 0 2008-01-26 03:03 lerele
-rw-r–r– 1 root root 0 2008-01-26 03:03 pass
-rw-r–r– 1 root root 0 2008-01-26 03:02 user
La acl para el directorio siguiente es
> getfacl .
# file: .
# owner: root
# group: root
user::rwx
group::rwx
other::rwx
La acl por defecto para el fichero lerele es esta
> getfacl lerele
# file: lerele
# owner: tuxed
# group: tuxed
user::rw-
group::r–
other::r–
La acl para el directorio el qual no se le ha asignado coje los de umask.
Establecer ACL
Hay tres maneras de establecer un ACL
- Usando el comando setfacl el qual sobrescribe qualquier ACL anterior.
- Usando el comando setfacl con la opción -m (Modifica ACL)
- Usando chacl para modificar una ACL existente.
En esta ocasión mostrare como se cambian las acl con chacl , ya que este no sobrescribe la ACL existente, y ademas proporciona algo mas de información de como realmente funcionan las acl
Ejemplo
Añadiremos al usuario aitor como alguien que puede leer el fichero lerele , usarÃa chacl (cambiar la ACL) del siguiente modo:
$ chacl u::rw-,g::r–,o::—,u:aitor:r–,m::rw- lerele
Esta es la forma en la que se ve una acl en la vida real , el hecho de que sea una comando tan largo es que se debe definir los puntos ya nombrados anteriormente el propietario de fichero, grupo propietario y otros
para entendernos mejor la porción u::rw,g::r–,o::— es la ACL existente y la porción u:aitor:r–,m::rw- especifica el nuevo usuario el nuevo usuario que quiero añadir a dicha acl y la mascara de derechos efectivos cuando se añada.
La mascara de derechos efectivos es la unión de todos los permisos ya existentes de UGO para un fichero o directorio. esta se tiene al añadir un usuario a la ACL.
Para comprobar que hemos sido añadidos a la acl usaremos
$ getfacl lerele
# file: lerele
# owner: tuxed
# group: tuxed
user::rwx
group::r–
other::—
user:aitor:r–
mask::rw-
Ahora que ya sabemos como funciona acl podriamos poner que aitor tenga permisos de lectura y escritura a lerele
$ chacl u::rw-,g::r–,o::—,u:aitor:rw-,m::rw- lerele
como veis le hemos añadido permisos de escritura
$ getfacl lerele
# file: lerele
# owner: tuxed
# group: tuxed
user::rwx
group::r–
other::—
user:aitor:rw-
Pues espero que hos guste.