Académique Documents
Professionnel Documents
Culture Documents
Unidad 8
Temario
Administracin de SELINUX.............................................................................................................3 Conceptos Bsicos de Seguridad con SELinux...........................................................................3 Modos de SELinux....................................................................................................................... 4 Ver y modificar los modos de SELinux........................................................................................4 Ver y modificar los contextos de SELinux....................................................................................5 Administrando Booleanos de SELinux.........................................................................................6 Monitoreando violaciones de SELinux.........................................................................................7
Administracin de SELINUX
Conceptos Bsicos de Seguridad con SELinux
SELinux, Security-Enhanced Linux, es un metodo adicional para proteger su sistema.
Presumiendo que queremos permitir el acceso remoto a un servidor web, debemos abrir determinados puertos a travez de un firewall. Sin embargo, eso significa que personas maliciosas podrn intentar crackear el sistema utilizando un exploit y, si ellos comprometen los procesos del servidor web, ganar los permisos necesarios: Los permisos del usuario apache y del grupo apache. Este usuario/grupo, tiene permisos de lectura como por ejemplo al document root (/var/www/html), ademas tiene permiso de escritura sobre el directorio /tmp, /var/tmp y muchos otros archivos/directorios que pueden ser escritos por cualquiera.
SELinux es un set de reglas de seguridad que determinan cuales procesos pueden acceder determinados archivos, directorios, puertos, etc. Cada archivo, proceso, directorio y puerto tiene etiquetas especiales de seguridad denominadas contextos de SELinux. Un contexto es simplemente un nombre que es utilizado por las politicas de SELinux para determinar si o no un proceso puede acceder a un archivo, directorio o puerto. Por omision, la politica no permiten ninguna interaccion, entonces las reglas explicitas permiten el acceso. Si no hay una regla permitiendo, no hay acceso. Las etiquetas de SELinux tienen diferentes contextos, pero en este curso nos centraremos en el tercer contexto: el tipo de contexto. Los nombres de los tipos de contexto, usualmente terminan con _t. El tipo de contexto para un servidor web seria entonces httpd_t. El tipo de contexto para archivos y directorios normalmente encontrados en /var/www/html es httpd_sys_content_t. El tipo de contexto para archivos y directorios normalmente encontrados en /tmp y /var/tmp es tmp_t.
-3-
Hay una regla en las politicas que permite a Apache (los procesos del servidor web funcionando como httpd_t) acceder archivos y directorios con un contexto normalmente encontrado en /var/www/html y otros directorios del servidor web (httpd_sys_content_t). No hay reglas de permisos en las politicas para archivos ubicados en /tmp y /var/tmp, entonces el acceso no es permitido. Con SELinux, un usuario malicioso, no podr acceder al directorio /tmp. SELinux adems tiene reglas para sistemas de archivos remotos, como NFS y CIFS, a pesar de que todos los archivos son etiquetados con el mismo contexto. Uno de los beneficios de SELinux es proteger los datos del usuario de los sistemas que han sido comprometidos.
Modos de SELinux
A modo de detectar posibles errores, podremos temporariamente deshabilitar la proteccin de SELinux, utilizando los modos de SELinux. En enforcing mode, SELinux activamente deniega el acceso a un servidor web que intenta leer archivos con el tipo de contexto tmp_t. En enforcing mode, SELinux registra y proteje. El permissive mode es a menudo utilizado para la resolucin de problemas. En permissive mode, SELinux permite toda tipo de interaccion, aun sino hay una regla explicita, y esta registre la interaccion denegada. Este modo puede ser utilizado para determinar si estamos teniendo un inconveniente con SELinux. No requiere que reiniciemos el sistema para ir de un modo al otro o viceversa. Un tercer modo, disabled, deshabilita por completo a SELinux. Debemos reiniciar el sistema para deshabilitar por completo el servicio SELinux o para pasar del modo disabled a los modos enforcing o permissive. Si planea re-habilitar las restricciones de SELinux, es mejor utilizar el modo permissive que apagar completamente el servicio. Una razon para esto es que aun en el modo permissive, el kernel automaticamente mantiene el sistema de etiquetas SELinux, evitando la necesidad de re-etiquetar el sistema de archivos cuando reiniciamos el sistema con el servicio de SELinux habilitado.
Utilice /etc/sysconfig/selinux para cambiar el modo por omision de SELinux durante el proceso
-4-
de arranque del sistema. En el ejemplo anterior, SELinux est seteado en modo enforcing. Para visualizar el modo actual de SELinux, utilizaremos el comando getenforce. Para modificarlo, utilizaremos el comando setenforce:
[root@serverX ~]# Enforcing [root@serverX ~]# usage: setenforce [root@serverX ~]# [root@serverX ~]# Permissive [root@serverX ~]# [root@serverX ~]# Enforcing getenforce setenforce [ Enforcing | Permissive | 1 | 0 ] setenforce 0 getenforce setenforce Enforcing getenforce
Qu determina el contexto inicial de un archivo? Normalmente, su directorio padre. El contexto del directorio padre es asignado a los archivos mas nuevos. Esto funciona para comandos como vim, cp y touch, sin embargo, si un archivo es creado en cualquier lugar y los permisos son mantenidos (como con los comandos mv o cp -a), se preservaran los contextos de SELinux. Hay algunas reglas de politicas especiales llamadas reglas de tipo de transicin, que deben cambiar el contexto por default. Estas reglas estan fuera del objetivo de este curso.
[root@serverX ~]# ls -Zd /var/www/html/ drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/ [root@serverX ~]# touch /var/www/html/index.html [root@serverX ~]# ls -Z /var/www/html/index.html -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/ index.html
-5-
semanage fcontext puede ser utillizado para mostrar o modificar las reglas que el comando restorecon utiliza para setear el contexto por omisin. Este utiliza expresiones regulares extendidas para especificar el path y el nombre de los archivos. La expresin regular ms comn utilizada en las reglas fcontext es (/.*)? lo que significa que opcionalmente, coinciden con una / seguida de cualquier nmero de caracteres. En esencia, esto coincide con el directorio listado antes de la expresin y todo lo demas en ese directorio recursivamente. restorecon es parte del paquete policycoreutil, y semanage es parte del paquete policycoreutil-python.
[root@serverX ~]# touch /tmp/file1 /tmp/file2 [root@serverX ~]# ls -Z /tmp/file* -rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/file1 -rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/file2 [root@serverX ~]# mv /tmp/file1 /var/www/html/ [root@serverX ~]# cp /tmp/file2 /var/www/html/ [root@serverX ~]# ls -Z /var/www/html/file* -rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /var/www/html/file1 -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2 [root@serverX ~]# semanage fcontext -l ... /var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 ... [root@serverX ~]# restorecon -Rv /var/www/ restorecon reset /var/www/html/file1 context unconfined_u:object_r:user_tmp_t:s0>system_u:object_r:httpd_sys_content_t:s0 [root@serverX ~]# ls -Z /var/www/html/file* -rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1 -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2
El siguiente ejemplo muestra como utilizar semanage para agregar un contexto para un nuevo directorio.
[root@serverX ~]# mkdir /virtual [root@serverX ~]# touch /virtual/index.html [root@serverX ~]# ls -Zd /virtual/ drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /virtual/ [root@serverX ~]# ls -Z /virtual/ -rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html [root@serverX ~]# semanage fcontext -a -f "" -t httpd_sys_content_t '/virtual(/.*)?' [root@serverX ~]# restorecon -RFvv /virtual [root@serverX ~]# ls -Zd /virtual/ drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /virtual/ [root@serverX ~]# ls -Z /virtual/ -rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html
-6-
selectivos. Muchos paquetes tienen pginas de manual * _selinux (8), que pueden detallar algunos de los booleanos que utilizan, '_selinux "man-k puede encontrar fcilmente las pginas man. getsebool se utiliza para mostrar los booleanos y setsebool se utiliza para modificar los valores booleanos. setsebool-P modifica la poltica de SELinux para hacer permanente la modificacin. semanage boolean l se mostrar o no un valor lgico es persistente.
[root@serverX ~]# getsebool -a abrt_anon_write --> off allow_console_login --> on allow_corosync_rw_tmpfs --> off ... [root@serverX ~]# getsebool httpd_enable_homedirs httpd_enable_homedirs --> off [root@serverX ~]# setsebool httpd_enable_homedirs on [root@serverX ~]# semanage boolean -l | grep httpd_enable_homedirs httpd_enable_homedirs -> off Allow httpd to read home directories [root@serverX ~]# getsebool httpd_enable_homedirs httpd_enable_homedirs --> on [root@serverX ~]# setsebool -P httpd_enable_homedirs on [root@serverX ~]# semanage boolean -l | grep httpd_enable_homedirs httpd_enable_homedirs -> on Allow httpd to read home directories
Detailed Description: SELinux denied access requested by httpd. /var/www/html/file3 may be a mislabeled. /var/www/html/file3 default SELinux type is httpd_sys_content_t, but its current type is admin_home_t. Changing this file back to the default type, may fix your problem. ... Allowing Access: You can restore the default system context to this file by executing the restorecon command. restorecon '/var/www/html/file3', if this file is a directory, you can recursively restore using restorecon -R '/var/www/html/file3'. Fix Command: /sbin/restorecon '/var/www/html/file3' ...
-8-