欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
用 Apache 和 Subversion 搭建安全的版本控制環(huán)境

作 為新一代的開(kāi)源版本控制工具,Subversion 以其目錄版本化、原子提交、版本化的元數據、更加有效的分支和標簽等優(yōu)良特性,正逐漸受到開(kāi)源軟件社區的重視,并有望取代 CVS,成為開(kāi)源軟件開(kāi)發(fā)中版本控制的首選系統。在服務(wù)器端,Subversion 最大的獨特之處,在于它可以通過(guò)一個(gè)擴展模塊與 Apache 的 HTTP 服務(wù)器相結合,實(shí)現很多高級的管理功能和安全特性。與 CVS 相比,Subversion 實(shí)現了更加先進(jìn)和安全的用戶(hù)認證功能。在 Apache 的支持下,用戶(hù)可以通過(guò) HTTP 協(xié)議訪(fǎng)問(wèn)版本庫,管理員可以對用戶(hù)訪(fǎng)問(wèn) HTTP 的權限做出具體的設置,同時(shí) Subversion 還可以獲得 SSL 傳輸加密,用戶(hù)數據加密,以及目錄級的訪(fǎng)問(wèn)控制等特性。

本文將在服務(wù)器端配置工作的角度,結合作者在實(shí)際開(kāi)發(fā)工作當中的配置實(shí)例,介紹 Subversion 服務(wù)器端的基本配置和管理,以及如何將 Subversion 與 Apache 結合,實(shí)現一些高級管理功能。

Subversion 簡(jiǎn)介

在開(kāi)源軟件的開(kāi)發(fā)過(guò)程當中,由于開(kāi)發(fā)方式自由和開(kāi)發(fā)人員分散這些特性,版本控制問(wèn)題一直是關(guān)系到項目成敗的重要問(wèn)題。沒(méi)有版本控制系統的支持,開(kāi)源軟件的開(kāi)發(fā)過(guò)程就是混亂和不可控制的。

長(cháng) 期以來(lái),CVS 作為一種普遍采用的開(kāi)源版本控制工具,在很多的開(kāi)源軟件項目當中充當了重要的角色。在 Eclipse 當中,更是把 CVS 作為一個(gè)默認的插件,與 Ant,JUnit 等工具并列在一起,成為 Eclipse 軟件開(kāi)發(fā)的基本工具。近年來(lái),隨著(zhù)開(kāi)源社區的發(fā)展,一種功能更加強大的開(kāi)源版本控制工具逐漸進(jìn)入了人們的視野,那就是 Subversion,憑借著(zhù)更為優(yōu)秀的特性,Subversion 正在逐步取代 CVS,成為新一代的開(kāi)源版本控制工具。

相 比 CVS,Subversion 中的目錄、文件以及改名等元數據都是被版本化的,例如文件的改名、拷貝等等操作;而且,在 Subversion 中,提交操作是不可分割的,修訂版本號是基于每次提交操作而非文件;另外,Subversion 可以獨立運行,有著(zhù)輕量級的分支(Branching)與標簽(Tagging)操作,版本庫可以采用數據庫(Berkeley DB)或者是使用特定格式的文件進(jìn)行存儲,對二進(jìn)制文件進(jìn)行處理更為有效;最后,Subversion 工具以及相關(guān)插件都有著(zhù)很好的國際化支持,可以支持包括簡(jiǎn)體中文在內的多種語(yǔ)言版本,方便全球各地的開(kāi)發(fā)人員。這些優(yōu)秀的新特性,使得 Subversion 成為開(kāi)源社區目前的最佳選擇。

對于普通用戶(hù),即應用程序開(kāi)發(fā)者而言,尤其是對 Eclipse 的用戶(hù)而言,Subversion 的使用十分的簡(jiǎn)單。通過(guò)官方提供的 Eclipse 插件 Subclipse,用戶(hù)可以在 Eclipse 里面很方便的使用 Subversion 客戶(hù)端的各項基本功能。具體的客戶(hù)端設置和使用方法,請參考 Subversion 官方網(wǎng)站Subclipse 官方網(wǎng)站。簡(jiǎn)單說(shuō)來(lái),在 Eclipse 中使用 Subversion 插件的基本功能,如更新、提交、同步、分支等等,基本上同使用 Eclipse 自帶的 CVS 插件一模一樣,這樣,用戶(hù)就可以從 CVS 方便的轉移到 Subversion。

