PHP no funciona en userdir

Es una tontería, pero puede dar lugar a algún que otro dolor de cabeza: a veces por defecto la instalación de php tiene desactivada la ejecución en los directorios personales (por ejemplo en Ubuntu) por lo que si después de hacer una instalación de apache2 y php5 habilitas el módulo userdir, y generas un fichero php con la función phpinfo() o cualquier otro script de php, lo más seguro es que te aparezca una página en blanco, en vez de ver la información esperada.
La solución es fácil, basta con editar el fichero
/etc/apache2/mods-available/php5.conf
Al final del mismo verás que hay una parte que indica que hay que comentar unas lineas para que los scripts de php funcionen en un directorio de usuario. Esa parte tiene que quedar así:
# Running PHP scripts in user directories is disabled by default
#
# To re-enable PHP in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
#<IfModule mod_userdir.c>
# <Directory /home/*/public_html>
# php_admin_value engine Off
# </Directory>
#</IfModule>

Y eso es todo. Después de reiniciar el servidor Apache (service apache2 restart) los scripts de php ya funcionan.
También se podría poner la directiva a “On”, pero si lo hacemos así, entonces no podríamos ponerla a “Off” en los ficheros .htaccess si en algún momento queremos hacerlo.

Anuncios

Configurar Selinux para un VirtualHost de Apache en Centos 6

Para que al utilizar un host virtual en Apache (por ejemplo localdev) cuyas páginas se encuentren en un directorio dentro de la carpeta del usuario (por ejemplo en public_html) no tengamos problemas de seguridad con Selinux, tenemos que realizar lo siguiente:

1) Instalar paquetes necesarios

Una instalación por defecto de Centos 6 a partir del CD Live configura Selinux en modo enforcing pero no instala algunos paquetes que vienen bien. En una consola como root hacemos:
#yum install policycoreutils-python setroubleshoot

2) Activar Selinux (en caso de que no lo tengamos ya activado)

Editar (como root) el fichero /etc/selinux/config dejándolo así:

SELINUX=enforcing
SELINUXTYPE=targeted

Tenemos que tener en cuenta que si no lo teníamos activado y modificamos este fichero para activarlo, es necesario reiniciar el equipo, porque hace falta que se haga de nuevo un “relabel” del sistema de ficheros.

3) Crear el host virtual en Apache

Modificar el fichero /etc/httpd/conf/httpd.conf descomentando la línea:
NameVirtualHost *:80 y añadiendo al final de dicho fichero:

DocumentRoot ~user/public_html
Servername localdev

4) Modificar el /etc/hosts

Modificamos la línea del host local incluyendo el nuevo host virtual (en este caso localdev) dejándola más o menos así:
127.0.0.1 localhost localhost.localdomain localdev

5) Configurar el contexto de Selinux y los permisos de la carpeta

Tenemos que lanzar como root los siguientes comandos en una consola.
Para cambiar el contexto Selinux de la carpeta del host virtual al necesario para que lo utilice el servidor web:
#chcon -R -v -u system_u -r object_r -t httpd_sys_content_t ~user/public_html

Para permitir al servidor web que lea el contenido de la carpeta home de los usuarios:
#setsebool -P httpd_enable_homedirs 1

Para que la configuración de Selinux se mantenga después de un “relabel” del sistema de ficheros:
# semanage fcontext -a -t httpd_sys_content_t "~user/public_html

Para que no haya problemas de permisos de acceso a las páginas web:
#chmod -R 755 ~user/public_html

(Los dos primeros comandos pienso que habría también que utilizarlos si en vez de crear un host virtual lo que se hace es utilizar el módulo userdir de Apache.)

6) Reiniciamos Apache y probamos nuestra página de inicio.

http://localdev/index.html

(Esta entrada es una versión resumida de este post, en el que se explica todo con más detalle)