以下的設定方式是由過去許多網站累積的經驗與建議組成。我們認為可以讓有個別需求的網站擁有不同設定的選擇。
I.設定匿名FTP
A.FTP daemon
網站必須確定目前使用的是最新版本的FTP daemon。
B.設定匿名FTP的目錄
匿名ftp的根目錄(~ftp)和其子目錄的擁有者不能為ftp帳號,或與ftp相同群組的帳號。這是一般常見的設定問題。假如這些目錄被ftp或與ftp相同群組的帳號所擁有,又沒有做好防止寫入的保護,入侵者便可能在其中增加檔案(例如:.rhosts檔)或修改其它檔案。許多網站允許使用root帳號。讓匿名FTP的根目錄與子目錄的擁有者是root,所屬族群(group)為system,并限定存取權(如chmod 0755),如此只有root有寫入的權力,這能幫助你維持FTP服務的安全。
以下是一個匿名ftp目錄的設定范例:
|
所有的檔案和鏈接庫,特別是那些被FTP daemon使用和那些在 ~ftp/bin 與~ftp/etc 中的檔案,應該像上面范例中的目錄做相同的保護。這些檔案和鏈接庫除了不應該被ftp帳號或與ftp相同群組的帳號所擁有之外,也必須防止寫入。
C.使用合適的密碼與群組檔案
我們強烈建議網站不要使用系統中 /etc/passwd 做為~ftp/etc 目錄中的密碼檔案或將系統中 /etc/group 做為 ~ftp/etc目錄中的群組檔案。在~ftp/etc目錄中放置這些檔案會使得入侵者取得它們。這些檔案是可自定的而且不是用來做存取控制。
我們建議你在 ~ftp/etc/passwd 與 ~ftp/etc/group 使用代替的檔案。這些檔案必須由root所擁有。DIR命令會使用這代替的檔案來顯示檔案及目錄的擁有者和群組名稱。網站必須確定 ~/ftp/etc/passwd檔中沒有包含任何與系統中 /etc/passwd文件中相同的帳號名稱。這些檔案應該僅僅包含需要顯示的FTP階層架構中檔案與目錄的擁有者與所屬群組名稱。此外,確定密碼字段是"整理"過的。例如使用「*」來取代密碼字段。
以下為cert中匿名ftp的密碼檔案范例
|
以下為cert中匿名ftp的群組檔案范例
|
II.在你的匿名ftp提供可寫入的目錄
讓一個匿名ftp服務允許使用者儲存檔案是有風險存在的。我們強烈提醒網站不要自動建立一個上傳目錄,除非已考慮過相關的風險。CERT/CC的事件回報成員接獲許多使用上傳目錄造成非法傳輸版權軟件或交換帳號與密碼信息的事件。也接獲惡意地將系統檔案灌報造成denial of service問題。
本節在討論利用三種方法來解決這個問題。第一種方法是使用一個修正過的FTP daemon。第二個方法是提供對特定目錄的寫入限制。第三種方法是使用獨立的目錄。
A.修正過的FTP daemon
假如你的網站計劃提供目錄用來做檔案上傳,我們建議使用修正過的FTP daemon對檔案上傳的目錄做存取的控制。這是避免使用不需要的寫入區域的最好的方法。以下有一些建議:
1.限定上傳的檔案無法再被存取, 如此可由系統管理者檢測后,再放至于適當位置供人下載。
2.限制每個聯機的上傳資料大小。
3.依照現有的磁盤大小限制數據傳輸的總量。
4.增加登錄記錄以提前發現不當的使用。
若您欲修改FTP daemon, 您應該可以從廠商那里拿到程序代碼,或者您可從下列地方取得公開的FTP程序原始碼:
|
CERT/CC 并沒有正式地對所提到的FTP daemon做檢測、評估或背書。要使用何種FTP daemon由每個使用者或組織負責決定,而CERT/CC建議每個機關在安裝使用這些程序之前,能做一個徹底的評估。
B.使用保護的目錄
假如你想要在你的FTP站提供上傳的服務, 而你又沒辦法去修改FTP daemon, 我們就可以使用較復雜的目錄架構來控制存取。這個方法需要事先規劃并且無法百分之百防止FTP可寫入區域遭不當使用, 不過許多FTP站仍使用此方法。
為了保護上層的目錄(~ftp/incoming),我們只給匿名的使用者進入目錄的權限(chmod751~ftp/incoming)。這個動作將使得使用者能夠更改目錄位置(cd),但不允許使用者檢視目錄內容。Ex:drwxr-x--x 4 root system 512 Jun 11 13:29 incoming/在~ftp/incoming使用一些目錄名只讓你允許他們上傳的人知道。為了要讓別人不易猜到目錄名稱, 我們可以用設定密碼的規則來設定目錄名稱。請不要使用本文的目錄名稱范例(避免被有心人士發現您的目錄名,并上傳檔案)
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/
很重要的一點是,一旦目錄名被有意無意的泄漏出來, 那這個方法就沒什么保護作用。
只要目錄名稱被大部分人知道, 就無法保護那些要限定使用的區域。假如目錄名被大家所知道, 那你就得選擇刪除或更改那些目錄名。
C.只使用一顆硬盤
假如你想要在你的FTP站提供上傳的服務, 而你又沒辦法去修改FTP daemon,您可以將所有上傳的資料集中在同一個掛(mount)在~ftp/incoming上的檔案系統。可以的話,將一顆單獨的硬盤掛(mount)在~ftp/incoming上。系統管理者應持續檢視這個目錄(~ftp/incoming), 如此便可知道開放上傳的目錄是否有問題。
III.限制FTP用戶目錄
匿名FTP可以很好地限制用戶只能在規定的目錄范圍內活動,但正式的FTP用戶默認不會受到這種限制,這樣,他可以自由在根目錄、系統目錄、其他用戶的目錄中讀取一些允許其他用戶讀取的文件。
如何才能把指定的用戶象匿名用戶一樣限制在他們自己的目錄中呢?以下我們以red hat和wu-ftp為例做一介紹。
1 創建一個組,用groupadd命令,一般可以就用ftp組,或者任何組名。
-----相關命令:groupadd ftpuser
-----相關文件:/etc/group
-----相關幫助:man groupadd
2 創建一個用戶,如testuser,建立用戶可用adduser命令。如果你已在先前建立了 testuser這個用戶,可以直接編輯/etc/passwd文件,把這個用戶加入到ftpuser這個組中。
-----相關命令:adduser testuser -g ftpuser
-----相關文件:/etc/passwd
-----相關幫助:man adduser
3 修改/etc/ftpaccess文件,加入guestgroup的定義:guestgroup ftpuser我是這樣改的,加的是最后5行:
|
除了加 guestgroup ftpuser 這行,其他4行也要加上,否則用戶登陸后,雖然可以達到用戶不能返回上級目錄的目的,但是卻只能上傳,不能覆蓋、刪除文件!
-----相關命令:vi /etc/ftpaccess
-----相關文件:/etc/ftpaccess
-----相關幫助:man ftpaccess,man chroot
4 向這個用戶的根目錄下拷貝必要的文件,拷貝ftp server自帶的目錄,把 /home/ftp/下的bin,lib兩個目錄拷貝到這個用戶的根目錄下,因為一些命令(主要是ls)需要Lib支持,否則不能列目錄和文件。
-----相關命令:
cp -rf /home/ftp/lib /home/testuser;cp -rf /home/ftp/bin /home/testuser
5 另外可別忘了關掉用戶的telnet權,否則就白做了噢。怎么不讓用戶telnet呢?很簡單:在/etc/shells里加一行/dev/null,然后可以直接編輯/etc/passwd文件,把用戶的shell設置為/dev/null就可以了。
-----相關命令:vi /etc/passwd
這一步可以在步驟2 創建一個用戶時就先做好。
-----相關命令:adduser testuser -g ftpuser -s /dev/null
小經驗:只要把/home/ftp下的bin和lib目錄cp到/etc/skel目錄里,以后新建用戶都會自動把bin和lib目錄CP到用戶目錄里,當然你也可以加上public_html目錄和cgi-bin目錄。
經過以上設置,testuser這個用戶的所有FTP動作將限制在他的/home/testuser目錄中。
責任編輯 趙毅 zhaoyi#51cto.com TEL:(010)68476636-8001


