Возможно ли иметь два файла паролей в Apache2?

Могу ли я иметь две директивы AuthUserFile в файле конфигурации apache2/sites-enabled/000-default?

    <Location /repo/trac>
      AuthType Basic
      AuthName "Trac"
      AuthUserFile /etc/apache2/passfile1
      AuthUserFile /etc/apache2/passfile2
      Require valid-user
    </Location>

Мне нужно имя пользователя/пароль для двух типов пользователей.

  • DEV - может получить доступ к SVN и Trac
  • NOM - может получить доступ только к Trac

У меня есть два варианта: хранить отдельные файлы паролей для Trac и Svn и включать их отдельно, или иметь 2 файла паролей в 1. Я помещаю DEV в другой NOM и включаю только 1 для svn и включаю два в расположение trac.


person Community    schedule 10.05.2012    source источник
comment
Почему вы хотите поместить их в разные файлы? Возможно, будет лучшее решение, если вы укажете свою цель.   -  person gpojd    schedule 10.05.2012
comment
Я обновил вопрос, спасибо!   -  person    schedule 10.05.2012


Ответы (2)


Вы должны переместить все в один файл паролей, а затем использовать группы для управления доступом к определенным ресурсам. Вы можете создать /etc/apache2/groups с содержимым по строкам:

DEV: bob alice
NOM: norm fred bart

А затем измените свою конфигурацию, чтобы она выглядела так:

<Location /repo/trac>
  AuthType Basic
  AuthName "Trac"
  AuthUserFile /etc/apache2/passfile
  AuthGroupFile /etc/apache2/groups
  Require group DEV NOM
</Location>

Это позволит членам групп DEV и NOM получить доступ к этому ресурсу.

Если вы действительно хотите использовать несколько файлов паролей, см. документацию по mod_authn_alias, в котором есть пример, который делает именно это.

person larsks    schedule 10.05.2012
comment
вы хотите сказать, что невозможно включить два файла, как я? - person ; 11.05.2012
comment
Я хочу сказать, что если ваша цель — предоставить разным группам людей доступ к разным ресурсам, лучшим решением будет использовать средство, которое было разработано именно для этого... но смотрите мое обновление. - person larsks; 11.05.2012
comment
групповой способ лучше, согласен :) - person ; 11.05.2012

Судя по документации, вы можете иметь несколько файлов паролей. Хитрость заключается в использовании AuthnProviderAlias

https://httpd.apache.org/docs/2.4/mod/mod_authn_core.html

В вашей глобальной конфигурации:

(как заявил @RickyLevi, AuthnProviderAlias ​​не может встречаться в виртуальных хостах)

<AuthnProviderAlias file file1>
    AuthUserFile "/www/conf/passwords1"
</AuthnProviderAlias>

<AuthnProviderAlias file file2>   
    AuthUserFile "/www/conf/passwords2"
</AuthnProviderAlias>

На вашем виртуальном хосте:

<Directory "/var/web/pages/secure">
    AuthBasicProvider file1 file2
    AuthType Basic
    AuthName "Protected Area"
    Require valid-user
</Directory>

https://httpd.apache.org/docs/2.4/en/mod/mod_auth_basic.html#authbasicprovider

Провайдеры опрашиваются по порядку, пока провайдер не найдет совпадение с запрошенным именем пользователя, после чего этот единственный провайдер попытается проверить пароль. Неспособность проверить пароль не приводит к передаче управления последующим провайдерам.

person Pierre-Olivier Vares    schedule 16.12.2019
comment
ммм <AuthnProviderAlias> cannot occur within <VirtualHost> section я думаю, этот ответ может сработать, когда file1 и file2' do act as a "provider" ? like sitename-dev`, поскольку они будут включены глобально для всех сайтов на серверах?... - person Ricky Levi; 12.07.2021
comment
Возможно, вам придется определить глобальные псевдонимы провайдеров, а затем использовать тот, который вы хотите, на своем виртуальном хосте. Другими словами, определите глобальных, site1, site2, ... провайдеров в глобальной конфигурации, затем используйте глобальный сайт AuthBasicProvider1 на своем первом виртуальном хосте, глобальный сайт2 AuthBasicProvider на втором и т. д. Я постараюсь найти время, чтобы проверить это. - person Pierre-Olivier Vares; 13.07.2021