私は、すべてのユーザーとそのグループメンバーシップを含むApacheDSがあるプロジェクトに取り組んでいます。グループメンバーシップは、各グループのメンバー属性として保存され、スキーマを変更したので、各ユーザーにmemberOf属性もあり、承認を行うときにグループメンバーシップを確認するのは簡単です。グループメンバーシップに基づいてユーザーにSubversionリポジトリへのアクセスを許可し、それを今すぐ稼働させる必要があります。
しかし、私の顧客は、要件を指定するときに1つの「わずかな」詳細について言及するのを忘れたと私に言いました。また、特定のサブフォルダーに対してより厳しい要件が必要なリポジトリもいくつかあるようです。したがって、簡単な解決策を考え出すために、LDAPrequireディレクティブを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-adminsはフルアクセス権を持ちます。
ただし、上記の構成にAuthzSVNAccessFile /svn/conf/TestClosedProject.svnAuth
を挿入すると、LDAPに存在するが、-adminsと-membersのどちらのメンバーでもないユーザーを指定することにより、requireldap-attributeディレクティブをsvnAuthファイルでオーバーライドできます。グループ。 /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ファイルに委任する前に、これらのグループのいずれにも属していない人へのアクセスを拒否したいだけです-それは可能です-もしそうなら、これをどのように指定しますか?
リポジトリアクセスを管理する方法は次のとおりです。
Apache構成では、「valid-userが必要」以外は何もしません(そうすれば、新しいリポジトリが追加されたときにのみApacheを再起動する必要があります)。
このようにして、リポジトリ権限のすべてのメンテナンスをリポジトリの所有者にオフロードします。 LDAPグループが組み込まれていないため、これで問題に直接対処できない場合がありますが、このソリューションは、数百のリポジトリで数年間機能してきました。
これが純粋なオープンソースで可能かどうかはわかりませんが、WANdiscoの商用製品であるSubversion AccessControlでこれを処理できます。製品には、authzファイルの代わりに、ユーザーに適用される独自のグループとルールのリストがあります。グループのメンバーシップはActiveDirectoryサーバーのポーリングから取得されるため、これで要件を満たす必要があります。