1. Por qué las credenciales son el objetivo principal

Los atacantes rara vez rompen un sistema cuando pueden iniciar sesión en él. Utilizar credenciales válidas, ya sean robadas, adivinadas, compradas o obtenidas mediante ingeniería social, es una de las técnicas más eficaces porque el acceso resultante es indistinguible del legítimo para la mayoría de los controles de seguridad. MITRE ATT&CK la recoge como Valid Accounts (T1078) y la sitúa a la vez como táctica de acceso inicial, persistencia, escalada de privilegios y evasión de defensas.

Por este motivo, la autenticación y el control de acceso son la primera línea de defensa de cualquier arquitectura y el punto en el que más suele fallar la seguridad real de una organización. Esta guía forma parte del contenido «Configuración de sistemas de control de acceso y autenticación de personas» del módulo y desarrolla los cinco criterios de evaluación del resultado de aprendizaje correspondiente:

Criterio Qué se debe saber definir Capítulo

a

Mecanismos de autenticación según los distintos factores

Fundamentos y capítulos siguientes

b

Protocolos y políticas basados en contraseñas y frases de paso

Factor de conocimiento

c

Protocolos y políticas basados en certificados digitales y tarjetas inteligentes

Factor de posesión y Autenticación criptográfica

d

Protocolos y políticas basados en tokens y contraseñas de un solo uso

Factor de posesión

e

Protocolos y políticas basados en características biométricas

Factor de inherencia

Cada capítulo analiza, además, las principales vulnerabilidades y tipos de ataque de cada mecanismo, como exigen los criterios, y cierra con una batería de ejercicios prácticos reproducibles en una máquina virtual Linux de pruebas.

Este capítulo presenta el vocabulario y los modelos que usan los demás. Las técnicas de gestión de credenciales, las infraestructuras de clave pública, el control de acceso a la red y la gestión de cuentas privilegiadas se estudian con más profundidad en el contenido «Administración de credenciales de acceso a sistemas informáticos». Aquí se explican solo en la medida necesaria para comprender la autenticación.

2. El modelo AAA

Todo acceso a un recurso atraviesa cuatro fases consecutivas. Las tres primeras se conocen como modelo AAA, por las iniciales en inglés de Authentication, Authorization y Accounting. Esta guía añade la identificación al principio, porque es la fase que se confunde con más frecuencia con la autenticación.

Modelo AAA: identificación
Figura 1. Modelo AAA: identificación, autenticación, autorización y trazabilidad

2.1. Identificación

Es el acto de declarar una identidad ante el sistema mediante un identificador, como un nombre de usuario, una dirección de correo, un número de empleado o un DNI. Por sí sola no prueba nada, ya que cualquiera puede escribir un nombre ajeno. En Linux, el identificador que usa el núcleo es el UID, que el sistema obtiene a partir del nombre de usuario consultando /etc/passwd o el servicio de directorio configurado.

De esa naturaleza se derivan tres consecuencias prácticas:

  • El identificador es público. Aparece en los registros, en las direcciones de correo y en los listados del sistema, de modo que tomarlo por una prueba de identidad es un error. Como además suele seguir un patrón previsible, del tipo nombre.apellido, un atacante puede construir listas de cuentas probables, y esa es la razón de que los mensajes de error no deban distinguir entre una cuenta inexistente y una credencial incorrecta, como se explica en el apartado siguiente.

  • El identificador interno conviene separarlo del visible. Un apellido cambia, una dirección de correo se sustituye y un puesto se renombra, pero los permisos concedidos y los registros ya escritos deben seguir apuntando a la misma persona. Por eso los sistemas guardan un identificador interno estable, como el UID en Linux, el SID en Windows o el campo sub de OpenID Connect, y dejan el nombre legible para las personas.

  • No siempre se teclea. Un certificado, un vale de Kerberos o una credencial descubrible de FIDO2 llevan dentro la identidad declarada, de modo que el usuario no escribe ningún nombre. En los accesos entre máquinas, donde no hay nadie delante, la identidad la aporta el propio certificado o el token del servicio.

Una última distinción, que condiciona todo lo demás. La persona no es la cuenta. Una misma persona suele tener varias cuentas, por ejemplo una nominal para su trabajo diario y otra administrativa para las tareas que lo requieren, y los sistemas no autentican personas sino cuentas. De ahí que la trazabilidad dependa de que cada cuenta tenga un titular único e identificable, y que las aplicaciones y los dispositivos necesiten también su propia identidad, como se ve en la sección 3.

2.2. Autenticación

Es el proceso de verificar que quien se identifica es quien dice ser, mediante una o varias pruebas denominadas factores. El resultado es binario, el sujeto queda autenticado o no, pero la confianza que merece ese resultado no lo es, y de ahí que existan niveles de garantía, estudiados en el capítulo de autenticación multifactor.

El sistema no guarda la prueba, sino una referencia contra la que compararla, como el hash de una contraseña, la clave pública de un usuario o la plantilla de un rasgo biométrico. Esa referencia debe elegirse de modo que, si alguien se hace con ella, no pueda reconstruir el secreto ni suplantar a su titular.

Tres precisiones evitan los errores más comunes:

  • La autenticación caduca. Lo que se verifica es un instante, y lo que sostiene el acceso a partir de ahí es la sesión, que es una credencial más y tiene su propio ciclo de vida. Por eso conviene volver a pedir una prueba ante operaciones sensibles y limitar la duración de las sesiones.

  • Debe ser mutua. No basta con que el usuario demuestre quién es, el servicio también tiene que demostrarlo, y de ahí que el phishing funcione cuando esa segunda mitad falta. Los mecanismos que la garantizan se estudian en el capítulo de autenticación criptográfica.

  • El fallo no debe revelar en qué paso se produjo. Un mensaje que distinga entre «usuario inexistente» y «contraseña incorrecta» permite enumerar cuentas válidas, que es el trabajo previo a cualquier ataque de fuerza bruta.

Un sujeto autenticado no tiene todavía ningún permiso.

2.3. Autorización

Una vez autenticado, el sistema decide qué puede hacer el sujeto, según permisos, roles, atributos y políticas. Este capítulo estudia los modelos con los que se expresan esas decisiones en la sección 4, y la arquitectura que separa quién decide de quién aplica la decisión en la sección 5.

La autorización se comprueba en cada acceso, no una sola vez al entrar. Una sesión abierta no es un permiso permanente, y por eso un cambio de grupo o la retirada de un rol deben surtir efecto sin esperar a que el usuario vuelva a identificarse.

