Share on FacebookTweet about this on TwitterShare on Google+

Introducción

La configuración básica de permisos de Linux es la siguiente:

Permisos Ficheros Directorio Opción chmod
read Ver fichero Ver contenidos del directorio (por ej. mediante un ls -l) r or 4
write Editar Crear o eliminar ficheros del directorio w or 2
execute Ejecutar Acceder al directorio (cd) x or 1

Los ámbitos a los que se aplican los permisos son usuario, grupo y resto.
Las restricciones de permisos no se heredan. Por ejemplo en el caso siguiente, el usuario root tiene acceso de lectura y escritura al fichero, aunque los miembros de su grupo (root) solo tengan lectura (el mismo estará en ese grupo). El resto de usuarios del sistema también tienen acceso exclusivamente de lectura:

Esta configuración de permisos es suficientemente potente para la mayoría de usuarios de Linux. Podemos crear además grupos donde meter nuestros usuarios para que nos ayude a gestionar los usuarios. Sin embargo, esta configuración de permisos nos puede parecer (sobre todo si venimos de servidores Windows) y de hecho lo es, poco granular:
¿Qué pasa si queremos otro usuario en el sistema que también tenga permisos de escritura sobre el fichero?

Casos prácticos

Si bien los permisos que tiene Linux por defecto son suficientemente potentes y simples para los casos más habituales, en ocasiones podemos querer permisos más específicos (para determinados usuarios o grupos).
Es habitual que como desarrolladores colguemos nuestros sitios o aplicaciones web en local utilizando un servidor web Apache. En la instalación de Apache nos encontramos los siguientes permisos:

Solo el usuario root tiene permisos de escritura. El usuario www-data, que será el que se utiliza para mostrar la web no los necesita (a no ser que haga que escribir en algún fichero o directorio) y ni siquiera tiene acceso al shell:

Si nosotros como desarrolladores queremos editar el código de nuestro sitio web tendremos que añadir permisos al directorio para nuestro usuario específico. ¿Cómo lo hacemos?
La opción más sencilla sería cambiar el propietario de /var/www:

Opciones como dar el permiso al directorio a www-data y añadir a mi usuario de desarrollo a dicho grupo no son recomendables ya que el usuario www-data podría obtener permisos de escritura donde no debe. Además no es buena política utilizar los grupos del sistema para añadir usuarios en vez de utilizar grupos propios.
¿Pero que pasa si queremos dar permisos sobre el directorio a más de un usuario?
La opción más correcta sería dejar los permisos tal y como vienen por defecto e implementar listas de control de acceso de modo que añadamos a uno o varios usuario más (nuestros usuarios de desarrollo) para ese directorio específico.

Instalación de ACLs Y configuración del sistema de ficheros

Lo primero que tenemos que hacer es instalar el paquete de ACL’s si no está ya instalado por defecto (en Ubuntu 14.04 versión desktop ya viene por defecto):

Si el paquete ya viene instalado, lo normal es que el sistema de ficheros ya venga montado con ACL:

En el caso anterior mi disco está configurado mediante LVM y ya tiene acl instalado, así que no habría que hacer nada :-).

Si hubiera que instalar el paquete de acl, luego habría que configurar esta opción por defecto para nuestro sistema de ficheros en cuestión dentro del fichero /etc/fstab:

Una vez hecho esto, la siguiente vez que arrancásemos el sistema cogería las nuevas opciones y podríamos comprobarlo mediante el comano tune2fs o simplemente mediante un mount:

Configuración de ACLs

Para listar los permisos de un fichero o directorio que tiene ACL lo haremos mediante los comandos getfacl y setfacl.
Si creamos un fichero nuevo y vemos su acl:

Ahora damos permisos al usuario www-data. Veremos que posteriormente al hacer un ls nos sale un caracter “+” después de la lista de permisos indicando que existen ACL’s.

Veamos como queda ahora la configuración completa de permisos del fichero:

.

Si con el parámetro ‘-m’ cambiabamos las ACL, con ‘-x’ las borramos para un usuario concreto, y con ‘-b’ para todas las asignadas al fichero:

A la hora de asignar ACL para directorios, resulta interesante poder asignar unas ACL por defecto para todas aquellos subdirectorios que se vayan creando, así como los ficheros que contenga y se vayan metiendo. Vamos a asignar permiso total al usuario juanda para el directorio www-data, es prácticamente igual que con ficheros pero añadiendo la ‘d’ de default:

Si los permisos que tenemos no son los adecuados, puede ser debido a la máscara que tengamos configurada, que limita los permisos (ver permisos efectivos):

A continuación modificamos la máscara y vemos que desaparece el filtro:

Leave a Reply

Your email address will not be published. Required fields are marked *