來源:http://www.chinaitlab.com/
在網(wǎng)絡(luò)上,匿名FTP是一個很常用的服務(wù),常用于軟件下載網(wǎng)站,軟件交流網(wǎng)站等,為了提高匿名FTP服務(wù)開放的過程中的安全性,我們就這一問題進行一些討論,
教你如何巧妙設(shè)定匿名FTP的安全
。以下的設(shè)定方式是由過去許多網(wǎng)站累積的經(jīng)驗與建議組成。我們認為可以讓有個別需求的網(wǎng)站擁有不同設(shè)定的選擇。
設(shè)定匿名FTP
A.FTP daemon
網(wǎng)站必須確定目前使用的是最新版本的FTP daemon。
B設(shè)定匿名FTP的目錄
匿名ftp的根目錄(~ftp)和其子目錄的擁有者不能為ftp帳號,或與ftp相同群組的帳號。這是 一般常見的設(shè)定問題。假如這些目錄被ftp或與ftp相同群組的帳號所擁有,又沒有做好防止寫入的保護,入侵者便可能在其中增加文件(例如:.rhosts?n)或修改其它文件。許多網(wǎng)站?市硎褂?root帳號。讓匿名FTP的根目錄與子目錄的擁有者是root,所屬族群(group)為system?,如此只有root有寫入的權(quán)力,這能幫助你維持FTP服務(wù)的安全???
以下是一個匿名ftp目錄的設(shè)定范例:
drwxr-xr-x 7 root system 512 Mar 1 15:17 ./
drwxr-xr-x 25 root system 512 Jan 4 11:30 ../
drwxr-xr-x 2 root system 512 Dec 20 15:43 bin/
drwxr-xr-x 2 root system 512 Mar 12 16:23 etc/
drwxr-xr-x 10 root system 512 Jun 5 10:54 pub/
所有的文件和鏈接庫,特別是那些被FTP daemon使用和那些在 ~ftp/bin 與~ftp/etc 中的文
件,應(yīng)該像上面范例中的目錄做相同的保護。這些文件和鏈接庫除了不應(yīng)該被ftp帳號或與f
tp相同群組的帳號所擁有之外,也必須防止寫入。
C.我們強烈建議網(wǎng)站不要使用系統(tǒng)中 /etc/passwd 做為~ftp/etc 目錄中的密碼文件或?qū)⑾到y(tǒng)
中 /etc/group 做為 ~ftp/etc目錄中的群組文件。在~ftp/etc目錄中放置這些文件會使得入
侵者取得它們。這些文件是可自定的而且不是用來做存取控制。
我們建議你在 ~ftp/etc/passwd 與 ~ftp/etc/group 使用代替的文件。這些文件必須由roo
t所擁有。DIR命令會使用這代替的文件來顯示文件及目錄的擁有者和群組名稱。網(wǎng)站必須確
定 ~/ftp/etc/passwd檔中沒有包含任何與系統(tǒng)中 /etc/passwd文件中相同的帳號名稱。這些
文件應(yīng)該僅僅包含需要顯示的FTP階層架構(gòu)中文件與目錄的擁有者與所屬群組名稱。此外,確
定密碼字段是"整理"過的。例如使用「*」來取代密碼字段。
以下為cert中匿名ftp的密碼文件范例
ssphwg:*:3144:20:Site Specific Policy Handbook Working Group::
cops:*:3271:20:COPS Distribution::
cert:*:9920:20:CERT::
tools:*:9921:20:CERT Tools::
ftp:*:9922:90:Anonymous FTP::
nist:*:9923:90:NIST Files::
以下為cert中匿名ftp的群組文件范例
cert:*:20:
ftp:*:90:
II..在你的匿名ftp提供可寫入的目錄
讓一個匿名ftp服務(wù)允許使用者儲存文件是有風險存在的。我們強烈提醒網(wǎng)站不要自動建立一個上傳目錄,除非已考慮過相關(guān)的風險。CERT/CC的事件回報成員接獲許多使用上傳目錄造成非法傳輸版權(quán)軟件或交換帳號與密碼信息的事件。也接獲惡意地將系統(tǒng)文件灌報造成denialof service問題。
本節(jié)在討論利用三種方法來解決這個問題。第一種方法是使用一個修正過的FTP daemon。第二個方法是提供對特定目錄的寫入限制。第三種方法是使用獨立的目錄。
A. 修正過的FTP daemon
假如你的網(wǎng)站計劃提供目錄用來做文件上傳,我們建議使用修正過的FTP daemon對文件上傳的目錄做存取的控制。這是避免使用不需要的寫入?yún)^(qū)域的最好的方法。以下有一些建議:
1.限定上傳的文件無法再被存取, 如此可由系統(tǒng)管理者檢測后,再放至于適當位置供人下載。
2.限制每個聯(lián)機的上傳資料大小。
3.依照現(xiàn)有的磁盤大小限制數(shù)據(jù)傳輸?shù)目偭俊?/p>
4.增加登錄記錄以提前發(fā)現(xiàn)不當?shù)氖褂谩?/p>
若您欲修改FTP daemon, 您應(yīng)該可以從廠商那里拿到程序代碼, 或者您可從下列地方取得公開的FTP程序原始碼:
wuarchive.wustl.edu ~ftp/packages/wuarchive-ftpd
ftp.uu.net ~ftp/systems/unix/bsd-sources/libexec/ftpd
gatekeeper.dec.com ~ftp/pub/DEC/gwtools/ftpd.tar.Z
CERT/CC 并沒有正式地對所提到的FTP daemon做檢測、評估或背書,
電腦資料
《教你如何巧妙設(shè)定匿名FTP的安全》(http://www.szmdbiao.com)。要使用何種FTP daemon 由每個使用者或組織負責決定,而CERT/CC建議每個機關(guān)在安裝使用這些程序之前, 能做一個徹底的評估。B. 使用保護的目錄
假如你想要在你的FTP站提供上傳的服務(wù), 而你又沒辦法去修改FTP daemon, 我們就可以使用較復(fù)雜的目錄架構(gòu)來控制存取。這個方法需要事先規(guī)劃并且無法百分之百防止FTP可寫入?yún)^(qū)域遭不當使用, 不過許多FTP站仍使用此方法。
為了保護上層的目錄(~ftp/incoming), 我們只給匿名的使用者進入目錄的權(quán)限(chmod 751~ftp/incoming)。這個動作將使得使用者能夠更改目錄位置(cd),但不允許使用者檢視目錄內(nèi)容。Ex:
drwxr-x--x 4 root system 512 Jun 11 13:29 incoming/
在~ftp/incoming使用一些目錄名只讓你允許他們上傳的人知道。為了要讓別人不易猜到目錄名稱, 我們可以用設(shè)定密碼的規(guī)則來設(shè)定目錄名稱。請不要使用本文的目錄名稱范例(避免被有心人士發(fā)現(xiàn)您的目錄名, 并上傳文件)
drwxr-x-wx 10 root system 512 Jun 11 13:54 jAjwUth2/
drwxr-x-wx 10 root system 512 Jun 11 13:54 MhaLL-iF/
很重要的一點是,一旦目錄名被有意無意的泄漏出來, 那這個方法就沒什么保護作用。只要目錄名稱被大部分人知道, 就無法保護那些要限定使用的區(qū)域。假如目錄名被大家所知道,那你就得選擇刪除或更改那些目錄名。
C. 只使用一顆硬盤:
假如你想要在你的FTP站提供上傳的服務(wù), 而你又沒辦法去修改FTP daemon,您可以將所有上傳的資料集中在同一個掛(mount)在~ftp/incoming上的文件系統(tǒng)。可以的話 ,將一顆單獨的硬盤掛(mount)在~ftp/incoming上。系統(tǒng)管理者應(yīng)持續(xù)檢視這個目錄(~ftp/incoming), 如此便可知道開放上傳的目錄是否有問題。
限制FTP用戶目錄
匿名FTP可以很好地限制用戶只能在規(guī)定的目錄范圍內(nèi)活動,但正式的FTP用戶默認不會受到這種限制,這樣,他可以自由在根目錄、系統(tǒng)目錄、其他用戶的目錄中讀取一些允許其他用戶讀取的文件。
如何才能把指定的用戶象匿名用戶一樣限制在他們自己的目錄中呢?以下我們以red hat和wu-ftp為例做一介紹。
1 創(chuàng)建一個組,用groupadd命令,一般可以就用ftp組,或者任何組名.
-----相關(guān)命令: groupadd ftpuser
-----相關(guān)文件: /etc/group
-----相關(guān)幫助: man groupadd
2 創(chuàng)建一個用戶,如testuser,建立用戶可用adduser命令.如果你已在先前建立了 testuser這個用戶,可以直接編輯/etc/passwd文件,把這個用戶加入到ftpuser這個組中.
-----相關(guān)命令: adduser testuser -g ftpuser
-----相關(guān)文件: /etc/passwd
-----相關(guān)幫助: man adduser
3 修改/etc/ftpaccess文件,加入guestgroup的定義: guestgroup ftpuser我是這樣改的,加的是最后5行
compress yes all
tar yes all
chmod no anonymous
delete no anonymous
overwrite no anonymous
rename no anonymous
chmod yes guest
delete yes guest
overwrite yes guest
rename yes guest
guestgroup ftpuser
除了加 guestgroup ftpuser 這行,其他4行也要加上,否則用戶登陸后,雖然可以達到用戶不能返回上級目錄的目的,但是卻只能上傳,不能覆蓋、刪除文件!
-----相關(guān)命令: vi /etc/ftpaccess
-----相關(guān)文件: /etc/ftpaccess
-----相關(guān)幫助: man ftpaccess,man chroot
4 向這個用戶的根目錄下拷貝必要的文件,拷貝ftp server自帶的目錄,把 /home/ftp/下的Bin,lib兩個目錄拷貝到這個用戶的根目錄下,因為一些命令(主要是ls)需要Lib支持,否則不能列目錄和文件.
-----相關(guān)命令:
cp -rf /home/ftp/lib /home/testuser;cp -rf /home/ftp/bin /home/testuser
5 另外可別忘了關(guān)掉用戶的telnet權(quán),否則就白做了噢. 怎么不讓用戶telnet呢?很簡單: 在/etc/shells里加一行/dev/null ,然后可以直接編輯/etc/passwd文件,把用戶的shell設(shè)置為/dev/null就可以了.
-----相關(guān)命令: vi /etc/passwd
這一步可以在步驟2 創(chuàng)建一個用戶時就先做好.
-----相關(guān)命令: adduser testuser -g ftpuser -s /dev/null
小經(jīng)驗:只要把/home/ftp下的bin和lib目錄cp到/etc/skel目錄里,以后新建用戶都會自動把bin和lib目錄CP到用戶目錄里,當然你也可以加上public_html目錄和cgi-bin目錄.
經(jīng)過以上設(shè)置,testuser這個用戶的所有FTP動作將限制在他的/home/testuser目錄中