Conviene distinguir además entre dos cosas que suelen confundirse. Los permisos se definen sobre el recurso y responden a quién puede leerlo o modificarlo, como el modo de un archivo en Linux o una lista de control de acceso en Windows. Los privilegios son capacidades del sujeto que valen para todo el sistema y a menudo esquivan los permisos, como sudo, las capacidades del núcleo o el privilegio de hacer copias de seguridad. Un usuario sin permiso sobre un archivo puede leerlo igualmente si tiene el privilegio adecuado, de modo que el bastionado de la autorización pasa tanto por revisar los permisos como por limitar quién acumula privilegios.

Dos principios rigen el diseño. La denegación por defecto, según la cual lo que no está permitido está prohibido, y el mínimo privilegio, con cada sujeto limitado a lo que necesita para su tarea, que se desarrolla en la sección 3. Cuando se incumplen, aparece el fallo más frecuente de las aplicaciones web, el del acceso roto, que encabeza la lista OWASP Top 10 y que casi siempre consiste en confundir estar autenticado con estar autorizado.

2.4. Trazabilidad

Es el registro de quién hizo qué y cuándo. Aunque el modelo original la llama Accounting, porque en protocolos como RADIUS sirve para contabilizar el consumo de las sesiones, en seguridad se entiende como la capacidad de reconstruir los hechos y de imputar responsabilidades. Sin trazabilidad no hay detección de intrusiones, análisis forense ni cumplimiento normativo. Exige además cuentas individuales, porque una cuenta compartida impide saber qué persona realizó una acción.

Para que un registro sirva de evidencia tiene que reunir cuatro propiedades:

  • Completo. Un intento fallido informa tanto como uno correcto, y la ausencia de eventos también es un dato.

  • Íntegro. Debe poder detectarse si alguien lo ha modificado o truncado.

  • Fechado con un reloj sincronizado. Sin una referencia temporal común no se pueden correlacionar los eventos de dos máquinas ni sostener una cronología ante un tercero.

  • Conservado el tiempo necesario. El plazo lo fijan la normativa aplicable y el tiempo que suele tardarse en detectar un incidente, que es de meses y no de días.

La imputación exige además mantener el hilo entre la identidad y la acción cuando el usuario cambia de identidad por el camino. En Linux, el identificador de auditoría auid se fija al iniciar sesión y no cambia aunque después se use sudo o su, de modo que un evento con auid=ana uid=root sigue atribuyendo la acción a Ana. En Windows, el identificador de inicio de sesión cumple esa función y enlaza cada evento con la sesión que lo originó. Sin ese hilo, un conjunto de acciones realizadas como root no se puede atribuir a nadie.

Borrar el rastro es uno de los primeros objetivos de quien entra en un sistema, una técnica catalogada en MITRE ATT&CK como Indicator Removal (T1070). Por eso los registros se envían a un sistema independiente, donde quien ha comprometido el equipo ya no puede alterarlos.

Conviene recordar, por último, que estos registros son datos personales. Registrar es necesario, pero no justifica cualquier recogida, así que el alcance debe ser proporcionado, el acceso a los propios registros debe estar controlado y auditado, y el plazo de conservación, definido de antemano. Las obligaciones concretas se tratan en el capítulo de biometría y la puesta en práctica de todo lo anterior, en la guía de trazabilidad y auditoría en Linux.

2.5. Resumen y confusiones frecuentes

Tres confusiones que conviene evitar

  • Identificar no es autenticar: declarar que se es root no prueba nada.

  • Autenticar no es autorizar: haber demostrado quién se es no concede ningún permiso. Un usuario autenticado sin autorización debe recibir un error de acceso denegado.

  • Autorizar sin autenticar es un fallo grave: un recurso accesible sin autenticación previa está, en la práctica, abierto a cualquiera.

Fase Qué ocurre Mecanismo en Linux Evidencia

Identificación

El usuario indica su nombre

Entrada de login o ssh usuario@servidor

Línea Invalid user o Accepted en el registro

Autenticación

Se comprueba la prueba aportada

Pila auth de PAM, sshd, Kerberos

Accepted password, Failed password, Accepted publickey

Autorización

Se decide qué puede hacer

Permisos, ACL, sudoers, SELinux

COMMAND= de sudo, errores Permission denied

Trazabilidad

Se registra la actividad

rsyslog, journald, auditd

/var/log/auth.log, ausearch

Con los conceptos explicados hasta aquí, ya puede realizar el Ejercicio 1. El modelo AAA en un registro de autenticación.

3. Ciclo de vida de la identidad

Una identidad no es un objeto estático: nace, cambia y desaparece a lo largo de la relación de la persona con la organización. La mayoría de los incidentes relacionados con identidades no se producen en el momento del alta, sino en los cambios y en las bajas. Se habla de las fases joiner, mover y leaver, por la incorporación, el cambio de puesto y la salida.

Fase Actividad Riesgo si falla Control

Alta

Crear la cuenta con los permisos del puesto y entregar la credencial inicial

Permisos excesivos desde el primer día, y credenciales iniciales débiles o enviadas por canales inseguros

Plantillas por rol, cambio obligatorio de la credencial inicial, flujo de aprobación

Cambio de puesto

Retirar los permisos antiguos y conceder los nuevos

Acumulación de permisos al pasar por varios puestos

Revisión de accesos en cada movimiento

Revisión periódica

Verificar que cada cuenta y permiso sigue justificado

Cuentas inactivas y permisos heredados sin dueño

Recertificación periódica por los responsables

Baja

Deshabilitar la cuenta, revocar claves y sesiones, y reasignar recursos

Acceso persistente de exempleados y archivos huérfanos

Baja automatizada y coordinada con recursos humanos

El ciclo funciona si existe una fuente de la verdad que diga quién trabaja en la organización y en qué puesto, que suele ser el sistema de recursos humanos o, en un centro educativo, el de matrícula. De ella deben derivarse el alta, los cambios y la baja, porque cuando las cuentas se crean a mano y sin un origen común aparecen las dos patologías clásicas, cuentas que nadie recuerda haber creado y personas que se van sin que nadie avise a quien administra los sistemas.

El punto más delicado es el desfase entre la baja laboral y la baja técnica. Mientras dure, existe un acceso válido que ya no corresponde a nadie, y es un acceso que no levanta ninguna alarma porque las credenciales son legítimas. Una baja completa no termina al deshabilitar la cuenta, sino que incluye revocar las sesiones y los tokens que siguen vivos, las claves SSH, los tokens de API, los certificados y las contraseñas de aplicación, retirar los autenticadores de segundo factor registrados, rotar las credenciales compartidas que la persona conocía y reasignar la propiedad de sus archivos y de sus trabajos programados.

Conviene además deshabilitar antes de borrar. La cuenta deshabilitada conserva la relación entre el identificador y la persona, que es lo que permite interpretar los registros antiguos y saber de quién eran los archivos. El borrado inmediato rompe esa relación, y en Linux agrava el problema porque el UID liberado puede reutilizarse en una cuenta nueva que heredaría los archivos de la anterior, como se vio en el apartado 2.1.

