这里有一个独特的场景 - 可能过去出现过。我有一个目录,受 Apache 服务器上的 LDAP 身份验证保护。在这个目录中(称为 /svn - 是的,它是一个 subversion 目录),有项目作为子目录。
我想根据组文件限制有权访问此子目录的用户。但是,我不想在文件中httpd.conf
为创建的每个项目添加特殊行。相反,子目录的 URL 将与组的名称匹配。
例如,我可能有项目“日历”。我的 SVN URL 将是“http://myserver.com/svn/caldendar“——并且唯一有权访问此存储库的用户将在我的groups.txt
文件中列出:
calendar:user1 user2
因此,即使某人可以通过 LDAP 进行身份验证,user1
也只user2
应允许进入。
有没有更简单的方法可以做到这一点?也许为子目录设置一个变量并说Require ldap-group variable
?
谢谢!
答案1
经过进一步调查,我找到了 SVN 访问控制的解决方案。
使用authz_svn_module
,Apache 配置中的我的 Subversion 目录如下所示:
<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!)