目前,Subversion 已經(jīng)升級到 1.3.2 版本,相關(guān)下載、特性說(shuō)明和詳細使用手冊可以在 Subversion 主頁(yè)上找到。

簡(jiǎn)單的版本庫管理

有了簡(jiǎn)單易用的客戶(hù)端,大部分的用戶(hù)都可以輕松使用 Subversion 了,不過(guò),作為服務(wù)器端的管理人員,還必須進(jìn)一步了解服務(wù)器端的基本配置管理,才可以充分利用 Subversion 的各項優(yōu)秀特性。

版本庫創(chuàng )建

Subversion 的版本庫(repository),就是位于服務(wù)器端,統一管理和儲存數據的地方。本文中,我們以 Linux 為例,介紹在服務(wù)器端配置和管理 Subversion 版本庫的基本方法。

要創(chuàng )建一個(gè)版本庫,首先要確定采用哪種數據存儲方式。在 Subversion 中,版本庫的數據存儲有兩種方式,一種是在 Berkeley DB 數據庫中存放數據;另一種是使用普通文件,采用自定義的格式來(lái)儲存,稱(chēng)為 FSFS。

兩種存放方式各有優(yōu)缺點(diǎn),讀者可以參考 http://svnbook.org/ 上面的文檔來(lái)了解兩者詳細的比較和區別,這里,我們僅引用上述文檔當中的簡(jiǎn)單對照表,給出一個(gè)簡(jiǎn)明的比較。


表1 兩種版本庫數據存儲對照表
特性Berkeley DBFSFS
對操作中斷的敏感 很敏感;系統崩潰或者權限問(wèn)題會(huì )導致數據庫“塞住”,需要定期進(jìn)行恢復。 不敏感
可只讀加載 不能 可以
存儲平臺無(wú)關(guān) 不能 可以
可從網(wǎng)絡(luò )文件系統訪(fǎng)問(wèn) 不能 可以
版本庫大小 稍大 稍小
擴展性:修訂版本樹(shù)數量 無(wú)限制 某些本地文件系統在處理單一目錄包含上千個(gè)條目時(shí)會(huì )出現問(wèn)題。
擴展性:文件較多的目錄 較慢 較慢
檢出最新代碼的速度 較快 可以
大量提交的速度 較慢,但時(shí)間被分配在整個(gè)提交操作中 較快,但最后較長(cháng)的延時(shí)可能會(huì )導致客戶(hù)端操作超時(shí)
組訪(fǎng)問(wèn)權處理 對于用戶(hù)的 umask 設置十分敏感,最好只由一個(gè)用戶(hù)訪(fǎng)問(wèn)。 對 umask 設置不敏感
功能成熟時(shí)間 2001 年 2004 年

確定了具體的數據存儲類(lèi)型,只要在命令行當中執行 svnadmin 命令就可以創(chuàng )建一個(gè) Subversion 版本庫,命令如下

# 創(chuàng  )建文件夾
$ mkdir /etc/svn/
$ mkdir /etc/svn/repos
# 運行創(chuàng )建版本庫的命令,指定數據存儲為 FSFS,如果要指定為 Berkeley DB,則將 fsfs 替換為 bdb
$ svnadmin create --fs-type fsfs /etc/svn/repos

如果一切正常,命令執行后不會(huì )有任何反饋信息而迅速返回,這樣,一個(gè)新的版本庫就被創(chuàng )建出來(lái)了。我們來(lái)查看一下生成的版本庫結構:

