Назад | Перейти на главную страницу

Группа проверки подлинности Apache в соответствующем подкаталоге

У меня здесь уникальный сценарий, который, вероятно, возникал в прошлом. У меня есть каталог, защищенный аутентификацией LDAP на моем сервере Apache. В этом каталоге (назовите его / svn - да, это каталог subversion) есть проекты как подкаталоги.

Я хочу ограничить пользователей, которые получают доступ к этому подкаталогу на основе файла группы. Однако я не хочу добавлять в свой httpd.conf файл для каждого создаваемого проекта. Вместо этого URL-адрес подкаталога будет соответствовать имени группы.

Так, например, у меня может быть проект «Календарь». Мой URL SVN будет "http://myserver.com/svn/caldendar"- и единственные пользователи, которые должны иметь доступ к этому репозиторию, будут перечислены в моем groups.txt файл как:

calendar:user1 user2

Таким образом, даже если кто-то может пройти аутентификацию по LDAP, только user1 и user2 должно быть разрешено.

Есть ли более простой способ сделать это? Возможно, установите переменную для подкаталога и скажите Require ldap-group variable?

Спасибо!

После дальнейшего исследования я нашел решение в виде контроля доступа SVN.

С помощью authz_svn_moduleмой каталог Subversion в конфигурации Apache выглядит так:

<Location /svn>
  # Tell apache this is a subversion repository
  DAV svn
  # Where the subversion repository list exists on the file system
  SVNParentPath "/var/svn"
  # What kind of authentication     
  AuthType Basic
  AuthName "Restricted!"
  AuthBasicProvider ldap
  AuthLDAPBindDN "YOUR BIND DN"
  AuthLDAPBindPassword "YOUR BIND PASSWORD"
  AuthLDAPURL "ldaps://yourldapserver.com:636/other_info"
  AuthzSVNAccessFile /etc/httpd/svnaccess.txt
  Require valid-user
</Location>

Довольно простой - здесь важная линия AuthzSVNAccessFile - это указывает на файл, который будет создан автоматически, и указать, какие пользователи имеют права доступа к каким каталогам.

Этот файл "svnaccess.txt" будет выглядеть примерно так:

[project1:/]
joe_user = rw
mary_beth = rw
$anonymous = r

[project2:/]
james_smith = rw

[project3:/]
john_deere = rw
$anonymous = r

Перечисленные здесь имена пользователей - это имена пользователей, аутентифицированные LDAP. Их не нужно регистрировать в Subversion (они переносятся пользователем при аутентификации). В @anonymous подстановочный знак: любой, кто не аутентифицирован или может удовлетворить другой Allow в вашей конфигурации Apache. Этот файл должен быть доступен для чтения только пользователю root (или тому, кто запускает службу Apache).

Создание этого файла может быть создано автоматически - в зависимости от того, откуда поступает ваша информация. В моем случае у меня есть сервер Redmine, на котором хранится информация о пользователях и проектах, а также о том, какой пользователь имеет доступ к какому проекту. Можно написать короткий скрипт Python для извлечения этой информации из базы данных и использования для автоматического создания этого файла (если он используется в качестве задания cron). Это круговой способ делать что-то, но после того, как вы заставите его работать и автоматизировать, вам не нужно беспокоиться о повторном переписывании правил аутентификации для каждого нового созданного проекта / репозитория Subversion.

(И, что положительно, изменения в этом файле "svnaccess.txt" не требуют перезапуска Apache!)