ITPub博客

首页 > IT基础架构 > 网络安全 > 简易FTP Server 架设 -- Wu FTP

简易FTP Server 架设 -- Wu FTP

原创 网络安全 作者:m77m78 时间:2007-04-11 17:00:49 0 删除 编辑

[@more@]

簡易 FTP Server 架設 -- Wu FTP
原理:
    File Transfer Protocol ( FTP ) 是相當古老的網路協定之一,他最主要的功能就是進行 Server 端與 Client 端之間的檔案傳送的功能啦!FTP 其實是以 TCP 封包的模式進行 Server 與 Client 之間的連線,當連線建立之後,使用者可以在 Client 端連上 Server 端進行檔案的下載與上傳,此外,還可以直接管理用戶在 Server 上面的檔案呢,相當的方便!而這個最古老的 FTP 伺服器軟體,大概要算是 Wu FTP 了,所以,底下我們將針對 Wu FTP 進行設定的說明喔!
     

    FTP 的功能簡介
     
    FTP 主機除了單純的進行檔案的傳輸與管理之外,其實他還提供了幾個主要的功能,底下我們約略的來談一談:
     
    1. 不同等級的使用者身份:FTP 預設的情況下可以提供三種主要的身份,分別是(1)實體帳號,real user;(2)訪客, guest;(3)匿名登入者, anonymous 這三種。分成三種身份主要可以做為主機的控管上面的便利性,而且也可以將使用者作一個有效的管理呢!例如實體用戶可以進行的動作可能會比較多一些,至於匿名登入者,大概我們就僅提供他下載一下資源而已,並不許匿名者使用太多主機的資源啊!當然,這三種人物能夠使用的『線上指令』自然也就不相同囉! ^_^
       
    2. 命令記錄與登錄檔記錄:FTP 可以利用系統的 syslogd 這個 daemon 來進行資料的紀錄,而記錄的資料包括了使用者曾經下達過的命令與使用者傳輸資料(傳輸時間、檔案大小等等)的紀錄呢!
       
    3. 限制或解除使用者家目錄所在(change root, 簡稱 chroot):為了避免使用者在您的 Linux 系統當中隨意逛大街,意指離開使用者家目錄而進入到 Linux 系統的其他目錄去,所以將使用者的工作範圍『侷限』在使用者的家目錄底下,嗯!實在是個不錯的好主意!FTP 可以限制使用者僅能在自己的家目錄當中活動喔!如此一來,由於使用者無法離開自己的家目錄,而且登入 FTP 後,顯示的『根目錄』就是自己家目錄的內容,這種環境稱之為 change root ,簡稱 chroot ,改變根目錄的意思啦!這有什麼好處呢?當一個惡意的使用者以 FTP 登入您的系統當中,如果沒有 chroot 的環境下,他可以到 /etc, /usr/local, /home 等其他重要目錄底下去察看檔案資料,尤其是很重要的 /etc/ 底下的設定檔,如 /etc/passwd 等等。這樣他就有辦法取得系統的某些重要資訊,用來『入侵』您的系統呢!所以在 chroot 的環境下,當然就比較安全一些咯!
     

    FTP 的咦髁鞒膛c使用到的 port
     
    FTP 正常情況下的連線方向:
    我們在網路基礎當中得知,TCP 這種封包由於需要經過 Server 端與 Client 端兩邊的『三向交握』之後,才能確定連線,因此,他可以說是一個比較『可靠』的連線模式,因為雙邊都已經經過確認(ACK)的動作,所以,當然會較為『可靠了』!那麼既然 FTP 主要的工作是讓 Client 與 Server 端可以進行檔案的傳輸,自然需要較為可靠的連線囉,不然檔案資料傳到一半竟然損毀時,怎麼辦?!因此,FTP 當然就是以 TCP 這種封包來進行連線的。在這裡,我們不厭其煩的,再次說明一下 FTP 在正常模式情況(或者稱為主動模式, active)下,主機與 client 端到底是如何建立連線的呢(在不考慮防火牆與其他不知名因素的情況下)?
     
    1. Client 端主動向 Server 端發送連線需求:由於是用戶端想要連上 FTP 主機,所以呢,當然連線的方向首先會由 Client 發起!此時,Client 端隨機選取一個大於 1024 以上的 port 來主動的連線到 FTP 主機提供的 FTP 埠口(通常為port 21),而由於是主動的連線封包,所以這個連線會帶有 SYN 的標誌在;
       
    2. Server 端接受後,回應給 Client 端:當 Server 接收到 Client 的要求之後,會回應 Client 端的需求,此時 Server 端會建立等待連線的資源,並且將一帶有 SYN 與確認 (ACK) 的封包送回 Client 端;
       
    3. Client 端回應確認封包:在 Client 端接收到來自 Server 端告知的封包後,會再次的發送一個確認封包給主機,此時,兩邊才會正式的建立起連線的通道,這個步驟 1 ~ 3 就是 Three-Way Handshake(三向交握的啦!)。需要注意的是,這個已經建立連線的通道(通常是 port 21)僅能進行 FTP 的『指令』而已,如果該指令涉及到資料的傳送(data transfer)時,例如上傳或下載等等,那麼就需要額外建立一條資料傳輸的通道才行 ( ftp-data )!而資料傳輸的通道建立則需要繼續底下的步驟;
       
    4. Client 端發送資料傳輸要求的命令給 Server:當需要進行資料的傳輸時,Client 端會啟用另一個高於 1024 的埠口來做為連線的準備(這個高於 1024 的埠口與步驟 1 那個埠口不是同一個!),並且 Client 端會主動的利用剛剛已經建立的指令通道(通常是 port 21)發送一個命令告訴 Server 說:『我已經準備好一個資料傳輸的埠口了,請準備進行傳輸吧』!特別留意喔,這個時候 Client 是透過『命令通道』來對 Server 下達命令的,而且已經通知 Server 我(client)要啟用的埠口了喔!
       
    5. Server 端以 ftp-data 埠口主動連線到 Client :收到命令之後的 Server 會『主動』的以 ftp-data 埠口(一般為 port 20)向 Client 端通知的那個高於 1024 的埠口進行連線,特別需要留意的是,此時是『Server 端主動向 Client 端的連線』喔,所以該連線的 TCP 封包會帶有一個 SYN 的標誌在;
       
    6. Client 端回應主機端,並繼續完成三向交握:在接到 Server 來的封包之後, Client 會回應一個帶有 ACK 確認的封包,並繼續來完成另一個三向交握的程序,此時,資料傳輸的通道才正式的建立。
     
    如此一來則成功的建立起『命令』與『資料傳輸』兩個通道!不過,要注意的是,『資料傳輸通道』是在有資料傳輸的行為時才會建立的通道喔!並不是一開始連接到 Server 就立刻建立的通道呢!留意一下囉!
     
    使用到的 port:
    由上面的連線資料來看,其實我們會用到的主機的兩個埠口分別是:
     
      (1)命令通道的 ftp (預設為 port 21 ) 與
      (2)資料傳輸的 ftp-data (預設為port 20)。
     
    這兩個埠口的工作是不一樣的,首先,那個 port 21 主要是用在接收 Client 端下達的命令之用,例如顯示目錄內的檔案內容 dir 以及上傳下載 (put, get) 等等的指令的;至於 port 20 剛剛上頭約略提過了,就是用在資料傳輸的時候才會建立的一個連線呢!而且,重要的是,兩者的連線方向是不一樣的!首先, port 21 主要接受來自 Client 端的主動連線,至於 port 20 則為主動連線至 Client 端呢!這樣的情況在 Server 與 Client 兩者同時為公共 IP (Public IP) 的 Internet 上面,通常沒有太大的問題,不過,萬一你的 Client 端是在防火牆後端,或者是 NAT 主機後端呢?會有什麼問題發生呢?底下我們來談一談這個嚴重的問題!
     
    在 NAT 或者防火牆後端的 FTP Client 連線問題:
    萬一你的 FTP client 是在 NAT 主機的後端,那由於我們的 NAT 主機會自動的紀錄 client 端向外連線的資訊,所以在 Client 依上面步驟 1 送出要求封包後,步驟 2 的 FTP 回傳的封包可以透過 NAT 轉交給 client ,這沒有問題!所以, Client 連接到 Server 的命令通道 ( port 21 )可以正確的被建立起來的。不過,萬一 Client 端在建立起了命令通道之後,對 Server 下達資料傳輸的命令呢?連線會是如何?我們以底下的圖示來說明好了:
    1. 由於目前的 NAT 主機可以記錄由內部電腦連線出去的資訊,因此,藉由 port 21 的連線可以順利的被建立起來;
    2. 當 Client 端由 port 21 下達資料傳輸的命令時,此時『個人PC』會告訴 FTP Server 說:『我開了一個 >1024 的埠口等你來連線喔』!
    3. 這個時候要特別留意的是,『個人PC』經過NAT主機連線後,在 FTP Server 看到的『個人PC』的 IP 其實是 NAT 那部主機的!所以,這個時候 FTP Server 會主動的由 port 20 向 NAT 主機的 >1024 那個 port 要求建立連線!(請翻閱NAT主機一章)
     
    瞭解問題的所在了嗎?原本我們的 FTP 主機要連線的其實是『個人PC』這部電腦的 >1024 那個 port ,不過,由於 NAT 的關係,所以卻造成了連線是向 NAT 主機的 >1024 那個 port 進行主動連線的!如此一來,想當然爾,NAT 主機並沒有啟動 >1024 那個 port 等 FTP 主機來連線,所以自然無法成功的建立起連線,這個時候你就會看到『Can't build data connection: Connection refused, 無法進行資料傳輸』之類的訊息了!啊!真是慘啊! @_@
     
    那有沒有辦法可以克服這個問題呢?難道真的在 NAT 主機後面就一定無法使用 FTP 嗎?當然不是!目前有兩個簡易的方法可以克服這個問題:
     
    1. 使用 Linux NAT 主機的 iptables 預設模組,亦即 ip_conntrack_ftp 與 ip_nat_ftp 這兩個核心模組!應用 modprobe 這個指令就可以將這兩個模組載入了!我們剛剛說過,既然 iptables (NAT 主機)可以記錄 client 端向外連線的資訊,而 client 端向 server 端要求資料傳輸時,會主動告知 Server 我(client) 要等你來連線的 port ,因此,這兩個聰明的模組可以透過檢查 NAT 主機內的資訊而加以應用,那就可以讓 Server 與 Client 端建立 ftp-data 的連線啦!不過,這兩個模組並不是萬能的,因為這兩個模組目前僅能針對預設的 ftp-data(port 20) 進行檢驗的工作,萬一您連線的是一個使用非 port 20 為 ftp-data 傳輸的主機時,那這兩個模組就沒有辦法發揮其效能了!
       
    2. 另一個方法就是使用被動式連線 (passive)!什麼是被動式連線呢?想一想,既然『主機主動』連線到我的 NAT 後面的 client 不能成功,那麼我反其道而行,如果以 client 來連到 server 呢?是否就變成如同 port 21 相似的連線方向,如此一來不就可以成功的建立連線了嗎?呵呵!沒錯,而且也不需要啟動上面兩個模組了,並且也不擔心 FTP Server 是否啟用非 port 20 的 ftp-data port 啦!這部份我們底下說明喔。
     

    什麼是『被動, passive』的連線
     
    既然在 NAT (或防火牆) 後端的 client 無法讓主機主動的來建立連線,那麼我就讓主機『被動的等我 client 去連線』啊!果真如此的話,那麼我的連線狀態變成如何了呢?
     
    1. Client 端主動向 Server 端發送連線需求:
       
    2. Server 端接受後,回應給 Client 端:
       
    3. Client 端回應確認封包:上面這三個步驟與主動式連線一樣,同樣的完成三向交握後,建立命令通道了!底下說明被動式資料傳輸通道的建立。
       
    4. Client 端發送資料傳輸要求的命令給 Server:與主動式連線不一樣的是,在被動式連線時,Client 端在下達命令之後,並告訴 FTP Server 說『我要使用 PASV 模式(就是 passive 啦!)的方式來進行資料傳輸』;
       
    5. Server 端挑選 > 1024 的埠口等待連線:在接受 client 的 PASV 要求之後,如果沒有特別的設定時 (目前的 FTP 伺服器版本已經可以指定 passive port 來規定被動式連接的埠口號碼 ) ,Server 會隨機選取一個大於 1024 的埠口,並經由命令通道告訴 client 端說:『我已經開了一個 ftp-data 的埠口等妳連線喔!』並開始等待 client 端的連線;
       
    6. Client 端主動向 Server 端建立連線並繼續完成三向交握:經由命令通道得知 Server 的埠口之後, Client 端會隨機挑選另一個大於 1024 的埠口,並主動向 Server 端的等待連線的埠口進行連線動作,所以此連線封包是帶有 SYN 的標誌的喔!然後 Server 會回應一個帶有 ACK 確認的封包,並繼續來完成另一個三向交握的程序,此時,資料傳輸的通道就正式的建立。
     
    發現上面的不同點了嗎?呵呵!如此一來,在 NAT 主機內部的 Client 就可以順利的連接上 FTP Server 了!這就是在 FTP 連線裡面的所謂被動式連線囉!但是,萬一 FTP 主機是在 NAT 後端那怎麼辦.....呵呵!那可就糗了吧~ @_@這裡就牽涉到更深入的 DMZ 技巧了,我們這裡暫不介紹這些深入的技巧,先理解一下這些特殊的連線方向,這將有助於您未來伺服器架設時候的考慮因素喔!
     
    此外,不曉得您有無發現,呵呵!透過 PASV 模式,Server 在沒有特別設定的情況下,會隨機選取大於 1024 的 port 來提供 Client 端連接之用。那麼萬一主機啟用的 port 被搞鬼怎麼辦?而且,如此一來也很難追蹤來自入侵者攻擊的登錄資訊啊!所以,這個時候我們可以透過 passive ports 的功能來『限定』主機取用的 port number 喔!
     

    FTP 的安全性問題與替代方案
     
    事實上,FTP 是一個不太安全的協定呢!怎麼說呢?很簡單啊!因為 FTP 與 Telnet 相似的,他是以『明碼』的狀態在 Internet 上面流竄的,所以當然就容易被有心人士將你的資料給他抓下來,並且加以利用啦!因此,他當然不是很安全啊!所以,在網路上大家才會常常告誡說,不要隨意架設 FTP 網站啊!否則主機怎麼被破解的都不曉得哩!此外,由於 FTP 軟體常常會有漏洞的問題,因此也要常常更新套件喔!另外,其實拜 SSH 所賜,目前我們已經有較為安全的 FTP 了,那就是 ssh 提供的 sftp 這個 server 啊!這個 sftp-server 最大的優點就是:『他是經過加密的資料!』所以在 Internet 上面流竄的時候,嘿嘿!畢竟是比較安全一些啦!所以,建議您,除非必要,否則的話,使用 SSH 提供的 sftp-server 功能即可~然而這個功能對於一些習慣了圖形介面,或者是有中文檔名的使用者來說,實在是不怎麼方便,因為目前還沒有很棒的 sftp-server 的圖形介面軟體說~所以,有的時候,FTP 站還是有其存在的需要的。如果真的要架設 FTP 網站,那麼還是得需要注意幾個事項喔:
     
    1. 隨時更新到最新版本的 FTP 軟體,並隨時注意漏洞訊息;
    2. 善用 iptables 來規定可以使用 FTP 的網域;
    3. 善用 TCP_Wrappers 來規範可以登入的網域;
    4. 善用 FTP 軟體的設定來限制使用您 FTP 主機的使用者的不同權限啊;
    5. 使用 Super daemon 來進階管理您的 FTP 主機;
    6. 隨時注意使用者的家目錄、以及匿名使用者登入的目錄的『檔案權限』;
    7. 若不對外公開的話,或許也可以修改 FTP 的 port 。
     
    無論如何,在網路上聽過太多人都是由於開放 FTP 這個伺服器而導致整個主機被入侵的事件,所以,這裡真的要給他一直不斷的強調,要注意安全啊!
     

    什麼時候才要設定 FTP 啊!開放誰人連進來
     
    既然(1)FTP 不怎麼安全(2)FTP 的使用者身份至少有三種,那麼在設定 FTP 伺服器之前就需要針對這些不同身份者的登入限制來做規劃囉!以達成較為安全的管理啊!底下我們談一些大致的概念性問題,這些真的是蠻概念的~看看即可!
     
    開放的用戶身份與可能造成的危害
    建議事項
    實體用戶(Real user)
    • 在預設的條件下,開放 FTP 本來就提供了實體用戶登入之用。
    • 不過,需要瞭解的是,以實體用戶做為 FTP 登入者身份時,基本上,系統並沒有針對實體用戶來進行『限制』的,所以他可以針對整個檔案系統進行任何的工作。因此,如果您的 FTP 使用者沒能好好的保護自己的密碼,導致被入侵,那麼你的整個 Linux 系統將很有可能被毀滅啊!
    • 由於實體用戶本來就可以透過網路連接到主機來進行工作,因此實在沒有特別的需要開放 FTP 的服務啊!例如 sftp 本來就能達到傳輸檔案的功能囉!
    • 如果確定要讓實體用戶使用者利用 FTP 伺服器的話,那麼您就需要避免讓幾個系統用的帳號可以登入!這個時候可以將『不想讓他登入』的帳號寫入 /etc/ftpusrs 這個檔案當中啊!例如 root 就是個很好的例子!
    訪客(Guest)
    • 通常會建立 guest 身份的案例當中,多半是由於主機提供了類似『個人 Web 首頁』的功能給一般身份使用者,那麼這些使用者總是需要管理自己的網頁空間吧?這個時候將使用者的身份壓縮成為 guest ,並且將他的可用目錄設定好,即可提供使用者一個方便的使用環境了!且不需要提供他 real user 的權限喔!
    • 僅提供需要登入的帳號即可,不需要提供系統上面所有人均可登入的環境啊!
    • 當然,我們在主機的設定當中,需要針對不同的訪客給他們不一樣的『家目錄』,而這個家目錄與使用者的權限設定需要相符合喔!例如要提供 test 這個人管理他的網頁空間,而他的網頁空間放置在 /home/test/www 底下,那我就將 test 在 FTP 提供的目錄僅有 /home/test/www 而已,比較安全啦!而且也方便使用者啊!
    • 針對這樣的身份者,需要設定較多的限制,包括:上下傳檔案數目與硬碟容量的限制、連線登入的時間限制、許可使用的指令要減少很多很多,例如 chmod 就不要允許他使用等等!
    匿名者(anonymoust)
    • 提供匿名登入實在不是個好主意~因為畢竟你的系統為何要讓別人登入利用呢?
    • 不過,如果是提供整個學校單位來利用的話,那就另當別論了!
    • 無論如何,提供匿名登入都是一件相當危險的事情,因為,只要您一不小心,將重要的資料放置到匿名者可以讀取的目錄中時,那麼就很有可能會洩密!與其戰戰兢兢,不如就不要設定啊~
    • 果真要開放匿名登入時,很多限制都要進行的,這包括:(1)允許的工作指令要減低很多,幾乎就不許匿名者使用指令啦、(2)限制檔案傳輸的數量,盡量不要允許『上傳』資料的設定、(3)限制匿名者同時登入的最大連線數量,可以控制盜連喔!
     

