Wie konfiguriere ich die Basisauthentifizierung in virtuellen Apache httpd-Hosts?


48

Ich versuche, den Quecksilberzugriff mit Apache http zu konfigurieren. Es erfordert eine Authentifizierung. Mein /etc/apache2/sites-enabled/mercurialsieht so aus:

NameVirtualHost *:8080

<VirtualHost *:8080>
    UseCanonicalName Off
    ServerAdmin  webmaster@localhost
    AddHandler cgi-script .cgi
    ScriptAliasMatch ^(.*) /usr/lib/cgi-bin/hgwebdir.cgi/$1
</VirtualHost>

Jedes Tutorial, das ich im Internet lese, fordert mich auf, folgende Zeilen einzufügen:

AuthType Basic
AuthUserFile /usr/local/etc/httpd/users

Aber wenn ich es tue, bekomme ich den folgenden Fehler:

# /etc/init.d/apache2 reload
Syntax error on line 8 of /etc/apache2/sites-enabled/mercurial:
AuthType not allowed here

Meine Distribution ist ein angepasstes Ubuntu namens Turnkey Linux Redmine

Antworten:


73

Sie sollten dies in eine Location-Direktive einfügen:

<VirtualHost *:8080>

<Location /> #the / has to be there, otherwise Apache startup fails
            Deny from all
            #Allow from (You may set IP here / to access without password)
            AuthUserFile /usr/local/etc/httpd/users
            AuthName authorization
            AuthType Basic
            Satisfy Any # (or all, if IPs specified and require IP + pass)
                        # any means neither ip nor pass
            require valid-user
</Location>
...
</VirtualHost>

1
das funktioniert bei mir nicht <Location /opt/mcmap/shapefiles.php> AuthType Kerberos AuthName KerberosLogin KrbServiceName HTTP/intranet.spectrumasa.com KrbMethodNegotiate On KrbMethodK5Passwd On KrbAuthRealms DOMAIN.COM Krb5KeyTab /etc/httpd/conf/intranet.keytab require valid-user Options Indexes MultiViews FollowSymLinks AllowOverride All Order allow,deny Allow from all SetOutputFilter DEFLATE </Location>
shorif2000

1
Die Apache-Doku-Seite erklärt dies alles, aber ärgerlicherweise gibt es nie ein vollständiges Beispiel. Ich habe einen Teil ihres Beispiels kopiert, aber den require valid-userTeil verpasst . Ein vollständiges Beispiel kann eine wunderbare Sache sein. Vielen Dank.
Buttle Butkus

1
@sharif sollte <Location /> sein, was bedeutet, dass für den Zugriff auf die Root-URL von yourhost.com/ die Authentifizierungskonfiguration erforderlich ist
agbb

1
Ich musste <Location />auf jeden Fall beim Laden der Konfigurationsdatei keinen Syntaxfehler bekommen.
Perseids

3
Warum wurde mit einer internen Protokollmeldung von "behoben ... um eine Menge Ärger zu vermeiden" <Location /> bearbeitet <Location>, aber nichts über den wahren Grund in der Antwort selbst gesagt? In Apache gibt es keine <Location>Direktive (dh keine ohne Standort). Das macht jetzt definitiv Ärger. ;) (Siehe zB oben.)
Gr.

9

Ich lasse Apache2 auf Ubuntu 10.04 laufen - das gleiche Problem und danke für die Lösung. Ich stellte fest, dass ich die Konfiguration eingeben musste/etc/apache2/apache2.conf

Sie können den Benutzernamen und das Passwort mit htpasswd generieren. Neue Datei:

$ htpasswd -c /srv/auth/.htpasswd squire

So hängen Sie eine vorhandene Datei an:

$ htpasswd -b /srv/auth/.htpasswd squire2 tickleme2

7

Sie können einen Standort oder ein Verzeichnis schützen. Fügen Sie für ein Verzeichnis Folgendes hinzu:

<Directory /some/dir/cgi-bin/>
    Options +ExecCGI
    AddHandler cgi-script .cgi
    AuthType Basic
    AuthName 'Private scripts'
    AuthUserFile '/some/other/dir/.htpasswd'
    Require valid-user
</Directory>

Sie können auch hinzufügen Denyund Allowfür eine feinere Kontrolle Richtlinien.


4

Es hört sich so an, als würden Sie die Authentifizierungseinstellungen in der angeben VirtualHost. In der Regel werden diese Einstellungen in der DirectoryDirektive angegeben.

Sie können auch .htaccesssDateien verwenden, aber die Angabe in der Apache-Konfig ist eine gute Standardeinstellung, da sie weniger exponiert ist.

Apache-Dokumentation


3

Ich starte Apache2 auf Ubuntu 10.10. Ich hatte Probleme mit allen oben genannten Lösungen, aber das hat gut funktioniert (von Apache Docs):

<Verzeichnis / var / www />
  Optionen Indizes FollowSymLinks MultiViews
  AllowOverride All
  Bestellung zulassen, ablehnen
  erlauben von allen
  AuthType Basic
  AuthName "Eingeschränkt"
  AuthBasicProvider-Datei
  AuthUserFile / etc / users
  Benutzer Besucher erforderlich
</ Directory>

Der größte Unterschied zu den obigen Antworten scheint die Anweisung AuthBasicProvider zu sein, die auf "file" gesetzt ist, und die Anweisung Require, die das Bit "user" vor dem tatsächlichen Benutzernamen enthält.

Hoffe das hilft jemandem.


3

Wir verwenden eine speicheroptimierte Version von Apache und sind auf dieses Problem gestoßen.

Dies lag daran, dass die folgende Zeile in der Apache-Konfiguration nicht vorhanden war:

LoadModule authz_user_module modules/mod_authz_user.so
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.