Los principios que gobiernan esas decisiones son tres:

  • Mínimo privilegio: cada identidad recibe solo los permisos imprescindibles para su función.

  • Necesidad de conocer: el acceso a información se limita a quien la necesita para su trabajo.

  • Separación de funciones: ninguna persona debe poder completar por sí sola una operación crítica, como solicitar y aprobar un pago.

Además de las cuentas de personas, toda organización mantiene cuentas de servicio, que utilizan las aplicaciones, cuentas privilegiadas, con capacidad administrativa, y cuentas de emergencia, reservadas para recuperar el acceso cuando el sistema de autenticación falla. Estas últimas requieren credenciales muy robustas, custodiadas fuera de línea y con alertas de uso.

Las cuentas que no son de personas recorren el mismo ciclo, pero suelen gestionarse peor, porque nadie las echa de menos. No hay una baja de recursos humanos que avise de que una aplicación se retiró, sus credenciales rara vez se rotan y a menudo acumulan más privilegios que cualquier persona. El control que lo evita es sencillo de enunciar, cada cuenta de servicio debe tener una persona responsable, una fecha de revisión y un procedimiento de rotación de su credencial.

Para saber si el ciclo funciona de verdad conviene medirlo. Cuatro indicadores bastan para empezar:

  • Tiempo transcurrido entre la baja laboral y la revocación efectiva del acceso.

  • Cuentas inactivas, sin uso durante un plazo definido, y qué porcentaje del total representan.

  • Cuentas sin responsable asignado, que son las candidatas a convertirse en huérfanas.

  • Permisos no certificados en la última revisión periódica, y qué se hizo con ellos.

La baja segura de cuentas en Linux, que incluye el bloqueo real frente al simple bloqueo de contraseña, la revocación de claves SSH y la detección de archivos huérfanos, se desarrolla en la guía de administración de usuarios y grupos.

4. Modelos de control de acceso

Un modelo de control de acceso define quién decide los permisos y con qué criterio. Los cuatro modelos principales se diferencian en esas dos preguntas.

Las dos no se reparten por igual entre ellos. El DAC y el MAC responden sobre todo a quién decide, el propietario del recurso o una autoridad central, mientras que el RBAC y el ABAC responden sobre todo con qué criterio se decide, por el papel que desempeña la persona o por los atributos de la situación. De ahí que puedan combinarse sin estorbarse.

4.1. Control de acceso discrecional, DAC

El propietario del recurso decide quién puede acceder a él. Es el modelo de los permisos de archivos de Linux, de las ACL y de las carpetas compartidas de Windows. En un equipo compartido, quien crea un documento decide quién más puede leerlo o modificarlo, y puede cambiar esa decisión cuando quiera sin consultar con nadie.

  • Ventajas: flexible y sencillo de administrar a pequeña escala.

  • Inconvenientes: depende de las decisiones de cada usuario, que pueden ser erróneas. Un proceso comprometido hereda todos los permisos de su usuario, y no existe una política corporativa que se imponga sobre el propietario.

  • En Linux: los permisos de usuario, grupo y otros de cada archivo, y las listas de control de acceso.

  • En Windows: los permisos NTFS, cuya lista de control se llama precisamente discrecional, DACL, y que el propietario del archivo siempre puede modificar.

4.2. Control de acceso obligatorio, MAC

Una autoridad central define la política, y ni siquiera el propietario puede modificarla. Cada sujeto y cada objeto reciben una etiqueta, como Confidencial o Secreto, y el sistema compara ambas antes de permitir el acceso. En un servidor, el uso habitual no son las etiquetas militares sino el confinamiento de los servicios, de modo que quien compromete el servidor web no alcanza los archivos que la etiqueta de ese servicio no autoriza, aunque el proceso se ejecute como root.

  • Ventajas: protección frente a errores de usuarios y frente a procesos comprometidos, porque la política no depende de ellos.

  • Inconvenientes: configuración compleja y poco flexible.

  • En Linux: SELinux y AppArmor, este último en el Ejercicio 4.

  • En Windows: el control de integridad obligatorio, que etiqueta procesos y objetos con niveles como bajo o medio, de modo que un navegador en modo protegido no puede escribir en objetos de nivel superior aunque los permisos NTFS lo permitan.

4.3. Control de acceso basado en roles, RBAC

Los permisos se asignan a roles, que representan funciones de la organización, y las personas obtienen permisos al recibir un rol. En un banco, el rol Cajero permite operar con cuentas y el rol Director permite autorizar préstamos.

  • Ventajas: se alinea con la estructura de la organización, escala bien y facilita las auditorías, ya que basta revisar qué roles tiene cada persona.

  • Inconvenientes: en organizaciones complejas puede aparecer una explosión de roles, y no expresa con naturalidad condiciones contextuales como la hora o la ubicación.

  • En Linux: grupos y reglas de sudoers asociadas a grupos, como se practica en el Ejercicio 2.

  • En Windows: los grupos de seguridad del dominio y los roles de administración de Active Directory o de Entra ID.

4.4. Control de acceso basado en atributos, ABAC

La decisión se toma evaluando atributos del sujeto, del recurso, de la acción y del entorno: cargo, departamento, clasificación del documento, hora, ubicación o estado del dispositivo. En un hospital, un médico solo puede consultar los expedientes de los pacientes asignados a su servicio y durante su turno.

  • Ventajas: granularidad y flexibilidad máximas, con políticas muy expresivas.

  • Inconvenientes: la complejidad de definir, probar y auditar las políticas es considerablemente mayor.

  • En Linux: los módulos de PAM que evalúan condiciones del entorno, como pam_time o pam_access, que se practican en el Ejercicio 3.

  • En Windows: el control de acceso dinámico de Windows Server, que decide con notificaciones del usuario y propiedades del recurso, y el acceso condicional de Entra ID, que añade la ubicación, el horario y el estado del dispositivo.

4.5. Comparativa

Modelo Quién define los permisos Flexibilidad Control central Ejemplo típico

DAC

El propietario del recurso

Alta

Bajo

Permisos chmod y ACL

MAC

Una autoridad central

Baja

Muy alto

SELinux, AppArmor

RBAC

El administrador, por roles

Alta

Alto

Grupos y sudoers, directorios corporativos

ABAC

Una política basada en atributos

Muy alta

Alto

Acceso condicional por contexto

En la práctica se combinan: el DAC protege los archivos de cada usuario, el MAC contiene los servicios, el RBAC organiza a las personas y el ABAC añade condiciones contextuales. Este es también el planteamiento de las arquitecturas de confianza cero.

