Capítulo 5. Listas de control de acceso en Linux

Tabla de contenidos

5.1. Permisos de archivo tradicionales
5.2. Ventajas de las ACL
5.3. Definiciones
5.4. Gestión de las ACL
5.5. Compatibilidad de ACL con las aplicaciones
5.6. Información adicional

Resumen

Las ACL (listas de control de acceso) de POSIX se pueden emplear como una ampliación del concepto tradicional de permisos para los objetos de los sistemas de archivos. Con las ACL, los permisos se pueden definir de forma más flexible de lo que se entiende tradicionalmente por el concepto de permiso.

El término ACL de POSIX sugiere que se trata de un estándar verdadero de POSIX (interfaz de sistema operativo portátil). Los estándares de borrador POSIX 1003.1e y POSIX 1003.2c se han eliminado por diversas razones. En cualquier caso, los ACL que se encuentran en muchos sistemas que pertenecen a la familia UNIX se basan en dichos borradores, mientras que la aplicación de las ACL de los sistemas de archivos, según se describe en el siguiente capítulo, siguen igualmente estos dos estándares. Ambos estándares pueden verse en http://wt.xpilot.org/publications/posix.1e/.


5.1. Permisos de archivo tradicionales

Los aspectos básicos de los permisos de archivos de Linux se explican en la Sección 3.2, “Usuarios y permisos de acceso” (↑Inicio). Algunas funciones avanzadas son el bit setuid, setgid y adhesivo.

5.1.1. El bit setuid

En algunos casos, los permisos de acceso pueden ser demasiado restrictivos. Por tanto, Linux cuenta con ajustes adicionales que permiten el cambio temporal del usuario y la identidad del grupo actuales para una acción en concreto. Por ejemplo, el programa passwd normalmente necesita permisos de usuario Root para acceder a /etc/passwd. Este archivo contiene información importante como los directorios personales de los usuarios o los ID de usuario y de grupo. Por tanto, un usuario normal no podría cambiar passwd, porque sería demasiado peligroso otorgar a todos los usuarios acceso directo a este archivo. Una solución posible a este problema es el mecanismo setuid. setuid (definir ID de usuario) es un atributo de archivo especial que indica al sistema que debe ejecutar los programas marcados con un ID de usuario en concreto. Considere el comando passwd:

-rwsr-xr-x  1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd

Puede ver que la s indica que el bit setuid está definido para el permiso del usuario. Mediante el bit setuid, todos los usuarios que inician el comando passwd lo ejecutan como usuario Root.

5.1.2. El bit setgid

El bit setuid se aplica a los usuarios. Sin embargo, hay también una propiedad equivalente para grupos: el bit setgid. Un programa para el que se ha definido este bit se ejecuta con el ID de grupo con el que se ha guardado, sin importar el usuario que lo inicia. Por tanto, en un directorio con el bit setgid, todos los archivos o subdirectorios recién creados se asignan al grupo al que pertenece el directorio. Considere el directorio de ejemplo siguiente:

drwxrws--- 2 tux archive 48 Nov 19 17:12  backup

Puede observar que la s indica que el bit setgid está definido para el permiso de grupo. El propietario del directorio y los miembros del grupo archive pueden acceder a este directorio. Los usuarios que no sean miembros de este grupo se “asignan” al grupo respectivo. El ID de grupo vigente de todos los archivos escritos será archive. Por ejemplo, un programa de copia de seguridad que se ejecuta con el ID de grupo archive es capaz de acceder a este directorio incluso sin privilegios de usuario Root.

5.1.3. El bit adhesivo

Existe también el bit adhesivo. Es distinto si pertenece a un programa o a un directorio ejecutable. Si pertenece a un programa, un archivo marcado de esta forma se carga en la RAM para evitar la necesidad de obtenerlo del disco duro cada vez que se usa. Este atributo apenas se utiliza porque los discos duros modernos son lo suficientemente rápidos. Si este bit se asigna a un directorio, impide que los usuarios supriman los archivos de otros usuarios. Los ejemplos típicos incluyen los directorios /tmp y /var/tmp:

drwxrwxrwt 2 root root 1160 2002-11-19 17:15 /tmp