Jak skonfigurować podstawowe uwierzytelnianie na wirtualnych hostach Apache httpd?

48

Próbuję skonfigurować dostęp rtęciowy za pomocą Apache http. Wymaga uwierzytelnienia. Mój /etc/apache2/sites-enabled/mercurialwygląda tak:

NameVirtualHost *:8080

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

Każdy samouczek, który czytam w Internecie, każe mi wstawić następujące wiersze:

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

Ale kiedy to robię, pojawia się następujący błąd:

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

Moja dystrybucja to dostosowany Ubuntu o nazwie Turnkey Linux Redmine

Jader Dias
źródło

Odpowiedzi:

73

Powinieneś umieścić to w dyrektywie lokalizacji:

<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>
Lanselot
źródło
1
to nie działa dla mnie. <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
Strona dokumentacji apache wyjaśnia to wszystko, ale irytująco nigdy nie daje pełnego przykładu. Skopiowałem część ich przykładu, ale przegapiłem tę require valid-userczęść. Kompletny przykład może być cudowną rzeczą. Dzięki.
Buttle Butkus
1
@sharif powinien mieć wartość <Lokalizacja />, co oznacza, że ​​dostęp do głównego
adresu URL twojego hosta.com/
1
<Location />W każdym razie potrzebowałem, aby nie dostać błędu składniowego podczas ładowania pliku konfiguracyjnego.
Perseidy
3
Dlaczego <Location /> edytowano <Location>z wewnętrznym komunikatem „naprawiono ... aby uniknąć wielu problemów”, ale nie mówi się nic o prawdziwym celu w samej odpowiedzi? W Apache nie ma czegoś takiego jak <Location>dyrektywa (tzn. Taka bez lokalizacji). To z pewnością powoduje teraz kłopoty. ;) (Patrz np. Powyżej.)
Sz.
9

Używam Apache2 na Ubuntu 10.04 - ten sam problem i dziękuję za rozwiązanie. Odkryłem, że musiałem wprowadzić konfigurację/etc/apache2/apache2.conf

Możesz wygenerować nazwę użytkownika i hasło za pomocą htpasswd. Nowy plik:

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

Aby dołączyć do istniejącego pliku:

$ htpasswd -b /srv/auth/.htpasswd squire2 tickleme2
SLL
źródło
7

Możesz chronić lokalizację lub katalog. W przypadku katalogu dodaj coś takiego:

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

Możesz także dodawać dyrektywy Denyi Allowdyrektywy, aby uzyskać lepszą kontrolę.

Dan Andreatta
źródło
4

Wygląda na to, że określasz ustawienia uwierzytelniania w VirtualHost. Zazwyczaj ustawienia te są określone w Directorydyrektywie.

Możesz także użyć .htaccesssplików, ale określenie w conf Apache jest dobrym ustawieniem domyślnym, ponieważ ma mniejszą ekspozycję.

Dokumentacja Apache

Warner
źródło
3

Używam Apache2 na Ubuntu 10.10. Mam problemy ze wszystkimi powyższymi rozwiązaniami, ale zadziałało to dobrze (z dokumentów apache):

<Katalog / var / www />
  Opcje Indeksy FollowSymLinks MultiViews
  AllowOverride All
  Zamów dozwolone, odmawiaj
  pozwolić wszystkim
  AuthType Basic
  AuthName „Restricted”
  Plik AuthBasicProvider
  Plik AuthUserFile / etc / users
  Wymagaj gościa użytkownika
</Directory>

Największą różnicą w stosunku do powyższych odpowiedzi wydaje się być dyrektywa AuthBasicProvider ustawiona na „plik” oraz dyrektywa Wymagaj zawierająca bit „użytkownika” przed rzeczywistą nazwą użytkownika.

Mam nadzieję, że to komuś pomoże.

Alex Beynenson
źródło
3

Uruchomiliśmy zoptymalizowaną pod kątem pamięci wersję apache i napotkaliśmy ten problem.

Było to spowodowane brakiem następującej linii w konfiguracji apache:

LoadModule authz_user_module modules/mod_authz_user.so
DaveSB
źródło