Как настроить базовую аутентификацию в виртуальных хостах 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 под названием Redmine для Linux под ключ.

Джадер Диас
источник

Ответы:

73

Вы должны поместить это в директиву Location:

<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>
Lanselot
источник
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 объясняет все это, но досадно никогда не дает вам полный пример. Я скопировал часть их примера, но пропустил require valid-userчасть. Полный пример может быть замечательной вещью. Благодарю.
Баттл Буткус
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
SLL
источник
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 Documentation

сигнализатор
источник
3

Я использую Apache2 на Ubuntu 10.10. У меня были проблемы со всеми вышеупомянутыми решениями, но это работало хорошо (из документов Apache):

<Directory / var / www />
  Опции Индексы FollowSymLinks MultiViews
  AllowOverride All
  Заказать разрешить, отказать
  разрешить от всех
  AuthType Basic
  AuthName "Restricted"
  Файл AuthBasicProvider
  AuthUserFile / etc / users
  Требовать пользователя посетителя
</ Directory>

Самым большим отличием от приведенных выше ответов является директива AuthBasicProvider, установленная в «file», и директива Require, включающая бит «user» перед фактическим именем пользователя.

Надеюсь, это кому-нибудь поможет.

Алекс Бейненсон
источник
3

Мы запускаем оптимизированную для памяти версию apache и столкнулись с этой проблемой.

Это произошло из-за отсутствия следующей строки в конфигурации apache:

LoadModule authz_user_module modules/mod_authz_user.so
DaveSB
источник