I-node flags, ACL y atributos extendidos en GNU/Linux

Vimos en una entrada anterior la forma clásica en la que GNU/Linux trabaja con los permisos de los ficheros. Vamos a ver ahora las extensiones que se han añadido con el fin de complementar el sistema básico de permisos. Lo primero que vamos a ver son los I-node Flags. Estos son un grupo de flags que se pueden seleccionar en los ficheros para que tengan una consideración especial, por ejemplo el flag a hace que el fichero sea solo para añadir, o el flag i hace el fichero inmutable e indeleble. 

I-node Flags

Los I-node Flags son valores binarios que pueden estar presentes o ausentes en un determinado fichero. Estos valores no forman parte de las extensiones estándar de GNU/Linux sino que son propios del sistema de ficheros, concretamente de que ese sistema de ficheros implemente ese flag o no (algunos flags no están implementados, otros son experimentales, o de solo-lectura). 

Vamos a ver en una tabla los flags y su implementación en algunos sistemas de ficheros:

Constante Flag File System Detalle
FS_APPEND_FL a XFS,btrfs,ext3/ext4 Solo permite añadir (solo root puede seleccionarlo)
 FS_COMPR_FL c btrfs Contenido comprimido
FS_DIRSYNC_FL D btrfs,ext3/ext4 Fuerza que las actualizaciones de los directorios se realicen de forma sincrónica
FS_IMMUTABLE_FL i XFS,btrfs,ext3/ext4 Fichero inmutable: no están permitidos los cambios en el archivo o en los metadatos
FS_JOURNAL_DATA_FL j ext3/ext4 Mantienen un registro de los cambios de los datos y metadatos
FS_NOATIME_FL A XFS,btrfs,ext3/ext4 No actualizar nunca el tiempo de acceso
FS_NODUMP_FL d XFS,btrfs,ext3/ext4 No hacer backup, las herramienta de backup ignoran este fichero
FS_NOTAIL_FL t Reiserfs Deshabilita la función de empaquetado posterior de Reiserfs
FS_SECRM_FL s   Borrado seguro (no implementado)
FS_SYNC_FL S XFS,btrfs,ext3/ext4 Fuerza que los cambios se escriban de forma sincrónica (sin buffer)
FS_TOPDIR_FL T XFS,btrfs,ext3/ext4 Marca un directorio para un tratamiento especial (bloques de Orlov)
FS_UNRM_FL u   El fichero no se puede borrar (no implementado)

Es interesante resaltar que a pesar de que en referencia al borrado seguro (flag s) indico que no esta implementado en ningún sistema de ficheros, parece que algunos file system sobrescriben con ceros el contenido. De todas maneras esto no se considera un sistema seguro y es que la tarea de borrar de forma segura un archivo de un medio de grabación es sorprendentemente difícil

Comandos del sistema para trabajar con los I-node Flags:

 

Cuando seleccionamos un I-node flag en un directorio, este lo heredan automáticamente los nuevos ficheros y subdirectorios creados en ese directorio con las siguientes salvedades:

  • El flag D que se aplica solo a directorios, solo se hereda en directorios
  • El flag i aplicado a un directorio no se hereda a los fichero y subdirectorios nuevos ya que este flag impide que se creen ficheros y subdirectorios nuevos

Los flags que afectan al journal o a la escritura sincrónica (j, S y D) son fundamentalmente para usar en databases y no para el uso general de los administradores.

Tenemos que ser cuidadosos en aplicar alguno de estos flags (como el caso del flag i) ya que algunas aplicaciones pueden fallar como 'Operación no permitida' cuando el usuario tienen privilegios de acceso y pude ser desconcertante para otros usuarios/administradores

Atributos Extendidos

Los atributos extendidos se usan para aplicar listas de control de acceso ACL y capabilities (que veremos próximamente), pero también se pueden usar para guardar metadatos asociados a los ficheros.

Los atributos extendidos tienen nombres siguiendo la forma namespace.name, donde namespace corresponde a distintas clases de funcionalidades: user, trusted, system y security:

  • Los atributos extendidos user pueden ser manipulados por procesos sin privilegios, siguiendo los permisos de lectura escritura. Para leer el atributo es necesario el permiso de lectura el fichero. Para cambiar el atributo es necesario el permiso de escritura.
  • Los atributos trusted necesitan que el proceso sea privilegiado (CAP_SYS_ADMIN) para manipular el atributo
  • System se usa para las listas de control de acceso ACL
  • Security se utiliza para almacenar etiquetas de seguridad del sistema operativo y asociar capabilities a ficheros ejecutables (inicialmente ideado para soportar SELinux)

El componente name se usa para identificar de forma única un atributo dentro del namespace.

Para manejar atributos extendidos se usan setfattr y getfattr, en ubuntu están en el paquete attr:

sudo apt install attr

Uso de los comando del sistema para trabajar con los atributos extendidos:

 

