Organización de permisos mediante grupos y listas de control

Objetivo:

Implementar y configurar permisos avanzados en Linux mediante Listas de Control de Acceso (ACL) y bits especiales de seguridad (SUID, SGID y Sticky Bit) para resolver escenarios complejos de compartición de archivos en entornos multiusuario.

Escenario:

  • Herramientas: Terminal Linux, setfacl, getfacl, chmod, ls -l.
  • Conceptos analizados: Control de acceso discrecional granular (ACLs), herencia de grupos mediante el bit SGID, ejecución privilegiada temporal (SUID) y protección de ficheros compartidos frente a borrados por terceros (Sticky Bit).
  • Proceso clave: Creación de un directorio corporativo colaborativo, asignación de permisos flexibles con ACLs, configuración de herencia de grupo y prueba práctica de restricción de borrado con el Sticky Bit.

Escenario Real: Colaboración departamental con protección de datos compartidos

En el departamento de proyectos de una empresa, varios usuarios necesitan colaborar intensamente en una carpeta común, pero un empleado externo de soporte técnico necesita acceso de lectura exclusivo a un archivo específico sin pertenecer al grupo principal. Además, en el directorio temporal compartido, los usuarios borran por error los ficheros creados por sus compañeros. Como administrador de sistemas, debes aplicar ACLs granulares, herencia automática de grupos mediante SGID y el Sticky Bit para garantizar la integridad colaborativa.

El modelo tradicional de permisos POSIX (propietario, grupo, otros) resulta insuficiente cuando necesitamos conceder permisos específicos a un usuario concreto que no es el propietario ni pertenece al grupo principal. Para solucionar estas limitaciones, Linux incorpora las Listas de Control de Acceso (ACLs) y los bits especiales, que amplían drásticamente el control sobre los inodos y directorios. NOTA: Para que las ACLs funcionen correctamente en un sistema de archivos ext4, el disco debe haber sido montado con soporte de ACLs (lo cual es el comportamiento predeterminado en las distribuciones modernas de Linux, pero puede verificarse mediante el comando tune2fs -l).

Instrucciones:

Fase 1: Preparación del entorno y usuarios de prueba:

  • Crear un directorio de trabajo para la práctica avanzada:
    • mkdir -p ~/practica_acl/proyecto_colaborativo
    • cd ~/practica_acl
  • Crear tres usuarios del sistema simulados con diferentes perfiles:
    • sudo useradd -m dev_senior
    • sudo useradd -m dev_junior
    • sudo useradd -m auditor_externo

Fase 2: Asignación de permisos granulares mediante ACLs (setfacl / getfacl):

  • Imaginemos que queremos que auditor_externo tenga acceso de lectura estricto a un documento confidencial dentro de la carpeta, sin modificar los permisos generales del propietario ni del grupo.
  • Creamos un archivo de prueba en el directorio:
    echo "Informe de auditoría técnica" > proyecto_colaborativo/informe.txt
  • Conceder permiso de lectura al usuario externo mediante el comando setfacl:
    setfacl -m u:auditor_externo:r-- proyecto_colaborativo/informe.txt
  • Desglose de los parámetros clave:
    • -m (modify): Modifica o añade una nueva regla ACL al archivo o directorio.
    • u:auditor_externo:r--: Especifica que al usuario (u) llamado auditor_externo se le asigna el permiso de lectura (r--).
  • Verificar las ACLs aplicadas utilizando el comando de consulta:
    getfacl proyecto_colaborativo/informe.txt
  • Observa en la salida cómo aparece un signo + junto a los permisos tradicionales en el comando ls -l, indicando que el archivo contiene ACLs activas.

Fase 3: Configuración de herencia automática mediante el bit SGID:

  • Cuando varios usuarios crean archivos dentro de una misma carpeta compartida, por defecto el grupo propietario del nuevo archivo pasa a ser el grupo principal del usuario que lo creó, rompiendo la colaboración. Al activar el SGID (Set Group ID) en un directorio, todos los archivos y subcarpetas creados en su interior heredarán automáticamente el grupo propietario del directorio padre.
  • Crear un grupo de proyecto y asociarlo al directorio:
    • sudo groupadd equipo_dev
    • sudo chown :equipo_dev proyecto_colaborativo/
  • Aplicar el bit SGID al directorio mediante notación simbólica (+s) o sumando el valor 2 en octal (2770):
    sudo chmod g+s proyecto_colaborativo/
  • Verificar el cambio ejecutando ls -ld proyecto_colaborativo/ (observa la letra s en la posición del grupo: drwxr-sr-x).

