在個人前一篇博客: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