Security Enhanced Linux

SELinux

Nunca te vas a la cama sin saber una cosa más. Hoy me encontraba en el trabajo con un problema en el apache en un Centos 5. Cuando cambiaba el DocumentRoot a otro diferente del por defecto me sacaba el siguiente error en el log:

Permission denied: access to /index.html denied

Me he vuelto loco con los permisos, le daba todos permisos posibles y el apache me seguía dando el mismo error. Cuando mi lógica ha dejado de funcionar me he puesto a buscar por internet y ahi me he encontrado que el problema era por culpa del SELinux.

¿Que es SELinux?

Security-Enhanced Linux (o SELinux) es una arquitectura de seguridad integrada en el kernel 2.6.x usando los módulos de seguridad linux (o linux security modules, LSM). Este es un proyecto de la Agencia de Seguridad Nacional (NSA) de los Estados Unidos y de la comunidad SELinux. La integración de SELinux en Red Hat Enterprise Linux fue un esfuerzo conjunto entre al NSA y Red Hat.

Todo apunta que es esto, otro sistema de seguridad que es el que niega el acceso del apache al nuevo DocumentRoot. Entonces me pongo a buscar como darle acceso.

Por ejemplo: Si queremos darle permisos al apache para que pueda acceder a una carpeta TU_CARPETA, primero veremos que no tiene los permisos para que pueda ser accedida por el apache con la siguiente orden:

    >> ls -Z TU_CARPETA
    drwxr-xr-x  root root system_u:object_r:home_root_t  TU_CARPETA

    Como no los tiene (no le sale httpd_sys_content_t) entonces le daremos los permisos con la siguiente orden:

    >> chcon -R -h -t httpd_sys_content_t TU_CARPETA

    Por último comprobaremos que ya tiene los permisos:

    >> ls -Z TU_CARPETA
    drwxrwxrwx  root root root:object_r:httpd_sys_content_t TU_CARPETA

    En teoría esto tendría que haber funcionado pero me encontre con otro problema, esta carpeta era una carpeta montada por cifs y no me dejaba darle estos permisos. Por esto tube que pasar al plan B: Deshabilitar el SELinux.

    Para saber si lo tenemos activado tendremos que ejecutar la siguiente orden (si esta off, significa que no esta activado lo que lo deshabilita, lo que quiere decir que esta activado):

    >> getsebool -a | grep httpd
    ...
    httpd_disable_trans --> off
    ...

    Activamos la opción de deshabilitar y comprobamos que se ha activado:

    >> setsebool -P httpd_disable_trans 1
    >> getsebool -a | grep httpd
    ...
    httpd_disable_trans --> on
    ...

    Por último reiniciamos el apache para que tenga efecto:

    >> sudo /etc/init.d/httpd restart
    Parando httpd:                                             [  OK  ]
    Iniciando httpd:                                           [  OK  ]

    Entonces ha funcionado. Asi que si os encontráis con este problema ya sabéis como solucionarlo.

    temas: 

    Añadir nuevo comentario