Warum funktioniert die Apache Basic-Authentifizierung nicht?

14

Ich habe gerade ein Upgrade von Apache 2003 auf einen blitzsauberen, brandneuen 2.4.1-Build durchgeführt. Alles scheint ziemlich gut, bis auf eine krasse Sache:

In meiner httpd.conf-Datei habe ich Folgendes:

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

Dies sollte nur Benutzern in der angegebenen Auth-Datei den Zugriff auf den Server ermöglichen - genau wie unter der älteren Version von Apache. (Richtig?)

Es funktioniert jedoch nicht. Anfragen werden ohne Authentifizierung gewährt. Wenn ich die Protokollierung für die Zugriffe auf LogLevel Debug umstelle, heißt es:

[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

Ich weiß wirklich nicht, was dies bedeutet - und ich habe (nach meinem besten Wissen) in keiner meiner Dateien die Anweisungen "Alle Erlaubten erfordern" oder "".

Irgendwelche Ideen, warum das nicht funktioniert oder wo man debuggen kann?

AKTUALISIEREN:

Ich habe einen virtuellen Host auf dem SSL-Port, der Proxying ermöglicht. Wenn ich die gleichen Einträge in das

<proxy *> 

Klausel in der virtualhost-Konfiguration, es funktioniert . Es scheint nicht zu funktionieren in der

 <Directory> 

Klausel. Ich habe dann versucht, unter anderen Directory-Klauseln (spezifisch für andere Verzeichnisse) zu setzen, und das hat auch nicht funktioniert.

EBENFALLS

Aus den folgenden Fragen von Shane - Ich habe versucht, den Stammblock "/" in ein "/ tmp" -Verzeichnis zu kopieren. Das Verzeichnis / tmp funktioniert RICHTIG !! Also - dieses Problem betrifft nur das Stammverzeichnis ???

Brad
quelle
1
Welche anderen <Directory>Blöcke haben Sie auf die Anfragen angewendet, die nicht funktionieren?
Shane Madden
Ich habe nur eine für das Stammverzeichnis "/" angegeben, die für den gesamten Server gelten soll. Ich habe versucht, ein zum Benutzerstammverzeichnis (pro mod_userdir) hinzuzufügen und die gleichen Resultate mit dem gehabt.
Brad
@ShaneMadden - auf Ihre Frage - Ich habe versucht, den Stammblock "/" in ein "/ tmp" -Verzeichnis zu duplizieren. Das Verzeichnis / tmp funktioniert RICHTIG !! Also - dieses Problem betrifft nur das Stammverzeichnis ???
Brad
Ich vermute, dass es <Directory>irgendwo anders in Ihrer Apache-Konfiguration einen spezifischeren Block gibt , der Vorrang vor dem von Ihnen festgelegten hat /.
Shane Madden
Ich habe einfach alles gegrübelt - nichts. Diese Konfigurationsdateien waren sehr geringfügige Änderungen an den neu installierten Standardeinstellungen von Apache.
Brad

Antworten:

12

Ich hatte ein ähnliches Problem mit der Digest-Authentifizierung bei einer Neuinstallation von 2.4. Bei genauerer Betrachtung der Dokumentation auf der Apache-Website scheint es so, als müssten sich die Authentifizierungsanweisungen in einem <Location>Tag und nicht in einem <Directory>Tag befinden. Weitere Informationen finden Sie in der Dokumentation zur AuthBasicProvider-Direktive .

Chris
quelle
2
Das ist nicht richtig. mod_auth_basic und mod_auth_digest können in <Directory> und <Location> sowie in <File> <If> und <Proxy> verwendet werden. In der Dokumentation zu Apache 2.4 -> httpd.apache.org/docs/current/mod/… ist unter "Kontext" "Verzeichnis" aufgeführt, das alle oben genannten gültigen Container angibt. -> httpd.apache.org/docs/current/mod/directive-dict.html#Context
JadedCore
Es sollte nicht korrekt sein, aber es hat bei mir funktioniert. Vielleicht liegt es daran, dass es im Verzeichnisteil andere Einstellungen gab (es. RewriteRule)
paul.ago
6

Ich hatte das gleiche Problem und nichts von diesem Beitrag hat mir geholfen, also zähle ich meine 2 Cent dazu. In meinem Fall (Apache 2.4) lag das Problem in den sequentiellen Require- Direktiven.

Wenn Sie mehr als eine Require- Direktive haben, gelten diese standardmäßig als<RequireAny>

In meinem <Directory>habe ich gehabt

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

Die Authentifizierungsanforderung wurde also nicht angezeigt, wenn die IP korrekt war. Ich habe zu wechseln hatte Erfordern Logik aus <RequireAny>zu <RequireAll>und es scheint , dass jetzt alles korrekt funktioniert.

   <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
quelle
5

Die Antwort von jscott ist falsch. Apache 2.4 mit Sicherheit funktioniert die Authentifizierung Richtlinien erlauben <Directory>Containern. Darüber hinaus ist dies die einzige sichere Methode zur Implementierung der Authentifizierung, da auf <Location>Container auf unterschiedliche Weise zugegriffen werden kann und Ihre Authentifizierung umgangen werden kann, wenn Sie nicht vorsichtig sind. Zur Veranschaulichung ist hier ein Musterbehälter, den ich in einem Produktionssystem verwende:

<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
quelle
1

Ihnen scheint ein Anbieter für AuthBasic zu fehlen. Versuchen Sie, eine Zeile wie die folgende hinzuzufügen:

AuthBasicProvider    file

Sobald Sie dies funktioniert haben, möchten Sie vielleicht die SatisfyDirektive anschauen . Dies kann verwendet werden, um den lokalen Zugriff ohne Kennwort zuzulassen, während für den Internetzugang ein Kennwort erforderlich ist.

BEARBEITEN: Ich benutze eine Include-Datei für BasicAuth, um den kennwortbasierten Fernzugriff auf Inhalte zu ermöglichen, die normalerweise nicht über das Internet verfügbar sind. Möglicherweise möchten Sie die SatisfyDirektive nicht. Das ist meine /etc/apache2/basicauth.confAkte:

# 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

Ich habe auch eine /etc/apache2/allow_local.confInclude-Datei für die IP-basierte Authentifizierung.

# 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

Um sie zu aktivieren, benutze ich diese Includes.

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

Möglicherweise möchten Sie versuchen, die Berechtigungsspezifikation zu erweitern. Das funktioniert mit meiner Testkonfiguration.

Order deny,allow
Allow from all
BillThor
quelle
Versuchte es - funktioniert immer noch nicht: -O
Brad
Wenn ich Ihre Dateien einfach so einbinde, wie sie sind, erhalte ich die Fehlermeldung "AuthName hier nicht zulässig", da Sie diese Anweisungen nirgendwo angeben können (z. B. außerhalb einer "Location" -, "Directory" - oder "Proxy" -Klausel) Fehlt mir etwas? Wenn ich es wieder in die "Directory" -Klausel einfüge, werde ich ohne Anmeldeinformationen eingelassen.
Brad
Wenn ich in die "directory" -Klausel nur "deny from all" schreibe, wird mir der Zugriff verweigert (wie zu erwarten). Wenn Sie dann Ihr FIRST-Skript in die Directory-Klausel aufnehmen, ist mir der Zugriff unbedingt gestattet. Wenn ich das "Befriedigen" in Ihrem Skript entferne, werde ich bedingungslos abgelehnt.
Brad
0

Ich hatte das gleiche Problem und es ist wahrscheinlich ein Apache-Bug; In meinem Fall tauchte das Problem nach einem Update auf und verschwand nach einem nachfolgenden Update, aber ich musste dies unten hinzufügen:

Deny from all

Das ist beängstigend, dass Apache Sicherheitslücken wie diese öffnen könnte :(

greg
quelle
Deny from allist eine Apache 2.2 Einstellung. httpd.apache.org/docs/2.4/upgrading.html#run-time
danger89
yes sicherheitsrelevante richtlinien in einer abwärtskompatiblen weise zu ändern ist baaaaaad
greg
0

Versuchen:
<Directory "/"> ... </Directory>

Anstatt von:
<Directory /> ... </Directory>

Bedeutung: Kapseln Sie das Wurzelsymbol in doppelte Anführungszeichen. Andernfalls schließen Sie das Tag möglicherweise mit diesem Schrägstrich.

Haitham Sweilem
quelle
0

Überprüfen Sie auch, ob es nicht versehentlich einen anderen gibt

    Require all granted

an anderer Stelle in der gleichen Verzeichniskonfiguration. es könnte deines überschreiben

    Require     valid-user
Hecht
quelle