У меня здесь уникальный сценарий, который, вероятно, возникал в прошлом. У меня есть каталог, защищенный аутентификацией 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!)