Ubuntu, Apache, VirtualHost, 403 Forbiden y la putaqueloparió

Hace unos meses ya, desde que a un alumno se le ocurrió instalar Ubuntu 13.04, que vengo padeciendo del Síndrome del “pero qué mierda le pasa a esto, carajo!”.

Los pongo en contexto:

Ubuntu 13.04. Se crea un nuevo Virtual Host y al intentar acceder, Apache retorna el error 403 Forbiden.

Si uno ve un error 403 Forbiden, lo primero que piensa es lo obvio: problema de permisos. Pero los permisos pueden tener a la vez, “cientocincuentamillonesdeorígenes“.

En resumidas cuentas, para solventar el problema en su momento, se probaron no una, tampoco 2 ni 10 formas diferentes sino decenas de soluciones posibles y ninguna de ellas lo solucionaba.

Y ¿qué cambió ahora? El martes pasado, estábamos en clase de PHP con mi alumno Marcelo Lobato, quien harto de no poder solucionar el error en Ubuntu 13.04 decidió pasar al más querido estable 12.04 LTS. Estábamos creando nuevamente un Virtual Host, cuando para mi sorpresa, Apache volvió a arrojar un 403 Forbiden y mi grito de “Oh, pero qué mierda le pasa a esto, carajo!” se hizo evidente.

Puteada va, prueba viene, a Marcelo se le ocurrió la brillante idea de decir: – “¿No tendrá algo que ver que al momento de instalar Ubuntu yo haya elegido cifrar mi carpeta personal?”

¡Me cago en la puta! ¿Cómo pude no tener en cuenta que las carpetas personales podrían estar cifradas?!?! Si la carpeta está cifrada, el usuario de Apache, es decir, www-data, no tendría acceso a ella. Y, hablando con uno y otro, ¿podría ser que Ubuntu 13.04 más allá de la elección del usuario estuviese cifrando la carpeta personal por defecto? Sí, podría ser, pero aún falta laboratorio para dar una respuesta certera.

Por lo pronto, aquí les dejo la solución al problema.

Lo primero que hay que hacer, es cerciorarse de que el problema, realmente se debe al impedimento del usuario de Apache, de acceder a la carpeta raíz del dominio. Para comprobar esto, la forma fácil y rápida es editar el archivo de configuración de Apache, indicando como usuario y grupo al usuario y grupo propietarios de la carpeta en cuestión.

Supongamos que el DocumentRoot de tu Virtual Host es /home/pepe/miweb y que el propietario del directorio miweb es pepe:pepe. Como súper usuario, editas el archivo /etc/apache2/apache2.conf y buscas las siguientes líneas:

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

Y las reemplazas por el usuario y grupo propietarios de la carpeta en cuestión, respectivamente:

User pepe
Group pepe

Reinicias Apache:

sudo service apache2 restart

Y pruebas nuevamente ingresar en tu host virtual. Si logras acceder SIN un 403 Forbiden, el problema, efectivamente, se debe al impedimento del usuario de Apache, de acceder a la carpeta raíz del dominio.

¿Cuál sería la solución entonces? Obviamente, volver las variables User y Group del apache2.conf a su estado original y luego, crear una carpeta FUERA de la carpeta cifrada, pero con el mismo propietario para no estar trabajando allí dentro ni como root ni cosas locas. Una buena alternativa es esta:

# Crear el Document Root dentro de la carpeta /srv/
sudo mkdir /srv/miweb

# Cambiar recursivamente el propietario
sudo chown -R pepe:pepe /srv/miweb

# Crear un enlace simbólico en la carpeta anterior para acceder fácilmente (opcional)
ln -s /srv/miweb /home/pepe/

Y no olvidar de asignar como ruta del DocumentRoot del VirtualHost, el nuevo path /srv/miweb.

Ahora sí, Happy Hacking!

10 ideas sobre “Ubuntu, Apache, VirtualHost, 403 Forbiden y la putaqueloparió”

Los comentarios están cerrados.