Saltar al contenido

Mensaje de error “Prohibido No tienes permiso para acceder / en este servidor”

Solución:

Actualización de octubre de 2016

Hace 4 años, dado que muchos usan esta respuesta como referencia, y aunque aprendí mucho desde la perspectiva de la seguridad durante estos años, me siento responsable de aclarar algunas notas importantes y actualicé mi respuesta en consecuencia.

La respuesta original es correcta pero no segura para algunos entornos de producción. Además, me gustaría explicar algunos problemas en los que podría caer al configurar su entorno.

Si está buscando una solución rápida y LA SEGURIDAD NO ES IMPORTANTE, es decir, desarrollo env, omita y lea la respuesta original en su lugar

Muchos escenarios pueden llevar a 403 Prohibido:


A. Índices de directorio (de mod_autoindex.c)

Cuando accede a un directorio y no se encuentra ningún archivo predeterminado en este directorio
Y apache Options Indexes no está habilitado para este directorio.

A.1. DirectoryIndex ejemplo de opción

DirectoryIndex index.html default.php welcome.php

A.2. Options Indexes opción

Si está configurado, apache mostrará el contenido del directorio si no se encuentra un archivo predeterminado (de la opción anterior)

Si no se cumple ninguna de las condiciones anteriores

Recibirás un 403 Prohibido

Recomendaciones

  • No debe permitir la lista de directorios a menos que DE VERDAD necesario.
  • Restringir el índice predeterminado DirectoryIndex al mínimo.
  • Si desea modificar, restrinja la modificación al directorio necesario SOLAMENTE, por ejemplo, use .htaccess archivos, o coloque su modificación dentro del directiva

B. deny,allow directivas (Apache 2.2)

Mencionado por @Radu, @Simon A. Eugster en los comentarios
Su solicitud es denegada, incluida en la lista negra o incluida en la lista blanca por esas directivas.

No publicaré una explicación completa, pero creo que algunos ejemplos pueden ayudarlo a comprender, en resumen, recuerde esta regla:

SI EMPAREJA POR AMBOS, LA ÚLTIMA DIRECTIVA ES LA QUE GANARÁ

Order allow,deny

Denegar ganará si ambas directivas coinciden (incluso si un allow La directiva está escrita después de la deny en la conf)

Order deny,allow

permitir ganará si coincide con ambas directivas

Ejemplo 1

Order allow,deny
Allow from localhost mydomain.com

Solo localhost y * .mydomain.com pueden acceder a esto, todos los demás hosts están denegados

Ejemplo 2

Order allow,deny
Deny from evil.com
Allow from safe.evil.com # <-- has no effect since this will be evaluated first

Todas las solicitudes son denegadas, la última línea puede engañarlo, pero recuerde que si coincide con ambas, la última regla de victoria (aquí Denegar es la última), igual que está escrito:

Order allow,deny
Allow from safe.evil.com
Deny from evil.com # <-- will override the previous one 

Ejemplo 4

Order deny,allow
Allow from site.com
Deny from untrusted.site.com # <-- has no effect since this will be matched by the above `Allow` directive

Se aceptan solicitudes de todos los hosts

Ejemplo 4: típico para sitios públicos (permitir a menos que esté en la lista negra)

Order allow,deny
Allow from all
Deny from hacker1.com
Deny from hacker2.com

Ejemplo 5: típico para intranet y sitios seguros (denegar a menos que esté en la lista blanca)

Order deny,allow
Deny from all
Allow from mypc.localdomain
Allow from managment.localdomain

C. Require directiva (Apache 2.4)

Apache 2.4 usa un nuevo módulo llamado mod_authz_host

Require all granted => Permitir todas las solicitudes

Require all denied => Denegar todas las solicitudes

Require host safe.com => Solo de safe.com están permitidos


D. Permisos de archivos

Una cosa que la mayoría de la gente hace mal es configurar los permisos de los archivos,

La REGLA DE ORO es

COMIENZA SIN PERMISO Y AGREGA SEGÚN SU NECESIDAD

En linux:

  • Los directorios deben tener la Execute permiso

  • Los archivos deben tener el Read permiso

  • SI, tienes razón NO AGREGAR Execute permiso para archivos

por ejemplo, utilizo este script para configurar los permisos de las carpetas

# setting permissions for /var/www/mysite.com

