Security Enhanced Linux, SELinux, es una colección de parches que modifican el núcleo del sistema operativo Linux, fortaleciendo los mecanismos de control de acceso y forzando la ejecución de los procesos dentro de un entorno con los mínimos privilegios necesarios.
Modelos de control de acceso en Unix
Tradicionalmente los sistemas Unix han utilizado el modelo de control de acceso discrecional (Discretionary Access Control, DAC) en el que un usuario tiene un completo control sobre los objetos que le pertenecen y los programas que ejecuta. Así mismo, el programa ejecutado por un usuario tendrá los mismos permisos de ese usuario que lo está ejecutando.
Esto implica que la seguridad del sistema depende de las aplicaciones que
se están ejecutando y, por tanto, cuando se produce una vulnerabilidad de seguridad en una aplicación, ésta afecta a todos los objetos a los que el usuario tiene acceso. Así, si la aplicación es ejecutada por root, el atacante puede obtener los máximos privilegios en la máquina, comprometiendo la seguridad global del sistema.
Otro modelo de control de acceso es el denominado control de acceso obligatorio (Mandatory Access Control, MAC), donde existe una política de seguridad definida por el administrador y que los usuarios no pueden modificar. Esta política va más allá de establecer propietarios de archivos sino que fija "contextos", en donde se indica cuando un objeto puede acceder a otro objeto. Este modelo de control de acceso puede aumentar el nivel de seguridad, especialmente cuando se establece como base de la política definida que no se permite cualquier operación no expresamente autorizada.
La implementación de este modelo de seguridad para todo un sistema puede ser una tarea muy tediosa. En teoría deben definirse reglas para cualquier usuario que utiliza cualquier programa que accede a cualquier objeto del sistema. Para evitar tener que llegar a este detalle de definición, algo que fácilmente se convertiría en un monstruo inmanejable, se utiliza el concepto de control de acceso basado en roles (Role-Based Access Control, RBAC). Bajo este modelo, el administrador define una serie de roles y asigna a los usuarios en los diferentes roles que corresponden a su perfil.
Como ejemplo, el usuario de un programa únicamente necesita disponer de permisos para leer y escribir los archivos utilizados por esa aplicación concreta, pero nada más. Otros usuarios es posible que necesiten permisos para poder leer archivos, pero no modificarlos. Cada uno de estos usuarios se asignará a diferentes roles.