$ ls -l /etc/svn/repos
總用量 56
drwxrwxr-x 2 robert robert 4096 8月 27 17:27 conf
drwxrwxr-x 2 robert robert 4096 8月 27 17:27 dav
drwxrwsr-x 5 robert robert 4096 8月 27 17:27 db
-r--r--r-- 1 robert robert 2 8月 27 17:27 format
drwxrwxr-x 2 robert robert 4096 8月 27 17:27 hooks
drwxrwxr-x 2 robert robert 4096 8月 27 17:27 locks
-rw-rw-r-- 1 robert robert 229 8月 27 17:27 README.txt

其 中,conf 目錄下存放了版本庫的配置文件,包括用戶(hù)訪(fǎng)問(wèn)控制和權限控制等內容,文件本身的注釋說(shuō)明十分詳細,讀者可以根據注釋自行配置;dav 目錄是提供給 Apache 相關(guān)模塊的目錄,目前為空;db 目錄下存放著(zhù) Subversion 所要管理的所有受版本控制的數據,不同的存儲方式(Berkeley DB 或者 FSFS)下有著(zhù)不同的目錄結構,不過(guò)我們一般不用直接修改和查看這個(gè)目錄下的內容,Subversion 的命令可以安全的操作這個(gè)目錄;另外,hooks 目錄存放著(zhù)鉤子腳本及其模版(一種版本庫事件觸發(fā)程序),locks 目錄存放著(zhù) Subversion 版本庫鎖定數據,format 文件記錄了版本庫的布局版本號。

項目添加

有了新建的版本庫,就可以往里面添加項目了。不過(guò),管理員必須考慮的問(wèn)題是,應該將每一個(gè)項目分別放在不同的版本庫里面,還是應該將它們放在統一的 版本庫里面。統一的版本庫可以讓管理員更加容易的升級和備份,不過(guò),由于訪(fǎng)問(wèn)權限控制是針對整個(gè)版本庫的,所以,統一的版本庫也為不同項目配置不同的訪(fǎng)問(wèn) 權限帶來(lái)了麻煩。所以,管理員應該根據實(shí)際情況權衡考慮。

我們以統一的版本庫為例,添加兩個(gè)項目 project_luni 和 project_test。要做到這個(gè),最好的辦法就是用 svn import 命令導入已有的目錄樹(shù)。

首先,我們在一個(gè)臨時(shí)目錄下,根據 Subversion 版本控制的一般布局結構,創(chuàng )建出兩個(gè)項目的主要目錄樹(shù),如下:

/etc/svn/tmp					
|
――project_luni
| |
| ――branches
| |
| ――tags
| |
| ――trunk
|
――project_test
|
――branches
|
――tags
|
――trunk

然后,用 svn import 命令來(lái)進(jìn)行項目的導入:

$ svn import /etc/svn/tmp/ file:///etc/svn/repos/ --message "init"
新增 /etc/svn/tmp/project_test
新增 /etc/svn/tmp/project_test/trunk
新增 /etc/svn/tmp/project_test/branches
新增 /etc/svn/tmp/project_test/tags
新增 /etc/svn/tmp/project_luni
新增 /etc/svn/tmp/project_luni/trunk
新增 /etc/svn/tmp/project_luni/branches
新增 /etc/svn/tmp/project_luni/tags
提交后的修訂版為 1。

版本庫查看

作為版本庫管理員,我們經(jīng)常需要查看 Subversion 版本庫的狀況,這就需要一些“只讀”的查看工具。

在上述項目導入完成以后,我們可以用 svn list 確認導入的項目是否正確:

$ svn list --verbose file:///etc/svn/repos/
1 robert 8月 27 18:24 project_luni/
1 robert 8月 27 18:24 project_test/

另外,如果要查看最新修訂版本的信息,可以使用 svnlook info 命令:

$ svnlook info /etc/svn/repos/
robert
2006-08-27 18:24:27 +0800 (日, 27 8月 2006)
0

命令輸出了這個(gè)版本庫的最新修訂版本信息,包括作者、時(shí)間、日志字數和日志內容等。除開(kāi)最新修訂版以外,我們還可以在命令后面接上 “--revision 版本號” 來(lái)指定某一個(gè)修訂版的顯示。

