Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Practica SELinux PDF
Practica SELinux PDF
SELinux: Teoria
Por Javier Vela, 11 de Mayo de 2010 |
La razn de usar SELinux es limitar el acceso que tienen las aplicaciones a otras
aplicaciones y a los ficheros, impidiendo que un proceso pueda modificar cualquier fichero
del usuario con el que se lanz. Por ejemplo, Firefox jamas debera ser capaz de cambiar
los permisos de mi clave privada ssh, lo cual con un sistema de control de acceso DAC s
sera posible si un atacante toma el control del navegador.
Cmo funciona SELinux? Pues se basa en atributos extendidos del sistema de ficheros que
indican el tipo de usuario (que no tiene porque ser usuario del sistema), el rol, y el tipo del
objeto. Por ejemplo, si hacemos un ls -lZ para ver los atributos extendidos del directorio
/etc/httpd, podremos ver que permisos le asigna una distribucin Red Hat a los ficheros de
configuracin de Apache (la quinta lnea se ha partido para facilitar su presentacin):
Como podemos ver, el usuario y rol es el mismo, pero el tipo cambia. Estos atributos son
los que en funcin de las polticas definidas en SELinux, indican las interacciones entre
ellos y los diferentes objetos del sistema. Estos atributos estn definidos en el sistema, y
puede haber cientos, tantos como la granularidad que queramos obtener. La mayora de
distribuciones que usan SELinux vienen ya con varios tipos predeterminados para
ayudarnos en su administracin, pero nosotros podemos definir ms. Si queremos ver todos
los tipos disponibles, lo podemos hacer con el comando
#getsebool -a
Ahora que ya conocemos los atributos, ahora nos falta conocer un poco las polticas que
utilizan estos atributos. Al ms alto nivel, existen dos tipos de polticas bsicas: targeted y
strict:
strict: En modo estricto, por defecto todo est denegado, y tan slo se permite lo
especificado en la polticas. Esto, que sigue el principio de mnimo privilegio, es
complicado de administrar y llevara a la mayora de los sysadmins a desactivar
SELinux.
targeted: Tan slo ciertos servicios estn bajo la supervisin de SELinux, como por
ejemplo los demonios httpd, bind, postgresql, etc. El resto estn libres de
restricciones. La denominacion Targeted proviene del hecho de que tan solo los
servicios sealados sern vigilados.
Para saber qu tipo de poltica tenemos configurada, en un sistema Red Hat podemos
averiguarlo en el fichero /etc/sysconfig/selinux.
Por debajo de estos modos, se sitan las polticas en s, que definen las interacciones entre
objetos. Dichas polticas pueden usar diferentes controles de acceso, en funcin de los
atributos extra que utilicen. Normalmente se suele usar Type Enforcement en el cual tan
solo se utiliza el atributo tipo, y es el modo usado por la poltica targeted. Existen otros
mtodos como el Role-Based Access Control que utiliza los atributos de usuario y rol pero
normalmente, dado que como poltica se utiliza targeted, el modo de acceso mas comn es
el Type Enforcement.
Ya tan slo nos queda saber qu es lo que exactamente permite o impide que podamos
acceder a un objeto. Aqu entran en juego las polticas, que dependiendo del control de
acceso utilizado y los atributos de los objetos, permiten o deniegan un acceso. As pues, si
usamos el modo de Type Enforcement, es el tipo de un objecto el atributo determinante. En
este caso, si un servicio esta en el modo vigilado tan solo podr acceder a objetos con un
tipo similar. En las polticas se definen los tipos similares y las excepciones que permiten
que el sistema funcione. As, por ejemplo, si inspeccionamos con que permisos se ejecuta el
demonio Apache (la segunda lnea se ha partido para facilitar su presentacin):
Vemos que dicho demonio tan solo podr interactuar con objetos de un tipo similar, como
por ejemplo los que estn en el directorio /etc/httpd. Esto implica que aunque nosotros
tuviramos un fichero con permisos de lectura y escritura para todos, como por ejemplo:
Hemos visto por encima que es SElinux, cmo esta estructurado y como consigue aplicar el
MAC a un sistema GNU\Linux. Por supuesto, como pasa siempre, la mejor manera de
comprender su funcionamiento es jugando con l y ponindolo en marcha, algo a lo que les
invito. No obstante, si les queda alguna duda o hay algo de lo dicho sobre lo que les
gustara que incidiese, no tienen ms que indicarlo en los comentarios y estar encantado de
aclarar las dudas que tengan. En la siguiente entrada pasaremos de la teora a la prctica,
con ejemplos de su funcionamiento y las mltiples opciones de configuracin que lo
convierten en un sistema tan flexible.
Lo primero que deberemos aprender es cmo configurar los servicios que estn bajo la
proteccin de selinux. Para ello, man es nuestro amigo y consejero. Si ejecutamos man
selinux, aparte de bastante informacin, veremos al final cuales son los ficheros de ayuda
de selinux para los diferentes servicios del sistema.
(...)
SEE ALSO
booleans(8), setsebool(8), selinuxenabled(8), togglesebool(8),
restorecon(8), setfiles(8), ftpd_selinux(8), named_selinux(8),
rsync_selinux(8), httpd_selinux(8), nfs_selinux(8),
samba_selinux(8),
kerberos_selinux(8), nis_selinux(8), ypbind_selinux(8)
En este momento ya podemos intuir que si queremos configurar, por ejemplo, el vstftpd
deberemos consultar la ayuda ftpd_selinux. Como ejemplo, si quisiramos configurar vsftp
para que los usuarios annimos puedan leer y escribir en el directorio /var/ftp la propia
ayuda nos indica los pasos a realizar. En nuestro caso, deberemos asignar correctamente el
contexto del directorio y habilitar las polticas que permiten a los usuarios annimos
escribir:
# Asignamos el tipo adecuado al directorio
root@centos:~# chcon -R -t public_content_rw_t /var/ftp
Cuando ejecutemos las pruebas, setroubleshoot nos avisar en tiempo real de cualquier
denegacin por parte de Selinux, y nos mostrara una pantalla grfica (gracias a sealert) de
los problemas que vayan ocurriendo, por qu han ocurrido y si sabe, cmo solucionarlos.
Hasta aqu, con la ayuda de las paginas man, el comando setsebool para definir los
booleanos y el comando chcon para cambiar el tipo podemos ajustar totalmente la
configuracin bsica de Selinux. Y si queremos realizar alguna tarea que no esta prevista
en las polticas que trae por defecto Selinux y ningn booleano nos permite cambiar su
funcionamiento? Debemos comenzar a escribir nuestras propias polticas y comenzar a
investigar en las tripas de Selinux? Por suerte para nosotros no es as, ya que existen
herramientas que automatizan dicho proceso.
Para ilustrar el ejemplo, vamos a realizar una pagina web muy simple en PHP que accede a
la clave privada ssh de un usuario. Con este ejemplo mataremos dos pjaros de un tiro:
veremos como SElinux nos protege incluso aunque hayamos cometido un error al dar
permisos a otros usuarios del sistema a nuestra clave privada, y podremos configurar
SElinux para que finalmente permita realizar esta accin (la razn la eligen ustedes, porque
a m no se me ocurre ninguna para que un script ejecutado en un servidor web escriba en mi
clave privada.)
javi@centos:~/.ssh/ls -lZ
rw-rw-rw-. javi javi user_u:object_r:home_ssh_t:s0 prueba_selinux
<html>
<head>
<title>Selinux Test</title>
</head>
<body>
< ?php
$fp = fopen('/home/javi/.ssh/prueba_selinux', 'w');
fwrite($fp, 'One ring to rule...');
fclose($fp);
?>
</body>
</html>
Al lanzar la pagina, si estamos ejecutando el modo grfico, veremos que nos aparece una
ventana indicndonos un denial en SElinux (sino, lo podemos ver lanzndolo en modo
texto con sealert -a /var/log/audit/audit.log > output.txt). El contenido se acorta,
mostrando tan solo la alerta en crudo. La herramienta nos proporciona mucha mas
informacin.
Summary:
(...)
Esto crear varios ficheros, un binario (el modulo para SElinux) y un archivo de texto con
la definicin de la poltica. Ahora debemos cargarlo y esperar que audit2allow haya
funcionado correctamente, pues no es infalible y de vez en cuando no consigue generar una
poltica a partir de las alertas del audit.log.
Hasta aqu la mini serie de SElinux, que espero que no les haya aburrido. Por supuesto, el
objetivo de estas entradas no era descubrirles todas las posibilidades de Selinux ni
convertirles en expertos, sino mostrarles el manejo bsico para poder administrar maquinas
con SElinux y lidiar con los posibles problemas que nos podamos encontrar. Como saben,
cualquier duda que les surja pueden dejarla en los comentarios, y en la medida de mis
posibilidades intentar resolverla. Saludos y hasta la prxima.
$ getenforce
Enforcing
2. Ejecute el comando service httpd start como usuario root para iniciar httpd:
3. Ejecute el comando ps -eZ | grep httpd para observar los procesos httpd:
La poltica de SELinux define cmo los procesos ejecutados en dominios confinados (como
lo es httpd_t), interactan con archivos, otros procesos, y con el sistema en general. Los
archivos deben estar etiquetados correctamente para permitir el acceso de httpd a ellos.
Por ejemplo, httpd, puede leer archivos etiquetados con el tipo httpd_sys_content_t,
pero no puede escribir en ellos, ni an cuando lo permitan los permisos Linux. Los
booleanos deben definirse con valor "on" para permitir determinados comportamientos:
ciertos scripts que permiten el acceso a la red, habilitando a httpd para que pueda acceder
a sistemas de archivos NFS y CIF5; o que a httpd se le permita ejecutar scripts CGI
(Common Gateway Interface).
1. Ejecute el comando service httpd status para confirmar que httpd no est
ejecutndose:
5. PAra que SELinux permita a httpd escuchar en el puerto 12345, tal como en
nuestro ejemplo, el necesario ejecutar el siguiente comando:
Ejecute nuevamente el comando service httpd start para iniciar httpd, y hacer
que escuche sobre el nuevo puerto:
HTTP/1.1 200 OK
Date: Tue, 31 Mar 2009 13:12:10 GMT
Server: Apache/2.2.11 (Fedora)
Accept-Ranges: bytes
Content-Length: 3918
Content-Type: text/html; charset=UTF-8
[...continues...]
http://es.scribd.com/doc/13665834/Manual-Selinux