Los modelos DAC y las listas de control de acceso de Linux se practican en la guía de permisos y control de acceso básico.

5. Arquitectura de la decisión de acceso

Los modelos anteriores explican con qué criterio se decide, pero no dónde se decide. Cuando esa pregunta no se responde de forma explícita, la comprobación de permisos acaba dispersa por el código de cada aplicación, repetida en cada módulo y escrita de una manera distinta por cada equipo de desarrollo. El resultado es una organización incapaz de responder a las dos preguntas elementales de cualquier auditoría de accesos, quién puede acceder hoy a un recurso determinado y por qué se concedió un acceso concreto del pasado. El principio de diseño que lo evita consiste en separar la decisión de su aplicación y concentrar la primera en un componente propio.

Esa separación se formaliza en cuatro funciones lógicas que proceden del estándar XACML de OASIS y que reaparecen con la misma semántica en NIST SP 800-162, que describe el ABAC, y en NIST SP 800-207, que define la arquitectura de confianza cero. Son funciones lógicas, no necesariamente procesos ni máquinas distintas, porque un mismo programa puede desempeñar varias a la vez. Conviene distinguirlas porque cada una tiene un responsable, una superficie de ataque y unas necesidades de auditoría diferentes.

5.1. Las cuatro funciones

Función Responsabilidad Pregunta que responde Ejemplos reales

PEP (Policy Enforcement Point)

Intercepta cada intento de acceso, consulta al decisor y aplica el resultado sin interpretarlo

¿Dejo pasar esta petición?

Pasarela inversa, servidor web, sshd, pila de PAM, conmutador con 802.1X

PDP (Policy Decision Point)

Evalúa la política vigente con los atributos disponibles y emite una decisión

¿Cumple esta petición la política?

Motor XACML, Open Policy Agent, servidor RADIUS, servidor de seguridad de SELinux

PIP (Policy Information Point)

Suministra los atributos del sujeto, del recurso, de la acción y del entorno

¿Con qué datos cuento para decidir?

Directorio LDAP, inventario de equipos, hora del sistema, dirección de origen, estado del antivirus

PAP (Policy Administration Point)

Redacta, revisa, versiona y publica las políticas

¿Qué política está vigente y quién la cambió?

Consola de políticas, repositorio Git con la política como código, visudo, /etc/security/

De ese reparto se derivan dos reglas que no admiten excepción. El PEP nunca decide por sí mismo, ni siquiera cuando conoce la respuesta, porque en cuanto empieza a interpretar la política aparece una segunda política implícita que nadie audita. Y el PDP nunca aplica la decisión, de modo que su compromiso no concede acceso de forma directa, sino que falsea las respuestas que otros aplican. NIST SP 800-207 traslada esa frontera a su arquitectura y sitúa el PDP y el PAP en el plano de control, separado del plano de datos por donde circula el tráfico que el PEP vigila.

Las cuatro funciones de la decisión de acceso y el recorrido de una solicitud
Figura 2. Las cuatro funciones de la decisión de acceso y el recorrido de una solicitud

5.2. Recorrido de una solicitud

El diagrama anterior numera los pasos de un acceso completo. Supóngase que la usuaria maria intenta consultar un expediente a través de una pasarela corporativa:

  1. El responsable de seguridad redacta la política en el PAP y la publica. Hasta ese momento ningún otro componente conoce la regla.

  2. maria solicita el recurso. La petición llega al PEP, que es el único camino hacia el expediente.

  3. El PEP no resuelve nada por su cuenta y envía una consulta de decisión al PDP con el sujeto, el recurso y la acción pretendida.

  4. El PDP necesita atributos que la petición no contiene y los pide al PIP, como el servicio al que está adscrita maria, la clasificación del expediente o la hora.

  5. El PIP devuelve los valores desde su fuente autorizada.

  6. El PDP evalúa la política y responde permitiendo o denegando, con las obligaciones que correspondan.

  7. El PEP aplica la decisión y concede o bloquea el acceso al recurso.

Los atributos pueden llegar al PDP de dos maneras. En el modelo push, viajan dentro de la propia consulta, normalmente en un token firmado por el proveedor de identidad, lo que resulta rápido pero congela el valor en el instante de la emisión. En el modelo pull, que son los pasos 3 y 4, el PDP los consulta en el PIP en el momento de decidir, con lo que obtiene datos frescos a costa de latencia y de una dependencia más. La elección no es inocua, porque un atributo volátil como la postura de un equipo pierde su sentido si se evalúa con el valor que tenía al abrir la sesión.

5.3. Decisiones, obligaciones y conflictos

Un PDP no devuelve únicamente un sí o un no. XACML define cuatro resultados, y los dos últimos concentran la mayoría de los fallos de autorización.

Resultado Significado Qué debe hacer el PEP

Permitir

Una regla aplicable la autoriza

Conceder el acceso y cumplir las obligaciones

Denegar

Una regla aplicable la prohíbe

Bloquear y registrar el evento

No aplicable

Ninguna regla alcanza a la petición

Bloquear, por denegación por defecto

Indeterminado

La evaluación falla, por ejemplo si el PIP no responde

Bloquear y alertar de la indisponibilidad

Interpretar el no aplicable como una autorización convierte cualquier hueco de la política en un permiso silencioso. Es lo que se comprueba en el Ejercicio 3, donde pam_time permite el acceso cuando ninguna regla alcanza al usuario, en contra de la denegación por defecto del apartado 2.3.

Cuando varias reglas discrepan, decide el algoritmo de combinación declarado en la política. Los dos habituales son la prevalencia de la denegación, donde un solo «denegar» anula cualquier «permitir», y la primera regla aplicable, donde el orden de escritura forma parte de la política. Por eso en sudoers manda la última regla coincidente y una línea permisiva al final deja sin efecto a las anteriores.

La decisión puede llevar además obligaciones, acciones que el PEP debe ejecutar para que la autorización sea válida, como exigir un segundo factor, conceder el recurso en modo de solo lectura o limitar la duración de la sesión. Un PEP que las ignora concede más acceso del autorizado aunque la decisión fuese correcta.

5.4. Correspondencia con los mecanismos reales

El vocabulario anterior no describe solo productos corporativos. Los mecanismos que se estudian en el resto del curso encajan en el mismo esquema, y reconocerlo ayuda a saber dónde buscar cuando un acceso no se comporta como se espera.

Escenario PEP PDP PIP PAP

Elevación con sudo

El binario sudo

El analizador de la política de sudoers

/etc/passwd y /etc/group o el directorio

visudo y /etc/sudoers.d/

Autenticación con PAM

El servicio que abre la pila, como sshd o login

Los módulos de la pila, como pam_access o pam_time

