¿Qué hace realmente "Requiere todos los concedidos" de Apache?

95

Acabo de actualizar mi servidor Apache a Apache / 2.4.6 que se ejecuta en Ubuntu 13.04. Solía ​​tener un archivo vhost que tenía lo siguiente:

<Directory "/home/john/development/foobar/web">
    AllowOverride All 
</Directory>

Pero cuando corrí, recibí un "Prohibido. No tienes permiso para acceder /"

Después de buscar un poco en Google, descubrí que para que mi sitio volviera a funcionar necesitaba agregar la siguiente línea "Requerir todo otorgado" para que mi servidor virtual se viera así:

<Directory "/home/john/development/foobar/web">
    AllowOverride All 
    Require all granted
</Directory>

Quiero saber si esto es "seguro" y no trae problemas de seguridad. Leí en la página de Apache que esto "imita la funcionalidad que antes proporcionaban las directivas" Permitir de todos "y" Denegar de todos ". Este proveedor puede tomar uno de los dos argumentos que se" otorgan "o" denegan ". los ejemplos otorgarán o denegarán el acceso a todas las solicitudes ".

Pero no decía si esto era un problema de seguridad de algún tipo o por qué ahora tenemos que hacerlo cuando en el pasado no tenía que hacerlo.

John Crawford
fuente
1
Los documentos de actualización explican los cambios de 'Control de acceso' en detalle. httpd.apache.org/docs/2.4/upgrading.html
John Magnolia

Respuestas:

87

La configuración de control de acceso cambió en 2.4, y las configuraciones antiguas no son compatibles sin algunos cambios. Ver aquí .

Si su configuración anterior era Allow from all(no se bloqueó el acceso de las direcciones IP al servicio), entonces Require all grantedes el nuevo equivalente funcional.

Shane Madden
fuente
44
Sin mencionar que el viejo método era terriblemente confuso y hacía mucho tiempo que debía ser reemplazado por algo más sensato.
Michael Hampton
44
Para un cambio tan importante, esperaría algún tipo de soporte para migrar automáticamente los archivos de configuración o al menos mostrar todos los puntos donde se necesita un cambio.
Wolfgang Fahl el
1
Sería bueno ver una demostración de trabajo Require all denied.
Kraang Prime
55
No creo que esto sea equivalente a Allow from all. Tiene que "fusionarse" Require all grantedcon otras Requirereglas existentes . En mi caso, un existente Require valid-userse ignoró al convertir ciegamente la configuración como se recomienda en todas partes. Esta fue la peor cosa que podría suceder ...
rudimeier
1
Sería bueno tener una respuesta adecuada a la pregunta del OP. "Permitir de todo equivalente" no es muy satisfactorio.
Sharcoux
15

Sé que es una publicación antigua, pero creo que puedo ayudar más con un ejemplo funcional que siempre uso.

En apache 2.2 sería como:

    <Location />
       Order deny, allow
       allow from all
    </Location>
    <Location /adm>
        Order deny, allow
        deny from all
        allow from myniceip
    </Location>
    <Location /disabled>
        Order deny, allow
        deny from all
    </Location>

En apache 2.4 sería como:

   <Location />
       require all granted
    </Location>
   #Note that you dont need to use require all denied
   #to require only a group of ips.. 
    <Location /adm>
        require ip myniceip
    </Location>
    <Location /disabled>
        Require all denied
    </Location>

Tenga cuidado al usar la autenticación htacess , esta nueva sintaxis puede hacer algunas cosas malas e inesperadas , si ese es su caso, lea: https://unix.stackexchange.com/questions/413309/apache-2-4-wants-me- para-decidir-requerir-válido-ip-o-requerir-válido-usuario y usted debería estar bien!

Luciano Andress Martini
fuente
Para mí, la presencia de require all grantedautenticación HTTP impedida funciona así que gracias por la información.
authentictech
@authentictech no solo requiere que todo lo otorgado pueda romperlo. La autenticación esperada puede romperse por completo con esta nueva sintaxis si no utiliza RequireAll o RequireAny correctamente. Por favor lea: unix.stackexchange.com/questions/413309/… . Gracias por los comentarios.
Luciano Andress Martini