李育平
(西安思源科創(chuàng)軌道交通技術(shù)開發(fā)有限公司 陜西 710054)
在企業(yè)運作中,越來越多的成果以者電子文檔形式存在。企業(yè)文檔管理中最重要的需求莫過于安全性,尤其是當(dāng)前網(wǎng)絡(luò)無處不在的情況下,保證敏感資料的可控性在管理中占據(jù)相當(dāng)重要的地位。本文就Subversion在企業(yè)文檔管理中使用時的幾種服務(wù)器配置方式,尤其是其中用戶認證、用戶授權(quán)、通訊加密等安全性相關(guān)的部分,進行了簡單的介紹和比較。
Subversion 的網(wǎng)絡(luò)層是抽象的,即版本庫建立后可以通過各種服務(wù)器向外發(fā)布,并通過支持相應(yīng)協(xié)議的客戶端進行訪問。理論上有無數(shù)種實現(xiàn)方式,實際上目前廣泛使用的有幾種:一種是Apache網(wǎng)頁服務(wù)器,借助擴展模塊使用基于萬維網(wǎng)的分布式創(chuàng)作和版本控制(HTTP Extensions for Web Distributed Authoring and Versioning,WebDAV)協(xié)議進行發(fā)布,另外一種是通過 svnserve(一個輕量級服務(wù)器程序)使用svn協(xié)議進行發(fā)布,還有一種是在svnserve基礎(chǔ)上通過安全殼協(xié)議(Security Shell,SSH)隧道化后進行發(fā)布。在第三種方式中,由于SSH需要系統(tǒng)賬戶支持,當(dāng)版本庫需要大量用戶進行交互時,除非服務(wù)器已具備相關(guān)賬戶設(shè)置條件,否則不推薦這種方式,因為一般情況下在企業(yè)專用服務(wù)器上設(shè)置大量賬戶會帶來隱患。下表就前兩種配置方式進行簡單介紹:
表1 subversion服務(wù)器比較
企業(yè)環(huán)境下,版本庫的所有操作都是需要明確的權(quán)限的。首先能否進入版本庫就是最基本的問題,一般情況下開發(fā)人員都應(yīng)該擁有準入權(quán)限,否則無法提交代碼等,除非特殊情況如版本庫只用來保存穩(wěn)定版本以作為存檔保密設(shè)備使用,但這樣一來就失去了設(shè)置版本庫的必要,完全可以用其它方式如燒錄光盤存放在保險柜里替代。其次,進入版本庫的賬戶各自擁有的權(quán)限必須明確,禁止查看、只讀、讀寫是逐級遞進的過程,如保密性資料除了特定人員外,其余人員都是無權(quán)查看的,常見的如專利類資料、穩(wěn)定版本代碼等,其余視文件的保密需求設(shè)置相應(yīng)的權(quán)限也是類似的。再次,在企業(yè)內(nèi)部局域網(wǎng)環(huán)境中的計算機一般都是可信任的,但是隨著企業(yè)規(guī)模的擴大及當(dāng)前網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)攻擊的手段層出不窮,當(dāng)攻擊者進入突破防火墻進入企業(yè)內(nèi)部網(wǎng)絡(luò)后,由于內(nèi)部主機之間相互信任(這幾乎是常態(tài)),攻擊者基本上如入無人之境,可以隨意的嗅探網(wǎng)絡(luò)流量以獲取敏感信息,因此版本庫服務(wù)器也需要具備一定的網(wǎng)絡(luò)通信加密功能。
認證是確認“某人就是他所宣稱的那個人”的過程,我們可以利用這種機制來過濾進入版本庫中進行操作的人員,阻擋允許進入版本庫的其余人員。
客戶端訪問基于Apache的版本庫服務(wù)器時(以使用摘要認證為例)的簡化流程如下:
(1)客戶端發(fā)送請求;
(2)服務(wù)器要求摘要認證,發(fā)送用于計算 MD5哈希值的隨機數(shù);
(3)客戶端使用該隨機數(shù)、用戶名、密碼、請求的資源路徑等計算MD5哈希值,發(fā)送給服務(wù)器;
(4)服務(wù)器使用相同方式進行計算及比對,一致則認證通過,開始后續(xù)通信;
……
基于svnserve方式中,當(dāng)編譯為支持SASL[2](是上層協(xié)議如svn等與SASL機制之間的接口框架)框架時,有很多的認證機制可供選擇。下面以GSSAPI(Kerberos V5 for GSS-API)機制為例,當(dāng)客戶端訪問這種方式架設(shè)的版本庫服務(wù)器時的簡化流程如下:
(1)客戶端選擇特定版本庫;
(2)客戶端發(fā)送數(shù)據(jù)開始初始化上下文(數(shù)據(jù)安全層可選);
(3)服務(wù)器根據(jù)本地憑證進行驗證,回復(fù)客戶端是否完成驗證;
(4)客戶端接收回復(fù)后根據(jù)自己的憑證進行驗證,不通過則開始重新初始化上下文,否則認為建立起安全上下文,開始后續(xù)通信;
……
授權(quán)是允許“某人進行他想要進行的查看或修改的操作”的過程,及具有相應(yīng)的權(quán)限以開展工作,一般是建立在認證完成的基礎(chǔ)上。在配置合適的情況下,這兩種方式都可以授予認證用戶所有權(quán)限,這在現(xiàn)實中使用的比較廣泛,比如各類開源項目的源代碼分發(fā)、企業(yè)內(nèi)部規(guī)章制度、政策性文件等。但是對于一般的企業(yè)來講,相對敏感的技術(shù)文件資料等是嚴格限定閱讀修改權(quán)限的,并且根據(jù)不同的等級、部門、項目都有不同的要求,因此需要粒度更加細致的訪問權(quán)限控制。
這兩種防止也都支持基于路徑的訪問控制,這種粒度更加細致的訪問控制,對于權(quán)限的控制相對嚴格的多。然而現(xiàn)實中并非需要那么嚴格的權(quán)限設(shè)定,因為人事、項目、組織架構(gòu)都在變動,過于嚴格的權(quán)限設(shè)定反而會降低效率。例如很多非機密資料可以通過行政性策略如各項規(guī)章制度禁止修改,即使無關(guān)人員無意或有意修改了本來不應(yīng)該修改的文件,也可以通過版本庫回滾操作恢復(fù),而不是在服務(wù)器配置文件中設(shè)置成千上萬的只讀權(quán)限來實現(xiàn)。
Apache服務(wù)器本身的認證方式比如上文所述簡化流程中基本的用戶名/密碼認證及改進的摘要算法認證,都是通過http協(xié)議進行訪問,所有的通信如認證用戶名密碼傳輸、版本庫目錄查詢等信息在網(wǎng)絡(luò)上都是公開的,這會給隱藏的嗅探類攻擊利用。因此一般會將服務(wù)器配置為使用https[3](http over SSL)對網(wǎng)絡(luò)進行加密傳輸,以避免網(wǎng)絡(luò)上明文傳輸導(dǎo)致的敏感數(shù)據(jù)泄露。
當(dāng)客戶端通過https訪問時,簡化的初始流程如下:
(1)客戶端發(fā)出https交互請求;
(2)服務(wù)器發(fā)送證書;
(3)客戶端根據(jù)根據(jù)認證中心(Certificate Authority,CA)列表驗證服務(wù)器證書;
(4)客戶端發(fā)送隨機對稱加密密鑰等;
(5)服務(wù)器相應(yīng)已完成握手;
(6)開始加密通信(認證、數(shù)據(jù)傳輸?shù)龋?/p>
……
這樣包括認證信息在內(nèi)的所有通信就都包含在SSL加密通道里了,即使網(wǎng)絡(luò)上發(fā)生泄露,攻擊者也無法對數(shù)據(jù)進行解密,因為傳輸?shù)臄?shù)據(jù)都經(jīng)過了只有服務(wù)器和客戶端才知道的隨機加密密鑰(一次性)的加密過程。
基于svnserve的版本庫服務(wù)器在支持SASL時會提供額外的可選數(shù)據(jù)安全層,如前文例子中所述。由于不同的svn客戶端在訪問svnserve的認證過程中,基于兼容性等問題,在服務(wù)器提供SASL機制中會選擇自己支持的進行交互,這樣攻擊者可以在認證用戶使用無數(shù)據(jù)安全層的SASL機制的客戶端與服務(wù)器交互時,對網(wǎng)絡(luò)流量進行嗅探以獲得敏感數(shù)據(jù)。相比較于使用https對版本庫訪問,這種架構(gòu)的服務(wù)器配置方式安全性計較差。
在這兩種方式中,基于svnserve的方式當(dāng)需要滿足企業(yè)保密需求時,需要部署相應(yīng)的SASL機制以達到基于Apache方式的相同安全性能,這時SASL機制的多樣性及復(fù)雜性可能會給管理員(一般企業(yè)甚至可能是兼職)帶來不小的障礙,會導(dǎo)致人工失誤導(dǎo)致的可靠性、可使用性下降。而Apache使用成熟的https訪問版本庫方式在認證及數(shù)據(jù)加密方面相對svnserve更加適合于適合于在實際中部署應(yīng)用,尤其是在已經(jīng)具備服務(wù)器(部署企業(yè)網(wǎng)站、OA系統(tǒng)、內(nèi)部郵件系統(tǒng)等)條件的企業(yè)內(nèi),配置維護工作相對 svnserve方式可操作性比較大,此外基于Apache方式還可以獲得額外的好處,如本身豐富的日志功能,可以穿透企業(yè)防火墻等。因此,無特殊需求的條件下(例如速度優(yōu)先等),部署基于Apache的版本庫服務(wù)器無疑是企業(yè)的首選。
[1]Ben Collins-Sussman,Brian W.Fitzpatrick,C.Michael Pilato.Version Control with Subversion(2nd Edition).O'Reilly Media.2008.
[2]Alexey Melnikov.RFC 4422:Simple Authentication and Security Layer(SASL).IETF.2006-11.
[3]魏興國.HTTP和HTTPS協(xié)議安全性分析[J].程序員,2007(7):53-55.