Hora del sistema, terminal, dirección de origen, pertenencia a grupos

Archivos de /etc/pam.d/ y de /etc/security/

Confinamiento con SELinux

Los ganchos del núcleo en cada llamada al sistema

El servidor de seguridad del núcleo

Etiquetas del proceso y del archivo

La política compilada y semanage

Acceso a la red con 802.1X

El conmutador o el punto de acceso

El servidor RADIUS

El directorio corporativo y el inventario de equipos

La configuración de políticas del servidor RADIUS

Aplicación web de confianza cero

La pasarela inversa consciente de la identidad

Open Policy Agent o el motor del proveedor de identidad

Reclamos del token, postura del dispositivo, geolocalización

Repositorio de políticas como código

En un caso tan cotidiano como sudo, las cuatro funciones se distinguen incluso en la línea de órdenes, y cada una tiene su comprobación asociada:

# PAP: redactar la política en un archivo propio, con validación de sintaxis al guardar
sudo visudo -f /etc/sudoers.d/operadores

# PAP: verificar que el conjunto de la política es sintácticamente correcto
sudo visudo -c

# PDP: consultar qué decidiría la política para un usuario, sin ejecutar nada
sudo -l -U maria

# Trazabilidad: comprobar qué decisión se aplicó realmente y sobre qué orden
sudo journalctl -t sudo --since today

La diferencia entre sudo -l -U maria y la lectura manual del archivo es la que hay entre consultar al decisor y suponer su respuesta. El primero evalúa la política completa, con sus inclusiones y su algoritmo de combinación, que es justo lo que la lectura a ojo suele interpretar mal.

Separar estas funciones permite cambiar la política sin modificar las aplicaciones, centralizar la auditoría de las decisiones y aplicar un criterio homogéneo a servicios muy distintos. La guía de confianza cero despliega esta arquitectura completa en un laboratorio, con una pasarela que actúa de PEP y un motor de políticas que resuelve cada petición, y el capítulo de autenticación centralizada muestra su versión más veterana en los protocolos RADIUS y TACACS+.

6. Factores de autenticación

Un factor de autenticación es una categoría de prueba de identidad. La clasificación tradicional distingue tres, a las que se suma una cuarta categoría, el contexto, con matices importantes.

Factores de autenticación y su debilidad característica
Figura 3. Factores de autenticación y su debilidad característica
Factor Qué prueba Ejemplos Debilidad característica

Conocimiento

Algo que el usuario sabe

Contraseña, frase de paso, PIN

Se adivina, se roba por engaño o se reutiliza

Posesión

Algo que el usuario tiene

Llave FIDO2, tarjeta inteligente, aplicación TOTP

Se pierde, se roba o se retransmite

Inherencia

Algo que el usuario es

Huella dactilar, rostro, iris

No se puede cambiar si se filtra

Contexto

Dónde, cuándo y desde qué

Ubicación, red, dispositivo, horario

Puede falsearse y produce falsos positivos

Dos precisiones son esenciales:

  • Los factores deben ser de categorías distintas. Dos pruebas del mismo factor, como una contraseña y una pregunta secreta, no constituyen autenticación multifactor, porque un mismo ataque, como un phishing, las obtiene ambas.

  • El contexto no es un factor propiamente dicho. NIST no lo considera un autenticador, porque no demuestra por sí mismo la identidad. Se utiliza como señal de riesgo para endurecer o relajar las exigencias, como se estudia en el capítulo de autenticación multifactor.

El resto de la guía recorre cada factor con el mismo esquema: cómo funciona, qué políticas son recomendables y cómo lo atacan.

7. Ejercicios prácticos

Los ejercicios están diseñados para realizarse en orden sobre una máquina virtual Ubuntu o Debian de pruebas. Todos los archivos se crean en ~/lab_aaa. El último ejercicio deja el sistema en su estado original.

No realice estos ejercicios en un servidor en producción. Algunos pasos crean cuentas y reglas de sudo de forma deliberada.

Nº Ejercicio Competencia que desarrolla

1

El modelo AAA en un registro de autenticación

Distinguir las cuatro fases en las evidencias reales

2

Un rol RBAC con sudoers

Implementar y auditar un control de acceso basado en roles

3

Control de acceso basado en atributos, ABAC, con pam_time

Decidir según un atributo del entorno, no solo según el rol

4

Control de acceso obligatorio, MAC, con AppArmor

Imponer una política que ni el propietario ni root pueden eludir

5

Limpieza del entorno

Revertir los cambios realizados

7.1. Ejercicio 1. El modelo AAA en un registro de autenticación

Realice los siguientes pasos:

  1. Cree el directorio de trabajo y el registro de muestra auth_ejemplo.log:

    mkdir -p ~/lab_aaa
    sudo nano ~/lab_aaa/auth_ejemplo.log

    Añade el siguiente contenido al archivo.

    Oct 19 09:01:02 srv01 sshd[2101]: Invalid user admin from 198.51.100.7 port 51022
    Oct 19 09:01:05 srv01 sshd[2101]: Failed password for invalid user admin from 198.51.100.7 port 51022 ssh2
    Oct 19 09:14:40 srv01 sshd[2188]: Accepted publickey for maria from 192.0.2.10 port 50444 ssh2: ED25519 SHA256:Zk3...
    Oct 19 09:14:40 srv01 sshd[2188]: pam_unix(sshd:session): session opened for user maria(uid=1001) by (uid=0)
    Oct 19 09:20:11 srv01 sudo:    maria : TTY=pts/0 ; PWD=/home/maria ; USER=root ; COMMAND=/usr/bin/systemctl status ssh
    Oct 19 09:21:37 srv01 sudo:    maria : command not allowed ; TTY=pts/0 ; PWD=/home/maria ; USER=root ; COMMAND=/usr/bin/vim /etc/shadow
    Oct 19 09:45:03 srv01 sshd[2188]: pam_unix(sshd:session): session closed for user maria
  2. Clasifique cada línea en una de las cuatro fases del modelo AAA y anote el dato del propio registro que lo justifica. Resuma qué ocurrió con el usuario admin y con el usuario maria.

    Solución

    Hora Evento del registro Fase Dato que lo justifica

    09:01:02

    Invalid user admin

    Identificación

    Se declara el identificador admin y el sistema responde que no corresponde a ninguna cuenta, de modo que el intento no pasa de esta fase

    09:01:05

    Failed password … admin

    Autenticación

    Se aporta una prueba, la contraseña, y se rechaza. El invalid user repetido confirma que la cuenta tampoco existía

    09:14:40

    Accepted publickey … maria

    Autenticación

    La prueba es una firma con clave pública ED25519 y se acepta. La huella SHA256:Zk3… identifica la clave concreta

    09:14:40

    session opened … uid=1001

    Trazabilidad

    Marca el inicio de la sesión y deja constancia de la resolución del nombre a su identificador interno, uid=1001

    09:20:11

    sudo … systemctl status ssh

    Autorización

    Una vez autenticada, se decide qué puede hacer. La orden se permite y queda registrada con su ruta completa

    09:21:37

    sudo … command not allowed

    Autorización

    Misma fase y resultado contrario, la orden se deniega. El motivo que anota sudo, command not allowed, indica que la cuenta sí figura en sudoers pero esa orden no le está permitida

    09:45:03

    session closed … maria

    Trazabilidad

    Cierra el intervalo abierto a las 09:14:40 y permite medir la duración de la sesión

    Qué ocurrió con admin. Un intento de acceso desde 198.51.100.7, una dirección ajena a la red de la organización, contra una cuenta que no existe. El intento se detuvo en la autenticación y nunca llegó a la autorización, de modo que no hubo acceso ni sesión. El patrón, un nombre genérico probado desde una dirección desconocida, es el inicio característico de un ataque de fuerza bruta o de un barrido de cuentas, y lo que conviene vigilar es su repetición.

    Qué ocurrió con maria. Un acceso legítimo desde 192.0.2.10 con clave pública, sin contraseña de por medio. Durante la sesión ejecutó dos órdenes con sudo, una permitida y otra denegada por no estar incluida en su regla, y cerró sesión a los treinta minutos. El registro permite reconstruir la secuencia completa, quién entró, cómo demostró su identidad, qué intentó hacer y con qué resultado, que es justamente lo que aportan las cuatro fases juntas.

    Las dos primeras líneas muestran además por qué identificación y autenticación son fases distintas. El atacante llegó a declarar una identidad, que es la primera, pero no pudo demostrarla, que es la segunda.


7.2. Ejercicio 2. Un rol RBAC con sudoers

Realice los siguientes pasos:

  1. Cree los usuarios alice y bob, y el grupo soporte. Añada solo a alice al grupo. El grupo representa el rol «técnico de soporte».

    Solución

    # Crea las cuentas alice y bob con directorio personal
    sudo useradd -m alice
    sudo useradd -m bob
    
    # Crea el grupo soporte, que representará el rol «técnico de soporte»
    sudo groupadd soporte
    
    # Asigna alice al grupo soporte como grupo suplementario
    sudo usermod -aG soporte alice
    
    # Comprueba la pertenencia de cada una
    id alice
    id bob

    bob queda fuera del rol a propósito, para disponer de un caso de contraste en los pasos siguientes. Lo que diferencia a una cuenta de la otra no es ningún permiso concedido a su nombre, sino la pertenencia al grupo, que es la idea sobre la que se apoya el control basado en roles.

  2. Cree la regla /etc/sudoers.d/soporte que permita a los miembros del grupo ejecutar únicamente systemctl status ssh y systemctl status cron como root, con permisos 440. Valide la sintaxis antes de darla por buena.

    Solución

    # Crea y edita la regla con visudo, que bloquea el archivo y valida la sintaxis al guardar
    sudo visudo -f /etc/sudoers.d/soporte

    Escriba en el editor una única línea, que autoriza al grupo soporte a ejecutar solo esas dos órdenes como root:

    %soporte ALL=(root) /usr/bin/systemctl status ssh, /usr/bin/systemctl status cron
    # visudo crea el archivo con permisos 640, así que se ajustan a la convención
    sudo chmod 440 /etc/sudoers.d/soporte
    
    # Comprobación final de la sintaxis
    sudo visudo -cf /etc/sudoers.d/soporte

    La comprobación responde /etc/sudoers.d/soporte: parsed OK.

    Por qué con visudo y no con un editor cualquiera. visudo bloquea el archivo para que nadie lo modifique a la vez y, sobre todo, lo valida antes de instalarlo. Ante un error de sintaxis no lo da por bueno, sino que señala la línea y la columna y pregunta qué hacer, con la opción de volver a editar o de salir sin guardar. Esto no es un formalismo, porque un error en sudoers deja el sistema sin sudo operativo, y si no queda otra vía de acceso administrativo, recuperarlo obliga a arrancar en modo de rescate.

    Cómo se lee la regla. El % que precede al nombre indica que la concesión es para un grupo y no para un usuario, y es lo que la convierte en un rol. Las rutas absolutas con sus argumentos acotan la concesión a esas dos órdenes exactas, de modo que systemctl restart ssh queda fuera.

  3. Compruebe qué puede hacer cada usuario y explique por qué la gestión por roles simplifica la baja de alice.

    Solución

    # Lista los comandos que alice puede ejecutar con sudo gracias a su pertenencia al grupo soporte
    sudo -l -U alice
    
    # Lista los comandos que bob puede ejecutar con sudo. Al no pertenecer al grupo, no tendrá permisos
    sudo -l -U bob
    
    # Retira a alice del rol y vuelve a consultar, para ver el efecto de la baja
    sudo deluser alice soporte
    sudo -l -U alice

    Las dos primeras consultas devuelven lo siguiente:

    User alice may run the following commands on srv01:
        (root) /usr/bin/systemctl status ssh, /usr/bin/systemctl status cron
    
    User bob is not allowed to run sudo on srv01.

    Por qué el rol simplifica la baja. Los permisos no residen en la cuenta de alice, sino en el grupo, de modo que deluser alice soporte se los revoca todos de una vez y la última consulta pasa a responder User alice is not allowed to run sudo on srv01. Si cada permiso se hubiera concedido a su nombre, la baja obligaría a localizar y editar cada regla, que es justo donde se olvidan accesos y quedan los permisos residuales de los que habla la sección 3.

    La otra cara de esa misma propiedad es el alta. Incorporar a otra persona al puesto consiste en añadirla al grupo, sin tocar sudoers.

    Conviene retener un detalle operativo. La pertenencia a los grupos se resuelve al iniciar sesión, así que sudo -l -U alice refleja el cambio de inmediato, porque consulta los archivos del sistema, pero una sesión que alice ya tuviera abierta conservaría el grupo en sus credenciales hasta que la cerrase.

  4. Responda: ¿qué modelo de control de acceso es el del paso anterior? ¿Cómo añadiría una condición horaria para convertirlo en un control con atributos y qué módulo de PAM lo permitiría?

    Solución

    Qué modelo es. Es RBAC, control de acceso basado en roles, descrito en el apartado 4.3. El permiso no se concede a alice ni a bob, sino al rol soporte, y las personas lo reciben o lo pierden al entrar o salir del grupo. La prueba está en el paso anterior, donde la misma cuenta pasa de autorizada a no autorizada sin que sudoers cambie ni una línea.

    Cómo añadir la condición horaria. Una restricción del tipo «solo en horario laboral» no depende del rol sino de una circunstancia del acceso, así que al incorporarla el control adquiere un componente de ABAC, basado en atributos, como explica el apartado 4.4. El atributo es aquí el momento del intento, que es un atributo de entorno.

    Con qué módulo. sudoers no entiende de horarios, de modo que la condición no se impone ahí sino en PAM, con el módulo pam_time y su archivo /etc/security/time.conf, donde se declara qué usuarios o grupos pueden acceder a qué servicios y en qué franjas. La regla se añade a la pila account del servicio correspondiente y el módulo se estudia en la guía de PAM.

    Conviene fijarse en el reparto de papeles, porque es el de la sección 5. sudoers responde a qué puede hacer el rol y pam_time responde a cuándo, de manera que la política queda repartida entre dos puntos de decisión que hay que mantener coherentes.


