Está en la página 1de 8

Curso RH200

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-

El tipo de contexto para los puertos de un servidor web es http_port_t.

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.

Ver y modificar los modos de SELinux


Observaremos que /etc/sysconfig/selinux contiene muchos comentarios de utilidad:
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted

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

Ver y modificar los contextos de SELinux


Algunos de los comandos relacionados con los archivos, tienen un parametro (usualmente -Z) para mostrar o setear los contextos de SELinux. Por ejemplo ps, ls, cp, y mkdir se utiliza el parametro -Z para mostrar o setear los contextos.
[root@serverX ~]# ps axZ LABEL PID TTY STAT TIME COMMAND system_u:system_r:init_t:s0 1 ? Ss 0:00 /sbin/init system_u:system_r:kernel_t:s0 2 ? S 0:00 [kthreadd] system_u:system_r:kernel_t:s0 3 ? S 0:00 [migration/0] ... [root@serverX ~]# service httpd start [root@serverX ~]# ps -ZC httpd LABEL PID TTY TIME CMD unconfined_u:system_r:httpd_t:s0 27672 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 27675 ? 00:00:00 httpd ... [root@serverX ~]# ls -Z /home drwx------. root root system_u:object_r:lost_found_t:s0 lost+found drwx------. student student unconfined_u:object_r:user_home_dir_t:s0 student drwx------. visitor visitor unconfined_u:object_r:user_home_dir_t:s0 visitor [root@serverX ~]# ls -Z /var/www drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons

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

Administrando Booleanos de SELinux


Los booleanos de SELinux son interruptores que cambian el comportamiento de las polticas de seguridad. Booleanos de SELinux son reglas que pueden ser activadas o desactivadas. Pueden ser utilizados por los administradores de seguridad para ajustar la poltica para hacer los ajustes

-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

Monitoreando violaciones de SELinux


Para monitorear las violaciones de SELinux debemos instalar el paquete setroubleshoot-server para enviar los mensajes de SELinux al directorio /var/log/messages. setroubleshoot-server escucha los mensajes de auditora que suceden en el directorio /var/log/audit/audit.log enviando un breve sumario al /var/log/messages. Este sumario incluye los identificadores unicos (UUIDs) para las violaciones de SELinux. El comando sealert -l UUID es utilizado para generar un reporte para un incidente puntual. El comando sealert -a /var/log/audit/audit.log es utilizado para generar reportes de todos los incidentes.
[root@serverX [root@serverX [root@serverX [root@serverX touch /root/file3 mv /root/file3 /var/www/html service httpd start elinks -dump http://serverX/file3 Forbidden You don't have permission to access /file3 on this server. [root@serverX ~]# tail /var/log/audit/audit.log ... type=AVC msg=audit(1292526292.144:952): avc: denied { getattr } for pid=27675 comm="httpd" path="/var/www/html/file3" dev=dm-1 ino=54545 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file ... [root@serverX ~]# tail /var/log/messages ... Dec 16 14:04:59 serverX setroubleshoot: SELinux is preventing /usr/sbin/httpd "getattr" access to /var/www/html/file3. For complete SELinux messages. run sealert -l e6e1d1d6-d716-4e2e-863c-bba4d2b2407a [root@serverX ~]# sealert -l e6e1d1d6-d716-4e2e-863c-bba4d2b2407a Summary: SELinux is preventing /usr/sbin/httpd "getattr" access to /var/www/html/file3. -7~]# ~]# ~]# ~]#

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-

También podría gustarte