1. 程式人生 > >svn環境快速搭建(svn|http|ldap)+ifSVNAdmin

svn環境快速搭建(svn|http|ldap)+ifSVNAdmin

linux 運維 svn

SVN服務快速部署:
下面講述了3種認證方式:svn、http、ldap

1、svn認證

#查看系統版本信息
cat /etc/redhat-release
uname -rm
#安裝軟件並啟動
yum install subversion -y
mkdir -p /application/{svndata,svnpasswd}
/usr/bin/svnserve -d -r /application/svndata --pid-file=/application/svndata/svn.pid
ps -ef|grep svn
netstat -tulpn|grep 3690
lsof -i tcp:3690

svnadmin create /application/svndata/sadoc
ls /application/svndata/sadoc/conf
cd /application/svndata/sadoc/conf
cp -a svnserve.conf svnserver.conf.$(date +%F)

sed -i ‘s/# anon-access = read/anon-access = none/g‘ /application/svndata/sadoc/conf/svnserve.conf
sed -i ‘s/# auth-access = write/auth-access = write/g‘ /application/svndata/sadoc/conf/svnserve.conf

sed -i ‘s@# authz-db = authz@authz-db = /application/svnpasswd/authz@g‘ /application/svndata/sadoc/conf/svnserve.conf
sed -i ‘s@# password-db = passwd@password-db = /application/svnpasswd/passwd@g‘ /application/svndata/sadoc/conf/svnserve.conf

cp authz passwd /application/svnpasswd/
cd /application/svnpasswd/

#配置密碼文件:
vim /application/svnpasswd/passwd
nick = china123
adamon = america123
等號前是SVN賬號,等號後是SVN密碼(明文未加密)
更改svnserve.conf時,需要重啟svn,更改passwd和authz不需要重啟

快速設置:
echo "nick = china123" >> /application/svnpasswd/passwd
tail -1 /application/svnpasswd/passwd

#配置授權文件:
vim /application/authz
授權主體:
1、單一SVN用戶
2、SVN用戶組(在[gruops]下定義用戶組)
3、別名用戶(在[aliases]下定義別名)
4、$authenticated變量(該變量代表所有通過驗證的用戶)
5、$anonymous變量(該變量代表匿名用戶)
6、 * 表示任何人
權限:
w、r、rw、空(‘‘)

[aliases]

[groups]
組名 = 用戶1,用戶2,用戶3......

格式:
[<版本庫>:/項目/目錄]
[/] 根目錄是svnserve啟動時指定的,前面指定為/application/svndata, [/] 表示對全部版本庫設置權限
[repos:/sadoc] 表示對版本庫repos中的sadoc項目設置權限
[repos:/sadoc/test] 表示對版本庫repos中的sadoc項目的test目錄設置權限
@<用戶組名> = <權限>
<用戶名> = <權限>

[sadoc:/] #表示對版本庫sadoc的根目錄授權
用戶名 = r #為該用戶賦予對sadoc庫根目錄的只讀權限
@組名 = rw #為該組中的所有戶賦予對sadoc庫根目錄的讀寫權限

chmod 700 -R /application/svnpasswd
pkill svnserve
/usr/bin/svnserve -d -r /application/svndata
netstat -tunlp|grep 3690

上述配置是通過svn協議訪問(密碼是明文) svn://
在TortoiseSVN客戶端上使用svn://協議進行訪問
第一次checkout時,會彈出一個Checkout窗口
URL of repository: 輸入svn://10.0.0.20/sadoc #10.0.0.20時svn服務器所在地址,sadoc時使用svnadmin create創建的版本庫名稱
Checkout directory: 輸入winddows本地端的本庫庫

2、http認證
下面是通過http(s)訪問
yum install httpd mod_dav_svn php php-devel -y
/etc/init.d/httpd start
netstat -tunlp|grep httpd
#安裝後會在/etc/httpd/conf.d/目錄下生成一個subversion.conf的配置文件
cd /etc/httpd/conf.d/
cp subversion.conf{,.date +%F}