Tenemos algunas limitaciones en el uso de los atributos extendidos:

  • Solo es posible crear atributos extendidos user en ficheros y directorios regulares
  • La longitud de un atributo extendido esta limitada a 255 caracteres
  • El valor de un atributo extendido esta limitado a 64 kB
  • En ext2, ext3, ext4, el total de bytes usados por los nombres y los valores de todos los atributos extendidos en ficheros esta limitado por el tamaño de un bloque de disco lógico único: 1024, 2048 o 4096 bytes
  • En JFS, hay una limitación máxima de 128 kB en el total de bytes usados por los nombres y valores de los atributos extendidos en un fichero

ACL - Access Control List (Listas de control de acceso)

Las listas de control de acceso ACL son una forma de ampliar el sistema tradicional de permisos que vimos de 9 + 3 bit asignados a propietario/grupo/otros. Cada fichero o directorio puede tener asociado un ACL que lista las reglas de permisos que se le aplican. 

Cada una de las reglas en un ACL se llama access control entry ACE (entrada de control de acceso). Estas entradas identifican el usuario o grupo al cual se le aplica y especifica el conjunto de permisos que se aplicaran a esa entidad.

Aunque son dos tipos de ACL los que podemos encontrar en entornos de la rama UNIX: POSIX ACL y NFSv4 ACL, GNU/Linux esta enfocado en POSIX ACL. Por tanto todos los sistemas de ficheros de GNU/Linux soportan este estándar incluyendo: XFS, btrfs, ZFS y ext2/ext3/ext4.

Cada entrada ACL consisten en las siguientes partes:

  • tag type: Indica si la entrada se aplica a un usuario, grupo o alguna otra categoría de usuario
  • tag qualifier: Este tag es opcional e identifica un usuario o grupo específico
  • permission set: especifica los permisos que se garantizan a la entrada (lectura, escritura, ejecución)

Los tab type tienen uno de los siguientes valores:

ACL_USER_OBJ Especifica permisos de acceso para el propietario del fichero
ACL_USER Especifica permisos de acceso para los usuarios identificados por el tag qualifier
ACL_GROUP_OBJ Especifica permisos de acceso para el grupo del fichero
ACL_GROUP Especifica permisos de acceso para el grupo identificado por el tag qualifier
ACL_MASK Especifica el acceso máximo de permisos que pueden otorgarse mediante entradas de tipo ACL_USER, ACL_GROUP_OBJ o ACL_GROUP
ACL_OTHER Especifica los permisos de acceso para usuarios que no coinciden con ninguna otra entrada en el ACL

 

Si queremos que los permisos asignados en la ACL de los fichero y directorios perduren cuando hacemos una copia de seguridad con tar, tenemos que añadir --acls cuando lanzamos la copia (por ejemplo: tar cvfj mycopia.tar.bz2 carpetas/ --acls)

Atributos extendidos desde entorno gráfico

En algunas ocasiones o con la idea de familiarizarnos con los atributos extendidos puede ser interesante trabajar de forma gráfica con las ACL. Para este fin podemos instalar Eiciel, que nos permite trabajar con las ACL y demás atributos extendidos de forma muy sencilla.

En ubuntu podemos instalarla con: 

sudo apt install eiciel

Trabajar con ACL en GNU/Linux

Conclusión

Si tenemos en cuenta la forma de trabajo clásica de los entornos de la rama UNIX en que los usuarios se conectan a un equipo central desde donde lanzan las tareas, o el uso de un equipo compartido por varios usuarios, los permisos clásicos son normalmente suficientes para la mayoría de las situaciones. En caso necesario podemos hacer uso de los ACL para tener mejor control de usuarios y grupos a los ficheros y directorios. De cualquier forma, donde el uso de ACL es realmente necesario es en las carpetas compartidas en un fileserver. Pero en este caso necesitamos el uso de un sistema de ficheros compartidos como NFS (Network File System), el estándar en el caso de GNU/Linux. Las ACL de NFSv4 proporcionan una granularidad más fina que los permisos típicos de lectura/escritura/ejecución POSIX y son similares a las ACL CIFS:

  • Distinguen permisos para crear ficheros en directorios de permisos para crear subdirectorios
  • Tienen un permiso separado para añadir
  • Tiene un permiso separado para datos, atributos de fichero, atributos extendidos y ACL
  • Controla la habilidad del usuario de tomar la propiedad de un fichero 

Esto, junto con un buen sistema de inicio de sesión único SSO, nos permite crear la granularidad necesaria en un file server. Pero eso ya será tema de un futuro artículo, para el siguiente continuaremos con capabilities, el sistema de dividir los permisos del todo poderoso root. 

Modificado por última vez enMartes, 28 Julio 2020 18:14
(1 Voto)
Etiquetado como :

Deja un comentario

Asegúrese de introducir toda la información requerida, indicada por un asterisco (*). No se permite código HTML.