2018-05-21
一.centos7安裝subversion
1 yum -y install subversion 2 svn --version
二.創建倉庫
1 cd /home 2 mkdir svn 3 svnadmin create /home/svn/myproject
三.修改配置文件 參考:http://www.linuxfly.org/post/449/
成功創建的倉庫目錄下會有這幾個文件或目錄:
conf db format hooks locks README.txt
其中conf下面的authz passwd svnserve.conf就是我們要修改的配置文件
1.配置authz文件
* 權限配置文件中出現的用戶名必須已在用戶配置文件中定義。
* 對權限配置文件的修改立即生效,不必重啟svn。
用戶組格式:
[groups]
<用戶組名> = <用戶1>,<用戶2>
其中,1個用戶組可以包含1個或多個用戶,用戶間以逗號分隔。
版本庫目錄格式:
[<版本庫>:/項目/目錄]
@<用戶組名> = <權限>
<用戶名> = <權限>
其中,方框號內部分可以有多種寫法:
/,表示根目錄及以下。根目錄是svnserve啟動時指定的,我們指定為/home/svn。這樣,/就是表示對全部版本庫設置權限。
repos1:/,表示對版本庫1設置權限
repos2:/occi, ,表示對版本庫2中的occi項目設置權限
repos2:/occi/aaa, ,表示對版本庫2中的occi項目的aaa目錄設置權限
權限主體可以是用戶組、用戶或*,用戶組在前面加@,*表示全部用戶。權限可以是w、r、wr和空,空表示沒有任何權限。
1 vim /home/svn/myproject/conf/authz
2.配置passwd文件
1 vim /home/svn/myproject/conf/passwd
3.配置svnserve.conf
配置項分為以下5項:
即"write"為可讀可寫,"read"為只讀,"none"表示無訪問權限。
缺省值:read
auth-access 控制鑒權用戶訪問版本庫的權限。取值范圍為"write"、"read"和"none"。
即"write"為可讀可寫,"read"為只讀,"none"表示無訪問權限。
缺省值:write
password-db 指定用戶名口令文件名。除非指定絕對路徑,否則文件位置為相對conf
目錄的相對路徑。
缺省值:passwd
authz-db 指定權限配置文件名,通過該文件可以實現以路徑為基礎的訪問控制。
除非指定絕對路徑,否則文件位置為相對conf目錄的相對路徑。
缺省值:authz
realm 指定版本庫的認證域,即在登錄時提示的認證域名稱。若兩個版本庫的
認證域相同,建議使用相同的用戶名口令數據文件。
缺省值:一個UUID(Universal Unique IDentifier,全局唯一標示)
1 vim /home/svn/myproject/svnserve.conf
四.啟動svnserve服務
1 svnserve -d -r /home/svn/myproject
五.查看服務進程
1 netstat -ntlp
六.Windows下svn客戶端訪問
svn://ip/
注意:因為啟動svnserve時指定了/home/svn/myproject為根目錄,故訪問svn://ip/就是myproject倉庫
輸入用戶名admin密碼admin
測試一下svn commit
以上svn客戶端訪問。以下搭建Apache訪問svn
一.centos7下安裝Apache並配置運行
1 yum -y install httpd 2 vim /etc/httpd/conf/httpd.conf 3 systemctl start httpd.service
二.mod_dav_svn安裝
1 yum install mod_dav_svn
三.創建版本庫
由於之前已經創建了/home/svn/myproject。現在只需要讓Apache用戶擁有改倉庫權限即可。這里給Apache授權可更改svn目錄
1 cd /home 2 chown -R apache.apache svn/
四.配置subversion.conf
安裝mod_dav_svn模塊就會生成subversion.conf這個文件,這里更改配置讓Apache訪問subversion版本庫
1 vim /etc/httpd/conf.d/subversion.conf
#需要激活Apache加載mod_dav_svn模塊
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so<location /svn> 該/svn是虛擬節點。即訪問http://ip/svn/ 相當於訪問SVNpath目錄
SVNPath /home/svn/myproject #svn倉庫路徑
##SVNParentPath /home/svn #svn倉庫父路徑,例如/home/svn下有多個版本庫myproject1,myproject2等,可以用父目錄代替AuthType Basic # 使用基本認證方式,即用戶名、密碼認證
AuthName "myproject svn" # 在認證對話框中出現的提示信息
AuthUserFile /home/svnrepo/myproject/conf/http_passwd# 指定存放用戶名信息的文件路徑,這里是http用戶信息跟svn客戶端分開認證
AuthzSVNAccessFile /home/svnrepo/myproject/conf/authz # 指定存放用戶訪問路徑信息的文件路徑,這里跟svn客戶端共用一個authz
Require valid-user # 限定只有用戶輸入正確的用戶名和密碼后才能訪問該標簽所指向的路徑
五.認證選項
1、基本 HTTP 認證
最簡單的客戶端認證方式是通過 HTTP 基本認證機制,簡單的使用用戶名和密碼來驗證一個用戶的身份。Apache提供了一個 htpasswd 工具來管理一個用戶文件,這個文件包含用戶名和加密后的密碼,這些就是你希望賦予 Subversion 特別權限的用戶。htpasswd 可以在 Apache 的 bin 安裝目錄下找到。具體使用方法如下:
創建用戶文件:
htpasswd -c /etc/svn/passwordfile username
添加新用戶(-m 表示以MD5加密密碼):
htpasswd [-m] /etc/svn/passwordfile Newusername
更改用戶密碼:
htpasswd [-m] /etc/svn/passwordfile username
刪除用戶(要用大寫的 D ):
htpasswd –D /etc/svn/passwordfile username
#htpasswd -c /home/svn/myproject/conf/http_passwd admin New password: Re-type new password: Adding password for user admin
六.啟動httpd
1 /bin/systemctl restart httpd.service 2 netstat -ntlp
七.瀏覽器輸入http://ip/svn/訪問成功
特別注意:關於subversion配置。 其中SVNPath /home/svn/myproject 作為單個倉庫的目錄,訪問時只需http://ip/svn/就可以
SVNParentPath /home/svn/作為倉庫父目錄,svn下有多個版本庫時,需要訪問http/ip/svn/myproject才可以。
第一次配置一直訪問不了報403.就是這個父目錄權限沒搞清楚
參考:https://www.cnblogs.com/zhangqifeng/archive/2009/10/21/1587694.html
使用 SVNParentPath 代替 SVNPath 來指定多個版本庫的父目錄時,其中所有的版本庫都將按照這個策略文件配置。例如上例中 tony 將對所有版本庫里的 /tags 目錄具有讀寫權限。如果要對具體每個版本庫配置,用如下的語法:
[groups]
project1_committers = paulex, richard
project2_committers = jimmy, michel, spark, tony, Robert
[repos1:/]
* = r
@ project1_committer = rw
[repos2:/]
* = r
@ project2_committer = rw
這樣 repos1的 project1_committer 組只能對 repos1 版本庫下的文件具有寫權限而不能修改版本庫 repos2 ,同樣 repos2 的 project2_commiter 組也不能修改 repos1 版本庫的文件。