SELinux que bonito, menudos ratos me he pasado con el…. ahora somos medio amigos, pero poco.
Selinux viene de Security-Enhanced Linux (Seguridad Mejorada de Linux) y sobre todo viene activado en CentOS. Cuando comencé a utilizar el servidor dedicado que tengo ahora, nadie me dijo que venía ni que era.
Voy a hacer un poco de memoria, para que el lector comprenda como estaba yo cuando me topé con SELinux (ohhhh si… un rollete que te mueres, pero necesario).
Hasta hace unos años, yo venía utilizando RedHat como distribución de GNU/Linux de escritorio, hasta que el proyecto fue desmantelado (cójase con pinzas semejante información) y el testigo lo pasaron a Fedora. Ya hacía tiempo que en casa había pasado de Red Hat a Debian, pero en el trabajo la seguíamos utilizando, hasta que dimos el salto a Ubuntu. Posteriormente, instalamos unos cuantos Red Hat AS y otro compañero instaló CentOS en 3 servidores que no llegué a tocar. Así que de CentOS sólo sabía que es muy parecido a Red Hat ES
Y en ninguno de los anteriores venía por defecto activado SELinux, así que ni flowers…
Por aquel entonces, yo tenía un VPS que tenía instalado Fedora, cuando decidí dar el salto al dedicado, me instalaron un CentOS (la instalación no me terminó de convencer, que se le va a hacer) y aquí empezó mi relación con SELinux.
Menos mal que el servidor venía configurado, porque recientemente he tenido que hacer frente a uno instalado desde cero y es odioso el tema de SELinux a nivel de escuchar puertos.
Básicamente (y hablando en tema de servidores), el sistema lo que hace es comprobar en todo momento si el fichero al que se intenta acceder es accesible por la aplicación que lo llama. Aparte de controlar ficheros, también controla puertos. Es decir, si intentamos arrancar un servidor, por ejemplo de FTP, debemos antes darle los permisos correspondientes para que el servidor pueda escuchar en el puerto asignado)
Vamos a poner un ejemplo práctico, subimos un fichero por sftp y lo dejamos en nuestro home del servidor. Posteriormente, mediante ssh movemos el archivo al directorio donde se encuentran los ficheros del dominio y tras darle los correspondientes permisos, intentamos acceder vía web, para ver si lo hemos hecho bien…. y problema, el servidor da un error de permisos sobre el fichero. Te vuelves loco mirando permisos y no encuentras nada…. es hora de mirar la configuración de SELinux…
Hacemos un ls -Z para ver que permisos de seguridad tiene el fichero, debe salir algo así:
-rw-r–r– perico perico user_u:object_r:user_home_t perico.jpg
mientras que si hacemos un ls -Z al resto de ficheros, nos encontramos con algo así:
-rw-r–r– perico perico user_u:object_r:httpd_sys_content_t index.html
Y si hacemos un ps -axZ |grep httpd veremos con que permisos de seguridad se ejecuta Apache
user_u:system_r:httpd_t 10827 ? S 1:53 /usr/sbin/httpd
Apache puede leer los archivos que contienen httpd_sys_content_t pero no los que tienen user_home_t, así que procedemos a cambiar la asignación al fichero perico.jpg
chcon -t httpd_sys_content_t perico.jpg
Con esto tendríamos terminado un acercamiento básico al tema de SELinux para dummies. Para un servidor instalado de los típicos que te alquilan los diferentes hostings, habría de sobra, pero si queremos ir avanzando en el tema de SELinux es recomendable leer el wiki de CentOS, que está aquí:
http://wiki.centos.org/HowTos/SELinux
Si por alguna razón, queremos desactivar SELinux, sólo tendremos que ejecutar el comando
system-config-securitylevel-tui
Para activar una aplicación en concreto lo veremos más adelante.
Publicado en
GNU/Linux,
Informatica
Publicado por:
Antonio J. Perez