¿Por qué no funciona la autenticación Apache Basic?

14

Acabo de actualizar Apache de su versión 2003, a una nueva versión 2.4.1 impecablemente limpia. Todo parece bastante bueno, excepto por una cosa deslumbrante:

En mi archivo httpd.conf tengo lo siguiente:

<Directory />
    AllowOverride none
    Options FollowSymLinks
    AuthType      Basic
    AuthName      "Enter Password"
    AuthUserFile  /var/www/.htpasswd
    Require     valid-user
</Directory>

Esto debería permitir que solo los usuarios en el archivo de autenticación especificado accedan al servidor, tal como lo había hecho con la versión anterior de Apache. (¿Derecho?)

Sin embargo, no está funcionando. Las solicitudes se otorgan sin autenticación proporcionada. Cuando cambio el registro a LogLevel Debug, para los accesos, dice:

[Sat Mar 24 21:32:00.585139 2012] [authz_core:debug] [pid 10733:tid 32771] mod_authz_core.c(783): [client 192.168.1.181:57677] AH01626: authorization result of Require all granted: granted
[Sat Mar 24 21:32:00.585446 2012] [authz_core:debug] [pid 10733:tid 32771] mod_authz_core.c(783): [client 192.168.1.181:57677] AH01626: authorization result of <RequireAny>: granted

Realmente no sé lo que esto significa, y yo (a mi leal saber y entender) no tengo ninguna declaración de "Requerir todo otorgado" o "" en ninguno de mis archivos.

¿Alguna idea de por qué esto no funciona o dónde depurar?

ACTUALIZAR:

Tengo un host virtual en el puerto SSL que permite la representación. Cuando pongo las mismas entradas dentro del

<proxy *> 

cláusula en la configuración de virtualhost, funciona . No parece funcionar en el

 <Directory> 

cláusula. Luego intenté poner otras cláusulas de directorio (específicas para otros directorios) y tampoco funcionó.

ADEMÁS

De las preguntas de Shane a continuación: intenté duplicar el bloque raíz "/" en un directorio "/ tmp". ¡El directorio / tmp funciona CORRECTAMENTE! Entonces, ¿este problema es específico solo del directorio raíz?

Puntilla
fuente
1
¿Qué otros <Directory>bloques tiene para aplicar a las solicitudes que no funcionan?
Shane Madden
Acabo de poner uno para el directorio raíz "/", que debería aplicarse a todo el servidor. Intenté agregar uno al directorio de inicio del usuario (por mod_userdir) y obtuve los mismos resultados con eso.
Brad
@ShaneMadden, en su pregunta, intenté duplicar el bloque raíz "/" en un directorio "/ tmp". ¡El directorio / tmp funciona CORRECTAMENTE! Entonces, ¿este problema es específico solo del directorio raíz?
Brad
Sospecho que hay un <Directory>bloque más específico en otra parte de su configuración de Apache que tiene prioridad sobre el que ha establecido /.
Shane Madden
Simplemente agarré todo, nada. Estos archivos de configuración fueron modificaciones muy mínimas a los valores predeterminados recién instalados de Apache.
Brad

Respuestas:

12

Tuve un problema similar con la autenticación Digest en una nueva instalación 2.4. Mirando de cerca la documentación en el sitio de Apache, parece que las directivas de autenticación deben estar en una <Location>etiqueta en lugar de una <Directory>etiqueta. Consulte la documentación de la directiva AuthBasicProvider .

Chris
fuente
2
Esto no es correcto. mod_auth_basic y mod_auth_digest se pueden usar en <Directory> y <Location>, así como en <File> <If> y <Proxy>. En la documentación de Apache 2.4 -> httpd.apache.org/docs/current/mod/… En "Contexto" aparece "Directorio" que indica todos los contenedores válidos anteriores. -> httpd.apache.org/docs/current/mod/directive-dict.html#Context
JadedCore
No debería ser correcto, pero funcionó para mí. Tal vez sea porque en la parte del Directorio había otras configuraciones (es. RewriteRule)
paul.ago
6

Me enfrenté al mismo problema, y ​​nada de esta publicación me ha ayudado, así que agregaré mis 2 centavos. En mi caso (apache 2.4) el problema estaba en las directivas Requerir secuenciales .

De manera predeterminada, si tiene más de una directiva Requerir , se consideran como<RequireAny>

En mi <Directory>he tenido

Require ip 192.168.100.0/24 10.9.8.0/24
Require valid-user