套件安裝:
事實上,使用 Wu ftp 來架設你的 FTP 伺服器時,還是以 RPM 的方式來安裝比較好啦!另外,如果您的 Linux distribution 提供其他版本的 FTP 伺服器,呵呵!那麼就不要使用 wu ftp 也沒有關係啊!這是因為 wu ftp 實在是太古老了,所以很多的駭客軟體都是針對他來設計的,也因為如此啊,所以才會產生『Wu FTP 伺服器比較不安全』的情況啊!好了,底下我們以 Red Hat 7.x 的版本來進行說明吧。基本上,一個 FTP 伺服器包含 Server 與 Client 用途的套件至少要有:
 
[root@test root]# rpm -qa | grep ftp
ncftp-3.0.3-6
ftp-0.17-12
wu-ftpd-2.6.1-20
 
其中:
  • wu-ftpd :這就是主要的 FTP 伺服器套件啦!
  • ftp :提供 ftp 指令,就是 client 端的工具啦!
  • ncftp :提供匿名登入的 FTP 網站的 client 端相當棒的另一套連線 FTP 軟體!
如果沒有安裝,請馬上安裝吧!如果不曉得怎麼安裝,那麼請拿出『鳥哥的 Linux 私房菜 -- 基礎學習篇』好好的將 mount CD 的指令、搜尋的指令,以及 RPM 的指令瞧一瞧先!

