Cómo solucionar el error de apache "Forbidden: You don't have permission to access this resource."
Apache es uno de los web servers más utilizados a lo largo de todo la web. Es fácil de configurar, fácil de instalar y customizable. Sin embargo, puede que de vez en cuando te encuentres con uno de los errores más comunes cuando recién están empezando con este gran web server y es el siguiente:
Forbidden
You don't have permission to access this resource.
El primer paso, es que tengas en cuenta la url a la que estás accediendo, si es una URL de algún virtual host, o es la URL general como por ejemplo 127.0.0.1
. Los siguiente q debes hacer es identificar los archivos de configuración de apache.
sudo apachectl -D DUMP_INCLUDES
Obtendrás una respuesta similar a la siguiente
Included configuration files:
(*) /etc/apache2/apache2.conf
(146) /etc/apache2/mods-enabled/access_compat.load
(146) /etc/apache2/mods-enabled/alias.load
(146) /etc/apache2/mods-enabled/auth_basic.load
...
Una vez hecho esto debes encontrar la configuración de la URL a la cual estás accediendo. Bien podría estar en la configuración general o en alguna configuración de virtual host.
vim /etc/apache2/apache2.conf
Hecho esto, ten presente el path de los archivos a los cuales está apuntando dicha configuración.
<VirtualHost *:80>
DocumentRoot /var/www
....
ErrorLog ${APACHE_LOG_DIR}/error.log
...
<VirtualHost>
Lectura del log
El log de apache te puede decir el error exacto que está ocurriendo y que causa el "Forbidden". Para esto, con anticipación debes haber identificado la configuración del sitio o URL a la cual está ingresando. Una vez hecho esto, observa a dónde apunta el ErrorLog
y coloca la consola en espera mientras replicas el error.
tail -fn0 /var/www/logs/apache2/error.log
Si no puedes replicar el error puedes echar un vistazo a las últimas líneas del log.
tail -fn 30 /var/www/logs/apache2/error.log
Permisos para apache web server
Las carpetas bajo apache deben tener el grupo de apache (www-data / apache) entre otros permisos para que puedan ser leídas. Cada sistema operativo puede tener un usuario/grupo de apache diferente. Para asegurarte cual usuario de apache tienes en su sistema operativo puedes ejecutar el siguiente comando:
cat /etc/group | grep 'apache\|www'
Una vez hecho esto, suponiendo que por ejemplo el usuario sea www-data debes asignar el grupo a la carpeta en donde está(n) tu proyecto(s). Esta carpeta puede ser la que viene configurada con la instalación de apache por defecto o un path de tu preferencia como por ejemplo /home/user/www. Para este ejemplo vamos a suponer que la carpeta de tus proyectos es /var/www.
Lo primero que debes hacer es cambiar el grupo y usuario de la carpeta de proyectos de apache.
sudo chown -R your-user:www-data /var/www
Otra recomendación es cambiar la pertenencia de este directorio y todos sus subdirectorios para agregar el grupo, los permisos de escritura y configurar el ID del grupo para los directorios que se creen de ahora en adelante.
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
Finalmente podemos cambiar los permisos para todos los archivos dentro del path (incluídos sus subdirectorios) para agregar el grupo y los permisos de escritura.
find /var/www -type f -exec sudo chmod 0664 {} \;www
Directiva <Directory>
Esta directiva le indica a apache cuales archivos está habilitado para leer. Esta configuración suele estar generalmente en la config principal apache2.conf o httpd.conf. Suponiendo que tu carpeta de archivos de apache sea /var/www deberías tener la siguiente configuración.
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
En caso de que sea una carpeta diferente, por ejemplo /home/username/www, deberías tener una configuración similar a la siguiente:
<Directory /home/username/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Nota: Si escojes una carpeta diferente a la carpeta por defecto debes asegurarte que existan permisos de búsqueda sobre todos los componentes del path.
Cuando utilizas una carpeta para apache como por ejemplo la de tu usuario, debes aseguarte que tenga permisos de búsqueda en todos sus componentes. Es decir, que los directorios tengan permisos de ejecución para el grupo de apache o para otros. Generalmente el path del usuario no tienes estos permisos, si es el caso esto lo puedes solucionar así:
chmod o+x /home/username/
El no tener permisos para algún componente del path escribirá un error similar al siguiente el log de apache.
Permission denied: access to / denied (filesystem path '/home/username/www') because search permissions are missing on a component of the path
Después de esta recomendaciones ya no deberías tener problemas de Forbidden en tu servidor. Hasta la próxima.