Listas de Control de Acceso (ACLs) para ext2/ext3 (II)
|
|
Por iarenaza
departamento compila-que-te-compila , Sección Tecnología Puesto a las Sun Oct 20th, 2002 at 04:11:43 PM CET
|
|
Vimos en la primera parte de esta serie cuales son los conceptos básicos que se esconden tras las Listas de Control de Acceso o ACLs así como los sistemas de ficheros Linux que son capaces de usar este tipo de control de acceso, y nos centramos en ext2/ext3.
En esta nueva entrega entramos de lleno de lleno en la fase de compilación e instalación de todo el software necesario para poder disfrutar de las ACLs en nuestros sistemas Linux.
|
La pregunta por tanto es: ¿qué debemos hacer para
disfrutar de ACLs en nuestros
sistemas de ficheros ext2/ext3 ya mismo? Lo que sigue es un
resumen de las
instrucciones dadas en el propio sitio del proyecto, donde
se indica paso a paso todo el proceso a seguir. Voy a presuponer
en este caso que nuestro sistema no dispone de sistemas de
ficheros con EAs y ACLs, con lo cual me voy a saltar los pasos
de copia de respaldo de las ACLs actuales (y la limpieza del
sistema).
-
Lo primero es obtener una copia de e2fsprogs que soporte EAs
y ACLs. La version 1.28 o posterior servirá. En caso
contrario, hay que obtener los parches mencionados en la primera
parte del artículo y
las fuentes de nuestra version actual de e2fsprogs
(seguramente nuestra distribución tendrá disponibles los
fuentes en su repositorio habitual) y construir de nuevo los
ejecutables e instalarlos en el sistema. Alternativamente
podemos optar por instalar directamente una versión 1.28 o
posterior directamente, sin parchear la actualmente usada en
nuestra distribución.
-
A continuación debemos compilar un kernel con soporte para
EAs y ACLs. Para ello debemos descargar los parches
correspondientes a nuestro núcleo y aplicarlos de la
siguiente forma (el directorio linux/ indica la
ubicación donde tenemos desempaquetadas las fuentes del
núcleo):
$ cd linux/
$ zcat ../linux-a.b.c-xattr-x.y.z.diff.gz | patch -p1
$ zcat ../linux-a.b.c-acl-x.y.z.diff.gz | patch -p1
Una vez parcheado es necesario incluir en la compilación las
siguientes opciones al menos (disponibles en la categoria
File Systems):
CONFIG_FS_POSIX_ACL=y (POSIX Access Control Lists)
CONFIG_EXT3_FS_XATTR=y (Ext3 extended attributes)
CONFIG_EXT3_FS_POSIX_ACL=y (Ext3 POSIX Access Control Lists)
CONFIG_EXT2_FS_XATTR=y (Ext2 extended attributes)
CONFIG_EXT2_FS_POSIX_ACL=y (Ext2 POSIX Access Control Lists)
Los nombres pueden variar ligeramente de una versión del
kernel a otra. Las opciones xxx_XATTR son para activar los
Atributos Extendidos, y las opciones xxx_POSIX_ACL para
activar las ACLs. Los valores xxx_EXT2_xxx son para sistemas
de ficheros ext2 y los valores xxx_EXT3_xxx para ext3.
Existen otras dos opciones más (al menos en el kernel
2.4.19, que es el que estoy usando para escribir esto):
-
Ext2 extended attribute block sharing
(CONFIG_EXT2_FS_XATTR_SHARING): que permite el uso de un
mismo bloque común para almacenar los atributos
extendidos de varios nodos-i, en el caso de que dichos
atributos sean indénticos en todos los nodos-i.
-
Ext2 extended user attributes
(CONFIG_EXT2_FS_XATTR_USER): que permite a los procesos
de usuario almacenar atributos extendidos adicionales en
los nodos-i. Por ejemplo para almacenar cualquier tipo
de información adicional que dichos procesos deseen,
como el juego de caracteres usuado en el fichero (o
cualquier otra cosa que se nos ocurra).
Por supuesto, los dos valores anteriores existen de idéntica
forma para el sistema de ficherox ext3.
-
El siguiente paso es construir las utilidades que sirven
para gestionar los AEs y las ACLs de los ficheros:
getfattr, setfattr, getfacl,
setfacl, etc. Tenemos que descargar el paquete
attr que es necesario para poder construir despues el paquete
acl, que incluye las utilidades de gestión de las ACLs
en sí (el paquete attr incluye además algunas utilidades de
gestión de atributos extendidos).
Es conveniente revisar primero si existen versiones ya
empaquetas para nuestra distribución de Linux (tanto Debian
GNU/Linux como RedHat, entre otras, las tienen), y que sea
una versión de las mismas que sea compatible con la revisión
del parche aplicada al núcleo que acabamos de construir.
En caso de no tenerlas en nuestra distribución, no ser
compatibles o simplemente querer tener la última versión
disponible compilada por nosotros mismos, estos son los
pasos a seguir (necesitaremos el entorno de desarrollo
autoconf y todas la utilidades de
compilación/desarrollo habituales, más algún retoque
manual):
-
Desempaquetar las utilidades de gestión de Atributos
Extendidos (attr-2.0.10.src.tar.gz en el momento de
escribir esto):
tar xzvf attr-2.0.10.src.tar.gz
cd attr-2.0.10
A continuación tenemos que compilar las herramientas en
sí. Si nuestra distribución es RedHat o Debian
GNU/Linux, las utilidades vienen con los ficheros de
especificación y control necesarios para crear paquetes
nativos (ver el fichero doc/INSTALL).
En caso contrario, debemos compilar todo desde cero con
las siguientes instrucciones (en el directorio raíz de
los ficheros extraídos):
autoconf
./configure
make
su root
make install install-lib install-dev
Este último método dejará todos los ejecutables más las
bibliotecas de funciones de manejo de AEs bajo
/usr/local. En general el fichero
doc/INSTALL da las indicaciones necesarias para
obtener los ejecutables en cualquiera de los casos
(incluídas algunas indicaciones para deshabilitar el
código de depuración, etc).
-
Desempaquetar las utilidades de gestión de ACLs
(acl-2.0.18.src.tar.gz en el momento de
escribir esto):
tar xzvf acl-2.0.18.src.tar.gz
cd acl-2.0.18
A continuación tenemos que compilar las herramientas en
sí. Como en el caso anterior, si nuestra distribución
tiene ya compiladas estas utilidades y con compatibles
con la versión de los parches incluídos en el núcleo,
lo más sencillo es usar los paquetes nativos de la distribución.
En caso contrario, debemos compilar todo desde cero con
las siguientes instrucciones (en el directorio raíz de
los ficheros extraídos):
autoconf
./configure
make
su root
make install install-lib install-dev
Este último método dejará todos los ejecutables más las
bibliotecas de funciones de manejo de ACLs bajo
/usr/local. Como en el caso anterior, el
fichero doc/INSTALL da las indicaciones
necesarias para obtener los ejecutables en cualquiera de
los casos.
-
Por último debemos obtener una versión del paquete fileutils
parcheado para soportar EAs y ACLs. De lo contrario no
podremos copiar los ficheros con sus AEs y ACLs, sacar en
los listados la indicación de que hay acls adicionales a los
permisos tradicionales (ya que se siguen manteniendo los
permisos tradicionales), etc.
En el propio sitio del proyecto se puede encontrar el
parche para algunas versiones del paquete fileutils. En
general esta es la parte más complicada del proceso, al ser
un paquete completamente externo al sistema de ficheros y
las utilidades ext2/ext3. Los problemas se presentarán si la
versión de fileutils que vamos a utilizar no se corresponden
exactamente a las indicadas en los parches, ya que tendremos
que integrar parte de los cambios a mano, y eso siempre es
más complicado.
Una vez compilado e instalado todo lo mencionado en los puntos
anteriores ya tenemos todos los elementos necesarios para poder
disfrutar de los EAs y las ACLs en nuestros sistemas de ficheros
ext2/ext3. Sólo nos queda un último paso, indicar al núcleo que
en un determinado sistema de ficheros deseamos usar ACLs (y
EAs).
Para ello debemos editar el fichero /etc/fstab y añadir
una opción adicional a la de aquellos sistemas de ficheros a los
que queremos activar las ACLs : acl. También
podemos añadir una opción para indicar explícitamente que no
queremos usar las ACLs en un sistema de ficheros, aun si dicho
sistema de ficheros contiene ACLs: noacl. Por ejemplo,
si queremos activar las ACLs en el sistema de ficheros
/dev/hdc12 que tenemos montado en /samba, tendremos
una línea similar a la siguiente en /etc/fstab:
/dev/hdc12 /samba ext2 acl,rw 0 2
Existe un juego de opciones adicional para activar o desactivar
el uso de los AEs de usuario (si hemos optado por compilarlos en
nuestro núcleo): user_xattr y
nouser_xattr. Por cierto, que los valores por
defecto para todos los sistemas de ficheros ext2/ext3 en caso de
no especificar nada son noacl y
nouser_xattr.
Una vez hecho lo anterior, sólo nos resta arrancar con el nuevo
núcleo que acabamos de compilar y voilá!, ya tenemos
nuestras ACLs disponibles y listas para usar.
En la próxima entrega de la serie (yups, pensaba que todo iba a
caber en dos partes, pero la cosa se alarga y se alarga)
hablaremos de como se consultan las ACLs, como se modifican,
como se evaluan (y cual es el resultado en caso de haber varias
ACEs aplicables en una misma ACLs), que es la máscara de ACLs, y
como fijar las ACLs por defecto para los nuevos objetos creados.
Puede que, dependiendo de la longitud de la tercera entrega,
haya una cuarta donde se indique como usar las ACLs en una
aplicación real de producción: Samba.
Saludos. Iñaki.
|
|
|