Я работаю над проектом, в котором у меня есть ApacheDS, содержащий всех пользователей и их членство в группах. Членство в группах хранится как атрибут member для каждой группы, и я внес изменения в схему, поэтому у меня также есть атрибут memberOf для каждого пользователя, что упрощает проверку членства в группе при авторизации. Мне нужно предоставить пользователям доступ к репозиториям Subversion на основе их членства в группах, и теперь они должны работать.
Однако мой заказчик только что сказал мне, что забыл упомянуть одну «небольшую» деталь при определении требований. У них, по-видимому, также есть несколько репозиториев, в которых они должны иметь более строгие требования к определенным подпапкам. Поэтому, чтобы придумать простое решение, я подумал, что могу просто объединить свои директивы LDAP require с директивой AuthzSVNAccessFile.
Вот мой конфиг:
<Location /TestClosedProject>
SVNPath /repos/TestClosedProject
SVNListParentPath on
# Include shared LDAP settings, binddn, passwords, ldapurl etc.
Include /svn/conf/ldapCommonSettings
# LDAP Authentication & Authorization is final; do not check other databases
AuthzLDAPAuthoritative on
AuthName "TestClosedProject"
# Admin group has full access
Require ldap-attribute memberOf=cn=TestProject-admins,ou=groups,dc=somedomain,dc=somecountry
# Members group has read-only access
<Limit GET PROPFIND OPTIONS REPORT>
Require ldap-attribute memberOf=cn=TestProject-members,ou=groups,dc=somedomain,dc=somecountry
</Limit>
</Location>
Это позволяет любому участнику TestProject читать код в / TestProject, а администраторы Test имеют полный доступ.
Однако, когда я вставляю AuthzSVNAccessFile /svn/conf/TestClosedProject.svnAuth
в приведенной выше конфигурации мои директивы require ldap-attribute могут быть переопределены в файле svnAuth, указав пользователя, который существует в LDAP, но не является членом ни -admins, ни -members группы. Содержимое /svn/conf/TestClosedProject.svnAuth:
[groups]
supporters = jrf,agata
admins = fj,jrf
members = fj,jrf
[/]
* =
@members = r
@admins = rw
[TestClosedProject:/support]
@supporters = rw
@members = r
Проблемный сценарий заключается в том, что
Есть ли способ настроить это так, чтобы только пользователи в группах LDAP-членов или администраторов могли получать доступ с помощью файла svnAuth? По сути, я просто хочу запретить доступ всем, кто не входит ни в одну из этих групп, прежде чем делегировать в файл svnAuth - возможно ли это - если да, как мне это указать?
Не уверен, что это возможно с открытым исходным кодом, но я знаю коммерческий продукт WANdisco, Subversion Access Control может с этим справиться. Вместо файла authz у продукта есть собственный список групп и правил, применимых к пользователям. Членство в группе происходит в результате опроса сервера Active Directory, поэтому он должен удовлетворять требованиям.
Вот как я управляю доступом к репозиторию:
Я не делаю ничего в конфигурации Apache, кроме «требующего действительного пользователя» (таким образом, Apache нужно перезапускать только при добавлении новых репозиториев).
Таким образом, я перекладываю все обслуживание разрешений на репозиторий на владельцев репозитория. Возможно, это не решит вашу проблему напрямую, так как не включает никаких групп LDAP, но это решение работало у меня в течение нескольких лет с сотнями репозиториев.