Làm cách nào để định cấu hình xác thực cơ bản trong máy chủ ảo Apache httpd?


48

Tôi đang cố gắng định cấu hình truy cập đồng bóng bằng cách sử dụng Apache http. Nó đòi hỏi xác thực. Tôi /etc/apache2/sites-enabled/mercurialtrông như thế này:

NameVirtualHost *:8080

<VirtualHost *:8080>
    UseCanonicalName Off
    ServerAdmin  webmaster@localhost
    AddHandler cgi-script .cgi
    ScriptAliasMatch ^(.*) /usr/lib/cgi-bin/hgwebdir.cgi/$1
</VirtualHost>

Mỗi hướng dẫn tôi đọc trên internet đều bảo tôi chèn những dòng này:

AuthType Basic
AuthUserFile /usr/local/etc/httpd/users

Nhưng khi tôi làm điều đó tôi nhận được lỗi sau:

# /etc/init.d/apache2 reload
Syntax error on line 8 of /etc/apache2/sites-enabled/mercurial:
AuthType not allowed here

Bản phân phối của tôi là một Ubuntu tùy chỉnh có tên Turnkey Linux Redmine

Câu trả lời:


73

Bạn nên đặt nó bên trong một chỉ thị Địa điểm:

<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
Điều này không làm việc cho tôi. <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
Trang tài liệu apache giải thích tất cả điều này, nhưng thật khó chịu không bao giờ cung cấp cho bạn một ví dụ hoàn chỉnh. Tôi đã sao chép một phần ví dụ của họ, nhưng đã bỏ lỡ require valid-userphần đó. Một ví dụ hoàn chỉnh có thể là một điều tuyệt vời. Cảm ơn.
Butussy Butkus

1
@sharif phải là <Location />, nghĩa là quyền truy cập vào url gốc của yourhost.com/ nên yêu cầu cấu hình xác thực đó
agbb

1
Tôi cần <Location />trong mọi trường hợp để không gặp lỗi cú pháp khi tải tập tin cấu hình.
Perseids

3
Tại sao được <Location /> chỉnh sửa <Location>với một thông điệp nhật ký nội bộ "đã sửa ... để tránh nhiều rắc rối", nhưng không nói gì về lý do thực sự trong chính câu trả lời? Không có thứ gọi là lệnh <Location>(tức là không có vị trí) trong Apache. Điều đó chắc chắn gây ra rắc rối bây giờ. ;) (Xem ví dụ ở trên.)
Sz.

9

Tôi đang chạy Apache2 trên Ubuntu 10.04 - cùng một vấn đề và cảm ơn vì giải pháp. Tôi thấy rằng tôi phải đặt cấu hình vào/etc/apache2/apache2.conf

Bạn có thể tạo tên người dùng và mật khẩu bằng cách sử dụng htpasswd. Tập tin mới:

$ htpasswd -c /srv/auth/.htpasswd squire

Để thêm vào tập tin hiện có:

$ htpasswd -b /srv/auth/.htpasswd squire2 tickleme2

7

Bạn có thể bảo vệ một Địa điểm hoặc một Thư mục. Đối với một thư mục thêm một cái gì đó như:

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

Bạn cũng có thể thêm DenyAllowchỉ thị để kiểm soát tốt hơn.


4

Có vẻ như bạn đang chỉ định cài đặt xác thực trong VirtualHost. Thông thường, các cài đặt này được chỉ định theo Directorychỉ thị.

Bạn cũng có thể sử dụng .htaccessscác tệp, nhưng chỉ định trong conf conf là một mặc định tốt, vì nó ít bị phơi bày hơn.

Tài liệu Apache


3

Tôi đang chạy Apache2 trên Ubuntu 10.10. Tôi đã gặp vấn đề với tất cả các giải pháp ở trên, nhưng điều này đã hoạt động tốt (từ tài liệu apache):

<Thư mục / var / www />
  Tùy chọn Chỉ mục FollowSymLinks MultiViews
  Cho phép tất cả
  Cho phép đặt hàng, từ chối
  cho phép từ tất cả
  AuthType cơ bản
  AuthName "Bị hạn chế"
  Tệp AuthBasicProvider
  AuthUserFile / etc / users
  Yêu cầu người dùng truy cập
</ Thư mục>

Sự khác biệt lớn nhất so với các câu trả lời ở trên dường như là chỉ thị AuthBasicProvider được đặt thành "tệp" và lệnh Yêu cầu bao gồm bit "người dùng" trước tên người dùng thực tế.

Hy vọng điều này sẽ giúp được ai đó.


3

Chúng tôi đang chạy phiên bản tối ưu hóa bộ nhớ của apache và gặp phải sự cố này.

Điều này là do dòng sau không có trong cấu hình apache:

LoadModule authz_user_module modules/mod_authz_user.so
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.