2010-11-05 31 views
17

Sự cố: Tôi có một số tệp trong/var/www/files/mà tôi muốn chúng được truy cập từ các địa chỉ IP cụ thể KHÔNG yêu cầu người dùng/mật khẩu. Tuy nhiên, tôi muốn rằng bất kỳ địa chỉ IP nào khác NÊN yêu cầu đăng nhập để truy cập.Xác thực cơ bản của Apache ngoại trừ cho phép

Đây là trong httpd.conf của tôi:

<Directory /var/www/files/> 
     Order deny,allow 
     Deny from all 
     Allow from 192.168 
     AuthUserFile /etc/apache2/basic.pwd 
     AuthName "Please enter username and password" 
     AuthType Basic 
     Require user valid-user 
</Directory> 

Nhưng, nếu tôi hiểu đúng, điều này có nghĩa rằng bất kỳ khách hàng đến từ 192,168 * sẽ có quyền truy cập vào thư mục đó NHƯNG sẽ đòi hỏi một người dùng hợp lệ để. xem nội dung của nó. Và bất kỳ địa chỉ IP nào khác sẽ bị từ chối. đúng?

Cảm ơn bạn trước.

+0

Từ chối tất cả cú pháp sai phải không? Tôi đã phải sử dụng "Từ chối từ tất cả" –

+0

Có bạn là đúng. Tôi sẽ sửa nó. – lepe

Trả lời

11

chỉnh sửa: điều này có thể được chấp nhận, nhưng cũ. Đối với các cài đặt Apache mới, hãy sử dụng Brians answer here

Thêm số này: Satisfy Any (có nghĩa là một trong hai thông số này phải được chuyển).

Và cú pháp là một trong hai:

Require valid-user 

Hoặc:

Require user <userid> 
+1

Cảm ơn bạn! Điều đó đã làm nó !. Đây là liên kết dành cho những người quan tâm: http://httpd.apache.org/docs/2.0/mod/core.html#satisfy – lepe

22

Đây là cách nó được thực hiện cho Apache 2.4+ (kể từ Satisfy Any không còn được hỗ trợ).

<Directory /var/www/files/> 

    AuthType Basic 
    AuthName "Please enter your username and password" 
    AuthUserFile /var/www/files/.htpasswd 

    <RequireAny> 
     Require ip 22.33.44.55 
     Require valid-user 
    </RequireAny> 

</Directory> 

Nếu bạn muốn yêu cầu cả hai địa chỉ IP -and- Đăng nhập/mật khẩu, thay đổi <RequireAny>-<RequireAll>

Tôi hy vọng điều này sẽ giúp người - như nó đã cho tôi một thời gian để tìm nó ra.

+1

Điều cần biết. Cảm ơn. – lepe

+0

Wow! Điều này sẽ phổ biến hơn. Điều này khó tìm được câu trả lời! Tôi tự hỏi, nếu điều này có thể bằng Tên máy chủ thay vì IP. – ApertureSecurity

+0

Để sử dụng tên máy chủ thay vì IP, hãy sử dụng định dạng này: Yêu cầu máy chủ example.com –

1

Nếu máy chủ của bạn đứng sau proxy, bạn không thể dựa trực tiếp vào số Require ip. Tuy nhiên, bạn có thể sử dụng Require env:

<Directory /var/www/files/> 

    AuthType Basic 
    AuthName "Please enter your username and password" 
    AuthUserFile /var/www/files/.htpasswd 

    SetEnvIF X-Forwarded-For "22.33.44.55" AllowIP 

    <RequireAny> 
     Require env AllowIP 
     Require valid-user 
    </RequireAny> 

</Directory> 

The source of the idea

+0

Liên kết nguồn không hoạt động hoặc yêu cầu tài khoản. – phansen

1
SetEnvIF X-Forwarded-For "192.168.135.159" AllowIP 
SetEnvIF X-Forwarded-For "192.168.135.135" AllowIP 

AuthType Basic 
AuthName "admin" 
AuthUserFile "/var/www/domain.com/cms/.htpasswd" 

<RequireAll> 
Require env AllowIP 
require valid-user 
</RequireAll> 

Tôi cũng đã kiểm tra nhiều biến thể. mã này úc với phiên bản 2.4 của apache 100%

Các vấn đề liên quan