Cuando ya tenemos SELinux funcionando, la mayoría de herramientas estándar del sistema, como ps o ls, disponen de una nueva opción --context que nos permite determinar el contexto de seguridad en el que se están ejecutando:
[root@test /]# ps -e --context
PID SID CONTEXT COMMAND
1 7 system_u:system_r:init_t init
2 1 system_u:system_r:kernel_t [keventd]
3 1 system_u:system_r:kernel_t [kapmd]
...
2728 323 root:user_r:user_t -bash
2920 323 root:user_r:user_t ps -e --context
[root@test /]#
Como podemos ver hay dos columnas adicionales: SID (identificador de seguridad) y el contexto de seguridad, compuesto por el usuario asociado, el rol y su tipo. El usuario system_u se asigna automáticamente a todos los archivos existentes antes de la instalación de SELinux.
Como durante la instalación de SELinux hemos configurado el núcleo con el SELinux Development Support, el sistema está funcionando en modalidad permisiva. Esto significa que en lugar de bloquear aquellas funciones no permitidas por la política de seguridad simplemente las registra (por defecto en /var/log/messages).
Utilizando el mandato avc_toggle podemos cambiar la modalidad para que el sistema bloquee cualquier función no expresamente autorizada:
[root@test /] # tail /var/log/messages
. el contenido del registro de actividad ...
[root@test /] # avc_toggle
enforcing
[root@test /] # tail /var/log/messages
tail: /var/log/messages: Permission denied
[root@test /] # avc_toggle
avc_toggle: Permission denied
[root@test /] #
Es decir, una vez aplicada la política ningún usuario no autorizado puede modificarla, ni tan siquiera el propio root.
La restauración de la modalidad permisiva sólo puede realizarla bajo el rol de sysadm_r:
[root@test /] # newrole -r sysadm_r
Authenticating root.
Password: root@password
[root@test /] # avc_toggle
permissive
[root@test /] # tail /var/log/messages
. el contenido del registro de actividad ...
Ahora en el registro de actividad del sistema podemos ver que han quedado registrados los intentos que hemos realizado y han sido denegados por la política.
Definición de la política
Explicar como configurar la política de SELinux es algo que se escapa al alcance de este boletín, pero facilitamos algunos datos básicos. Los lectores interesados encontrarán información más detallada en la documentación incluida dentro de SELinux.
Los archivos de la política residen en el directorio /etc/security/selinux/src. Dentro de este directorio encontramos el archivo users que contiene la relación de usuarios y las definiciones de roles.
En el subdirectorio file_contexts se definen las plantillas de política para los diversos tipos de archivos existentes en el sistema. Por ejemplo:
/etc/security/selinux/src/file_context/program/ntpd.fc
/var/lib/ntp(/.*)?
system_u:object_r:var_lib_ntp_t
/etc/ntp.conf system_u:object_r:etc_ntp_t
/usr/sbin/ntpd system_u:object_r:ntpd_exec_t
/var/log/ntpstats(/.*)?
system_u:object_r:var_log_ntp_t
/var/log/ntpd.*
system_u:object_r:var_log_ntp_t
/etc/cron.(daily|weekly)/ntp-simple system_u:object_r:ntpd_exec_t
La primera columna es una expresión regular para los nombres de archivos sobre los que se aplica la política y la segunda columna es el contexto sobre el que se aplica la política.
En el directorio /etc/security/selinix/src/domains se establecen las TE (Type Enformcement) para los objetos del sistema. La forma habitual de realizar esta definición es mediante el lenguaje de marcas m4.