另外,我們還可以用如下命令來(lái)顯示版本庫的具體樹(shù)形結構,后面的 “--show-ids” 選項指定顯示每一個(gè)顯示元素的修改版本 ID。

$ svnlook tree /etc/svn/repos/ --show-ids
/ <0.0.r1/1007>
project_test/ <1.0.r1/333>
trunk/ <2.0.r1/0>
branches/ <3.0.r1/74>
tags/ <4.0.r1/152>
project_luni/ <5.0.r1/793>
trunk/ <6.0.r1/454>
branches/ <7.0.r1/530>
tags/ <8.0.r1/609>

其他

這里有一個(gè)需要新手,尤其是習慣了 Subversion 客戶(hù)端命令 “svn” 的用戶(hù)注意的問(wèn)題,那就是,“svnadmin” “svnlook” 都被認為是服務(wù)器端的管理工具,只被用于版本庫所在的機器,用來(lái)檢查和維護版本庫,不能通過(guò)網(wǎng)絡(luò )來(lái)執行任務(wù)。所以,試圖將 URL 甚至本地 file 路徑傳遞給這兩個(gè)程序,都是錯誤的。

Subversion 還有很多管理工具可供管理員應用,需要了解這項工具的使用方法,讀者們可以用 svn help, svnadmin help, svnlook help 等等命令查看幫助信息,另外,Subversion 參考手冊提供了更為全面和詳細的使用介紹。

基本的服務(wù)器配置

Subversion 設計了一個(gè)抽象的網(wǎng)絡(luò )層,版本庫建立完畢之后,可以通過(guò)各種服務(wù)器向外公布。svnserve 是 Subversion 自帶的一個(gè)小型的服務(wù)器,它使用獨立的協(xié)議與客戶(hù)端。我們可以通過(guò)

svnserve –i

作為 inetd 啟動(dòng)或者

svnserve –d

作為守護進(jìn)程啟動(dòng)一個(gè)服務(wù)。服務(wù)器啟動(dòng)后,客戶(hù)端即可以通過(guò)絕對路徑訪(fǎng)問(wèn)。如上例可以訪(fǎng)問(wèn) svn://服務(wù)器IP/etc/svn/repos。同時(shí)可以指定一些選項,常用的如 -r,用來(lái)指定版本庫的根路徑,例如假設版本庫位于 /etc/svn/repos:

svnserve –d -r /etc/svn

則客戶(hù)端可以通過(guò)如下 URL 訪(fǎng)問(wèn)服務(wù)器:svn://服務(wù)器IP/repos, 這樣可以有效的避免暴露本地路徑。另外如 --listen-port,--listen-host 可以指定綁定的地址和端口,-R 可以強制設定為 Read-Only 模式。如果在 Windows 操作系統下,可以將版本庫設定在 C 分區,如 c:\svnroot\repos 可以通過(guò) svn://服務(wù)器IP/svnroot/repos訪(fǎng)問(wèn),如果在其他分區,就必須要通過(guò) -r 選項來(lái)指定 root 位置。

svnserve 可以通過(guò)配置 svnserve.conf 來(lái)進(jìn)行一些簡(jiǎn)單的訪(fǎng)問(wèn)權限控制。你可以在版本庫的 conf 子文件夾下發(fā)現這個(gè)文件。文件的初始內容大致如下:

[general]
# anon-access = read
# auth-access = write
password-db = passwd
# authz-db = authz
# realm = My First Repository

其中 anon-access 表示匿名用戶(hù)的權限,auth-access 表示認證用戶(hù)的權限設置,password-db 指向保存用戶(hù)賬號密碼的文件的位置,可以使用相對路徑。svnserve 只能對全局提供簡(jiǎn)單的訪(fǎng)問(wèn)控制,如果想要更加靈活的方式,可以使用 Apache Http Server 作為向外公布版本庫的方式。

與 Apache Http Server 的結合

