SVN安裝配置及安全注意事項

wyzsk發表於2020-08-19
作者: 瞌睡龍 · 2013/07/30 15:05

0x00 SVN介紹


Subversion,簡稱SVN,是一個開放原始碼的版本控制系統,相對於的RCS、CVS,採用了分支管理系統,它的設計目標就是取代CVS。網際網路上越來越多的控制服務從CVS轉移到Subversion。

Subversion的官方網站是:http://subversion.tigris.org/

中文的網站:Subversion中文站SVNBook 正體中文版Subversion中文社群中文SVN技術資料

這些網站都提供了非常詳細、多樣的說明文件,有時間大家可以逐一細查。

Subversion使用服務端—客戶端的結構,當然服務端與客戶端可以都執行在同一臺伺服器上。在服務端是存放著所有受控制資料的Subversion倉庫,另一端是Subversion的客戶端程式,管理著受控資料的一部分在本地的對映(稱為“工作副本”)。在這兩端之間,是透過各種倉庫存取層(Repository Access,簡稱RA)的多條通道進行訪問的。這些通道中,可以透過不同的網路協議,例如HTTP、SSH等,或本地檔案的方式來對倉庫進行操作。

0x01 安裝配置


安裝SVN

#yum install subversion

測試是否安裝成功

#svnserve --version

如果顯示了版本資訊則表示安裝成功

建立倉庫

#svnadmin create /home/svn/repo

給svn設定密碼

修改配置檔案/home/svn/repo/conf/svnserve.conf 去掉

#[general]

前面的#號

匿名訪問的許可權,可以是read,write,none,預設為read

anon-access = none

認證使用者的許可權,可以是read,write,none,預設為write

auth-access = write

密碼資料庫的路徑

#password-db = passwd

去掉前面的#

修改配置檔案passwd

#vim /home/svn/repo/conf/passwd

=前面是使用者名稱,後面是密碼:

[users]
name = password

啟動SVN伺服器

對於單個程式碼倉庫

#svnserve -d -r /home/svn --listen-host 192.168.1.100

svn預設埠是3690,在防火牆上開放這個埠。

/sbin/iptables -A INPUT -i eth0 -p tcp --dport 3690 -j ACCEPT
/sbin/service iptables save

把/var/www/html/目錄匯入到svn的repo目錄下

svn import /var/www/html/  file:///home/svn/repo  -m "test"


0x02 注意的問題


1、檢出(匯出結果帶.svn資料夾的目錄樹)

svn  co  http://路徑 [本地目錄全路徑]  --username 使用者名稱 --password 密碼
svn  co  svn://路徑 [本地目錄全路徑]  --username 使用者名稱 --password 密碼
svn  checkout  http://路徑 [本地目錄全路徑] --username 使用者名稱
svn  checkout  svn://路徑 [本地目錄全路徑]  --username 使用者名稱

如果不帶--password 引數傳輸密碼的話,會提示輸入密碼,建議不要用明文的--password 選項。 其中 username 與 password前是兩個短線,不是一個。 不指定本地目錄全路徑,則檢出到當前目錄下。

2、匯出(匯出一個乾淨的不帶.svn資料夾的目錄樹)

svn  export  [-r 版本號]  http://路徑 [本地目錄全路徑] --username 使用者名稱
svn  export  [-r 版本號]  svn://路徑 [本地目錄全路徑] --username 使用者名稱
svn  export  本地檢出的(即帶有.svn資料夾的)目錄全路徑  要匯出的本地目錄全路徑

第一種從版本庫匯出乾淨工作目錄樹的形式是指定URL。 如果指定了修訂版本號,會匯出相應的版本。 如果沒有指定修訂版本,則會匯出最新的,匯出到指定位置。 如果省略 本地目錄全路徑,URL的最後一部分會作為本地目錄的名字。 第二種形式是指定 本地檢出的目錄全路徑 到 要匯出的本地目錄全路徑,所有的本地修改將會保留。 但是不在版本控制下(即沒提交的新檔案,因為.svn資料夾裡沒有與之相關的資訊記錄)的檔案不會複製。

現實的開發環境中,強烈建議使用匯出功能svn export而不是svn co

由此可能導致非常嚴重的問題,很多管理員直接吧svn co出來的程式碼直接放到web目錄下。

這就使.svn隱藏資料夾被暴露於外網環境,駭客可以藉助其中包含的用於版本資訊追蹤的“entries”檔案,逐步摸清站點結構。

svn及entries資料夾暴露於外網環境

更嚴重的問題在於,SVN產生的.svn目錄下還包含了以.svn-base結尾的原始碼檔案副本(低版本SVN具體路徑為text-base目錄,高版本SVN為pristine目錄),如果伺服器沒有對此類字尾做解析,駭客則可以直接獲得檔案原始碼。

原始碼檔案副本暴露於外網環境

如果解析了該字尾,可能會有檔案解析的漏洞,可能會有擴充套件解析漏洞,找地方上傳xxx.php.gif也許就可以直接得到webshell了。

如果已經線上的生產環境已經有了.svn目錄不想刪掉可以在伺服器上設定禁制訪問此目錄:

另外svn更新至1.7+ .svn/entries目錄就不包含檔案目錄列表了。

Apache:

<Directory ~ "\.svn">
Order allow,deny
Deny from all
</Directory>

Nginx:

location ~ ^(.*)\/\.svn\/ {
return 404;
}

附上個遍歷.svn/entries展現網站目錄結構的兩個指令碼:

svn遍歷指令碼.zip

wooyun上也是已經有非常多的svn洩露網站資訊的事件,有的甚至由此導致整個伺服器淪陷:

WooYun: 【盛大180天滲透紀實】第四章.SVN獵手 (某站SVN資訊洩露+設計問題導致伺服器淪陷)

WooYun: 愛拍svn洩露,有被脫褲危險,想起了csdn....

WooYun: 優酷某分站SVN資訊及某sql檔案洩漏

WooYun: 淘寶網某應用svn資訊導致程式碼洩露

WooYun: 鮮果網怕是所有應用要淪陷了?




參考:

Subversion快速入門教程

使用Subversion進行版本控制

用Apache和Subversion搭建安全的版本控制環境

centos svn安裝及配置與使用

linux下svn常用指令

WooYun: .svn目錄未設許可權限制的漏洞利用總結

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章