Skip to content

Selinux

This content is not available in your language yet.

7.3 SELinux y AppArmor: Control de Acceso Obligatorio (MAC)

Sección titulada «7.3 SELinux y AppArmor: Control de Acceso Obligatorio (MAC)»

En el modelo tradicional de seguridad de Linux, basado en permisos UNIX (DAC, Discretionary Access Control), el propietario de un recurso decide quién puede acceder a él. Sin embargo, en entornos críticos esto no es suficiente: si un proceso es comprometido, puede acceder a todo lo que su usuario permita.

Aquí entran en juego SELinux y AppArmor, sistemas de Control de Acceso Obligatorio (MAC) que imponen políticas estrictas a nivel del kernel, limitando lo que los procesos pueden hacer independientemente de los permisos del usuario.

Para un Sysadmin, dominar estas tecnologías significa poder diseñar sistemas resilientes frente a intrusiones, incluso cuando una aplicación ha sido comprometida.


Al finalizar este capítulo serás capaz de:

  • Entender la diferencia entre DAC y MAC.
  • Comprender la arquitectura de SELinux y AppArmor.
  • Interpretar contextos y políticas de seguridad.
  • Diagnosticar bloqueos de acceso causados por políticas.
  • Gestionar y ajustar reglas de seguridad.
  • Aplicar estos sistemas en entornos reales.

  • Basado en permisos tradicionales (chmod, chown).
  • El usuario decide el acceso.
  • El sistema define políticas obligatorias.
  • Ni siquiera root puede ignorarlas fácilmente.

Un servicio comprometido puede acceder a cualquier recurso permitido al usuario, lo que amplifica el impacto de una brecha de seguridad.


SELinux es un sistema de seguridad desarrollado originalmente por la NSA.

  • Contextos de seguridad
  • Tipos (types)
  • Políticas

Ejemplo de contexto:

Ventana de terminal
ls -Z /var/www

Output:

system_u:object_r:httpd_sys_content_t:s0 index.html

Componentes:

  • user
  • role
  • type
  • level

El elemento más importante es el type, que define lo que está permitido.


Ventana de terminal
getenforce
  • Enforcing → bloquea accesos no permitidos
  • Permissive → solo registra
  • Disabled → desactivado

Alternativa más simple que SELinux.

Basado en:

  • rutas de archivos (path-based)
  • perfiles por aplicación

Ubicación:

/etc/apparmor.d/

Característica SELinux AppArmor
Modelo basado en etiquetas basado en rutas
Complejidad alta media
Flexibilidad muy alta moderada

Un servidor web (nginx) no puede acceder a un directorio personalizado /srv/app, aunque los permisos UNIX son correctos.



Ventana de terminal
getenforce

Ventana de terminal
ls -Zd /srv/app

Output incorrecto:

default_t

Ventana de terminal
sudo journalctl | grep AVC

Ejemplo:

avc: denied { read } for pid=1234 comm="nginx"

Ventana de terminal
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/app(/.*)?"
sudo restorecon -Rv /srv/app

  • semanage → define política persistente
  • restorecon → aplica contexto


Ventana de terminal
sudo aa-status

Ventana de terminal
cat /etc/apparmor.d/usr.sbin.nginx

Ventana de terminal
dmesg | grep apparmor

Ventana de terminal
sudo nano /etc/apparmor.d/usr.sbin.nginx

Añadir:

/srv/app/** r,

Ventana de terminal
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx

1. Servicio funciona en permissive pero no en enforcing

Sección titulada «1. Servicio funciona en permissive pero no en enforcing»

-Causa:* política mal definida.

Solución:

Ventana de terminal
sudo journalctl | grep denied

2. Se desactiva SELinux en lugar de arreglarlo

Sección titulada «2. Se desactiva SELinux en lugar de arreglarlo»

Desactivar SELinux elimina una capa de seguridad fundamental.


3. Contextos incorrectos tras copia de archivos

Sección titulada «3. Contextos incorrectos tras copia de archivos»

Solución:

Ventana de terminal
restorecon -Rv /ruta

Ver logs:

Ventana de terminal
dmesg

Instalar:

Ventana de terminal
sudo apt install policycoreutils

Usar:

Ventana de terminal
setenforce 0

solo para diagnóstico temporal.


  • analizar logs
  • identificar reglas implicadas

Ventana de terminal
audit2why
audit2allow

  • limitar accesos por proceso
  • reducir superficie de ataque

Guardar cambios en repositorio.


Probar cambios antes de producción evita caídas de servicio.


Detectar anomalías en logs de seguridad.


SELinux/AppArmor deben complementar:

  • firewall
  • SSH
  • auditoría

Has aprendido a utilizar SELinux y AppArmor para implementar control de acceso obligatorio en Linux, entendiendo cómo los procesos pueden ser restringidos a nivel de kernel incluso si están comprometidos.

Este conocimiento eleva significativamente el nivel de seguridad de cualquier infraestructura Linux.

El siguiente paso es comenzar a trabajar con servicios reales en producción:

➡️ 8.1 Servidores Web (Nginx/Apache), donde aplicarás todo lo aprendido para desplegar aplicaciones seguras, eficientes y accesibles.