Чому аутентифікація Apache Basic не працює?


14

Щойно я модернізував Apache з його збірки 2003 року, до чисто-чистої, чисто нової версії 2.4.1. Здається, все добре, крім однієї яскравої речі:

У моєму файлі httpd.conf у мене є таке:

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

Це повинно дозволяти доступу до сервера лише користувачам у вказаному аутентифікованому файлі - так само, як це було в старій версії Apache. (Так?)

Однак це не працює. Запити надаються без автентифікації. Коли я перемикаю журнал на налагодження LogLevel, для доступу, він говорить:

[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

Я дійсно не знаю, що це означає - і я (наскільки я знаю) не маю жодних заяв "Вимагати всіх наданих" або "" в жодному з моїх файлів.

Будь-які ідеї, чому це не працює, або де налагоджувати ??

ОНОВЛЕННЯ:

У мене віртуальний хост на порту SSL, який дозволяє здійснювати проксі. Коли я ставлю ті самі записи всередині

<proxy *> 

пункт у налаштуваннях virtualhost, він працює . Це, здається, не працює в

 <Directory> 

стаття Потім я спробував розмістити під іншими пунктами Directory (специфічні для інших каталогів), і це не спрацювало.

ТАКОЖ

Із запитань до Шейна нижче - я спробував дублювати корінь блоку "/" в каталог "/ tmp". Каталог / tmp працює ПРАВИЛЬНО !! Отже - ця проблема характерна лише для кореневого каталогу ???


1
Які ще <Directory>блоки ви застосовуєте до запитів, які не працюють?
Шейн Мадден

Я просто помістив один для кореневого каталогу "/", який повинен стосуватися всього сервера. Я спробував додати його до домашнього каталогу користувача (за mod_userdir) і мав однакові результати з цим.
Бред

@ShaneMadden - щодо вашого запитання - я спробував дублювати кореневий "/" блок до каталогу "/ tmp". Каталог / tmp працює ПРАВИЛЬНО !! Отже - ця проблема характерна лише для кореневого каталогу ???
Бред

Я підозрюю, що <Directory>в конфігурації Apache в іншому місці є більш конкретний блок, який має перевагу над тим, який ви встановили /.
Шейн Медден

Я просто хапав усе - нічого. Ці конфігураційні файли були дуже мінімальними модифікаціями для нововстановлених за замовчуванням Apache.
Бред

Відповіді:


12

У мене була аналогічна проблема з аутентифікацією Digest на свіжому встановленні 2.4. Придивившись уважно до документації на сайті Apache, схоже, що директиви аутентифікації повинні містити <Location>тег, а не <Directory>тег. Дивіться документацію щодо директиви AuthBasicProvider .


2
Це неправильно. mod_auth_basic та mod_auth_digest можна використовувати в <Directory> і <Location>, а також <File> <If> та <Proxy>. У документації для Apache 2.4 -> httpd.apache.org/docs/current/mod/… У розділі "Контекст" вказано "Каталог", який вказує на всі перераховані вище дійсні контейнери. -> httpd.apache.org/docs/current/mod/directive-dict.html#Context
JadedCore

Це не повинно бути правильним, але це працювало для мене. Можливо, це тому, що в частині Каталогу були інші налаштування (
напр

6

Я зіткнувся з тією ж проблемою, і нічого з цієї посади мені не допомогло, тому я додам свої 2 копійки. У моєму випадку (apache 2.4) проблема полягала в послідовних директивах Require .

За замовчуванням, якщо у вас є кілька директив Require , вони вважаються як<RequireAny>

У своєму <Directory>я мав

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

Тож запит на отримання автентичності не з’явився, якщо IP був правильним. Мені довелося переключити Потрібна логіка з <RequireAny>на, <RequireAll>і, здається, зараз все працює правильно.

   <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

Відповідь jscott невірна. Apache 2.4, безумовно , дозволяє директиви аутентифікації в <Directory>контейнерах. Крім того, це єдиний безпечний спосіб здійснити автентифікацію, оскільки <Location>доступ до контейнерів можна отримати різними способами, що дозволяє обійти вашу автентифікацію, якщо ви не обережні. Для ознайомлення, ось контейнер для зразків, який я використовую у виробничій системі:

<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

Здається, вам не вистачає постачальника послуг AuthBasic. Спробуйте додати рядок типу:

AuthBasicProvider    file

Після того як ви працюєте, можливо, ви захочете переглянути Satisfyдирективу. Це можна використовувати для дозволу локального доступу без пароля, вимагаючи пароля для доступу в Інтернет.

EDIT: Я користуюся файлом включення для BasicAuth, щоб увімкнути віддалений доступ до вмісту, який, як правило, недоступний через Інтернет. Можливо, ви не хочете Satisfyдирективи. Це мій /etc/apache2/basicauth.confфайл:

# 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

У мене також є /etc/apache2/allow_local.confфайл включення для аутентифікації на основі 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

Для їх включення я використовую ці функції.

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

Ви можете спробувати додати до специфікації авторизації. Це працює з моєю тестовою конфігурацією.

Order deny,allow
Allow from all

Спробував - досі не працює: -О
Бред

Якщо я просто включаю ваші файли як є, я отримую помилку: "AuthName тут не дозволено" - так як ви не можете вказувати ці директиви ніде (наприклад, поза пунктом "Місцезнаходження", "Каталог" або "Проксі"). Або Якщо я щось пропускаю? Якщо я включу це всередину пункту "Каталог" - знову - мене пускають без будь-яких повноважень.
Бред

Якщо я лише вставлю в пункті "каталог" "заборону для всіх", мені буде відмовлено у доступі (як ви очікували). Якщо потім включити ваш ПЕРШИЙ скрипт у пункті каталогу, мені безумовно дозволяється доступ. Якщо я видаляю "задовольнити" у вашому сценарії, мені безумовно відмовляють.
Бред

0

У мене була така ж проблема, і це, ймовірно, помилка Apache; у моєму випадку проблема з’явилася після оновлення та зникла після наступного оновлення, але мені довелося додати це внизу:

Deny from all

Це страшно, що Apache може відкрити отвори в безпеці на зразок цього :(


Deny from allє настройкою apache 2.2. httpd.apache.org/docs/2.4/upgrading.html#run-time
небезпека89

да зміни директив , пов'язані з безпекою в зворотному суперечливому шляху є baaaaaad
Greg

0

Спробуйте:
<Directory "/"> ... </Directory>

Замість:
<Directory /> ... </Directory>

Значення: інкапсулювати корінний символ подвійними лапки. В іншому випадку ви можете закрити тег цим косою рисою.


0

Також перевірте, чи немає випадково іншого

    Require all granted

в іншому місці того ж конфігураційного каталогу. це може перекрити ваше

    Require     valid-user
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.