vim subversion.conf #修結果如下
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /repos> #這裏的/repos可隨意指定,指定成什麽訪問時就要用什麽,訪問http://localhost/repos/sadoc (必須使用這種格式訪問,sadoc是使用svnadmin創建的版本庫名稱)
DAV svn
SVNParentPath /application/svndata #svn的根目錄,使用svnserve啟動時使用-r參數指定的目錄
#

Limit write permission to list of valid users.

<LimitExcept GET PROPFIND OPTIONS REPORT>

Require SSL connection for password protection.

SSLRequireSSL

#
AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /etc/httpd/conf.d/.svnuser
AuthzSVNAccessFile /etc/httpd/conf.d/authz
Require valid-user

</LimitExcept>

</Location>

htpasswd -cb /etc/httpd/conf.d/.svnuser nick china123
chown apache:apache /etc/httpd/conf.d/.svnuser
chmod 600 /etc/httpd/conf.d/.svnuser #這裏使用600,而不使用400,主要是因為後文要配置ifSVNAmin來管理SVN,這個軟件管理SVN會使用apache用戶讀寫這個文件,如果不適用ifSVNAdmin可使用400權限

cp /application/svnpasswd/authz /etc/httpd/conf.d/authz #授權文件最好和用戶認證文件.svnuser放在一個目錄下,如apache的配置文件目錄中
chown apache:apache /etc/httpd/conf.d/authz
chmod 600 /etc/httpd/conf.d/authz #這裏使用600,而不使用400,主要是因為後文要配置ifSVNAmin來管理SVN,這個軟件管理SVN會使用apache用戶讀寫這個文件,如果不適用ifSVNAdmin可使用400權限

chown -R apache:apache /application/svndata
apachectl graceful

pkill svnserve
/usr/bin/svnserve -d -r /application/svndata
netstat -tunlp|grep 3690

通過上述設置即可通過http(s)協議來訪問svn
同樣適用TortoiseSVN客戶端,在第一次CheckOut時,
URL of repository: 輸入http://10.0.0.20/repos/sadoc/ #註意這裏與svn協議不同的是訪問地址多了repos,這是配置mod_dav_svn模塊時指定的網絡路徑,sadoc是網絡路徑下實體存在的版本庫(svnadmin創建的)
#10.0.0.20時svn服務器所在地址,repos是配置apache指定的網絡路徑,sadoc時使用svnadmin create創建的版本庫名稱
Checkout directory: 輸入winddows本地端的本庫庫

註意:
1、雖然這樣已經可以通過apache的用戶認證文件(.svnuser)作為svn的認證用戶,但是為認證文件中的用戶授權時,仍然要在authz文件中進行,授權的具體細節見上文
2、使用http形式訪問svn,務必將用戶認證配置文件(.svnuser)和授權文件與apache的配置文件放在一起(放在其他目錄中可能會導致apache無法讀取這兩個文件,導致訪問失敗)
3、雖然在通過svn訪問的基礎上配置http訪問,但是之前使用svn訪問的配置仍然生效,因此可同時使用svn和http訪問(只不過二者使用的認證文件不同),但是授權文件需要使用同一個,否則管理起來麻煩(盡量不要同時使用,要麽只使用svn,要麽只使用http,要麽只使用ldap,避免管理混亂)
4、使用http訪問時,盡可能將svn的根目錄放在apache的站點目錄(/var/www)下,當然也可以不這樣,如我們上面的操作就沒有這樣做,但是用戶認證文件(.svnuser)和授權文件authz要和apache配置文件放在同一目錄便於管理
5、註意使用tortoiseSVN客戶端時,使用svn協議和http協議路徑的不同,http協議輸入路徑IP地址後需要先接mod_dav_svn模塊配置文件中配置的網絡路徑,然後再接使用svndamin創建的代碼庫名稱