# read permission ONLY for the owner 
chmod -R /var/www/mysite.com 400 

# add execute for folders only
find /var/www/mysite.com -type d -exec chmod -R u+x  ;

# allow file uploads 
chmod -R /var/www/mysite.com/public/uploads u+w

# allow log writing to this folder
chmod -R /var/www/mysite.com/logs/ 

Publiqué este código como ejemplo, la configuración puede variar en otras situaciones



Respuesta original

Enfrenté el mismo problema, pero lo resolví configurando el opciones directiva ya sea en la configuración del directorio global en el httpd.conf o en el bloque de directorio específico en httpd-vhosts.conf:

Options Indexes FollowSymLinks Includes ExecCGI

De forma predeterminada, la configuración de su directorio global es (httpd.conf line ~188):


    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Allow from all

establezca las opciones en:
Options Indexes FollowSymLinks Includes ExecCGI

Finalmente, debería verse así:


    #Options FollowSymLinks
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Order deny,allow
    Allow from all

También intente cambiar Order deny,allow y Allow from all líneas por Require all granted.

Apéndice

Código fuente de Directory Indexes (algunos códigos se eliminan por brevedad)

if (allow_opts & OPT_INDEXES) 
     return index_directory(r, d);
 else 
        const char *index_names = apr_table_get(r->notes, "dir-index-names");

        ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(01276)
                      "Cannot serve directory %s: No matching DirectoryIndex (%s) found, and "
                      "server-generated directory index forbidden by "
                      "Options directive",
                       r->filename,
                       index_names ? index_names : "none");
        return HTTP_FORBIDDEN;
    

Entiendo que este problema está resuelto, pero resolví el mismo problema por mi cuenta.

La causa de

Prohibido No tienes permiso para acceder / en este servidor

es en realidad la configuración predeterminada para un directorio de apache en httpd.conf.

#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories). 
#
# First, we configure the "default" to be a very restrictive set of 
# features.  
#

    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all          # the cause of permission denied

Simplemente cambiando Deny from all para Allow from all debería resolver el problema de los permisos.

Alternativamente, un mejor enfoque sería especificar permisos de directorio individuales en la configuración de virtualhost.


    ....

    # Set access permission
    
        Allow from all
    

    ....

A partir de Apache-2.4, sin embargo, el control de acceso se realiza mediante el nuevo módulo mod_authz_host (Actualización a 2.4 desde 2.2). En consecuencia, el nuevo Require debe utilizarse la directiva.


    ....

    # Set access permission
    
        Require all granted
    

    ....

Un problema común para los directorios alojados fuera del predeterminado / var / www / es que el usuario de Apache no solo necesita permisos para el directorio y los subdirectorios donde se aloja el sitio. Apache requiere permisos para todos los directorios hasta la raíz del sistema de archivos donde está alojado el sitio. Apache obtiene automáticamente los permisos asignados a / var / www / cuando está instalado, por lo que si su directorio de host está directamente debajo, esto no se aplica a usted. Editar: Daybreaker ha informado que su Apache se instaló sin los permisos de acceso correctos al directorio predeterminado.

Por ejemplo, tiene una máquina de desarrollo y el directorio de su sitio es:

/username/home/Dropbox/myamazingsite/

Puede pensar que puede salirse con la suya:

chgrp -R www-data /username/home/Dropbox/myamazingsite/
chmod -R 2750 /username/home/Dropbox/myamazingsite/

porque esto le da permisos a Apache para acceder al directorio de su sitio? Bueno, eso es correcto, pero no es suficiente. Apache requiere permisos en todo el árbol de directorios, por lo que lo que debe hacer es:

chgrp -R www-data /username/
chmod -R 2750 /username/

Obviamente, no recomendaría dar acceso a Apache en un servidor de producción a una estructura de directorio completa sin analizar qué hay en esa estructura de directorio. Para la producción, es mejor mantener el directorio predeterminado u otra estructura de directorio que sea solo para almacenar activos web.

Edit2: como señaló u / chimeraha, si no está seguro de lo que está haciendo con los permisos, sería mejor mover el directorio de su sitio fuera de su directorio de inicio para evitar potencialmente bloquearse fuera de su directorio de inicio.

Puedes ayudar nuestra tarea añadiendo un comentario y valorándolo te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *