Aquí es donde entran en juego los permisos basados en Listas de
Control de Acceso, más conocidas como ACLs. En este sistema de
permisos los ficheros no tienen un juego fijo de permisos (como
en el modelo tradicional, que tiene tres permisos y sólo tres),
sino que los permisos del fichero son en realidad una lista de
Entradas de Control de Acceso (o ACEs). Cada una de estas ACEs
contiene un par (usuario/grupo, permiso) que indica un tipo de
acceso determinado para un usuario o grupo, y el conjunto de
todas ellas forman la ACL que marca el tipo de acceso permitido
en un fichero.
Este sistema es el utilizado entre otros, por los sistemas de
ficheros NTFS (de Windows NT y sucesores), el sistema UFS de
Solaris y el sistema HFS de HP-UX.
Hay un dato que se suele desconocer sin embargo y es que el
sistema de ficheros ext2, desde su diseño original, previó la
inclusión de este tipo de sistemas de control de acceso y
estaban incluídos los enganches (hooks) necesarios para su
implementación posterior, de forma 100% transparente y
compatible hacia atrás.
Pues bien, desde hace varios años existen varios proyectos para
incorporar los sistemas basados en ACL en los diferentes
sistemas de ficheros soportados por Linux, y especialmente en
ext2 (por ser el tipo de sistema de ficheros más extendido hasta
el momento en los sistemas Linux).
Uno de ellos es el proyecto
RSBAC, cuyos objetivos son mucho más ambiciosos (realmente
mucho más, ya que su objetivo es conseguir un sistema Linux con un
nivel de seguridad equivalente al nivel B1 del antiguo Libro
Naranja -TCSEC-), pero que incorpora también una implementación
100% operativa de ACLs para ext2.
Otro de ellos es el proyecto
Linux Extended Attributes and Access Control Lists, que
originalmente tenía como objetivo incorporar el sistema de ACLs
al sistema de ficheros ext2 (y mas tarde también ext3 cuando este
apareció). Posteriormente, al ser el sistema de ACLs elegido por
el equipo de Samba para su
implementación de ACLs sobre ext2 (para poder ofertar recursos
compartidos via SMB con ACLs al igual que los sistemas Windows
NT y posteriores) ha sido el candidato oficial de ACLs en ext2
para su inclusión definitiva en el kernel. De hecho, desde la
versión 2.5.2x forma parte del kernel estándar.
Para ello se ha hecho un esfuerzo de coordinación y
estandarización bastante grande con los desarrolladores de otros
sistemas de ficheros como XFS y JFS (principalmente, aunque no
sólo con estos) que también soportaban ACLs desde su origen. La
idea es ofertar una capa abstracta común en el VFS (Virtual
File System) de forma que las aplicaciones y el resto del
sistema operativo trabajen por igual, y con la misma API, con
cualquiera de los sistemas de ficheros que soportan ACLs
(ext2/ext3, XFS, JFS, ReiserFS, etc.).
El resultado: ya están disponibles los sistemas de ficheros con
ACLs en el núcleo estándar, en su versión de desarrollo. Sin
embargo, no es necesario esperar hasta la estabilización del
actual núcleo de desarrollo para disfrutar de las ventajas de
las ACLs. Todos los sistemas de ficheros mencionados arriba
están disponibles bien como parte del kernel estándar, bien como
parches para las versiones estables del núcleo. Y son parches
con calidad de producción, con lo cual son perfectamente
utilizables en entornos cuya estabilidad sea una condición
indispensable.
En el caso del sistema de ficheros ext2/ext3, que son el
objetivo del proyecto Linux Extended Attributes and Access
Control Lists, las ACLs son incluso transparentes para aquellos
núcleos que no lleven incorporados los parches necesarios, de
forma que si accidentalmente se arranca el sistema con un núcleo
sin soporte para ACLs no ocurre absolutamente nada, salvo
obviamente que no disponemos de las características avanzadas de
las ACLs y sólo tenemos a nuestra disposición el modelo de
permisos tradicional.
A condición de que tengamos un ejecutable de e2fsck que soporte
ACLs, incluso si el núcleo no lo soporta, podemos ejecutar
e2fsck sobre el sistema de ficheros de forma segura. En caso de
tener un e2fsck sin soporte de ACLs, el único problema que
tendremos en este caso es la pérdida de las ACLs, pero nunca la
pérdida de datos.
Las versiones de e2fsprogs (el paquete donde se incluyen las
utilidades de ext2), a partir de la versión 1.28 ya incorporan
soporte de serie para Atributos Extendidos (Extended Attributes
o EAs), que es la característica del sistema de ficheros
necesaria para poder implementar las ACLs. En el sitio del
propio proyecto se pueden encontrar parches
para algunas versiones anteriores de e2fsprogs, en caso de
ser necesario.
En la segunda parte de este artículo describiremos como se puden
incorporar todos esos parches a nuestro sistema para poder disfrutar
de las ACLs en los sistemas de ficheros ext2/ext3, y ver algunos
ejemplos de su uso.
Saludos. Iñaki.