在个人前一篇博客:centos里面搭建svnf服务器讲述了如何使用Subversion提供的svnserve服务,经过svn://协议访问远端的仓库数据。实际上,Subversion的设计包括了一个抽象的网络层,这意味着版本库是能够经过各类服务器进程访问的。理论上来会说,Subversion可使用无限数量的网络协议来实现,甚至能够直接用perl利用相关的接口来编写自定义协议。但平常中,用得最多的就是svn://协议,和用mod_dav_svn模块经过Apache服务进行访问。
经过HTTP协议访问版本库是Subversion的亮点之一,这种方式具有许多svnserve服务器所没有的特性,使用上更加灵活。apache
关于mode_day_svn模块:vim
因为Subversion须要版本化的控制,所以标准的HTTP协议不能知足需求。要让Apache与Subversion协同工做,就要使用WebDAV(Web-based Distributed Authoring and Versiong)Web分布式创做和版本控制协议。WebDAV是HTTP 1.1的扩展,关于WebDAV的规范和工做原理,能够参考IETF RFC 2518。 mod_dav_san模块就是做为Subversion与Apache之间的接口,经过它,Apache就能够访问版本库,而且可让客户端也使用HTTP的扩展协议WebDAV/DeltaV进行访问。
yum install -y httpd
[root@localhost ~]# httpd -version Server version: Apache/2.2.15 (Unix) Server built: May 11 2016 19:28:33
yum install mod_dav_svn
前往 /etc/httpd/modules/ 下,检查是否包含mod_dav_svn.so和mod_authz_svn.so,若是有,mod_dav_svn安装成功。centos
chown -R apache.apache /home/svn/repo0
须要激活Apache加载mod_dav_svn模块。修改/etc/httpd/conf.d/subversion.conf配置文件的内容为:
# 加载相应的模块浏览器
vim /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so DAV svn SVNPath /home/svn/repo0
而后重启apache服务器,访问浏览器能够看到:服务器
上面定义的版本仓库,默认是任何人均可以匿名访问,而且拥有彻底的写入、读取、修改、提交、删除版本库中信息的权限。
所以,咱们须要加入认证信息以作权限的管理。HTTP协议版本就提供了简单的客户端认证方式,这可经过Apache配置完成。网络
Apache提供了一个htpasswd工具来管理,使用该工具能够建立一个文件,其中存放着用户名和加密后的密码信息。而这些就是Subversion能够引用的用户了,根据这些用户信息,配合mod_authz_svn模块便可进行目录的访问控制。分布式
htpasswd -c /home/svn/svn.passwd xiajun New password: Re-type new password: Adding password for user xiajun
还能够利用htpasswd添加用户,或修改密码,删除用户名等:
ide
# htpasswd -m /home/svn/svn.passwd lisi
# htpasswd -m /home/svn/passwd OldUserName # htpasswd -D /home/svn/passwd OldUserName
-m 是可选的参数,当用-c建立用户名信息文件后,便可修改或添加用户信息。svn
<Location /repos> DAV svn SVNPath /home/svn/repo0 # Limit write permission to list of valid users. #<LimitExcept GET PROPFIND OPTIONS REPORT> #注意这个要注释掉(这样就只有咱们制定的用户能够看到)不然全部的用户能够浏览下载 AuthType Basic #使用基本认证方式,即用户名、密码认证 AuthName "Authorization Realm" # 在认证对话框中出现的提示信息 AuthUserFile /home/svn/svn.passwd # 指定上面建立好的存放用户名信息的文件路径 Require valid-user # 限定只有用户输入正确的用户名和密码后才能访问该标签所指向的路径 #</LimitExcept> </Location>
主要用于控制哪些用户对于哪些目录有哪些权限:工具
vim /home/svn/accesspolicy.conf
写入内容以下:
### This file is an example authorization file for svnserve. ### Its format is identical to that of mod_authz_svn authorization ### files. ### As shown below each section defines authorizations for the path and ### (optional) repository specified by the section name. ### The authorizations follow. An authorization line can refer to: ### - a single user, ### - a group of users defined in a special [groups] section, ### - an alias defined in a special [aliases] section, ### - all authenticated users, using the '$authenticated' token, ### - only anonymous users, using the '$anonymous' token, ### - anyone, using the '*' wildcard. ### ### A match can be inverted by prefixing the rule with '~'. Rules can ### grant read ('r') access, read-write ('rw') access, or no access ### (''). [groups] team0=xiajun team1=lisi #注意表示这个库下面全部的东西均可以访问,用[repo0:/]这种方式不对,由于SVNPath是指向具体路径,若是apache里面的配置文件是指向SVNParentPath的话,才用[repo0:/]表示哪一个库的路径 [/] #表示根目录及全部的的目录team0组有读写权限,而team1组只有读权限 @team0=rw @team1=r
将这个权限控制文件的路径配置apache的配置文件里面
<Location /repos> DAV svn SVNPath /home/svn/repo0 AuthType Basic AuthName "Authorization Realm" AuthUserFile /home/svn/svn.passwd Require valid-user AuthzSVNAccessFile /home/svn/accesspolicy.conf </Location>
而后重启apache,权限文件生效,能够访问,发现xiajun有读写权限,而lisi只有读权限。至此基本完成。
参考文章:
http://www.uml.org.cn/pzgl/200908078.asp
http://my.oschina.net/u/206356/blog/287635