深入剖析:Subversion和Apache2.0.x完美結(jié)合之下篇
本文接著上篇文章繼續(xù)介紹Subversion和Apache2.0.x的結(jié)合,上面的配置僅僅是一個(gè)簡(jiǎn)單的示例。你還可以對(duì)Apache進(jìn)行許許多多的配置。
1.如果你想讓所有用戶對(duì)版本庫都有讀的權(quán)限而只有特定的用戶才有寫的權(quán)限,你可以將這行
CODE:Requirevalid-user改為
CODE:
Requirevalid-user
2.上面的配置使用了passwd文件將你所有的版本庫作為一個(gè)單元來限定訪問權(quán)限。如果你想獲得更多的控制,如限定某個(gè)用戶可以訪問版本庫中的哪個(gè)目錄,可以把下面這行的#去掉:
CODE:
#AuthzSVNAccessFileD:\svnaccessfile
然后用文本編輯器創(chuàng)建一個(gè)Subversion授權(quán)文件。Apache將確保只有有效的用戶可以訪問你的/svn位置,然后將用戶名傳到
AuthzSVNAccessFile模塊,這樣可以依據(jù)Subversion授權(quán)文件得到更精細(xì)的權(quán)限控制。注意,路徑將被指定為[庫:路徑]或者簡(jiǎn)單的[路徑]。如果你不明確指定一個(gè)庫,訪問規(guī)則將應(yīng)用到由SVNParentPath指定的目錄下所有的版本庫中。一個(gè)授權(quán)文件例子可能像這樣:
CODE:[groups]
admin=john,kate
devteam1=john,rachel,sally
devteam2=kate,peter,mark
docs=bob,jane,mike
training=zak
#為所有庫指定默認(rèn)訪問規(guī)則
#所有人可以讀,管理員可以寫,危險(xiǎn)分子沒有任何權(quán)限
[/]*=r
@admin=rw
dangerman=
#允許開發(fā)人員可以完全訪問他們的項(xiàng)目版本庫
[proj1:/]
@devteam1=rw
[proj2:/]
@devteam2=rw
[bigproj:/]
@devteam1=rw
@devteam2=rw
trevor=rw
#文檔編寫人員對(duì)所有的docs目錄有寫權(quán)限
[/trunk/doc]
@docs=rw
#培訓(xùn)人員可以完全訪問培訓(xùn)版本庫
[TrainingRepos:/]
@training=rw
3.使用SSL來保護(hù)你的服務(wù)器
在所有的Subversion服務(wù)器配置方式中,Subversion和Apache2.0.x的結(jié)合是最靈活的。因?yàn)槊绹?guó)出口限制,默認(rèn)安裝的Apache服務(wù)器不支持SSL。但是你自己可以很容易地在其它地方下載到所需要的模塊,然后安裝它。首先你需要SSL的必需文件。你可以http://hunter.campbus.com/或這里找到相應(yīng)的軟件包(或者下載本主題的附件1:
附件:mod_ssl_etc.rar(2006-10-1615:30,595.45K)
該附件被下載次數(shù)110)。然后只要將包解開將其中的mod_ssl.so拷到Apache的modules目錄、openssl.exe、libeay32.dll、ssleay32.dll拷到bin目錄、
conf/ssl.conf拷到conf目錄。
在Apache的conf目錄中用文本編輯器打開ssl.conf。
將下面這些行用#注釋掉:
CODE:DocumentRoot"c:/apache/htdocs"
ServerNamewww.example.com:443
ServerAdminyou@example.com
ErrorLoglogs/error_log
TransferLoglogs/access_log修改
CODE:SSLCertificateFileconf/ssl.crt/server.crt為
CODE:SSLCertificateFileconf/ssl/my-server.cert修改
CODE:SSLCertificateKeyFileconf/ssl.key/server.key為
CODE:SSLCertificateKeyFileconf/ssl/my-server.key修改
CODE:SSLMutexfile:logs/ssl_mutex為
CODE:SSLMutexdefault
刪除以下兩行(如果有,我認(rèn)為有錯(cuò),刪掉之后apache無法啟動(dòng)):
CODE:
打開Apache配置文件(httpd.conf),去掉這行的注釋
CODE:#LoadModulessl_modulemodules/mod_ssl.so
Openssl需要一個(gè)配置文件。你可以從這里下載一個(gè)可工作的版本http://tud.at/programm/openssl.cnf(或者本主題附件2:
附件:openssl.cnf.rar(2006-9-1019:11,1.21K)
該附件被下載次數(shù)84)。將它保存到bin/openssl.cnf。
下面你要?jiǎng)?chuàng)建一個(gè)SSL證書。你可以打開一個(gè)命令行窗口,然后cd到Apache安裝目錄(比如C:\programfiles\apachegroup\apache2),敲入以下命令:
CODE:bin\opensslreq-configbin\openssl.cnf-new-outmy-server.csr
你將被問及一句口令短語。請(qǐng)注意,不要使用簡(jiǎn)單的幾個(gè)詞,而應(yīng)該輸入一整個(gè)句子,比如一篇詩詞的一部份,越長(zhǎng)越好。同樣,你還要輸入你的服務(wù)器URL。然后其它的問題都是可選問答的,不過我建議你也將它們填充。
下一步,敲入以下命令:CODE:bin\opensslrsa-inprivkey.pem-outmy-server.key
以及(注意,只有一行)CODE:bin\opensslx509-inmy-server.csr-outmy-server.cert-req-signkeymy-server.key-days4000
這樣將創(chuàng)建一個(gè)4000天后才過期的證書。最后敲入:
CODE:bin\opensslx509-inmy-server.cert-outmy-server.der.crt-outformDER
這些命令在Apache目錄下創(chuàng)建了一些文件(my-server.der.crt,my-server.csr,my-server.key,.rnd,privkey.pem,my-server.cert)。將這些文件拷貝到目錄conf/ssl(比如C:\programfiles\apachegroup\apache2\conf\ssl),如果目錄ssl不存在,你必須先創(chuàng)建一個(gè)。
重啟Apache服務(wù)。
現(xiàn)在可以用類似這樣的url來訪問你的版本庫了https://servername/svn/project
QUOTE:強(qiáng)制通過SSL來訪問
當(dāng)你配置了SSL來提高版本庫安全時(shí),你可能想禁用無SSL的http訪問方式,而只允許通過https訪問。要達(dá)到這種效果,你要在
一個(gè)示例
SVNParentPathD:\SVN
SSLRequireSSL
AuthTypeBasic
AuthName"Subversionrepositories"
AuthUserFilepasswd
#AuthzSVNAccessFilesvnaccessfile
Requirevalid-user
以上介紹Subversion和Apache2.0.x結(jié)合的配置為Apache多庫方式,即一個(gè)location可以同時(shí)為多個(gè)版本庫服務(wù),
假設(shè)你的ip為192.168.0.1,在D:\SVN目錄下建了兩個(gè)版本庫,proj1和proj2
可以分別用下面兩個(gè)url來訪問你的版本庫
CODE:http://192.168.0.1/svn/proj1
CODE:http://192.168.0.1/svn/proj1
還有一種配置方式為Apache單庫方式,即一個(gè)location只能為一個(gè)版本庫服務(wù),
配置時(shí)只要將上面的SVNParentPath改為SVNPath,同時(shí)將后面的路徑由版本庫的父目錄改為版本庫的目錄
如:
CODE:
SVNPathD:\SVN\proj1
AuthTypeBasic
AuthName"Subversionrepositories"
AuthUserFileD:\passwd
#AuthzSVNAccessFileD:\svnaccessfile
Requirevalid-user
Subversion和Apache2.0.x的結(jié)合情況,這里已經(jīng)介紹完畢。
【編輯推薦】