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

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>

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

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


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


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.