windows安裝基於Apache的SVN伺服器(包括SSL配置)[

來源:互聯網
上載者:User
修改曆史:
v0.1 2006-08-06
v0.2 2006-09-10 加入ssl的配置
v0.21 2006-09-13 修正2.3配置中一個錯誤(由blair1978 報告)
v0.23 2006-09-26 在附件1中添加兩個必要檔案,不然無法建立SSL認證
                         修正一個建立認證的命令錯誤
v0.26 2006-10-16 更新mod_ssl_etc.rar(openssl必需軟體包)中的mod_ssl.so,由sunbeam在
                          http://bbs.iusesvn.com/thread-418-1-1.html提供
v1.0 2007-8-19 告知已支援Apache2.2.4

轉載請注意原文出處、版本、作者(譯者)http://bbs.iusesvn.com/thread-158-1-1.html
--------------------------------------------------------------------------------

1. 引言
2. 安裝過程
2.1. 安裝Apache
2.2. 安裝Subversion
2.3. 配置
2.4. 使用SSL來保護你的伺服器

摘要

本文是TortoiseSVN1.3.5協助中關於設定管理員一節的翻譯,根據行文需要做了一些調整與增減。英文原文參見TortoiseSVN1.3.5協助的3.1. Apache Based Server。

要使用TortoiseSVN(或者其它的Subversion用戶端),你要有一個存放版本庫的地方。你可以將版本庫存放在本機,使用file://協
議來訪問,也可以將它們放在一個伺服器上,使用http://或svn://協議來訪問。兩種伺服器協議(http://和svn://)也可以被加密成

https://及svn+ssh://。下面將一步一步地為你展示如何在windows上配置這樣一個伺服器。

如果你沒有伺服器或者你只想單獨地工作,那麼將版本庫存放在本機並使用file://協議來訪問是你最好的選擇,這樣的話,你可以略過本文。

註:目前windows下的subversion已經可以跟Apache2.2.x配合,不過本文所帶的附件只在Apache2.0.x上測試過

1. 引言
在所有的Subversion伺服器配置方式中,基於Apache的是最靈活的。雖然配置起來有一點點複雜,但是它提供了其它方式所沒有的好處:

引用:

WebDAV
基於Apache配置的Subversion伺服器使用了被許多其它程式支援的WebDAV協議。舉個例子,你可以在Windows的資源管理員中將這樣的一個版本庫掛載成一個“Webfolder”,然後像檔案系統中的其它檔案夾一樣訪問它。

瀏覽版本庫
你可以在不安裝Subversion用戶端的情況下,使用瀏覽器來瀏覽版本庫中的內容。這將使得更大範圍的使用者可以訪問你的資料。

使用者驗證
你可以使用任何Apache支援的驗證機制,包括SSPI和LDAP。

安全
Apache是非常的穩定和安全,因此你的版本庫自然而然地擁有同樣的安全性。包括SSL加密。

2. 安裝過程
2.1. 安裝Apache
安裝Apache前,你要有一台運行Windows2000、Windows XP + sp1或Windows2003的電腦。

警告:請注意,沒安裝Service Pack 1的Windows XP將導致錯誤的網路資料從而破壞你的版本庫!

從http://httpd.apache.org/download.cgi
最新版本的Apache Web伺服器。確保你下載的版本大於2.0.54。2.0.54版本的Apache將不能與Subversion
1.3.xx配合工作。而且,小於2.0.54的Apache也因為在windows上的編譯存在一個bug而導致不能與subversion1.2配合
使用。

一旦你已經有了Apache2的安裝程式,你可以雙擊它,它將引導你完成整個安裝過程。請確保你輸入正確的伺服器URL(如果你的伺服器沒有DNS名稱,
你可以直接輸入IP地址)。我建議你將Apache安裝成 for all Users,on Port 80,as a
service。注意:如果你已經有一個IIS或者其它的程式使用80連接埠,安裝可能會失敗。如果是這樣,你可以到程式目錄下的Apache
Group\Apache2\conf目錄中找到檔案httpd.conf,將其中的Listen 80改成一個不用的連接埠,比如Listen
81。然後重新運行這個安裝程式,這次應該不會再有問題了。

現在你可以在你的瀏覽器中鍵入 http://loccalhost,如果呈現了一個已經配置好的網站,那麼你的Apache就安裝成功了。

警告

如果你將Apache安裝成一個服務,它將以本地system帳戶來運行。為Apache建立一個單獨的使用者來運行它將會更安全一些。

請確保運行Apache的使用者有版本庫的完整存取(右鍵版本庫目錄->屬性->安全)。要不然,使用者將無法提交他們的更改。

就算Apache以本機system來運行,你也要設定它能完全讀寫版本庫目錄。

如果沒有為Apache配置這個許可,使用者將會得到"禁止訪問"的錯誤資訊,在Apache的錯誤記錄檔中表現為錯誤500。

2.2. 安裝Subversion
從http://subversion.tigris.org/ser ... entList?folderID=91 (英文)

http://bbs.iusesvn.com/forum-7-1.html(中文)下載最新版本的Subversion。

運行Subversion安裝程式,如果安裝程式能夠識別你已經安裝了Apache,那麼你的安裝基本上就OK了。如果它不能,那麼你要做一些額外的步驟。
註:如果你先安裝Apache,再安裝Subversion,正常情況下下面的工作(2.3配置前)Subversion安裝程式已經幫你完成了
使用資源管理員,進入Sibversion的安裝目錄(通常為c:\program
files\Subversion),找到檔案httpd/mod_dav_svn.so和mod_authz_svn.so,將它們拷貝到Apache
的modules目錄(通常為c:\program files\apache group\apache2\modules)。

從Subversion的安裝目錄拷貝檔案libdb43.dll到Apache的modules目錄。

使用如記事本之類的文字編輯器編輯Apache的設定檔(通常為c:\program files\apache group\apache2\conf\httd.conf),修改以下內容:

去掉以下行的注釋(將開頭的#刪除):

複製內容到剪貼簿

代碼:

#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_module modules/mod_dav.so

在LoadModule節的最後添加以下兩行:

複製內容到剪貼簿

代碼:

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

2.3. 配置
現在,你已經安裝了Apache和Subversion,但是Apache還不知道如果處理像TortoiseSVN一樣的Subversion用戶端。
要讓Apache知道哪個URL將被Subversion使用,你要像下面這樣編輯Apache的設定檔(通常在c:\program
files\apache group\apache2\conf\httpd.conf):

在設定檔的最後添加下面這些行:

複製內容到剪貼簿

代碼:

<Location /svn>
DAV svn
SVNParentPath D:\SVN
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile D:\passwd
#AuthzSVNAccessFile D:\svnaccessfile
Require valid-user
</Location>

這樣配置表示:你所有的版本庫將位於D:\SVN目錄下,要訪問你的版本庫可以使用這樣的URL:http://MyServer/svn/,存取權限將由passwd檔案中的使用者名稱/密碼來限制。

要建立passwd檔案,可以開啟命令列(DOS視窗),將目前的目錄切換到apache2目錄(通常為c:\program files\apache group\apache2),然後打入以下命令以建立檔案:

複製內容到剪貼簿

代碼:

bin\htpasswd -c passwd <username>

此命令執行bin目錄下的htpasswd.exe來建立一個密碼檔案,重啟Apache服務。

將你的瀏覽器指向http://MyServer/svn/MyNewRepository(MyNewRepository是你之前建立的Subversion版本庫)。如果一切正常,你將被提示輸入使用者名稱密碼,輸入正確的使用者名稱密碼後你就可以看到版本庫中的內容了。

對你剛剛輸入的apache配置作一些簡短的說明:

引用:

<Location /svn>

意味著可以通過像這樣的URL(http://MyServer/svn)來訪問Subversion版本庫

DAV svn

告訴Apache哪個模組負責服務像那樣的URL--在這裡就是Subversion模組

SVNListParentPath on

在Subversion 1.3及更高版本中,這個指標使得Subversion列出由SVNParentPath指定的目錄下所有的版本庫

SVNParentPath D:\SVN

告訴Subversion在目錄D:\SVN下尋找版本庫

AuthType Basic

啟用基本的驗證,比如使用者名稱/密碼對

AuthName "Subversion repositories"

當一個驗證對話方塊彈出時,告訴使用者這個驗證是用來做什麼的

AuthUserFile D:\passwd

指定D:\passwd用為密碼檔案用來驗證使用者的使用者名稱及密碼

AuthzSVNAccessFile D:\svnaccessfile

指定D:\svnaccessfile來限定各個使用者或組在版本庫中目錄的存取權限

Require valid-user

限定使用者只有輸入正確的使用者名稱及密碼後才能訪問這個路徑

----------------------------------------

上面的配置僅僅是一個簡單的樣本。你還可以對Apache進行許許多多的配置。

1如果你想讓所有使用者對版本庫都有讀的許可權而只有特定的使用者才有寫的許可權,你可以將這行

複製內容到剪貼簿

代碼:

Require valid-user

改為

複製內容到剪貼簿

代碼:

<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>

2上面的配置使用了passwd檔案將你所有的版本庫作為一個單元來限定存取權限。如果你想獲得更多的控制,如限定某個使用者可以訪問版本庫中的哪個目錄,可以把下面這行的#去掉:

複製內容到剪貼簿

代碼:

#AuthzSVNAccessFile D:\svnaccessfile


後用文字編輯器建立一個Subversion授權檔案。Apache將確保只有有效使用者可以訪問你的/svn位置,然後將使用者名稱傳到
AuthzSVNAccessFile模組,這樣可以依據Subversion授權檔案得到更精細的許可權控制。注意,路徑將被指定為[庫:路徑]或者簡單
的[路徑]。如果你不明確指定一個庫,訪問規則將應用到由SVNParentPath指定的目錄下所有的版本庫中。一個授權檔案例子可能像這樣:

複製內容到剪貼簿

代碼:

[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

2.4. 使用SSL來保護你的伺服器
以上的工作已經可以讓你的svn伺服器正常工作了。
如果你要更安全一些,可以配置ssl來保護你的伺服器。
因為美國出口限制,預設安裝的Apache伺服器不支援SSL。但是你自己可以很容易地在其它地方下載到所需要的模組,然後安裝它。

首先你需要SSL的必需檔案。你可以http://hunter.campbus.com/ 或這裡找到相應的軟體包(或者下載本主題的附件1:
mod_ssl_etc.rar (595.45 KB)

mod_ssl_etc.rar (595.45 KB)
下載次數: 16222006-10-16 15:30

)。然後只要將包解開將其中的mod_ssl.so拷到Apache的modules目錄、openssl.exe、libeay32.dll、ssleay32.dll拷到bin目錄、conf/ssl.conf拷到conf目錄。

在Apache的conf目錄中用文字編輯器開啟ssl.conf。

將下面這些行用#注釋掉:

複製內容到剪貼簿

代碼:

DocumentRoot "c:/apache/htdocs"
ServerName www.example.com:443
ServerAdmin [email]you@example.com[/email]
ErrorLog logs/error_log
TransferLog logs/access_log

修改

複製內容到剪貼簿

代碼:

SSLCertificateFile conf/ssl.crt/server.crt

複製內容到剪貼簿

代碼:

SSLCertificateFile conf/ssl/my-server.cert

修改

複製內容到剪貼簿

代碼:

SSLCertificateKeyFile conf/ssl.key/server.key

複製內容到剪貼簿

代碼:

SSLCertificateKeyFile conf/ssl/my-server.key

修改

複製內容到剪貼簿

代碼:

SSLMutex file:logs/ssl_mutex

複製內容到剪貼簿

代碼:

SSLMutex default

刪除以下兩行(如果有):

複製內容到剪貼簿

代碼:

<IfDefine SSL>
</IfDefine>

開啟Apache設定檔(httpd.conf),去掉這行的注釋

複製內容到剪貼簿

代碼:

#LoadModule ssl_module modules/mod_ssl.so

Openssl需要一個設定檔。你可以從這裡下載一個可工作的版本http://tud.at/programm/openssl.cnf (或者本主題附件2:
openssl.cnf.rar (1.21 KB)

openssl.cnf.rar (1.21 KB)
下載次數: 10572006-9-10 19:11

)。將它儲存到bin/openssl.cnf。

下面你要建立一個SSL認證。你可以開啟一個命令列視窗,然後cd到Apache安裝目錄(比如C:\program files\apache group\apache2),敲入以下命令:

複製內容到剪貼簿

代碼:

bin\openssl req -config bin\openssl.cnf -new -out my-server.csr

你將被問及一句口令短語。請注意,不要使用簡單的幾個詞,而應該輸入一整個句子,比如一篇詩詞的一部份,越長越好。同樣,你還要輸入你的伺服器URL。然後其它的問題都是可選問答的,不過我建議你也將它們填充。

下一步,敲入以下命令:

複製內容到剪貼簿

代碼:

bin\openssl rsa -in privkey.pem -out my-server.key

以及(注意,只有一行)

複製內容到剪貼簿

代碼:

bin\openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 4000

這樣將建立一個4000天后才到期的認證。最後敲入:

複製內容到剪貼簿

代碼:

bin\openssl x509 -in my-server.cert -out my-server.der.crt -outform DER

這些命令在Apache目錄下建立了一些檔案(my-server.der.crt, my-server.csr, my-server.key, .rnd, privkey.pem, my-server.cert)。將這些檔案拷貝到目錄conf/ssl

(比如C:\program files\apache group\apache2\conf\ssl),如果目錄ssl不存在,你必須先建立一個。

重啟Apache服務。

現在可以用類似這樣的url來訪問你的版本庫了https://servername/svn/project

引用:

強制通過SSL來訪問

當你配置了SSL來提高版本庫安全時,你可能想禁用無SSL的http訪問方式,而只允許通過https訪問。要達到這種效果,你要在<Location>塊加入另外一個指標SSLRequireSSL。

一個樣本<Location>塊可能像這樣:

<Location /svn>

DAV svn

SVNParentPath D:\SVN

SSLRequireSSL

AuthType Basic

AuthName "Subversion repositories"

AuthUserFile passwd

#AuthzSVNAccessFile svnaccessfile

Require valid-user

</Location>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.