专家讲解 如何利用mod_dav_svn访问SVN仓库?

开发 项目管理
本文接着上篇文章介绍使用mod_dav_svn访问Subversion仓库方法,这是在学习SVN的过程中你可能会遇到的问题,在这里简单介绍一下,希望对你有所帮助。

上节我们介绍到了使用mod_dav_svn访问SVN仓库方法中第二部分,安装配置中的加入认证信息,本文继续介绍,另外介绍一下使用mod_dav_svn访问SVN仓库过程中应该注意的事项。下面是具体介绍,欢迎大家一起来学习。

5、进行目录访问控制
上面配置只能对Location标签内的路径执行某些动作时进行控制,若希望控制版本仓库中目录访问权限,需要利用mod_authz_svn模块。在上面的subversion.conf中,我们已经激活了该模块。
所以,接下来要做的,就是在Location标签中使用authz功能:
 
引用
AuthzSVNAccessFile/etc/svn/accesspolicy.conf
其中,AuthzSVNAccessFile指向的就是svnserve服务时使用的权限配置文件。每一段命名一个版本库和里面的路径,使用“认证用户(组)=权限”的方式描述每个用户(组)访问版本库的级别:r是只读,rw是可读写,留空是不允许访问。另外,*表示所有用户,可以用于控制匿名用户的访问SVN权限;@表示已经被分组的组名。
例如:
 
引用
#cat/etc/svn/accesspolicy.conf
[groups]
committers=paul,linuxing
developers=linuxing,hanry

[/]
*=r#用于控制匿名用户的
@committers=rw

[/dev]
@developers=rw

[/private]
*=
@comitters=r
这里定义了两个组,并对版本库中的特定路径给予了访问权限的控制。
加入AuthzSVNAccessFile选项后,需要重启httpd服务以让其生效。但权限控制文件的内容修改后马上生效,是不需重启httpd服务。
※更详细的说明,还可参考前面的日志:[原]使用Subversion的svn协议访问。下面我们看一下使用mod_dav_svn访问SVN仓库时要注意的几个问题。

三、注意事项
1、如果你有多个版本仓库,怎么办?
这时,可以使用多个Location,通过SVNPath来分别指定其路径;或者,参考配置文件中提供的,用SVNParentPath指定一个总路径,例如:
 
引用
SVNParentPath/var/www/svn
但是,你务必需要给该总路径适当的宿主权限:
 #chown-Rapache.apache/var/www/svn
否则,访问时会提示权限不足的错误。接着,你就可以使用浏览器访问http://ip/repos/stuff等每个单独的版本库了。(每个单独的版本库,其Revision信息是独立的)

◎还需要留意两点:
a、虽然使用SVNParentPath指定了总路径,而且用浏览器去访问http://ip/repos可能会看到一些浏览信息。但如果总路径并没有加入到版本仓库中管理(即没有.svn目录下的文件),则通过svn客户端去访问版本仓库时,应通过实际仓库的路径去访问,如:http://ip/repos/stuff;
b、使用mod_dav_svn模块,通过Apache访问版本仓库,是不需要启动svnserve服务的,一切都已经由dav模块做接口完成数据请求的工作,通过svn客户端以HTTP协议访问版本仓库即可。

2、能否通过一个权限配置文件对每个版本库进行访问SVN权限?
Subversion提供版本库分支管理功能。因此,在svnserve服务,或使用mod_dav_svn模块,使用Apache访问Subversion版本库时,当定义权限配置文件中,是可以对每个版本库进行权限控制的。
以mod_dav_svn方式为例,像上面提到的SVNParentPath来指定版本库的总路径,如:
 
引用
SVNParentPath=/var/www/svn
而实际上,真正的版本库是/var/www/svn下面的一些子目录,例如/var/www/svn/project1、/var/www/svn/project2,它们才是由svnadmincreate创建的版本仓库。
这时,可以在权限配置文件中,使用[repository:/path]的方式定义权限:
 
引用
[project1:/]
*=r
@project1_committer=rw
[project2:/]
*=r
@project2_committer=rw

3、Apache与svn权限控制该用哪个?
根据上面的描述,可以在Apache中使用等标签进行权限控制,也可以激活mod_authz_svn模块后,使用svnauthz格式的权限文件来控制。那该如何选择呢?
事实上,它们的区别在于权限的管理者不同,对于浏览器或svn客户端来说,除了Linux文件系统本身的访问权限外,方式是让Apache根据发送的命令进行访问管理,svnauthz则是由mod_authz_svn来进行,它们没有本质的区别,都可以用。
但由于对命令的控制比较复杂,而且容易导致误操作,因此,我更建议使用svnauthz的方式管理访问SVN权限:
 
引用
 

DAVsvn  SVNParentPath/var/www/svn  SatisfyAny  AuthTypeBasic  AuthName"AuthorizationRealm"  AuthUserFile/etc/svn/svnusers.conf  Requirevalid-user  AuthzSVNAccessFile/etc/svn/accesspolicy.conf 
这里的/etc/httpd/conf.d/subversion.conf文件中,不需要加入标签。但加入了SatisfyAny的设置,其表示在同时启用了Allow(允许)和Require的情况下,指定相关策略的,一共有两个备选值,All表示用户必须同时满足Allow和Require的条件,而Any则是满足其中之一即可。
这这里,SatisfyAny用于允许先用匿名方式尝试访问,并根据svnauthz对匿名用户的控制给予访问权限。若没有这句话,则无论svnauthz中是否加入了“*=r”的写法,匿名用户都是无法访问的。

4、svn协议与mod_authz_svn模块
svn协议,用于客户端使用svn://方式访问版本库,而mod_authz_svn模块让客户端可通过Apache访问版本库,它们分别使用不同的服务:svnserve、httpd进行访问。由于用户、组权限不同,权限管理方式也不相同,因此,不建议同时启动两种访问方式。
而易用性,管理方便的角度来分析,Apache以mod_authz_svn模块的方式访问版本库会更多人选择。(mod_authz_svn方式,使用80端口访问,并且提供https等加密传输,用于用户信息验证的密码保存方式不是明文的)。本节关于使用mod_dav_svn访问SVN仓库方法介绍完毕。

 【编辑推荐】

  1. 使用mod_dav_svn模块访问SVN仓库方法揭秘
  2. 两种方法轻松访问SVN库
  3. Http访问SVN服务器的配置方法专家指导
  4. Http访问SVN服务器配置方法大调查
  5. 术语汇编 SVN代码库简介
责任编辑:佚名 来源: svn8.com
相关推荐

2010-05-31 18:35:22

访问SVN

2010-06-01 09:18:46

SVN创建项目

2010-05-28 11:33:44

SVN代码库

2010-05-31 13:54:52

2010-05-27 16:18:58

SVN设置

2010-05-28 10:22:41

搭建SVN

2010-05-28 17:30:58

SVN分支

2010-05-27 18:31:28

SVN入门

2010-05-28 15:47:29

SVN分支

2010-05-28 15:57:20

SVN分支

2010-05-19 16:45:26

2010-06-02 16:19:28

SVN协议

2010-05-19 15:45:23

Apache+SVN权

2010-06-01 15:00:00

SVN仓库

2010-05-26 16:17:46

2010-05-31 16:29:22

SVN权限配置

2010-06-02 09:45:02

SVN学习笔记

2010-05-27 09:41:05

SVN冲突

2010-05-20 14:07:51

SVN客户端常用命令

2010-06-02 10:10:26

SVN源码管理
点赞
收藏

51CTO技术栈公众号