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