7.3. Ejercicio 3. Control de acceso basado en atributos, ABAC, con pam_time

En el ejercicio anterior el permiso dependía solo del rol. Aquí la decisión dependerá además de un atributo del entorno, la hora del intento, que es lo que caracteriza al control basado en atributos del apartado 4.4. La impone el módulo pam_time, que se estudia a fondo en la guía de PAM.

Realice los siguientes pasos:

  1. Instale pamtester y cree el servicio PAM de pruebas /etc/pam.d/laboratorio, con una pila account que consulte a pam_time.

    Solución

    # Actualiza el índice de paquetes
    sudo apt update
    
    # pamtester permite evaluar una pila de PAM sin iniciar sesión de verdad
    sudo apt install -y pamtester
    
    # Crea el servicio de pruebas
    sudo nano /etc/pam.d/laboratorio
    account required pam_time.so
    account required pam_permit.so

    El servicio se crea aparte a propósito. Así la condición horaria se prueba sobre una pila propia y no sobre login ni sshd, de modo que un error no deja a nadie fuera del sistema. pam_permit cierra la pila con un resultado positivo cuando pam_time no se opone.

  2. Añada a /etc/security/time.conf una regla que permita a alice usar ese servicio a cualquier hora y compruebe el resultado con pamtester.

    Solución

    # Añade la regla al final del archivo
    echo 'laboratorio;*;alice;Al0000-2400' | sudo tee -a /etc/security/time.conf
    
    # Evalúa la pila account del servicio para alice
    sudo pamtester laboratorio alice acct_mgmt

    La respuesta es pamtester: account management done, es decir, acceso permitido.

    La regla tiene cuatro campos separados por ;, que son el servicio, el terminal, los usuarios y las franjas horarias. En Al0000-2400, el Al significa todos los días de la semana, frente a Wk para los laborables o Wd para el fin de semana, y el resto es el intervalo en formato de veinticuatro horas.

  3. Sustituya la franja por otra que no incluya la hora actual y repita la comprobación. Pruebe después con bob, que no aparece en nEOFinguna regla.

    Solución

    # Consulta la hora del sistema para elegir una franja que la excluya
    date +%H:%M
    
    # Deja una sola regla, con una franja de madrugada
    sudo sed -i '/^laboratorio;/d' /etc/security/time.conf
    echo 'laboratorio;*;alice;Al0300-0400' | sudo tee -a /etc/security/time.conf
    
    # Misma cuenta, mismo servicio, decisión contraria
    sudo pamtester laboratorio alice acct_mgmt
    
    # bob no figura en ninguna regla del servicio
    sudo pamtester laboratorio bob acct_mgmt

    Ahora alice recibe pamtester: Permission denied, mientras que bob obtiene account management done. Si está trabajando entre las tres y las cuatro de la madrugada, elija otra franja que no contenga la hora que muestra date.

    El resultado de bob es el detalle más importante del ejercicio. pam_time permite cuando ninguna regla coincide, de modo que el archivo no expresa una política completa salvo que se escriba una regla que alcance a todos los usuarios, como laboratorio;*;*;Wk0800-2000. Es el contraste con la denegación por defecto de la sección 2.3.

  4. ¿Qué atributo ha cambiado la decisión y por qué esto es ABAC y no RBAC? ¿Qué pieza hace de PEP, de PDP, de PIP y de PAP?

    Solución

    Qué ha cambiado. Entre los dos pasos anteriores no se ha tocado la cuenta de alice, ni sus grupos, ni ningún permiso. Lo único distinto es la relación entre la hora del intento y la franja permitida. Con RBAC esa distinción no cabe, porque el rol de alice es el mismo a las diez de la mañana que a las tres de la madrugada y la respuesta tendría que ser idéntica. La decisión depende de un atributo del entorno, y por eso el control pasa a ser de los basados en atributos, ABAC.

    El reparto de funciones de la sección 5 aparece aquí completo:

    Función Pieza del ejercicio

    PAP, donde se redacta la política

    El archivo /etc/security/time.conf

    PDP, el que decide

    El módulo pam_time, que compara la hora con la franja

    PIP, el que aporta los atributos

    El reloj del sistema y el nombre de la cuenta

    PEP, el que aplica la decisión

    La pila account del servicio, que es quien concede o deniega

    Conviene fijarse en que el PEP y el PDP están separados de verdad. pam_time no abre ni cierra ninguna sesión, solo emite un resultado, y es la pila del servicio la que actúa en consecuencia. Cambiar la política consiste en editar time.conf, sin tocar ninguna aplicación.


7.4. Ejercicio 4. Control de acceso obligatorio, MAC, con AppArmor

En los ejercicios anteriores la decisión dependía del rol o de un atributo del entorno, pero en todos ellos el propietario del archivo conservaba la última palabra sobre sus permisos. Aquí la política la impone el sistema y no la puede levantar ni el propietario ni root, que es lo que caracteriza al control obligatorio del apartado 4.2. Ubuntu incorpora AppArmor activado de serie, de modo que no hay nada que instalar.

