Listas de control de acceso en Linux

Hace tiempo que tenía pensado escribir algo al respecto y hoy ha sido el día que me sentía con ganas. Hay veces que me resulta incómodo manejar un sistema linux con multiples usuarios en lo que a permisos de fichero se refiere. En resumidas cuentas, el método UGO (User Group Other) está bien si tenemos un sistema monousuario, pero cuando tienes varios usuarios se hace insostenible, además de degradar la seguridad. Explicaré un poco, sin extenderme, como las ACL pueden solucionarnos el día a día, o al menos hacernosla más cómoda.

Comenzaremos preparando el sistema de ficheros, que en mi caso es ext3 (Todo sistema de ficheros que soporte ACL servirá). Necesitaremos meter en el fichero /etc/fstab la opción acl y luego remontar la partición:

# mount -o remount /dev/hdx

Continuaremos con las ACL sobre el directorio /var/www, por ejemplo. Los ficheros que contiene ya han sido creados con anterioridad, por lo que tendremos que aplicar la ACL recursivamente, dándole al usuario www-data permisos de lectura y ejecución sobre los ficheros/directorios recursivamente.

# setfacl -R -m u:www-data:r-x /var/www

Esto es como utilizar chmod, por lo que estamos en las mismas. Lo bonito, lo que más me gusta, son las Default ACL, que podemos decir que es una especie de heredar permisos del directorio padre. Imprescindibles. La idea será que todo elemento nuevo creado dentro de /var/www herede determinados permisos. Las ACL por defecto solamente se pueden aplicar a directorios, y si intentáis aplicársela a un fichero os mandará a tomar por el saco sutilmente.

# setfacl -d -m u:www-data:r-x /var/www

Lo que acabamos de hacer está bien si comenzamos a crear el arbol de directorios, pero imaginemos que tenemos el directorio /var/www/web1/upload. Ese directorio no se verá afectado por la ACL por defecto, por lo que haremos una cosilla, buscaremos todos los directorios y le aplicaremos la ACL:

# find /var/www -type d -exec setfacl -d -m u:www-data:r-x {} ;

Ahora vamos a comprobar que las ACL se han aplicado bien, algo muy importante. El comando es getfacl y su uso es bien sencillo para lo que vamos a hacer:

# getfacl /var/www
getfacl: Removing leading “/” from absolute path names
# file: var/www
# owner: root
# group: root
user::rwx
user:www-data:r-x
group::r-x
mask::r-x
other::r-x
default:user::rwx
default:user:www-data:r-x
default:group::r-x
default:mask::r-x
default:other::r-x

Vaya! other tiene permiso de lectura y ejecución en ese directorio. No me gusta eso…

# setfacl -R -m other::— /var/www
# find /var/www -type d -exec setfacl -d -m other::— {} ;

Ahora queda utilizar getfacl como hicimos antes para comprobar que los permisos son correctos.

Al igual que hemos utilizado other:: podríamos utilizar user:: o group::, que son elementos especiales.

Antes he puesto un ejemplo en el que aplicaba determinados permisos a un usuario sobre un fichero/directorio. Para hacer lo mismo pero con un grupo, se utilizará:

# setfacl -m g:NombreGrupo:permisos /var/www

Hasta ahora hemos aplicado nuevos permisos, pero por si existe la duda, modificarlos es idéntico, utilizando el flag -m y modificando el penúltimo elemento. Supongamos que queremos que el usuario www-data tenga permisos de escritura en determinado directorio:

# setfacl -R -m u:www-data:rwx /var/www/web1/upload

Ese directorio y todos los existentes podrán ser modificados por ese usuario, pero… ¿Y los ficheros nuevos? No, podrán ser creados, pero no modificados posteriormente, pues no hemos establecido una ACL por defecto para ese usuario con permisos de escritura para los ficheros/directorios nuevos que se vayan a crear en ese directorio, o si existe, puede que sea incorrecta, por lo que lo estableceremos como necesitemos:

# find /var/www/web1/upload -type d -exec setfacl -d -m u:www-data:rwx {} ;

También puede ocurrir algo muy común, que nos equivoquemos e introdujamos un usuario/grupo incorrecto en la ACL, ensuciando esta. Pana ACL usaremos el flag -x.

# setfacl -x u:www-data /directorio/secreto
# setfacl -d -x u:www-data /directorio/secreto

Existen otras opciones interesantes de setfacl como eliminar solamente las ACL por defecto con el flag -k o eliminar todas las ACL normales y por defecto con el flag -b.

Me queda decir que al igual que podéis establecer los permisos con letras, lo podéis hacer en octal, de 0 a 7:

# setfacl -m u:www-data:5 /elemento2

Tenéis algunos ejemplos interesantes que no he ilustrado como copiar las ACL de un elemento a otro en el manual, man setfacl.

8 Responses to “Listas de control de acceso en Linux”


  1. 1 xfw ® 30 octubre 2007 a las 20:25

    Ostia como te aburres nin, ya veo que lo de los tallarines te dejó jodido XDD, pero si ya no hablabas de linux pa na, que te nos hbías pasao al llau escuru :S

    Un abrazuuu

    Wi ®

  2. 2 Pola_De_A 30 octubre 2007 a las 21:31

    Joer, pense que se te habia olvidado usar linux, el MCSA / Technet y sus sikarios te habian comido la cabeza xDDDDDD

    Ya sabes siempre soy muy radical en mis afirmaciones…

  3. 3 Gura 31 octubre 2007 a las 10:14

    Ya veis… me toca lidiar a diario con ello. xD

  4. 4 bastian 31 octubre 2007 a las 19:20

    Interesante artículo. No hace mucho le eché un ojo a esto, pero no llegué a probarlo por falta de tiempo.

  5. 5 jlan 8 noviembre 2007 a las 11:47

    Ya ves, a mi los rollos spectra vs pinguin no me interesan demasiado (soy algo propinguin), pero estos “articulos resumen” son lo que relamente nos atrae de este blog.
    A veces hasta me intereso por los articulos de spectra y el lado oscuro.
    Un saludo

  6. 6 Juanillo 10 noviembre 2007 a las 00:49

    Muy bueno Gura. Había cosas que no pillaba, pero gracias a tu peazo de articulín me ha quedado mucho más claro tío.
    Gracias!!

  7. 7 Gura 10 noviembre 2007 a las 13:37

    Si es útil, dos veces bueno😉


Comments are currently closed.



Las opiniones reflejadas en este blog son personales o ni siquiera son opiniones, y bajo ningún concepto representan las estrategias, opiniones o posturas de mi empresa actual, ni de ninguna en las que he trabajado, así como tampoco de ninguno de los clientes o proveedores de todas ellas.
La información se proporciona como está, sin garantías de ninguna clase, y no otorga ningún derecho. Los comentarios pertenecen a sus autores y bajo ningún concepto el autor del blog se hará responsable de los mismos.

Categorías

Archivos


A %d blogueros les gusta esto: