Tôi đang thiết lập một máy chủ hoàn toàn mới â Theo đúng nghĩa đen, tôi chỉ tạo ra một phiên bản AWS EC2, cài đặt apache và mod_ssl mới, đồng thời có cấu hình gần với cấu hình đơn giản nhất. Apache dường như bỏ qua mọi cấu hình xác thực (bao gồm Mức đăng nhập
) Trong Máy chủ ảo
khối.
Đây là với Apache 2.4.51 trên amzn2.x86_64 Linux.
Tôi đã bắt đầu bằng cách chuyển hướng HTTP sang HTTPS, sau đó làm theo các hướng dẫn cơ bản để Xác thực và ủy quyền Apache 2.4. Điều đó đã đưa tôi đến virtual.conf sau:
<VirtualHost _default_:80>
DocumentRoot /var/www/html
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^(localhost|127.0.0.1)
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [R,L]
</VirtualHost>
<VirtualHost *:443>
LogLevel debug
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
<Directory "/var/www/html">
AllowOverride All
Options Indexes FollowSymLinks
AuthType Basic
AuthName "Restricted Files"
# (Following line optional)
AuthBasicProvider file
AuthUserFile "/mount/local/apache/passwd/passwords"
Require user someuser
</Directory>
DocumentRoot /var/www/html
</VirtualHost>
Nói chung, những điều trên dường như đang hoạt động, ngoại trừ nội dung xác thực. Nếu tôi truy cập địa chỉ IP của mình trong trình duyệt web, nó sẽ chuyển hướng chính xác đến 443, nó cung cấp chứng chỉ từ đường dẫn (không chuẩn) đã chỉ định và tôi có thể thấy nó đang ghi nhật ký gỡ lỗi
cấp hoạt động, ít nhất là cho mod_ssl. Tuy nhiên, nó chỉ phục vụ index.html này từ /var/www/html/
(NB: /var/www/html
là một liên kết tượng trưng).
tôi đã tìm thấy câu hỏi khác này, khiến tôi tìm kiếm bất kỳ Yêu cầu tất cả cấp
chỉ thị.
# pwd
/etc/httpd/conf.d
# grep Yêu cầu * 2>/dev/null
autoindex.conf:# Các mô-đun bắt buộc: mod_authz_core, mod_authz_host,
autoindex.conf: Yêu cầu tất cả được cấp
ssl.conf:# Với SSLRequire, bạn có thể thực hiện kiểm soát truy cập theo thư mục dựa trên
ssl.conf:#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
ssl.conf:# o Yêu cầu nghiêm ngặt:
ssl.conf:# Điều này từ chối quyền truy cập khi áp dụng "SSLRequireSSL" hoặc "SSLRequire" ngay cả
ssl.conf:#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
userdir.conf: Yêu cầu phương thức NHẬN TÙY CHỌN BÀI ĐĂNG
virtual.conf: Yêu cầu người dùng someuser
welcome.conf: Yêu cầu tất cả được cấp
một trong autoindex.conf
là bên trong của một <Directory "/usr/share/httpd/icons">
khối, và một trong chào mừng.conf
trong <Directory /usr/share/httpd/noindex>
. Tôi đã làm tìm một trong /etc/httpd/conf/http.conf
:
# Thoải mái hơn nữa khi truy cập vào thư mục gốc của tài liệu mặc định:
<Thư mục "/var/www/html">
Tùy chọn Chỉ mục FollowSymLinks
AllowOverride Không có
Yêu cầu tất cả cấp
</Thư mục>
Lưu ý, trên bản cài đặt này (thông qua ngon
trên Amazon Linux 2), tệp cấu hình chính là /etc/httpd/conf/http.conf
. Dòng cuối cùng của tập tin đó là Bao gồmTùy chọn conf.d/*.conf
. Cấu hình chính của tôi, tôi đã đăng ở trên là trong /etc/httpd/conf.d/virtual.conf
.
Tôi đã cố gắng nhận xét rằng Yêu cầu tất cả cấp
và khởi động lại máy chủ, nhưng không thay đổi. Đó là khi tôi nhận thấy rằng nó dường như không làm gì cả. Câu hỏi được đề cập trước đó cho thấy một số mục trong tệp nhật ký của anh ấy. Tuy nhiên, ngay cả
mặc dù tôi có Gỡ lỗi LogLevel
, tôi không thấy bất cứ điều gì liên quan đến authz_core
trong các tệp nhật ký, như anh ấy đã từng. ¯_(ã)_/¯
Tại thời điểm này, tôi đã thử một số sửa đổi bên trong <VirtualHost>
chặn:
- Tôi đã cố gắng gói các dòng
AuthType cơ bản
xuyên qua Yêu cầu người dùng someuser
trong một <RequireAll>
chặn
- Tôi đã thử thêm
Yêu cầu tất cả bị từ chối
trước yêu cầu người dùng
- Tôi đã thử sử dụng một
.htaccess
tập tin có cùng cấu hình
- Tôi đã thử thay đổi
AllowOverride All
đến AllowOverride All AuthConfig
và sử dụng một .htaccess
tập tin
- Tôi đã thử mở rộng đăng nhập để
Gỡ lỗi logLevel auth_basic:trace1 authz_core:trace1
Trong mọi trường hợp, không có thay đổi và cấu hình phân tích tốt. Máy chủ chỉ phục vụ trang và không có gì trong bất kỳ tệp nhật ký nào.
Tuy nhiên, nếu tôi thực hiện các thay đổi trong phần chính conf/httpd.conf
tập tin bên trong của <Directory "/var/www/html">
block, mọi thứ hoạt động như mong đợi:
- thay đổi
Yêu cầu tất cả cấp
đến Yêu cầu tất cả bị từ chối
(thay vì bình luận nó ra) chặn tất cả quyền truy cập
- thay đổi
AllowOverride không có
đến AllowOverride AuthConfig
làm cho tôi .htaccess
tệp có cùng cấu hình xác thực như trong <VirtualHost>
chặn hoạt động như mong đợi – nó yêu cầu tên người dùng và mật khẩu
- bật đăng nhập với
Gỡ lỗi logLevel auth_basic:trace1 authz_core:trace1
giúp tôi đăng nhập rất nhiều
Vì vậy, để tóm tắt, mặc dù tôi <VirtualHost>
config đang hoạt động nói chung (chuyển hướng, SSL, gỡ lỗi cho mọi thứ trừ auth), nó dường như âm thầm bỏ qua bất kỳ xác thực
cấu hình, bao gồm Mức đăng nhập
.
Trước mắt, tôi đã giải quyết vấn đề của mình bằng cách hoàn tác tất cả các thay đổi tôi đã thực hiện trong tệp cấu hình chính, để mọi thứ không bị ghi đè trong quá trình cập nhật phần mềm và đưa chúng vào conf/00-override.conf
:
<Directory "/var/www/html">
AllowOverride All
AuthType Basic
AuthName "Restricted Files"
# (Following line optional)
AuthBasicProvider file
AuthUserFile "/mount/local/apache/passwd/passwords"
Require user someuser
</Directory>
Tuy nhiên, sẽ rất tốt nếu có thể định cấu hình ủy quyền ở cấp máy chủ ảo. Bất kỳ ý tưởng?