通過(guò) Http 協(xié)議訪(fǎng)問(wèn)版本庫是 Subversion 的亮點(diǎn)之一。使用 Http 協(xié)議意味著(zhù)只需要打開(kāi)瀏覽器,輸入 URL 即可輕松的瀏覽整個(gè)版本庫。靈活通常帶來(lái)復雜性,Http 方式相對于 svnserve 方式來(lái)說(shuō)需要更多的配置。

由 于 Subversion 需要版本化的控制,因此標準的 Http 協(xié)議不能滿(mǎn)足需求。要讓 Apache 與 Subversion 協(xié)同工作,需要使用 WebDAV(Web 分布式創(chuàng )作和版本控制)。WebDAV 是 HTTP 1.1 的擴展,關(guān)于 WebDAV 的規范和工作原理,可以參考 IETF RFC 2518。

為 了使 Subversion 與 dav 模塊通信,需要安裝 mod_dav_svn 插件,可以在 Subversion 的安裝目錄中找到。將其拷貝到 Apache 安裝目錄的 modules 文件夾下。接下來(lái)就是配置 Apache 的 httpd.conf 文件,讓 Apache 在啟動(dòng)的時(shí)候加載上述模塊。

需要添加的內容如下:

LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
<Location /repos>
DAV svn
SVNPath /etc/svn/repos
</Location>

首先需要啟用 dav_module,然后加載 dav_svn_module。Location 標簽指出訪(fǎng)問(wèn)的 URL 以及在服務(wù)器上的實(shí)際位置。配置完畢后重新啟動(dòng) Apache,打開(kāi)瀏覽器,輸入 http://服務(wù)器IP/repos 將會(huì )看到如下畫(huà)面:


圖1. 一個(gè)初始版本庫

這表示 Apache 的 dav_svn 模塊已經(jīng)可以正常工作了。用戶(hù)可以使用任何一種 Subversion 的客戶(hù)端通過(guò) Http 協(xié)議訪(fǎng)問(wèn)你的版本庫。

如果想要指定多個(gè)版本庫,可以用多個(gè) Location 標簽,也可以使用 SVNParentPath 代替 SVNPath,例如在 /etc/svn 下有多個(gè)版本庫 repos1,repos2 等等,用如下方式指定:

<Location /repos>
DAV svn
SVNParentPath /etc/svn
</Location>

"SVNParentPath /etc/svn" 表示 /etc/svn 下的每個(gè)子目錄都是一個(gè)版本庫??梢酝ㄟ^(guò) http://服務(wù)器IP/repos/repos1,http://服務(wù)器IP/repos/repos2 來(lái)訪(fǎng)問(wèn)。

現在你的版本庫任何人都可以訪(fǎng)問(wèn),并且有完全的寫(xiě)操作權限。也就是說(shuō)任何人都可以匿名讀取,修改,提交,以及刪除版本庫中的內容。顯然大部分場(chǎng)合這是不符合需求的。那么如何進(jìn)行權限設置呢,Apache 提供了基本的權限設置:

首先需要創(chuàng )建一個(gè)用戶(hù)文件。Apache 提供了一個(gè)工具 htpasswd,用于生成用戶(hù)文件,可以在 Apache 的安裝目錄下找到。具體使用方法如下:

htpasswd etc/svn/passwordfile username

如果 passwordfile 不存在,可以加上 -c 選項讓 htpasswd 新建一個(gè)。創(chuàng )建好的文件內容是用戶(hù)名加上密碼的 MD5 密文。

接下來(lái)修改 httpd.conf,在 Location 標簽中加入如下內容:

AuthType Basic
AuthName "svn repos"
AuthUserFile /etc/svn/passwordfile
Require valid-user

重新啟動(dòng) Apache, 打開(kāi)瀏覽器訪(fǎng)問(wèn)版本庫。Apache 會(huì )提示你輸入用戶(hù)名和密碼來(lái)認證登陸了,現在只有 passwordfile 文件中設定的用戶(hù)才可以訪(fǎng)問(wèn)版本庫。也可以配置只有特定用戶(hù)可以訪(fǎng)問(wèn),替換上述 "Require valid-user" 為 "Require user tony robert" 將只有 tony 和 robert 可以訪(fǎng)問(wèn)該版本庫。