Server 端設定:
    其實 Server 端的設定最主要的就僅有 /etc/ftpaccess 這個主要設定檔啦!幾乎只要他搞定了,FTP 就不會有問題說~不過,由於 FTP 的高危險性,所以其他幾個跟安全較有相關的檔案我們也得來瞧一瞧才行啊!因此上,我們首先就需要來瞭解一下 wu ftp 到底有哪些設定檔案與執行檔呢?
     

    Wu FTP 的結構
     
    Wu FTP 的檔案結構先來瞭解一下,才好繼續進行說明啊!底下主要粗分為設定檔與執行檔進行說明喔!
     
    設定檔: Wu FTP 的設定檔主要有底下這幾個:
    • /etc/ftpaccess:這是最主要的設定檔了!所有跟 Wu FTP 有關的設定內容,都可以在這個檔案做修訂;
    • /etc/pam.d/ftp, 與 /etc/ftpusers:這兩個檔案與 PAM 模組關係較大!在預設的情況中,只要在 /etc/ftpusers 這個檔案內的使用者『都不能使用 FTP 的服務』
    • /etc/ftphosts:用來允許或拒絕(allow/deny)某部主機或者某位使用者是否能夠登入 FTP 主機的設定檔案,基本上,這檔案裡面的設定也可以直接在 /etc/ftpaccess 當中設定喔!
    • /etc/xinetd.d/wu-ftpd:這個是用來啟動 FTP 的 daemon 設定檔案~當然啦,主要是掛在 xinetd 這個 daemon 下的,如果是掛在 inetd 這個 daemon 時,就有可能是 /etc/inet.d 底下的檔案囉!
     
    執行檔:除了上面提到的這些設定檔之外,還有一些執行檔也需要瞭解一下:
    • ftpcount :主要用來計算『目前連線的人數』,可以計算出各種身份的連線人數啊!
    • ftpwho:可以顯示出『目前連線的使用者是那個 User ?使用那個 PID?動作多久了?』等等的資訊呢!
    • ftprestart:重新啟動 ftp 啊!
    • ftpshut:指定時候關閉 FTP 的一個指令喔!
    • in.ftpd:這個就是主要的 Wu FTP 的 daemon 囉!我們啟動的 wu ftp 就是他的工作呢!

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/34329/viewspace-909985/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-04-25

  • 博文量
    168
  • 访问量
    764675