我用Apache2使用mod_svn_dav维护一组SVN存储库,并且我使用pwauth对用户进行身份验证(使用mod_authnz_external)。我需要对有效的用户和组svn的指令。这对我来说非常有效,但现在有必要引入更细粒度的权限--即只对某些用户重新分配对某些repos的访问。据我所知,实现这一目标的最佳(最简单)方法是使用内置的authz功能,方法是将AuthzSVNAccessFile设置为一个文件,其中列出了谁可以访问什么。这就是我要做的。我当前的站点配置如下所示(为了清晰起见,删除了日志配置等):
<VirtualHost *:81>
<Location />
allow from 127.0.0.1
DAV svn
SVNParentPath /var/svn
SVNListParentPath On
AuthType Basic
AuthName "SVN repository"
AuthBasicProvider external
AuthExternal pwauth
AuthzSVNAccessFile /var/svn/dav_authz
Require valid-user
Require group svn
</Location>
<IfModule mod_authnz_external.c>
AddExternalAuth pwauth /usr/sbin/pwauth
SetExternalAuthMethod pwauth pipe
</IfModule>
</VirtualHost>旁注:是的,*:81 -实际上,我已经在nginx和svn.mydomain.com代理之后运行了它,通过它运行到了端口81。
这就是dav_authz的样子:
[/]
myuser = rw
* =
[RepoOne:/]
myuser = rw
* =
[RepoTwo:/]
mysuser = rw
someone = rw
* =我的期望是,这将允许"myuser“读取/写入所有内容,”某人“只对RepoTwo进行读/写访问,而其他人则礼貌地告诉f-off (即使他们是有效用户和svn组中的用户)。事情不是这样的。不管我怎么尝试,除了从服务器上得到一个脾气暴躁的403之外,我什么也得不到。如果我恢复到不使用AuthzSVNAccessFile,并且我可以正常登录(如果用户是有效的,并且属于svn组),这种情况就消失了。我尝试过不同的指令顺序(例如,将/放在最后)、不同的用户名格式(某某用户、某个用户@系统、某个用户/系统、某某用户\系统)、删除回购信任和只拥有/规则、将/规则设置为*= rw、甚至清空文件、赋予www-- dav_authz的数据所有权等等--每次在更改之间重新启动Apache --每次得到相同的403。Apache日志显示myuser访问站点,403响应、错误日志只显示我的Apache重新启动。
我没有主意了,需要帮助!你能?
JS
发布于 2012-11-16 07:22:02
一些注释(来自基于路径的授权 SVNBook一章):
也就是说,您必须只在根中添加用户,在根中重新定义访问级别。这样我就会尝试像
[/]
myuser = rw
[RepoTwo:/]
someone = rw无关:我更喜欢由AuthzSVNAccessFile部分中的组而不是用户操作的可读性和可管理性,即使组在某个时刻是单用户的。
https://serverfault.com/questions/448351
复制相似问题