3、使用ldap認證
見ldap部分

4、使用ifSVNAdmin管理SVN配置
註意:這裏的配置和上面的通過http訪問svn沒有關系,這裏配置用於管理SVN(添加用戶,授權等);上文的配置是讓svn支持httpd協議訪問
首選在apache中建立一個虛擬主機
[root@mo1 conf.d]# vim vhost.conf
Listen 8080
<Virtualhost 10.0.0.20:8080>
Servername 10.0.0.20:8080
DocumentRoot /var/www/html/svnadmin
ErrorLog logs/svnhost-err.log
CustomLog logs/svnhost-access.log common
</Virtualhost>

mkdir -p /var/www/html/svnadmin
cd /var/www/html/svnadmin
wget http://sourceforge.net/projects/ifsvnadmin/files/svnadmin-1.6.2.zip
unzip svnadmin-1.6.2.zip
mv iF.SVNAdmin-stable-1.6.2/* ./
chmod -R 777 data/

apachectl -t
apachectl graceful
在瀏覽器中輸入 10.0.0.20:8080
將會進入ifsvnAdmin的管理配置界面
進入後分別填入在/etc/httpd/conf.d/subversion.conf文件中指定的:
授權文件的路徑 :/etc/httpd/conf.d/authz
認證文件的路徑:/etc/httpd/conf.d/.svnuser
SVNParentPath指令指定的代碼庫父目錄的路徑:/application/svndata
Linux系統中svn指令的絕對路徑:/usr/bin/svn
Linux系統中svnadmin指令的絕對路徑:/usr/bin/svnadmin

然後單擊“Save Configuration”
彈出提示“並無權限!請配置用戶的admin權限”
在用戶下拉列表中選擇一個SVN用戶作為,ifSVNAdmin網頁程序的超級管理員
單擊“保存”,進入HOME歡迎界面
代碼倉庫——列表:可查看svn上已經建立的所有的代碼倉庫
代碼倉庫——添加:輸入代碼庫的名稱(相當於使用avnadmin create 在代碼庫根目錄下創建一個代碼庫);選擇數據庫類型(默認FSFS或BDB)
選擇要創建的庫的結構:
1、無預定義結構:僅僅創建一個代碼庫,庫中無任何內容
2、但項目結構:創建一個代碼庫,同時在庫中創建3個目錄“trunk”,“branches”,“tags”
3、多項目結構:需要輸入項目名稱,會在代碼庫中以這個項目名稱創建子目錄,再在這個子目錄中創建3個目錄“trunk”,“branches”,“tags”
用戶——列表:列出svn中所有的用戶,有個“選擇角色”分配選項,主要用用來為某個用戶分配在這個ifSVNAdmin界面中能夠進行哪些操作的權限
用戶——添加:輸入用戶名及密碼,即可創建一個svn用戶
訪問路徑——權限:選擇用戶、選擇權限、選擇代碼庫,即可為該用戶分配相應的權限(用戶訪問代碼庫的權限)

組——列表:列出所有的組
組——添加:創建一個組
組——關系:可以批量選擇用戶添加到某個組中

訪問路徑——列表:列出“svn配置信息的訪問路徑的列表”,可設置某個用戶(項目經理)能夠訪問某個代碼庫的根路徑
訪問列表——添加:使用<RepoName>:/<path>格式添加代碼庫中的一個路徑(該路徑代碼中必須存在,否則即使添加了且分配了權限,因不存在也無法訪問),若用 "/" 作為路徑,會包含該代碼倉庫的所有權限 .
訪問路徑——權限:為用戶或組分配訪問某個路徑(代碼庫)的權限
設置——後端:設置認證授權文件以及指令的,前文中第一步進入界面時已經做過
Session——修改密碼:修改超級管理員的登錄密碼

svn環境快速搭建(svn|http|ldap)+ifSVNAdmin