Uso de listas de control de acceso (ACL)

En esta práctica del módulo de Sistemas Operativos Monopuesto, aprenderemos a configurar Listas de Control de Acceso (ACLs) avanzadas para otorgar permisos granulares a usuarios específicos sobre una carpeta compartida, aplicando gestión de herencia o bloqueo de la misma en entornos Windows y GNU/Linux mediante comandos de consola.

Objetivo:

Configurar permisos avanzados de lectura sin privilegios de escritura para un usuario determinado sobre un directorio protegido, utilizando comandos de administración de ACLs en ambos sistemas operativos.

Escenario:

  • Un equipo con sistema operativo Windows o GNU/Linux.
  • Acceso a la consola de comandos con privilegios de administrador o superusuario.
  • Dos usuarios locales creados previamente para realizar las pruebas de acceso.

Instrucciones:

Opción A: Entorno Windows (Gestión de ACLs mediante icacls)

  1. Creación de la carpeta y verificación inicial:
    • Abre el Símbolo del sistema (CMD) o PowerShell como administrador.
    • Crea una carpeta de pruebas: mkdir C:\carpeta_compartida
  2. Aplicación de la ACL avanzada bloqueando herencia:
    • Para deshabilitar la herencia de permisos heredados de carpetas superiores y convertir los permisos en explícitos, ejecuta:
      icacls C:\carpeta_compartida /inheritance:d
    • Para otorgar permisos específicos de lectura y ejecución (RX) al usuario user1 denegando la modificación, ejecuta:
      icacls C:\carpeta_compartida /grant user1:(OI)(CI)(RX)
      Nota: Los parámetros (OI) y (CI) indican que la herencia se propaga a los objetos y subdirectorios hijos.
    • Consulta la ACL resultante con el comando: icacls C:\carpeta_compartida

Opción B: Entorno GNU/Linux (Gestión de ACLs POSIX mediante setfacl)

  1. Creación de la estructura y comprobación del soporte ACL:
    • Abre una terminal con privilegios de superusuario.
    • Crea la carpeta de pruebas: sudo mkdir /srv/carpeta_compartida
  2. Configuración de la ACL avanzada con setfacl:
    • Para asignar permisos de lectura y ejecución específicos al usuario user1 sin modificar los permisos POSIX tradicionales, ejecuta:
      sudo setfacl -m u:user1:rx /srv/carpeta_compartida
    • Para configurar la herencia por defecto de modo que cualquier nuevo archivo o subcarpeta creado dentro de este directorio herede automáticamente esta regla para user1, ejecuta:
      sudo setfacl -d -m u:user1:rx /srv/carpeta_compartida
    • Verifica la aplicación correcta de las ACLs ejecutando el comando de consulta:
      getfacl /srv/carpeta_compartida

Verificación

  1. Comprueba que los comandos de configuración de ACLs se han aplicado sin errores en la plataforma seleccionada.
  2. Verifica mediante icacls o getfacl que el usuario específico cuenta exactamente con permisos de lectura pero carece de permisos de escritura.
  3. Inicia sesión con el usuario afectado e intenta crear un fichero dentro de la carpeta para comprobar que el sistema operativo bloquea la acción por falta de privilegios.

Preguntas de reflexión:

  1. ¿Por qué es necesario utilizar Listas de Control de Acceso (ACLs) avanzadas en lugar de depender únicamente del modelo clásico de permisos POSIX (UGO) cuando queremos dar privilegios distintos a dos usuarios diferentes que pertenecen al mismo grupo?
  2. ¿Qué implicaciones de seguridad tiene el bloqueo de herencia (inheritance) al configurar una carpeta protegida y qué ocurre con los permisos previos que arrastraba desde el directorio raíz?
  3. ¿Qué diferencia técnica existe entre aplicar una ACL de acceso directo sobre una carpeta existente frente a configurar una ACL predeterminada (default) orientada a la herencia en subdirectorios futuros en Linux?
Haz clic aquí para ver la solución orientativa

1. ¿Por qué es necesario utilizar Listas de Control de Acceso (ACLs) avanzadas en lugar de depender únicamente del modelo clásico de permisos POSIX (UGO)...

El modelo POSIX tradicional limita la asignación de permisos a una sola entidad de grupo y una de propietario. Si dos usuarios diferentes pertenecen al mismo grupo pero uno necesita permisos de lectura y otro permisos de escritura total, el sistema tradicional no permite diferenciarlos sin alterar la estructura de grupos o crear roles artificiales.

Las ACLs resuelven esta limitación permitiendo adjuntar una lista personalizada de reglas independientes para múltiples usuarios y grupos de manera específica sobre un único archivo o directorio, sin alterar los roles principales UGO.


2. ¿Qué implicaciones de seguridad tiene el bloqueo de herencia al configurar una carpeta protegida y qué ocurre con los permisos previos?

Al bloquear la herencia (inheritance:d en Windows o eliminar reglas heredadas en sistemas de archivos avanzados), la carpeta deja de aceptar automáticamente los permisos que le transmitían los directorios superiores (como la partición principal o la carpeta de usuario).

Dependiendo de la opción elegida al bloquearla, los permisos heredados previamente pueden convertirse en explícitos o eliminarse por completo. Esto aporta una gran ventaja de seguridad para directorios confidenciales, ya que se garantiza que ningún usuario sin autorización explícita pueda acceder a la carpeta por haber heredado privilegios de niveles superiores del árbol de directorios.


3. ¿Qué diferencia técnica existe entre aplicar una ACL de acceso directo sobre una carpeta existente frente a configurar una ACL predeterminada (default) orientada a la herencia en subdirectorios futuros en Linux?

Una ACL de acceso estándar (aplicada con setfacl -m) modifica los permisos únicamente de los ficheros y directorios que ya existen en ese preciso instante.

En cambio, una ACL predeterminada o de herencia (aplicada con el modificador -d) actúa como una plantilla de seguridad: no afecta directamente a la carpeta actual, sino que asegura que **todos los subdirectorios y ficheros que se creen en el futuro** dentro de esa ruta hereden automáticamente las mismas reglas de control de acceso, evitando que queden desprotegidos o con permisos predeterminados inseguros (como el umask del sistema).