Як налаштувати базову автентифікацію у віртуальних хостах Apache httpd?


48

Я намагаюсь налаштувати доступний доступ за допомогою Apache http. Він вимагає аутентифікації. Моє /etc/apache2/sites-enabled/mercurialвиглядає так:

NameVirtualHost *:8080

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

Кожен підручник, який я прочитав в Інтернеті, говорить мені вставити наступні рядки:

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

Але коли я це роблю, я отримую таку помилку:

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

Мій дистрибутив - це налаштований Ubuntu під назвою «Під ключ Linux Redmine»

Відповіді:


73

Ви повинні розмістити це всередині директиви про місцезнаходження:

<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
це не працює для мене. <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
Сторінка apache doc пояснює все це, але прикро ніколи не дає вам повного прикладу. Я скопіював частину їх прикладу, але пропустив require valid-userпорцію. Повний приклад може бути чудовою річчю. Дякую.
Buttle Butkus

1
@sharif має бути <Location />, тобто доступ до кореневого URL-адреси yourhost.com/ повинен вимагати конфігурації
автентичності

1
Мені потрібно було <Location />в будь-якому випадку не отримати помилку синтаксису при завантаженні конфігураційного файлу.
Персеїди

3
Чому його <Location /> редагували <Location>внутрішнім журналом повідомлення "виправлено ... щоб уникнути багато клопоту", але нічого не розповідаючи про справжню причину у самій відповіді? В Apache немає такого поняття, як <Location>директива (тобто така, яка не має місця). Це однозначно спричиняє неприємності зараз. ;) (Див. Напр. Вище)
Sz.

9

Я запускаю Apache2 на ubuntu 10.04 - така ж проблема і дякую за рішення. Я виявив, що мені довелося поставити конфігурацію/etc/apache2/apache2.conf

Ви можете створити ім'я користувача та пароль за допомогою htpasswd. Новий файл:

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

Щоб додати до наявного файлу:

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

7

Ви можете захистити місцезнаходження чи каталог. Для каталогу додайте щось на зразок:

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

Ви також можете додати Denyта Allowдирективи для більш точного керування.


4

Це здається, що ви вказуєте налаштування аутентифікації в межах VirtualHost. Зазвичай ці налаштування задаються в Directoryдирективі.

Ви також можете використовувати .htaccesssфайли, але уточнення в конфлікті Apache є хорошим за замовчуванням, оскільки воно має меншу експозицію.

Документація Apache


3

Я запускаю Apache2 на ubuntu 10.10. У мене виникли проблеми з усіма рішеннями вище, але це спрацювало добре (від апаратів Dokche):

<Каталог / var / www />
  Індекси параметрів FollowSymLinks MultiViews
  ДозволитиЗавершити всіх
  Наказ дозволяють, заперечують
  дозволити від усіх
  AuthType Basic
  AuthName "Обмежений"
  Файл AuthBasicProvider
  AuthUserFile / тощо / користувачів
  Потрібен відвідувач користувача
</Directory>

Найбільша відмінність від відповідей, наведених вище, видається директивою AuthBasicProvider, встановленою на "файл", та директивою "Вимагати", включаючи біт "користувача" перед фактичним іменем користувача.

Сподіваюся, що це комусь допоможе.


3

Ми працюємо з оптимізованою для пам'яті версією apache і зіткнулися з цією проблемою.

Це було пов’язано з тим, що в конфігурації apache немає наступного рядка:

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