有的時(shí)候也許不需要這樣嚴格的訪(fǎng)問(wèn)控制,例如大多數開(kāi)源項目允許匿名的讀取操作,而只有認證用戶(hù)才允許寫(xiě)操作。為了實(shí)現更為細致的權限認證,可以使用 Limit 和 LimitExcept 標簽。例如:

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

如上配置將使匿名用戶(hù)有讀取權限,而限制只有 passwordfile 中配置的用戶(hù)可以使用寫(xiě)操作。如果這還不能滿(mǎn)足你的要求,可以使用 Apache 的 mod_authz_svn 模塊對每個(gè)目錄進(jìn)行認證操作。

用 mod_authz_svn 進(jìn)行目錄訪(fǎng)問(wèn)控制

首先需要讓 Apache 將 mod_authz_svn 模塊加載進(jìn)來(lái)。在 Subversion 的安裝目錄中找到 mod_auth_svn 模塊,將其拷貝到 Apache 安裝目錄的 modules 子目錄下。修改 httpd.conf 文件,找到

LoadModule dav_svn_module modules/mod_dav_svn.so

在其后面加上

LoadModule authz_svn_module modules/mod_authz_svn.so

現在可以在 Location 標簽中使用 authz 的功能了。一個(gè)基本的 authz 配置如下:

<Location /repos>
DAV svn
SVNPath /etc/svn/repos
AuthType Basic
AuthName "svn repos"
AuthUserFile /etc/svn/passwd
AuthzSVNAccessFile /etc/svn/accesspolicy
Satisfy Any
Require valid-user
</Location>

AuthzSVNAccessFile 指向的是 authz 的策略文件,詳細的權限控制可以在這個(gè)策略文件中指定,如:

#兩個(gè)分組:committers,developers
[groups]
committers = paulex richard
developers = jimmy michel spark sean \
steven tony robert
#在根目錄下指定所有的用戶(hù)有讀權限
[/]
* = r
#追加 committers 組用戶(hù)有讀寫(xiě)權限
@committers = rw
#在 branches/dev 目錄下指定 developers 組的用戶(hù)有讀寫(xiě)權限
[/branches/dev]
@developers = rw
#在 /tags 組下給予用戶(hù) tony 讀寫(xiě)權限
[/tags]
tony = rw
#禁止所有用戶(hù)訪(fǎng)問(wèn) /private 目錄
[/private]
* =
#給 committers 組用戶(hù)讀權限
@committers= r

使用 SVNParentPath 代替 SVNPath 來(lái)指定多個(gè)版本庫的父目錄時(shí),其中所有的版本庫都將按照這個(gè)策略文件配置。例如上例中 tony 將對所有版本庫里的 /tags 目錄具有讀寫(xiě)權限。如果要對具體每個(gè)版本庫配置,用如下的語(yǔ)法:

[groups] 
project1_committers = paulex richard
project2_committers = jimmy michel spark sean \
steven tony robert
[repos1:/]
* = r
@ project1_committer = rw
[repos2:/]
* = r
@ project2_committer = rw

這樣項目1的 committer 組只能對 repos1 版本庫下的文件具有寫(xiě)權限而不能修改版本庫 repos2,同樣項目2的 commiter 也不能修改 repos1 版本庫的文件。

用 MySQL 代替文件形式存放密碼

到目前為止我們的用戶(hù)名密碼文件還是以文本文件形式存放在文件系統中的,出于安全性的需要或者單點(diǎn)登陸等可擴展性的考慮,文本文件的管理方式都不能 滿(mǎn)足需求了。通過(guò) Apache 的 module_auth_mysql 模塊,我們可以用 MySQL 來(lái)保存用戶(hù)信息。該模塊的主頁(yè)在 http://modauthmysql.sourceforge.net/,你也可以在 http://modules.apache.org/ 找到它的發(fā)行版本。安裝方法同上述 Apache 的模塊一樣,拷貝至 modules 目錄并在 httpd.conf 文件中添加如下語(yǔ)句:

LoadModule mysql_auth_module modules/mod_auth_mysql.so

相應的 Location 區域改寫(xiě)為:

<Location /repos> 
AuthName "MySQL auth"
AuthType Basic
AuthMySQLHost localhost
AuthMySQLCryptedPasswords Off
AuthMySQLUser root
AuthMySQLDB svn
AuthMySQLUserTable users
require valid-user
</Location>

然后在 mysql 中添加名為 svn 的數據庫,并建立 users 數據表:

create database svn;
use svn;
CREATE TABLE users (
user_name CHAR(30) NOT NULL,
user_passwd CHAR(20) NOT NULL,
user_group CHAR(10),
PRIMARY KEY (user_name)
);

在 users 表中插入用戶(hù)信息

insert into users values(‘username‘,‘password‘,‘group‘);

重新啟動(dòng) Apache,在訪(fǎng)問(wèn)版本庫的時(shí)候 Apache 就會(huì )用 mysql 數據表中的用戶(hù)信息來(lái)驗證了。

用 SSL 實(shí)現安全的網(wǎng)絡(luò )傳輸

通過(guò) Apache 的網(wǎng)絡(luò )鏈接,版本庫中的代碼和數據可以在互聯(lián)網(wǎng)上傳輸,為了避免數據的明文傳輸,實(shí)現安全的版本控制,需要對數據的傳輸進(jìn)行加密。Apache 提供了基于 SSL 的數據傳輸加密模塊 mod_ssl,有了它,用戶(hù)就可以用 https 協(xié)議訪(fǎng)問(wèn)版本庫,從而實(shí)現數據的加密傳輸了。SSL 協(xié)議及其實(shí)現方式,是一個(gè)非常復雜的話(huà)題,本文只是介紹 Apache 提供的最基本的SSL配置方法,更加詳細的介紹內容,請參考 http://httpd.apache.org/docs-2.0/ssl/ 上的文檔。

開(kāi)始配置前,我們需要一個(gè)實(shí)現 Apache 中 SSL 模塊的動(dòng)態(tài)程序庫,通常名為 mod_ssl.so,及其配置文件,通常名為 ssl.conf。這個(gè)實(shí)現是跟 Apache 的版本相關(guān)的,不匹配的版本是不能用的;而且,并不是每一個(gè) Apache 的版本都自帶了相關(guān)實(shí)現文件,很多情況下,我們需要自己去搜尋相關(guān)文件。另外,我們還需要 OpenSSL 軟件及其配置文件,來(lái)生成加密密鑰和數字證書(shū)。這里,我們可以使用一些免費網(wǎng)站,如 http://hunter.campbus.com/ 上提供的集成版本的 Apache。

有了相關(guān)的工具和文件,我們就可以開(kāi)始生成 SSL 的證書(shū)和密鑰了。首先,我們需要找到 openssl 程序及其配置文件 openssl.cnf,運行如下命令來(lái)生成 128 位的 RSA 私有密鑰文件

my-server.key:
openssl genrsa -des3 -out my-server.key 1024
Loading ‘screen‘ into random state - done
Generating RSA private key, 1024 bit long modulus
.....++++++
........++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:********
Verifying - Enter pass phrase for server.key:********

命令運行期間需要用戶(hù)輸入并確認自己的密碼。

現在,我們需要 SSL 的認證證書(shū),證書(shū)是由 CA(certificate authority) 發(fā)放并且認證的。為此,我們可以用如下命令生成一個(gè) CSR(Certificate Signing Request) 文件發(fā)給 CA,從而得到 CA 的認證:

openssl req -new -key my-server.key -out my-s erver.csr -config openssl.cnf

當然,一般情況下,如果 Subversion 的用戶(hù)不是太多,安全情況不是很復雜,我們也可以生成一個(gè)自簽名的認證證書(shū),從而省去了向 CA 申請認證的麻煩。如下命令:

openssl req -new -key my-server.key -x509 -out my-server.crt -config openssl.cnf

