Cómo solucionar el error de apache "Forbidden: You don't have permission to access this resource."

Author
Por Darío Rivera
Publicado el en Apache

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.


Acerca de Darío Rivera

Author

Application Architect at Elentra Corp . Quality developer and passionate learner with 10+ years of experience in web technologies. Creator of EasyHttp , an standard way to consume HTTP Clients.

LinkedIn Twitter Instagram

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.