Realice los siguientes pasos:

  1. Compruebe que AppArmor está activo y cuántos perfiles tiene cargados.

    Solución

    # Responde Yes si el módulo de seguridad está habilitado en el núcleo
    sudo aa-enabled
    
    # Resumen de los perfiles cargados
    sudo aa-status | head -3

    La salida indica cuántos perfiles están en modo enforce, el modo en el que la política se aplica de verdad. El otro modo posible es complain, donde la infracción se registra pero se permite, y sirve para afinar un perfil nuevo sin dejar el servicio inservible mientras tanto.

  2. Prepare el escenario con dos archivos de permisos idénticos y una copia de cat, que será el programa confinado. Compruebe que, sin ningún perfil, lee los dos.

    Solución

    # Crea el directorio de trabajo y los dos archivos
    mkdir -p ~/lab_aaa/datos
    echo 'Contenido publico' > ~/lab_aaa/datos/publico.txt
    echo 'Contenido confidencial' > ~/lab_aaa/datos/secreto.txt
    chmod 644 ~/lab_aaa/datos/*.txt
    
    # Copia de cat sobre la que se aplicará el perfil
    cp /usr/bin/cat ~/lab_aaa/cat
    
    # Sin perfil, los permisos del archivo son lo único que decide
    ~/lab_aaa/cat ~/lab_aaa/datos/publico.txt
    ~/lab_aaa/cat ~/lab_aaa/datos/secreto.txt

    Los dos archivos se leen sin dificultad, porque quien ejecuta la orden es su propietario y los permisos 644 se lo permiten. Esto es el DAC del apartado 4.1.

    Se trabaja sobre una copia para no confinar el cat del sistema, ya que el perfil se asocia a la ruta del ejecutable. La copia debe conservar el nombre cat, porque desde Ubuntu 25.10 las órdenes básicas son un único binario que decide qué hacer según el nombre con el que se le invoca, y con cualquier otro nombre respondería unknown program.

  3. Escriba un perfil que autorice a ese programa a leer solo publico.txt y cárguelo en el núcleo.

    Solución

    sudo nano /etc/apparmor.d/lab-cat
    include <tunables/global>
    
    /home/*/lab_aaa/cat {
      include <abstractions/base>
      include <abstractions/consoles>
    
      /home/*/lab_aaa/cat mr,
      /home/*/lab_aaa/datos/publico.txt r,
    }
    # Carga o recarga el perfil
    sudo apparmor_parser -r /etc/apparmor.d/lab-cat
    
    # Confirma que está cargado
    sudo aa-status | grep lab_aaa

    La primera línea del perfil es la ruta del programa al que se aplica, donde el * cubre el directorio personal de cualquier usuario. Dentro, cada regla concede un permiso sobre una ruta, siendo r la lectura y m la proyección en memoria que el propio binario necesita para ejecutarse. Las dos abstracciones aportan los permisos mínimos de cualquier programa, como leer las bibliotecas del sistema o escribir en el terminal.

    Lo decisivo es lo que no aparece. secreto.txt no figura en ninguna regla, y en AppArmor lo que no se concede queda denegado, que es la denegación por defecto del apartado 2.3.

  4. Compruebe que la política se impone sobre los permisos del archivo y sobre root, y localice la evidencia en el registro.

    Solución

    # Permitido por la política
    ~/lab_aaa/cat ~/lab_aaa/datos/publico.txt
    
    # Denegado, aunque los permisos del archivo lo permitan
    ~/lab_aaa/cat ~/lab_aaa/datos/secreto.txt
    
    # Sigue denegado con los permisos abiertos de par en par
    chmod 777 ~/lab_aaa/datos/secreto.txt
    ~/lab_aaa/cat ~/lab_aaa/datos/secreto.txt
    
    # Y también se le deniega a root
    sudo ~/lab_aaa/cat ~/lab_aaa/datos/secreto.txt
    
    # En cambio, el cat del sistema no está confinado y sí lo lee
    cat ~/lab_aaa/datos/secreto.txt
    
    # Evidencia de las denegaciones
    sudo dmesg | grep -i apparmor | grep lab_aaa | tail -3

    Las tres lecturas de secreto.txt fallan con Permission denied mientras que el cat del sistema lo muestra sin problema, lo que demuestra que la restricción acompaña al programa y no al archivo. El registro deja estas dos líneas, recortadas aquí para que quepan.

    apparmor="DENIED" operation="open" profile="/home/*/lab_aaa/cat"
    name="/home/ubuntu/lab_aaa/datos/secreto.txt" requested_mask="r" denied_mask="r"
    
    apparmor="DENIED" operation="capable" profile="/home/*/lab_aaa/cat"
    capname="dac_read_search"

    La segunda es la más reveladora, ya que corresponde al intento con sudo. A root no se le deniega la lectura sin más, se le deniega la capacidad dac_read_search, que es justamente la que le permite saltarse los permisos de cualquier archivo. La política le retira la herramienta con la que habitualmente ignora al DAC.

  5. Razone por qué este control no se puede conseguir con permisos ni con sudoers, y qué haría falta para levantar la restricción.

    Solución

    Por qué no basta con el DAC. Los permisos y las ACL acompañan al archivo y describen quién es el usuario, de modo que cualquier proceso que se ejecute en su nombre hereda lo mismo. No hay manera de expresar que un programa concreto no pueda leer un archivo aunque lo ejecute su dueño. El perfil de AppArmor sí lo expresa, porque la etiqueta acompaña al programa, y por eso la copia confinada falla donde el cat del sistema funciona.

    Por qué no basta con sudoers. La regla de sudo decide qué órdenes puede ejecutar una persona con privilegios, es decir, actúa antes de lanzar el programa. Aquí el programa se ejecuta siempre y lo que se controla es qué puede tocar una vez en marcha. Son controles complementarios, no alternativos.

    Qué haría falta para levantarla. Editar el perfil y volver a cargarlo con apparmor_parser, que es una acción administrativa sobre el sistema y queda registrada. El propietario de secreto.txt no puede hacer nada desde su directorio para recuperar el acceso, y en esa asimetría está la diferencia entre un control discrecional y uno obligatorio.


7.5. Ejercicio 5. Limpieza del entorno

  1. Elimine las cuentas, el grupo, la regla de sudo, el perfil de AppArmor y el directorio de trabajo.

    # Retira la regla de sudo y el servicio PAM de pruebas
    sudo rm -f /etc/sudoers.d/soporte /etc/pam.d/laboratorio
    
    # Descarga el perfil de AppArmor y lo borra
    sudo apparmor_parser -R /etc/apparmor.d/lab-cat
    sudo rm -f /etc/apparmor.d/lab-cat
    
    # Borra la regla horaria añadida a time.conf
    sudo sed -i '/^laboratorio;/d' /etc/security/time.conf
    
    # Elimina las cuentas con su directorio personal y el grupo del rol
    sudo userdel -r alice
    sudo userdel -r bob
    sudo groupdel soporte
    
    # Borra el directorio de trabajo
    rm -rf ~/lab_aaa

8. Referencias

9. Licencia

Licencia CC BY-NC-ND 4.0

Esta página forma parte del curso Bastionado de Redes y Sistemas © 2026 de José Juan Sánchez Hernández y su contenido se distribuye bajo una licencia Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International.

Esta licencia exige que quienes reutilicen el material otorguen el debido crédito al autor. Permite copiar y redistribuir el material en cualquier medio o formato, únicamente en su forma original, y solo para fines no comerciales.