Fase 4: Protección de directorios compartidos mediante el Sticky Bit:

  • El Sticky Bit es un bit de seguridad especial que se aplica normalmente sobre directorios con permisos públicos de escritura (como /tmp). Impide que un usuario borre o renombre un archivo dentro del directorio si no es el propietario legítimo de dicho archivo, aunque tenga permisos de escritura sobre la carpeta contenedora.
  • Crear un directorio temporal de intercambio:
    mkdir proyecto_colaborativo/temporal_compartido
  • Dar permisos totales de escritura a todo el mundo en esa subcarpeta:
    chmod 777 proyecto_colaborativo/temporal_compartido
  • Activar el Sticky Bit mediante el modificador simbólico +t (o sumando el valor 1 en octal, ej. 1777):
    chmod +t proyecto_colaborativo/temporal_compartido
  • Comprobar la configuración ejecutando ls -ld proyecto_colaborativo/temporal_compartido (observa la letra t al final de los permisos: drwxrwxrwt).

Verificación:

  • Ejecutar una auditoría general de la estructura de ACLs recursivas para comprobar que las reglas se propagan correctamente: getfacl -R proyecto_colaborativo/

Posibles errores y resolución de problemas:

Si al intentar configurar ACLs en una partición la terminal devuelve el mensaje de error setfacl: : Operation not supported, significa que el sistema de ficheros actual no tiene habilitado el soporte de Listas de Control de Acceso.

  • Solución: Vuelve a montar la partición incluyendo explícitamente el parámetro de opciones de montaje acl (ej: sudo mount -o remount,acl /punto_montaje) o asegúrate de activarlo permanentemente en el archivo /etc/fstab.

Preguntas de reflexión:

  1. ¿Qué limitación principal de los permisos tradicionales POSIX resuelven las Listas de Control de Acceso (ACLs) en la administración de sistemas Linux?
  2. ¿Qué función cumple exactamente el bit especial SGID cuando se configura sobre un directorio compartido de trabajo en equipo?
  3. ¿Por qué es indispensable configurar el Sticky Bit en directorios con permisos de escritura abiertos a todos los usuarios como /tmp?
  4. ¿Qué diferencia operativa existe entre el bit especial SUID y el bit SGID en la ejecución de ficheros binarios o scripts?
Haz clic aquí para ver las soluciones y explicaciones

1. ¿Qué limitación principal de los permisos tradicionales POSIX resuelven las Listas de Control de Acceso (ACLs) en la administración de sistemas Linux?

El modelo tradicional solo permite definir permisos para una terna fija (un único usuario propietario y un único grupo), obligando a crear estructuras de grupos complejas o a abrir permisos en exceso si se desea dar acceso puntual a usuarios externos. Las ACLs permiten añadir reglas personalizadas asociando permisos directos a múltiples usuarios o grupos específicos de forma independiente sobre un mismo archivo o directorio.


2. ¿Qué función cumple exactamente el bit especial SGID cuando se configura sobre un directorio compartido de trabajo en equipo?

Fuerza a que cualquier archivo o subcarpeta creado dentro de ese directorio herede automáticamente el grupo propietario de la carpeta principal en lugar del grupo personal del usuario creador. Esto evita problemas de permisos cruzados y permite que todos los miembros del equipo puedan editar y gestionar los ficheros creados por sus compañeros sin interrupciones.


3. ¿Por qué es indispensable configurar el Sticky Bit en directorios con permisos de escritura abiertos a todos los usuarios como /tmp?

Porque en un directorio con permisos 777 cualquier usuario puede borrar o modificar archivos de otros, ya que el permiso de escritura sobre la carpeta otorga control sobre sus elementos internos. El Sticky Bit restringe esta acción, permitiendo que un archivo solo pueda ser borrado o renombrado por su propietario legítimo, por el propietario del directorio o por el usuario root.


4. ¿Qué diferencia operativa existe entre el bit especial SUID y el bit SGID en la ejecución de ficheros binarios o scripts?

Cuando se aplica el SUID sobre un archivo ejecutable, el programa se ejecuta temporalmente con los privilegios del usuario propietario del archivo (por ejemplo, root en comandos como passwd). Cuando se aplica el SGID sobre un ejecutable, el programa se ejecuta con los privilegios del grupo propietario del fichero.