Tại sao xác thực Apache Basic không hoạt động?


14

Tôi vừa nâng cấp Apache từ bản dựng 2003, lên bản 2.4.1 hoàn toàn mới, sạch sẽ. Tất cả có vẻ khá tốt ngoại trừ một điều rõ ràng:

Trong tệp httpd.conf của tôi, tôi có các mục sau:

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

Điều này chỉ cho phép người dùng trong tệp xác thực được chỉ định truy cập vào máy chủ - giống như phiên bản cũ hơn của Apache. (Đúng?)

Tuy nhiên, nó không hoạt động. Yêu cầu được cấp mà không có xác thực được cung cấp. Khi tôi chuyển đăng nhập sang LogLevel Debug, đối với các truy cập, nó báo:

[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

Tôi thực sự không biết điều này có nghĩa là gì - và tôi (theo hiểu biết tốt nhất của tôi) không có bất kỳ câu lệnh "Yêu cầu tất cả được cấp" hoặc "" trong bất kỳ tệp nào của tôi.

Bất kỳ ý tưởng tại sao điều này không hoạt động, hoặc nơi để gỡ lỗi ??

CẬP NHẬT:

Tôi có một virtualhost trên cổng SSL cho phép ủy quyền. Khi tôi đặt các mục tương tự bên trong

<proxy *> 

mệnh đề trong cấu hình virtualhost, nó hoạt động . Nó dường như không hoạt động trong

 <Directory> 

mệnh đề. Sau đó tôi đã thử đặt theo các mệnh đề Thư mục khác (cụ thể cho các thư mục khác) và điều đó cũng không hoạt động.

CŨNG THẾ

Từ các câu hỏi của Shane bên dưới - Tôi đã thử sao chép khối "/" gốc vào thư mục "/ tmp". Thư mục / tmp hoạt động ĐÚNG !! Vì vậy - vấn đề này chỉ dành riêng cho thư mục gốc ???


1
Những <Directory>khối nào khác mà bạn đã áp dụng cho các yêu cầu không hoạt động?
Shane Madden

Tôi chỉ đặt một cái cho thư mục "/" gốc, nên áp dụng cho toàn bộ máy chủ. Tôi đã thử thêm một vào thư mục nhà của người dùng (theo mod_userdir) và có kết quả tương tự với điều đó.
Brad

@ShaneMadden - về câu hỏi của bạn - Tôi đã thử sao chép khối "/" gốc vào thư mục "/ tmp". Thư mục / tmp hoạt động ĐÚNG !! Vì vậy - vấn đề này chỉ dành riêng cho thư mục gốc ???
Brad

Tôi nghi ngờ rằng có một <Directory>khối cụ thể hơn ở nơi khác trong cấu hình Apache của bạn được ưu tiên hơn khối mà bạn đã đặt /.
Shane Madden

Tôi chỉ gre tất cả mọi thứ - không có gì. Các tệp cấu hình này là các sửa đổi rất tối thiểu đối với các mặc định mới được cài đặt của Apache.
Brad

Câu trả lời:


12

Tôi gặp vấn đề tương tự với xác thực Digest trên bản cài đặt 2.4 mới. Nhìn kỹ vào tài liệu trên trang web của Apache, có vẻ như các chỉ thị xác thực cần phải ở trong một <Location>thẻ chứ không phải là một <Directory>thẻ. Xem tài liệu cho chỉ thị AuthBasicProvider .


2
Điều này LAF không đúng. mod_auth_basic và mod_auth_digest có thể được sử dụng trong <Directory> và <Location> cũng như <File> <If> và <Proxy>. Trong tài liệu về Apache 2.4 -> httpd.apache.org/docs/civerse/mod/ nam Theo "Ngữ cảnh" được liệt kê "Thư mục" cho biết tất cả các vùng chứa hợp lệ ở trên. -> httpd.apache.org/docs/civerse/mod/directive-dict.html#Context
JadedCore

Nó không phải là chính xác, nhưng nó làm việc cho tôi. Có lẽ đó là vì trong phần Thư mục có các cài đặt khác (es. RewriteRule)
paul.ago

6

Tôi đã đối mặt với cùng một vấn đề và không có gì từ bài đăng này đã giúp tôi, vì vậy tôi sẽ thêm 2 xu của mình. Trong trường hợp của tôi (apache 2.4), vấn đề nằm ở các lệnh Yêu cầu tuần tự .

Theo mặc định, nếu bạn có nhiều chỉ thị Yêu cầu , chúng được coi là<RequireAny>

Trong tôi <Directory>đã có

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

Vì vậy, yêu cầu xác thực không xuất hiện nếu IP là chính xác. Tôi đã phải chuyển Yêu cầu logic từ <RequireAny>sang <RequireAll>và dường như mọi thứ đều hoạt động chính xác.

   <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

Câu trả lời của jscott là không chính xác. Apache 2.4 chắc chắn không cho phép các chỉ thị xác thực trong <Directory>các thùng chứa. Hơn nữa, đây là cách an toàn duy nhất để thực hiện xác thực, vì <Location>các container có thể được truy cập theo các cách khác nhau, cho phép xác thực của bạn bị phá vỡ nếu bạn không cẩn thận. Để tham khảo, đây là một thùng chứa mẫu tôi đang sử dụng trên một hệ thống sản xuất:

<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

Bạn dường như đang thiếu một nhà cung cấp cho AuthBasic. Hãy thử thêm một dòng như:

AuthBasicProvider    file

Một khi bạn đã làm việc này, bạn có thể muốn xem Satisfychỉ thị. Điều này có thể được sử dụng để cho phép truy cập cục bộ mà không cần mật khẩu, trong khi yêu cầu mật khẩu để truy cập Internet.

EDIT: Tôi sử dụng một tệp đính kèm cho BasicAuth để cho phép truy cập từ xa dựa trên mật khẩu vào nội dung thường không có sẵn từ Internet. Bạn có thể không muốn Satisfychỉ thị. Đây là /etc/apache2/basicauth.conftập tin của tôi :

# 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

Tôi cũng có một /etc/apache2/allow_local.conftệp bao gồm xác thực dựa trên 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

Để kích hoạt chúng, tôi sử dụng chúng bao gồm.

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

Bạn có thể muốn thử thêm vào đặc tả ủy quyền. Điều này hoạt động với cấu hình thử nghiệm của tôi.

Order deny,allow
Allow from all

Đã thử nó - vẫn không hoạt động: -O
Brad

Nếu tôi chỉ bao gồm các tệp của bạn như hiện tại, tôi sẽ gặp lỗi: "AuthName không được phép ở đây" - vì bạn không thể chỉ định các lệnh này ở bất cứ đâu (như bên ngoài mệnh đề "Vị trí", "Thư mục" hoặc "Proxy". Hoặc Tôi có thiếu thứ gì không? Nếu tôi đưa nó vào trong mệnh đề "Thư mục" - một lần nữa - tôi cho phép mà không có bất kỳ thông tin xác thực nào.
Brad

Nếu tôi chỉ đặt một "từ chối tất cả" trong mệnh đề "thư mục", tôi sẽ bị từ chối truy cập (như bạn mong đợi). Nếu sau đó bao gồm tập lệnh FIRST của bạn trong mệnh đề thư mục, tôi được phép truy cập vô điều kiện. Nếu tôi loại bỏ "thỏa mãn" trong kịch bản của bạn, tôi sẽ bị từ chối vô điều kiện.
Brad

0

Tôi đã có cùng một vấn đề và nó có khả năng là một lỗi của Apache; trong trường hợp của tôi, vấn đề xuất hiện sau một bản cập nhật và biến mất sau một bản cập nhật tiếp theo, nhưng tôi phải thêm cái này ở phía dưới:

Deny from all

Thật đáng sợ khi Apache có thể mở các lỗ hổng bảo mật như thế này :(


Deny from alllà một thiết lập apache 2.2. httpd.apache.org/docs/2.4/upgrad.html#run-time
nguy hiểm89

có thay đổi các chỉ thị liên quan đến bảo mật theo cách không tương thích ngược là baaaaaad
greg

0

Thử:
<Directory "/"> ... </Directory>

Thay vì:
<Directory /> ... </Directory>

Ý nghĩa: gói gọn biểu tượng gốc bằng dấu ngoặc kép. Nếu không, bạn có thể đóng thẻ bằng dấu gạch chéo đó.


0

Ngoài ra kiểm tra nếu không có vô tình khác

    Require all granted

nơi khác trong cùng một cấu hình thư mục. nó có thể được ghi đè

    Require     valid-user
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.