User Tools

Site Tools


linux:acl

ACL's en Linux

Como todo lo que se supone que es fácil al final no lo es, pues vamos a explicar lo que he recogido de aquí y de ahí sobre acl's en linux.

Qué son

Pues algo que seguramente habías necesitado muchas veces: por ejemplo, cuando queremos crear un directorio al que juan tiene permisos de lectura y ejecución y pedro los tiene de lectura, escritura y ejecución. O queremos crear un usuario backup que tenga acceso a todo el disco duro, pero no queremos que se ejecute como root. ¿complicado, eh?? Con acl's es muy fácil, ya que especificamos los ficheros tal y como se describe aquí.

Hello. I was browsing the 0 replies thread and though I might give this a go. If you are absolutely certain that you have complied ACLs into your kernel and are still getting this error:

setfacl: test: Operation not supported

then check your /etc/fstab. For ACLs to work you have to mount whatever partition you want with the option acl. As an example, notice /home:

LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
LABEL=/home /home ext3 rw,acl 1 2

I hope this helps, that is if you haven't already solved this. Good luck.

Un ejemplo clásico

Vamos a realizar el ejemplo más clasico: tenemos un conjunto de carpetas que tienen asignado un usuario y grupo concreto, que en nuestro ejemplo es santiago:santiago, y queremos que además el usuario/grupo mediatomb/mediatomb tenga acceso, y que todo el contenido nuevo que cree santiago, sea por defecto accesible por mediatomb.

Mi estructura de directorios para este ejemplo:

test
 +--- uno
 |     +--- primero
 +--- dos
 |     +--- segundo
 +--- tres
       +--- tercero

Primero, segundo y tercero son ficheros, y uno, dos y tres son directorios. Todos tienen como único propietario “santiago:santiago”. Vamos a añadir los comandos necesarios para que además sean visibles por el usuario mediatomb:mediatomb y además, a partir de ahora, todos los nuevos ficheros se comporten igual.

Para ello, añadimos los permisos (recursivamente) para el nuevo usuario y el nuevo grupo:

# primero ponemos permisos de lectura y ejecución para el grupo 
setfacl -R -m g:mediatomb:rx test
# y luego ponemos permisos de lectura y ejecución para el usuario
setfacl -R -m u:mediatomb:rx test

A continuación podemos comprobar que la operación se ha ejecutado, ejecutando getfacl para comprobar el resultado:

root:/data# getfacl test/uno
# file: test/
# owner: santiago
# group: santiago
user::rwx
user:mediatomb:r-x
group::r-x
group:mediatomb:r-x
mask::r-x
other::r-x

El último paso consiste en establecer qué va a pasar a partir de ahora con los ficheros y directorios nuevos que se creen. Eso se define con las ACL's por defecto. Se establecen de la misma forma, pero usando la opción -d en la llamada al comando, y no se aplicarán recursivamente: se coge la que esté disponible.

# a partir de ahora, todos los ficheros nuevos tendrán 
# permisos de lectura y ejecución para el grupo "mediatomb"
setfacl -d -m g:mediatomb:rx test
# y también para el usuario "mediatomb"
setfacl -d -m u:mediatomb:rx test

A continuación hemos creado un directorio llamado “cuatro” con un fichero llamado “cuarto”. Veamos si el usuario mediatomb tiene permisos:

root:/data/test/cuatro# getfacl cuarto
# file: cuarto
# owner: root
# group: root
user::rw-
user:mediatomb:r-x		#effective:r--
group::r-x			#effective:r--
group:mediatomb:r-x		#effective:r--
mask::r--
other::r--

Efectivamente, tiene permisos.

Las máscaras

Confieso que entender exactamente cual es el propósito de la máscara me ha costado un poco, y aún así no entiendo realmente cual es el propósito. En una primera instancia, comprobarás que los permisos establecidos en la máscara limitan los permisos efectivos establecidos en la acl. Así, si los permisos en la máscara son r–, verás que aunque los permisos que hayas establecido para un grupo sean rwx, estos quedarán limitados a sólo r–; es decir a lo que coincida con la máscara.

Puestas así las cosas, ¿Porqué??? ¿Porqué no hacer un modelo de ACL sin máscaras?? Parece que lo más sencillo es establecer los permisos para cada grupo individualmente y ya está. No obstante, creo que guarda relación en cómo debemos cambiar los permisos cuando cambiamos los permisos mediante chmod en el grupo.

Pero dejémonos de teorías. Creo que si los permisos del grupo por defecto son lo suficientemente amplios –rwx–, entonces la máscara resultante será rwx, con lo cual el resto de grupos no tendrán ningún problema.

Si no es el caso, y las máscaras te dan problemas, que sepas que se pueden cambiar también, incluso se pueden poner máscaras por defecto, pero creo uq eno tienen mucho sentido.

# primero ponemos la mascara del directorio
setfacl -R -m mask::rwx test
# y luego ponemos la máscara por defecto
setfacl -d -m mask::rwx test
linux/acl.txt · Last modified: 2014/12/24 10:42 (external edit)