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.