Dlaczego uwierzytelnianie Apache Basic nie działa?


14

Właśnie uaktualniłem Apache z wersji 2003, do nowej wersji 2.4.1. Wszystko wydaje się całkiem dobre, z wyjątkiem jednej rażącej rzeczy:

W moim pliku httpd.conf mam następujące elementy:

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

Powinno to pozwolić tylko użytkownikom z określonego pliku uwierzytelniania na dostęp do serwera - tak jak miało to miejsce w starszej wersji Apache. (Dobrze?)

Jednak to nie działa. Żądania są przyjmowane bez uwierzytelnienia. Kiedy przełączam rejestrowanie na LogLevel Debug, w celu uzyskania dostępu, mówi:

[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

Naprawdę nie wiem, co to oznacza - i (o ile wiem) nie mam żadnych oświadczeń „Wymagaj wszystkich przyznanych” ani „” w żadnym z moich plików.

Wszelkie pomysły, dlaczego to nie działa, lub gdzie debugować?

AKTUALIZACJA:

Mam wirtualny host na porcie SSL, który umożliwia proxy. Kiedy umieszczam te same wpisy w

<proxy *> 

klauzula w konfiguracji virtualhost, to działa . Wydaje się, że nie działa w

 <Directory> 

klauzula. Próbowałem następnie wprowadzić inne klauzule katalogu (specyficzne dla innych katalogów) i to też nie działało.

RÓWNIEŻ

Z poniższych pytań Shane'a - próbowałem zduplikować główny blok „/” do katalogu „/ tmp”. Katalog / tmp działa PRAWIDŁOWO !! Więc - ten problem dotyczy tylko katalogu głównego?


1
Jakie inne <Directory>bloki stosujesz do niedziałających żądań?
Shane Madden

Po prostu umieściłem jeden dla katalogu głównego „/”, który powinien dotyczyć całego serwera. Próbowałem dodać jeden do katalogu domowego użytkownika (według mod_userdir) i przyniosłem takie same wyniki.
Brad

@ShaneMadden - na twoje pytanie - próbowałem zduplikować główny blok „/” do katalogu „/ tmp”. Katalog / tmp działa PRAWIDŁOWO !! Więc - ten problem dotyczy tylko katalogu głównego?
Brad

Podejrzewam, że <Directory>gdzieś w twojej konfiguracji Apache jest bardziej konkretny blok, który ma pierwszeństwo przed tym, który ustawiłeś /.
Shane Madden

Właśnie grepowałem wszystko - nic. Te pliki konfiguracyjne były bardzo minimalnymi modyfikacjami nowo zainstalowanych ustawień domyślnych Apache.
Brad

Odpowiedzi:


12

Miałem podobny problem z uwierzytelnianiem Digest przy nowej instalacji 2.4. Patrząc uważnie na dokumentację na stronie Apache, wygląda na to, że dyrektywy uwierzytelniające muszą znajdować się w <Location>znaczniku, a nie w <Directory>znaczniku. Zobacz dokumentację dyrektywy AuthBasicProvider .


2
To nie jest poprawne. Mod_auth_basic i mod_auth_digest mogą być używane w <Directory> i <Location>, a także <File> <If> i <Proxy>. W dokumentacji dla Apache 2.4 -> httpd.apache.org/docs/current/mod/... Pod „Kontekstem” znajduje się „Katalog”, który wskazuje wszystkie powyższe prawidłowe kontenery. -> httpd.apache.org/docs/current/mod/directive-dict.html#Context
JadedCore

To nie powinno być poprawne, ale zadziałało dla mnie. Może dlatego, że w części Directory były inne ustawienia (np. RewriteRule)
paul.ago

6

Napotkałem ten sam problem i nic z tego postu mi nie pomogło, więc dodam 2 centy. W moim przypadku (apache 2.4) problemem były sekwencyjne dyrektywy Require .

Domyślnie, jeśli masz więcej niż jedną dyrektywę Wymagaj , są one uważane za<RequireAny>

W moim <Directory>miałem

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

Więc żądanie autoryzacji nie pojawiło się, jeśli adres IP był poprawny. Musiałem zmienić wymaganą logikę z <RequireAny>na <RequireAll>i wydaje się, że teraz wszystko działa poprawnie.

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

5

Odpowiedź jscott jest niepoprawna. Apache 2.4 z pewnością nie pozwoli dyrektyw uwierzytelniania w <Directory>pojemnikach. Co więcej, jest to jedyny bezpieczny sposób na wdrożenie uwierzytelnienia, ponieważ do <Location>kontenerów można uzyskać dostęp na różne sposoby, umożliwiając obejście uwierzytelnienia, jeśli nie będziesz ostrożny. Dla odniesienia, oto przykładowy pojemnik, którego używam w systemie produkcyjnym:

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


1

Wygląda na to, że brakuje Ci dostawcy AuthBasic. Spróbuj dodać wiersz taki jak:

AuthBasicProvider    file

Gdy już to sprawdzisz, możesz przyjrzeć się Satisfydyrektywie. Można tego użyć, aby umożliwić dostęp lokalny bez hasła, jednocześnie wymagając hasła dostępu do Internetu.

EDYCJA: Używam pliku dołączanego do BasicAuth, aby umożliwić zdalny dostęp oparty na haśle do treści, które normalnie nie są dostępne z Internetu. Możesz nie chcieć Satisfydyrektywy. To jest mój /etc/apache2/basicauth.confplik:

# 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

Mam również /etc/apache2/allow_local.confplik dołączony do uwierzytelniania opartego na protokole 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

Aby je włączyć, korzystam z nich.

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

Możesz spróbować dodać do specyfikacji autoryzacji. Działa to z moją konfiguracją testową.

Order deny,allow
Allow from all

Próbowałem - wciąż nie działa: -O
Brad

Jeśli po prostu dołączę twoje pliki w stanie, w jakim się znajdują, pojawia się błąd: „AuthName tutaj niedozwolona” - ponieważ nie możesz nigdzie określić tych dyrektyw (np. Poza klauzulą ​​„Lokalizacja”, „Katalog” lub „Serwer proxy”. Lub czy czegoś brakuje? Jeśli włączę to do klauzuli „Directory” - znowu - wpuszczę się bez żadnych poświadczeń.
Brad

Jeśli wstawię tylko klauzulę „Odmów wszystkim” w klauzuli „katalogu”, odmówię dostępu (jak można się spodziewać). Jeśli następnie dołączasz swój PIERWSZY skrypt do klauzuli katalogu, mam bezwarunkowy dostęp. Jeśli usunę „spełnić” w twoim skrypcie, jestem bezwarunkowo odrzucony.
Brad

0

Miałem ten sam problem i prawdopodobnie jest to błąd Apache; w moim przypadku problem pojawił się po aktualizacji i zniknął po kolejnej aktualizacji, ale musiałem dodać to na dole:

Deny from all

To przerażające, że Apache może otwierać takie luki bezpieczeństwa :(



tak, zmiana dyrektyw związanych z bezpieczeństwem w sposób niezgodny wstecz jest baaaaaad
greg

0

Próbować:
<Directory "/"> ... </Directory>

Zamiast:
<Directory /> ... </Directory>

Znaczenie: obuduj symbol główny podwójnymi cudzysłowami. W przeciwnym razie możesz zamknąć tag za pomocą tego ukośnika.


0

Sprawdź także, czy przypadkowo nie ma innej

    Require all granted

gdzie indziej w tej samej konfiguracji katalogu. może to zastępować twoje

    Require     valid-user
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.