2012-05-02 11 views
37

Czy jest możliwe posiadanie konfiguracji kontroli dostępu .htaccess/.htpasswd dla danego katalogu, ale jeśli pochodzą one z określonego adresu IP, pomiń uwierzytelnienie logowania/hasła ?.htaccess/.htpasswd obejść, jeśli przy określonym adresie IP

Wiem, że można zrobić coś takiego w pliku .htaccess:

order deny,allow 
deny from all 
allow from 000.000.000.000 

Ale jeśli dodać coś wzdłuż tych linii:

AuthType Basic 
AuthName "restricted area" 
AuthUserFile /path/to/.htpasswd 
require valid-user 

Potem pyta o hasło. Czy jest jakiś sposób na wykonanie konfiguracji typu if/else lub innego rozwiązania, aby użytkownicy jako dany adres IP (lub zestaw adresów IP) nie otrzymywali monitu o hasło, ale wszyscy inni to robią?

+0

Która wersja apache są uruchomione? – Seybsen

+0

To Apache 2.2.19 – Keefer

+0

Ktoś ma jakieś rozwiązania dla Apache 2.2.x? – Keefer

Odpowiedz

64

dla wersji 2.2.x można użyć następujących ...

AuthUserFile /var/www/mysite/.htpasswd 
AuthName "Please Log In" 
AuthType Basic 
require valid-user 
Order allow,deny 
Allow from xxx.xxx.xxx.xxx 
satisfy any 

Oczywiście zastąpić ścieżkę do usersfile i adres IP, które chcesz ominąć uwierzytelnianie.

Dalsze wyjaśnienie specyfiki, można znaleźć pod adresem: http://httpd.apache.org/docs/2.2/howto/auth.html

+0

Kadłub z odpowiedzią, że. ;) – LeonardChallis

15

Jeśli używasz apache> = 2,4, to byłoby coś takiego:

<If "%{REMOTE_ADDR} != '127.0.0.1'"> 
    AuthType Basic 
    AuthName "restricted area" 
    AuthUserFile /path/to/.htpasswd 
    require valid-user 
</If> 

Aby uzyskać więcej informacji zajrzyj na docs.

+0

Niestety, wygląda na to, że serwer działa pod Apache 2.2.19. – Keefer

+0

Działa idealnie dla mnie (Apache/2.4.10 (Debian)). Dzięki ! –

+0

Potwierdzone działanie w CentOS 7+ Apache 2.4 – RedYetiCo

2

Poza odpowiedzią j5Dev:

# Interne IP-Adressen 
SetEnvIf Remote_Addr "^127\.0\.0\.1$" IsIntern 
SetEnvIf Remote_Addr "^192\.168" IsIntern 
# .. add more IP addresses or ranges here 

# Authentication, wenn nicht intern 
AuthUserFile /path/to/.htpasswd 
AuthName "restricted area" 
AuthType Basic 
require valid-user 
Order allow,deny 
Allow from env=IsIntern 
satisfy any 
+1

Żadna z odpowiedzi na tej stronie nie działa dla mnie z dyrektywą "spełniają żadnych", co jest prawdopodobnie bardzo ważne :) Czy jest coś jeszcze, co należy skonfigurować? Jestem na Apache 2.2.22. –

11

Używam Apache/2.2.16 (Debian) i miał podobny problem, że rozwiązany w następujący sposób:

(to może być prowadzony zarówno w .htaccess lub bezpośrednio w wirtualnego hosta pod <Location/>)

Order deny,allow 
Deny from all 
AuthType Basic 
AuthUserFile /home/somesite/.htpasswd 
AuthName "No entry, unless" 
Require Valid-user 
Allow from x.x.x.x 
Allow from x.x.x.x 
Satisfy Any 

Zezwalałem na wejście bez hasła z dwóch różnych adresów IP, a reszta musi podać hasło, aby wejść.

+0

Wielkie dzięki, próbowałem tego wewnątrz bloku ' 'pomogła mi bardzo. – chmac

+0

cieszę się, że pomogę :) – Sverre

+0

To samo tutaj - Lokalizacja, a nie Katalog działa na leczeniu. –

1

Jeśli używasz apache> = 2,4, a chcesz, aby zestaw OD, co postulowano w początkowym pytaniu, można zrobić to tak:

<If "-R '192.168.0.0/24'"> 
      Require all granted 
    </If> 
    <ElseIf "-R '192.168.1.0/24'"> 
      Require all granted 
    </ElseIf> 
    <Else> 
      AuthType Basic 
      AuthName "restricted area" 
      AuthUserFile /etc/apache2/.htpasswd 
      require valid-user 
    </Else>