您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源配置管理工具 > SVN
建立一個(gè)安全的Subversion服務(wù)器
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/1/30 13:59:48 ] 推薦標(biāo)簽:

  近一個(gè)客戶聘請(qǐng)了一個(gè)網(wǎng)絡(luò)開發(fā)團(tuán)隊(duì)來幫助他的工作過度的網(wǎng)管。他們要求我安裝一個(gè)版本控制系統(tǒng),這個(gè)系統(tǒng)能夠保證團(tuán)隊(duì)中的任何成員避免無意中修改別人的文件,并且能夠給予管理員恢復(fù)文件到任何版本的機(jī)制。
  
  我的第一個(gè)想法是Subversion。因?yàn)樗俏覍態(tài)SD Hacks 時(shí)和編輯器一起用的版本控制系統(tǒng)。在Ports Collection中搜索一下之后發(fā)現(xiàn),Subversion需要好幾個(gè)相關(guān)的port。比如,esvn看起來相當(dāng)適合客戶端,因?yàn)樗腉UI界面能夠運(yùn)行在Unix,Mac OS X以及Windows中。對(duì)于一個(gè)對(duì)Unix技術(shù)掌握不深的網(wǎng)絡(luò)開發(fā)團(tuán)隊(duì)而言,當(dāng)他們需要把數(shù)據(jù)存貯在FreeBSD服務(wù)器上而從非FreeBSD系統(tǒng)讀取時(shí),esvn是非常好的選擇。
  
  前期準(zhǔn)備
  
  在我的想法中,只允許開發(fā)團(tuán)隊(duì)的成員具有權(quán)限訪問倉庫是非常重要的。同時(shí),我們把倉庫放在和目前的web服務(wù)器分開的操作系統(tǒng)上,當(dāng)web管理員看到適合的文件時(shí),由他負(fù)責(zé)把文件從倉庫復(fù)制到web服務(wù)器上。
  
  為了實(shí)現(xiàn)這個(gè)目的,先對(duì)已存在的你想放到版本控制系統(tǒng)下的目錄結(jié)構(gòu)做一個(gè)備份,然后把它安全發(fā)送到倉庫服務(wù)器。在我的例子中,我把web服務(wù)器上www目錄的數(shù)據(jù)備份到一臺(tái)內(nèi)網(wǎng)服務(wù)器
  192.168.2.2上。
  
  # tar czvf - /usr/local/etc/www/data | ssh dru@192.168.2.2 "cat > www.tar.gz"
  
  下一步是在倉庫服務(wù)器上建立一個(gè)svn組,并把已存在的需要訪問倉庫的用戶加到這個(gè)組中。比如,當(dāng)我創(chuàng)建svn組后,我在/etc/group加入這句話把已存在的web管理員用戶加進(jìn)去:
  
  # vi /etc/group
  svn:*:3690:webadmin
  
  然后,新建一個(gè)用戶svn。如果有必要,你還需創(chuàng)建所有要訪問倉庫系統(tǒng)的用戶帳號(hào)(如果他們還沒有創(chuàng)建)。要保證每個(gè)用戶是svn的成員并且有密碼和可用的shell。我使用sysinstall為新的網(wǎng)絡(luò)工程師建立用戶帳號(hào)。完成以后,我雙擊svn組的成員。大概像這樣:
  
  # grep svn /etc/group
  svn:*:3690:webadmin,devel1,devel2
  
  處理 umask在安裝Subversion之前,我們先看看svn用戶的umask。在我的FreeBSD系統(tǒng)上,它是這樣的:
  # su -l svn
  % umask
  022
  
  在UNIX中,用戶umask值決定了新建目錄或文件的默認(rèn)權(quán)限。這是通過關(guān)閉某些權(quán)限達(dá)到的。如果你記得:
  r = 4
  w = 2
  x = 1
  
  你應(yīng)該看得出這個(gè)umask沒有對(duì)用戶(svn)關(guān)閉任何權(quán)限(0);它對(duì)組(svn)關(guān)閉了寫權(quán)限(2);它對(duì)其他組用戶關(guān)閉了寫權(quán)限(2)。
  
  因?yàn)閟vn組的成員必須能夠?qū)懭雮}庫,所以把umask中關(guān)于組的 2 改為 0。甚至如果你不想讓其他組成員知道這個(gè)倉庫的存在,你可以把關(guān)于其他組成員的 2 改為 7。
  
  修改用戶svn的shell配置比較簡(jiǎn)單。如果用戶使用 csh:
  % vi ~svn/.cshrc
  ,那么找到umask那行并把它改為 002 或 007。如果你的svn用戶不用csh,修改你的shell配置文件。如果你把你的修改保存在 ~svn/.cshrc (或別的地方),別忘了告訴shell:
  % source ~svn/.cshrc
  
  再敲一次 umask 命令,以保證你的修改有效。
  
  安裝Subversion ,并讓它擁有正確的umask
  
  如果你選擇一個(gè)002的umask,那么當(dāng)你從ports collection生成Subversion的時(shí)候,你能把一個(gè)wrapper編譯進(jìn)去。如果你選擇一個(gè)007的umask或安裝已預(yù)編譯好的Subversion,那要?jiǎng)?chuàng)建一個(gè)wrapper腳本來保證你的Subversion二進(jìn)制文件使用你的umask值。
  
  使用wrapper編譯,使其umask值為002:
  # cd /usr/ports/devel/subversion
  # make -DWITH_SVNSERVE_WRAPPER install clean
  
  或者,你可以安裝已預(yù)編譯的二進(jìn)制代碼包
  # pkg_add -r subversion
  
  注意:無論使用何種方法,安裝之前都應(yīng)該把這篇文章看完!因?yàn)槟憧梢园l(fā)現(xiàn)一些額外的讓你感興趣的編譯選項(xiàng)!
  
  如果你不在wrapper中編譯,請(qǐng)移動(dòng)你的代碼到相應(yīng)的位置,并創(chuàng)建你自己的wrapper腳本:
  # mv /usr/local/bin/svn /usr/local/bin/svn.orig# vi /usr/local/bin/svn#!/bin/sh#wrapper script to set umask to 007 on subversion binariesumask 007/usr/local/bin/svn.orig "$@"
  
  設(shè)置你的umask值為002或007,使它和syn用戶的umask值一樣。別忘了設(shè)置你的wrapper腳本為可執(zhí)行的:
  # chmod +x /usr/local/bin/svn

上一頁12下一頁
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd