Я настраиваю совершенно новый сервер — я буквально только что запустил экземпляр AWS EC2, заново установил apache и mod_ssl и получил самые простые конфигурации. Apache, по-видимому, игнорирует любую конфигурацию аутентификации (включая Логуровень
) в Виртуальный хост
блоки.
Это с Apache 2.4.51 на amzn2.x86_64 Linux.
Я начал с перенаправления HTTP на HTTPS, а затем следовал основным инструкциям для Аутентификация и авторизация Apache 2.4. Это привело меня к следующему файлу virtual.conf:
<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>
В целом, вышеописанное работает, за исключением авторизации. Если я перехожу на свой IP-адрес в веб-браузере, он правильно перенаправляет на 443, он обслуживает сертификаты по указанному (нестандартному) пути, и я вижу, что он регистрируется отлаживать
уровень активности, по крайней мере, для mod_ssl. Однако он просто обслуживает этот index.html из /var/www/html/
(NB: /var/www/html
является символической ссылкой).
я нашел этот другой вопрос, что заставило меня искать любой Требовать все предоставленные
директивы.
# пароль
/etc/httpd/conf.d
# grep Требовать * 2>/dev/null
autoindex.conf:# Необходимые модули: mod_authz_core, mod_authz_host,
autoindex.conf: Требовать все предоставленные
ssl.conf:# С помощью SSLRequire вы можете управлять доступом к каталогу на основе
ssl.conf:#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
ssl.conf:# или StrictRequire:
ssl.conf:# Отказывает в доступе, даже если применяется «SSLRequireSSL» или «SSLRequire».
ssl.conf:#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
userdir.conf: Требовать метод GET POST OPTIONS
virtual.conf: Требовать пользователя someuser
welcome.conf: Требовать все предоставленные
Тот, что в autoindex.conf
находится внутри <Directory "/usr/share/httpd/icons">
блок, а тот, что в добро пожаловать.conf
в <Directory /usr/share/httpd/noindex>
. я сделал найти один в /etc/httpd/conf/http.conf
:
# Дальнейшее ослабление доступа к корневому каталогу документа по умолчанию:
<Каталог "/var/www/html">
Индексы опционов FollowSymLinks
Аллововеррайд
Требовать все предоставленные
</Каталог>
Обратите внимание, что в этой установке (через ням
на Amazon Linux 2) основной файл конфигурации /etc/httpd/conf/http.conf
. Последняя строка этого файла IncludeOptional conf.d/*.conf
. Моя основная конфигурация, которую я разместил выше, находится в /etc/httpd/conf.d/virtual.conf
.
Я пытался это закомментировать Требовать все предоставленные
и перезапустил сервер, но без изменений. Вот тогда я заметил, что он вообще ничего не делает. Этот ранее упомянутый вопрос показал некоторые записи в его файле журнала. Однако даже
хотя у меня есть Отладка на уровне журнала
, я не вижу ничего связанного с authz_core
в лог-файлах, как он был. ¯_(ã)_/¯
На этом этапе я попробовал ряд модификаций внутри <VirtualHost>
блокировать:
- Я пытался обернуть строки
Основной тип авторизации
через Требовать пользователя
в <RequireAll>
блокировать
- я пытался добавить
Требовать все отказано
перед Требовать пользователя
- Я попытался использовать
.htaccess
файл с той же конфигурацией
- Я попытался изменить
Разрешить переопределить все
к AllowOverride All AuthConfig
и используя .htaccess
файл
- Я попытался расширить ведение журнала до
Отладка LogLevel auth_basic:trace1 authz_core:trace1
Во всех случаях никаких изменений, и конфигурация анализируется нормально. Сервер просто обслуживает страницу, и ни в одном из файлов журнала ничего нет.
Однако, если я внесу изменения в основной conf/httpd.conf
файл внутри <Directory "/var/www/html">
блок, все работает как положено:
- изменение
Требовать все предоставленные
к Требовать все отказано
(вместо комментирования) блокирует весь доступ
- изменение
AllowOverride нет
к Аллововеррайд Аутконфиг
делает мой .htaccess
файл с той же конфигурацией авторизации, что и в файле <VirtualHost>
block работает как положено — запрашивает имя пользователя и пароль
- регистрация с
Отладка LogLevel auth_basic:trace1 authz_core:trace1
получает много журналов
Итак, подводя итог, хотя мой <VirtualHost>
config в целом работает (перенаправление, SSL, отладка для всего, кроме аутентификации), похоже, он молча игнорирует любые авторизация
конфигурация, в том числе Логуровень
.
В краткосрочной перспективе я решил свою проблему, отменив все изменения, которые я сделал в основном файле конфигурации, чтобы они не переопределялись во время обновления программного обеспечения, и поместил их в 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>
Однако было бы неплохо иметь возможность настроить авторизацию на уровне виртуального хоста. Любые идеи?