Рейтинг:0

Apache 2.4 без конфигурации аутентификации работает в VirtualHost

флаг cv

Я настраиваю совершенно новый сервер — я буквально только что запустил экземпляр 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>

Однако было бы неплохо иметь возможность настроить авторизацию на уровне виртуального хоста. Любые идеи?

Gerard H. Pille avatar
флаг in
Загружены ли необходимые модули? Что вы получаете в журнале ошибок при перезапуске Apache?
philolegein avatar
флаг cv
Я не совсем уверен, какие из них «необходимы», но `apachectl -t -D DUMP_MODULES` _похоже_ на меня. В журнале ошибок при перезапуске единственные сообщения о том, что монитор сердцебиения и mpm не поддерживаются. Я могу указать полный журнал перезапуска в вопросе, если вы думаете, что это поможет.
Gerard H. Pille avatar
флаг in
В /etc/httpd нет файла .conf, который определяет правила доступа для /var/www и «allowoverride none»?
philolegein avatar
флаг cv
В /etc/httpd/httpd.conf есть `Require all grant` для /var/www перед его записью в /var/www/html, но я предположил, что более поздний, более конкретный вариант имеет приоритет. В том же файле /, /var/www и /var/www/html все имеют разрешающее переопределение none.
Gerard H. Pille avatar
флаг in
Вы правы, «allowoverride» считается для .htaccess. В /var/www/html нет .htaccess? У вас есть две конфигурации для /var/www/html. Интересно, в каком порядке они разбираются.
Gerard H. Pille avatar
флаг in
Также не забудьте очистить кеш браузера.
philolegein avatar
флаг cv
Единственное, что есть в /var/www/html, это index.html, который говорит Hello World. Согласно https://httpd.apache.org/docs/2.4/sections.html#merging «Разделы внутри разделы применяются после соответствующих разделов вне определения виртуального хоста. Это позволяет виртуальным хостам переопределять конфигурацию основного сервера.", так что все должно быть в порядке.Я не могу представить, как кеширование будет иметь значение, так как я вижу запрос на сервере, но я все равно его очистил, и все равно такое же поведение.
philolegein avatar
флаг cv
Кроме того, я попытался добавить «Требовать все отказы» в конфигурацию виртуального хоста, но все равно ведет себя так же.
Gerard H. Pille avatar
флаг in
Добавьте отдельные журналы для этого хоста, чтобы узнать, используется ли он.
philolegein avatar
флаг cv
@GerardH.Pille — существенные изменения в вопросе; теперь кажется очевидным, что это проблема внутри блоков виртуального хоста.
Gerard H. Pille avatar
флаг in
Раньше было так (я уже работал с Apache 1.4), что нужно было активировать использование VirtualHosts, но я думал, что это уже не так. Вы пробовали отдельные журналы для этого хоста? Любые другие конфигурации VirtualHost, кроме двух, которые вы показываете?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.