Por lo tanto, la solicitud de autenticación no apareció si la IP era correcta. He tenido que cambiar Requerir lógica de <RequireAny>a <RequireAll>y parece que ahora todo funciona correctamente.

   <Directory /var/www>

      DirectoryIndex index.html
      Options -Indexes

      AuthType Basic
      AuthName "hidden data"
      AuthBasicProvider    file
      AuthUserFile /opt/httpaswd
      <RequireAll>
        Require ip 192.168.100.0/24 10.9.8.0/24
        Require valid-user
      </RequireAll>
    </Directory>
Alex
fuente
5

La respuesta de jscott es incorrecta. Apache 2.4 con toda seguridad lo hace permitir que las directivas de autenticación en <Directory>contenedores. Además, esta es la única forma segura de implementar la autenticación, ya <Location>que se puede acceder a los contenedores de diferentes maneras, lo que permite evitar su autenticación si no tiene cuidado. En aras de la referencia, aquí hay un contenedor de muestra que estoy usando en un sistema de producción:

<Directory "/srv/http/my_domain.org/html/secret-stuff"> Options Indexes Multiviews FollowSymLinks AuthType Digest AuthName "staff" AuthUserFile /etc/httpd/private/secret-stuff.htaccess Require valid-user </Directory>

pgoetz
fuente
1

Parece que le falta un proveedor para AuthBasic. Intenta agregar una línea como:

AuthBasicProvider    file

Una vez que tenga esto funcionando, es posible que desee ver la Satisfydirectiva. Esto se puede usar para permitir el acceso local sin contraseña, mientras se requiere una contraseña para acceder a Internet.

EDITAR: utilizo un archivo de inclusión para BasicAuth para permitir el acceso remoto basado en contraseña al contenido que normalmente no está disponible en Internet. Es posible que no desee la Satisfydirectiva. Este es mi /etc/apache2/basicauth.confarchivo:

# Basic authorization configuration include file 
# Enable basic auth access for remote users
AuthName             "Authentication Required"
AuthType             Basic
AuthBasicProvider    file
AuthUserFile         /etc/apache2/httpd.passwd
Require              valid-user
Satisfy              any

También tengo un /etc/apache2/allow_local.confarchivo de inclusión para autenticación basada en IP.

# Common local access block - Allow all local addresses
Order deny,allow
Deny  from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
Allow from 192.168.1.0/24

Para habilitarlos utilizo estos incluye.

Include /etc/apache2/allow_local.conf
Include /etc/apache2/basicauth.conf

Es posible que desee intentar agregar a la especificación de autorización. Esto funciona con mi configuración de prueba.

Order deny,allow
Allow from all
BillThor
fuente
Probé - todavía no funciona: -O
Brad
Si solo incluyo sus archivos tal como están, aparece un error: "AuthName no está permitido aquí", ya que no puede especificar estas directivas en ningún lugar (como fuera de una cláusula "Ubicación", "Directorio" o "Proxy". O me estoy perdiendo algo si me incluyo dentro de la cláusula de "Directorio" - de nuevo - me deje entrar sin ningún tipo de credenciales.
Brad
Si solo pongo una "denegación de todo" en la cláusula "directorio", se me niega el acceso (como era de esperar). Si luego incluye su PRIMER script en la cláusula del directorio, se me permite el acceso incondicional. Si elimino el "satisfacer" en su secuencia de comandos, se me niega incondicionalmente.
Brad
0

Tuve el mismo problema y es probable que sea un error de Apache; en mi caso, el problema apareció después de una actualización y desapareció después de una actualización posterior, pero tuve que agregar esto en la parte inferior:

Deny from all

Da miedo que Apache pueda abrir agujeros de seguridad como este :(

Greg
fuente
Deny from alles una configuración de apache 2.2. httpd.apache.org/docs/2.4/upgrading.html#run-time
danger89
sí, cambiar las directivas relacionadas con la seguridad de una manera incompatible con versiones anteriores es baaaaaad
greg
0

Tratar:
<Directory "/"> ... </Directory>

En lugar de:
<Directory /> ... </Directory>

Significado: encapsular el símbolo raíz con comillas dobles. De lo contrario, podría estar cerrando la etiqueta con esa barra inclinada.

Haitham Sweilem
fuente
0

También verifique si accidentalmente no hay otro

    Require all granted

en otro lugar en la misma configuración de Directorio. puede estar anulando su

    Require     valid-user
Pico común
fuente