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ó”
Si hubiese visto esto hace tres semanas me habría ahorrado mucho tiempo y aspirinas Eugenia 🙁 Muy buen aporte, gracias.
Podrías, ciertamente, utilizar un .htaccess en cada carpeta para cambiar el comportamiento de Apache «en esa carpeta», permitiendo con «AllowOverride All» el re-escribir cualquier opción de apache en el .htaccess.-
También podrías incoporar a www-data al grupo «pepe», para que el usuario www-data pudiera leer lo que el grupo «pepe» puede leer …
Por último (más complicado, pero más efectivo) podrías usar itk:
apt-get install apache2-mpm-itk
Y con ello podrías correr apache con múltiples usuarios, por ejemplo, en un vhost podrías agregar:
…
DocumentRoot /srv/miweb
AssignUserId pepe pepe
…
Y así podrías correr con múltiples usuarios!.
Saludos y Happy Hacking!
Hola Jesus! Gracias por el aporte!
Si se colocaran uno o mil .htaccess en cada una de las «una» o mil carpetas, el problema seguiría sin solución, ya que no se trata solo de «propietarios» (usuarios) sino de carpetas cifradas. A una home cifrada solo accede el propietario de la carpeta y Apache jamás llegaría al archivo .htaccess porque el permiso, se le negaría primero para acceder a la carpeta.
La re-escritura de URLs (directiva AllowOverride que interactúa con módulo rewrite de Apache), tiene por objetivo redireccionar peticiones del usuario «reescribiendo» dichas solicitudes. Si el origen del problema es el impedimento de acceder a una carpeta cifrada, redireccionar peticiones podría «parchear» el inconveniente (es decir, tapar la humedad con pintura) pero no lo estaría solucionando.
Agregar al usuario www-data al grupo al cual solo pertenece un usuario propietario de toda una home cifrada, es sin dudas, un poco negligente. El usuario www-data, dicho en buen criollo, representa a cualquier persona accediendo a la Web a través del navegador ¿de verdad le darías a cualquier persona, incluidos asesinos en serie, permiso para almorzar el comedor de tu casa? Quedará a criterio de cada uno, pero claramente, yo no puedo aconsejar hacerlo de tal forma.
El módulo itk de Apache es excelente. Pero nuevamente, el objetivo de este módulo es permitir correr diferentes VirtualHost con diferentes UID y GID. Si volvemos al origen del problema (impedimento para acceder a una carpeta cifrada), el uso del módulo itk sería una alternativa que soluciona el problema «por efecto colateral».
Personal y profesionalmente, elijo aplicar el principio de la Navaja de Ockham y KISS a cada problema, para así, lograr resolverlo de manera simple =)
Abrazo!
pues la verdad no se que tanta utilidad tengo cifrar la carpeta personal , supongo que si entras por un usb live podrás ver y modificar todos tus archivos y si la cifras pues no, es raro pero creo que una persona común ni siquiera sabría por donde llegarle a tus datos, aparte si la usas para desarrollar eso puede traer problemas, uso fedora y para que no entren usuarios desconocidos tengo la entrada de ssh por rsa igual y un ataque de fuerza bruta y caigo pero SELinux ayuda algo y pues tengo un servidorcillo con linux mint , a ese no le tengo mucha seguridad pues no tiene datos importantes, peroo aaa ese problemas :@
Ubuntu no está pensado para servidores. Si te gusta Ubuntu y querés instalar un servidor te conviene utilizar Ubuntu Server, que funciona muy bien y no tenés este tipo de problemas «locos».
Saludos!!
Parece que Ubuntu ya no es lo que era. Yo ya me pasé a Linux Mint, pero creo que mi próximo paso será wheezy…
Siempre que te pase algo de ese estilo y pienses que apache/ nginx tenga acceso….
su www-data
y compruebalo por ti mismo.
De todas formas… la web debería ir en /var/www no? ahí si que no tendría ningún problema.
Yo tengo todas las webs en /var/www y un enlace simbólico a mi home para trabajar mas cómodamente.
Espero que a alguien le sirva de algo 🙂
Hola Tenia un wheezy con samba y apache que funcionaba fenomeno . instale mysql-server y client y phpmyadmin y tratando de arreglar phpmyadmin (cambie con chown -R las carpetas de /var/www en adelante ) empezo a dar 403 y no veo nada por apache y por samba no tengo permiso para escribir . qiero volver para atras y no se como y el ftp me da econnrefusde. Si no fuera wheezy estaria evaluando (format c:). Muchas Gracias .
Buenas!! instalé Jack the stripper, y al parece apache corre sin problemas, pero solamente accede a archivos .html, los que son .php no los levanta y me arroja el 403 forbidden.
Me aseguré de colocar «Require all granted» en mi apache2.conf (en mi /srv).
Alguien podría guiarme que puede estar pasando? gracias y saludos!