以上兩個(gè)命令都需要用戶(hù)輸入那個(gè) key 文件的密碼,以及一些網(wǎng)絡(luò )設置信息,如域名,郵箱等等,這里輸入的服務(wù)器域名應該與 Apache 配置文件當中的一致?,F在,我們可以在 Apache 的 conf 目錄下新建一個(gè) ssl 目錄,將 my-server.key 和 my-server.crt 文件都移動(dòng)到 ssl 目錄里面。然后修改 ssl.conf 文件,將 SSLCertificateKeyFile 和 SSLCertificateFile 項指向這兩個(gè)文件。

如果 Apache 的 module 目錄里面沒(méi)有 mod_ssl.so 文件,可以將事先準備好的文件拷貝過(guò)去。然后,我們可以設置 Apache 的配置文件 httpd.conf,將 ssl 模塊加入其中:

LoadModule ssl_module modules/mod_ssl.so

然后,在配置文件的最后,加上如下 SSL 相關(guān)配置項:

SSLMutex default
SSLRandomSeed startup builtin
SSLSessionCache none

ErrorLog logs/SSL.log
LogLevel info
<VirtualHost svntest.ut.cn.ibm.com:443>
SSLEngine On
SSLCertificateFile conf/ssl/my-server.crt
SSLCertificateKeyFile conf/ssl/my-server.key
</VirtualHost>

這樣,基本的設置工作就完成了。重新啟動(dòng) Apache 服務(wù)器,現在可以用 https 協(xié)議代替 http 協(xié)議來(lái)訪(fǎng)問(wèn)版本庫了。如果要限定版本庫只能用 https 訪(fǎng)問(wèn),我們可以在 Apache 配置文件當中 Subversion 部分加上 “SSLRequireSSL”。如下:

<Location /repos>
DAV svn
SVNPath /etc/svn/repos
………….#other items
SSLRequireSSL
</Location>

總結

Subversion 以其優(yōu)良的版本控制功能,靈活的網(wǎng)絡(luò )訪(fǎng)問(wèn)模型,以及與 Apache 服務(wù)器聯(lián)合配置所帶來(lái)的更強大的管理控制功能,逐漸在開(kāi)源軟件開(kāi)發(fā)的實(shí)踐當中得到廣泛的應用。本文重點(diǎn)介紹了 Subversion 服務(wù)器端的配置以及與 Apache 服務(wù)器聯(lián)合配置的基本步驟和簡(jiǎn)單應用,實(shí)現了簡(jiǎn)單的實(shí)例應用。讀者如果想要進(jìn)一步了解相關(guān)信息,請參考文章后面列出的相關(guān)資料。



參考資料

  • Subversion 官方網(wǎng)站:Subversion 的發(fā)源地,提供最權威的介紹和最新的下載。

  • Subclipse 官方網(wǎng)站:Subversion 配套的插件站點(diǎn),提供 Eclipse 中 Subversion 的插件下載和文檔。

  • Subversion 手冊:官方提供的全面而細致的使用說(shuō)明書(shū)。

  • IETF RFC 2518 WebDAV 的規范和工作原理的原始文檔。

  • Subversion 簡(jiǎn)介:developerWorks Java 專(zhuān)區中的一篇介紹 Subversion 客戶(hù)端插件使用方法的文章 (Elliotte Harold,developWorks 2006 年 7 月 06 日)。

  • 用 Subversion 構建版本控制環(huán)境 :developerWorks Java 專(zhuān)區中的一篇介紹 Subversion 客戶(hù)端安裝,配置,插件使用的文章 (劉冬,developWorks 2005 年 9 月)
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
LINUX下Subversion安裝配置
Apache2/SSL Subversion PAM認證服務(wù)器配置
CentOS下Redmine與SVN的整合——基于A(yíng)pache和Mysql安全認證與讀寫(xiě)控制
版本控制軟件SubVersion 入門(mén) - Powered by iNewS4
原]使用mod_dav_svn訪(fǎng)問(wèn)Subversion倉庫
Windows 下安裝并配置 SVN 服務(wù)器全過(guò)程
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久