现在的位置: 首页 > 综合 > 正文

簡易 FTP Server 架設 — Wu FTP[转]

2012年07月07日 ⁄ 综合 ⁄ 共 14158字 ⁄ 字号 评论关闭

簡易
FTP Server
架設
-- Wu FTP

本文已不再維護,更新文章請參考 vsftpd的介紹

最近更新日期:2003/09/13

 

在 Internet 上面的傳輸協定當中,
FTP ( File Transfer Protocol ) 算是一個最古老的協定之一了!早期還沒有這麼多好用的協定之前(
例如 SAMBA ),都是使用 FTP 來進行資料的傳遞的呢!另外,一般來說,資料的傳輸以
FTP 這個協定來傳送是相當的快速的,而且某些場合當中其實也相當的方便。不過,值得注意的是,使用
FTP 來傳輸時,其實是具有一定程度的『危險性』,因為資料在 Internet 上面是完全沒有受到保護的『明碼』機制!所以,其實鳥哥不太建議大家使用這個伺服器的啦!尤其當你建置好了
FTP 之後,如果經常進行資料的傳遞,對於您的網路頻寬『真的有很大的損害』啊!不過,無論如何,
FTP 仍然有其存在的必要!例如中山大學的 FTP 站就作的相當的棒啊!所以,底下我們就來談一談用在這個古老的協定上面,最古老的伺服器之一:
Wu FTP

 
原理
  :FTP 的功能簡介
  :FTP 的運作流程與使用到的 Port
  :什麼是『被動, passive』的連線
  :FTP 的替代方案與安全性問題
  :什麼時候才要設定 FTP 啊!開放誰人連進來
套件安裝
Server 端設定
  :Wu FTP 的結構
  :最簡單的 ftpaccess 設定檔
  :使用 Super daemon 管理 FTP 的情況
  :歡迎畫面的建立、 Readme 檔案與關閉 FTP 訊息內容
  :限制最大線上人數
  :限制與取消使用者的家目錄規範
  :時間相關的設定項目
  :流量與上傳下載總量的限制項目
  :創造 guest user 與 guest user 的家目錄問題
  :anonymous 的根目錄與建立可上傳目錄
  :針對人物(real, guest, anonymous)的限制設定項目
  :拒絕某些使用者與開放某些使用者的登入(/etc/ftphosts,
deny-uid, allow-uid)

  :目錄與連結檔的問題
  :建立 passive port 提供 client 端登入
  :修改 FTP 預設的 port 21 的連線
  :一個多樣化的實例
Client 端的使用 FTP 軟體
  :ftp
  :ncftp
Server 端的安全設定項目
  :iptables
  :TCP_Wrappers
  :pam 模組與 /etc/ftpusers 的關係
  :FTP 本身提供的抵擋 username 或 host 的控制項目
重點回顧
參考資源
本章習題練習


原理: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
    這三種。分成三種身份主要可以做為主機的控管上面的便利性,而且也可以將使用者作一個有效的管理呢!例如實體用戶可以進行的動作可能會比較多一些,至於匿 名登入者,大概我們就僅提供他下載一下資源而已,並不許匿名者使用太多主機的資源啊!當然,這三種人物能夠使用的『線上指令』自然也就不相同囉! ^_^

 

       

    1. 命令記錄與登錄檔記錄:FTP 可以利用系統的 syslogd 這個 daemon 來進行資料的紀錄,而記錄的資料包括了使用者曾經下達過的命令與使用者傳輸資料(傳輸時間、檔案大小等等)的紀錄呢!

     

         

      1. 限制或解除使用者家目錄所在(change root, 簡稱 chroot):為了避免使用者在您的 Linux 系統當中隨意逛大街,意指離開使用者家目錄而進入到 Linux 系統的其他目錄去,所以將使用者的工作範圍『侷限』在使用者的家目錄底下,嗯!實在是個不錯的好主意!FTP 可以限制使用者僅能在自己的家目錄當中活動喔!如此一來,由於使用者無法離開自己的家目錄,而且登入 FTP 後,顯示的『根目錄』就是自己家目錄的內容,這種環境稱之為 change root ,簡稱 chroot ,改變根目錄的意思啦!這有什麼好處呢?當一個惡意的使用者以 FTP 登入您的系統當中,如果沒有 chroot 的環境下,他可以到 /etc, /usr/local, /home 等其他重要目錄底下去察看檔案資料,尤其是很重要的 /etc/ 底下的設定檔,如 /etc/passwd 等等。這樣他就有辦法取得系統的某些重要資訊,用來『入侵』您的系統呢!所以在 chroot 的環境下,當然就比較安全一些咯!

       

       


      FTP
      的運作流程與使用到的 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 的標誌在;

       

           

        1. Server 端接受後,回應給 Client 端:當 Server 接收到 Client 的要求之後,會回應 Client 端的需求,此時 Server 端會建立等待連線的資源,並且將一帶有 SYN 與確認 (ACK) 的封包送回 Client 端;

         

             

          1. Client 端回應確認封包:在 Client 端接收到來自 Server 端告知的封包後,會再次的發送一個確認封包給主機,此時,兩邊才會正式的建立起連線的通道,這個步驟 1 ~ 3 就是 Three-Way Handshake(三向交握的啦!)。需要注意的是,這個已經建立連線的通道(通常是
            port 21)僅能進行 FTP 的『指令』而已,如果該指令涉及到資料的傳送(data transfer)時,例如上傳或下載等等,那麼就需要額外建立一條資料傳輸的通道才行
            ( ftp-data )!而資料傳輸的通道建立則需要繼續底下的步驟

           

               

            1. Client 端發送資料傳輸要求的命令給 Server:當需要進行資料的傳輸時,Client 端會啟用另一個高於 1024 的埠口來做為連線的準備(這個高於
              1024 的埠口與步驟 1 那個埠口不是同一個!
              ),並且 Client 端會主動的利用剛剛已經建立的指令通道(通常是 port 21)發送一個命令告訴 Server 說:『我已經準備好一個資料傳輸的埠口了,請準備進行傳輸吧』!特別留意喔,這個時候
              Client 是透過『命令通道』來對 Server 下達命令的,而且已經通知 Server 我(client)要啟用的埠口了喔

             

                 

              1. Server 端以 ftp-data 埠口主動連線到 Client :收到命令之後的 Server 會『主動』的以 ftp-data 埠口(一般為 port 20)向 Client 端通知的那個高於 1024 的埠口進行連線,特別需要留意的是,此時是『Server
                端主動向 Client 端的連線
                』喔,所以該連線的 TCP
                封包會帶有一個 SYN 的標誌在

               

                   

                1. 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
                    傳輸的主機時,那這兩個模組就沒有辦法發揮其效能了!

                   

                    1. 另一個方法就是使用被動式連線 (passive)!什麼是被動式連線呢?想一想,既然『主機主動』連線到我的
                      NAT 後面的 client 不能成功,那麼我反其道而行,如果以 client 來連到 server
                      呢?是否就變成如同 port 21 相似的連線方向,如此一來不就可以成功的建立連線了嗎?呵呵!沒錯,而且也不需要啟動上面兩個模組了,並且也不擔心
                      FTP Server 是否啟用非 port 20 的 ftp-data port 啦!這部份我們底下說明喔。

                     

                     


                    什麼是『被動,
                    passive』的連線

                         

                     

                        既然在 NAT (或防火牆) 後端的 client 無法讓主機主動的來建立連線,那麼我就讓主機『被動的等我 client 去連線』啊!果真如此的話,那麼我的連線狀態變成如何了呢?

                     

                         
                    1. Client 端主動向 Server 端發送連線需求

                     

                         

                      1. Server 端接受後,回應給 Client 端

                       

                           

                        1. Client 端回應確認封包:上面這三個步驟與主動式連線一樣,同樣的完成三向交握後,建立命令通道了!底下說明被動式資料傳輸通道的建立。

                         

                             

                          1. Client 端發送資料傳輸要求的命令給 Server:與主動式連線不一樣的是,在被動式連線時,Client 端在下達命令之後,並告訴 FTP Server 說『我要使用
                            PASV 模式(就是 passive 啦!)的方式來進行資料傳輸
                            』;

                           

                               

                            1. Server 端挑選 > 1024 的埠口等待連線:在接受 client 的 PASV 要求之後,如果沒有特別的設定時 (目前的 FTP 伺服器版本已經可以指定 passive port 來規定被動式連接的埠口號碼 ) ,Server 會隨機選取一個大於 1024 的埠口,並經由命令通道告訴 client 端說:『我已經開了一個 ftp-data 的埠口等妳連線喔!』並開始等待 client 端的連線;

                             

                                 

                              1. 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 就是他的工作呢!

                                   

                              用戶端的使用執行檔

                                  :這個部分的指令並不是 wu ftp 所提供的,但是粉重要,所以先提出說明喔!

                                  • ftp:就是最陽春的 client 端軟體囉!
                                  • ncftp:可以使用在匿名 FTP 網站喔!相當棒的軟體!可以支援整個目錄的下載呢!

                                   

                               

                                  呵呵!接下來就是那個主要的 FTP 設定檔的設定部分啦!

                               

                                   

                               


                              最簡單的
                              ftpaccess 設定檔

                                   

                               

                                  事實上,與 Wu FTP 關係最大的就是 /etc/ftpaccess 這個檔案啦!只要他設定好,其他的地方相對都不成問題的!而其實 Wu FTP 一開始已經幫我們設定好一個最簡單的 ftpaccess 檔案,我們先來談一談這個檔案的幾個主要的設定項目,然後再來繼續其他的設定項目呢!

                               

                                   
                              [root@test
                              root]#
                              vi /etc/ftpaccess

                              # 1. 設定人物群組名稱
                              #   設定這個
                              FTP 伺服器的人物身份設定,使用 class 來設定的!他的語法是:

                              #   class <人物群組名稱> <用戶身份1,用戶身份2,..> <允許連線的來源>
                               
                              class  
                              all   real,guest,anonymous  *

                               
                              # 上面的意思是說,我設定一個類別群組為
                              all ,這個 all  裡面就包含了

                              # 三種身份的使用者,就是
                              FTP 預設的 real, guest 與 anonymous 這三個,

                              # 需要注意的是,這三個類別的使用者之間是以逗號『,』隔開的,並沒有空白字元
                              # 而這個 class
                              允許的來源來自任何地方『*』。

                              # 這個 class
                              可以多重設定,並且,萬一重複設定時,以第一個出現的 class 類別

                              # 為準!舉個例子,假如我的
                              FTP 裡面的 real 僅允許學術網路登入,至於其他

                              # 的 guest
                              與 anonymous 則雖然可以由任何地方登入,但是不可以由 chinait.com

                              # 這個網域以及
                              61.141.0.0/16 這個網域登入時,那我可以這樣設定兩個 class 喔:

                              # class allone real,guest,anonymous *.edu.tw
                              # class alltwo guest,anonymous  !*.chinait.com !61.141.0.0/16 *
                              # 請注意到,驚嘆號『!』有代表『否,不允許』的意思存在,而星號『*』則代表
                              # 任何地方的意思,則如上面所設定時,如此一來,學術單位可以連到我的
                              FTP ,

                              # 至於 guest
                              與 anonymous 則可以任何地方連進,當然,除了上面的兩個網域之外

                              # 所以說,經由這個
                              class 的設定,就可以輕易的將三種身份是否可以登入主機的

                              # 狀態搞定了!
                              ^_^

                               
                              # 2. 設定系統的
                              FTP 管理員的 e-mail 信箱位址,與主機名稱!

                              #   單純的就是顯示出系統當中
                              FTP 伺服器管理員的網址啦!預設的設定如下:

                               
                              email root@localhost
                              hostname vbird.adsldns.org
                               
                              # 一般來說,我會將這個
                              e-mail 後面的位址寫上可以被使用者發信的信箱,例如:

                              # email testing@test.adsldns.org
                              # 這樣的格式!這個
                              email 可能會出現在進出網站時的歡迎畫面當中!

                              # 最大的任務是:當使用者發現問題的時候,可以跟系統的管理員聯絡啊!
                              # 所以當然要寫下『可以收信』的正常
                              email 囉!

                              # 至於那個
                              hostname 則僅與歡迎畫面時的變數有關!

                               
                              # 3. 允許同一次連線當中,錯誤登入的次數
                              #   為了避免被不明攻擊者的『暴力攻擊』法,所以在一次連線當中,
                              #   僅允許對方最多有
                              5 次的登入機會,如果密碼或 ID 一直發生錯誤,

                              #   則會將該連線『踢』掉的啦!
                               
                              loginfails
                              5

                               
                              # 當然囉!如果您想將登入的次數改小一點的話,也可以使用『loginfails
                              3』

                               
                              # 4. 向使用者顯示『README,
                              讀我』檔案的內容訊息!

                              #  當使用者登入或者變換目錄時,若目的端目錄有
                              README 這個檔案時

                              #  (可以附加檔名),則向使用者顯示該檔案的內容!語法為:
                              #  <readme> <README*> <動作>
                              #  一般來說,動作有『登入』與『變換目錄』,代號為
                              login 與 cwd=*

                               
                              readme 
                              README*    login

                              readme 
                              README*    cwd=*

                               
                              # 舉個例子來說,我是
                              testing 這個身份的使用者,在我的家目錄內有個檔案:

                              # /home/testing/data/README.important
                              # 那麼當我使用
                              FTP 軟體連進我的家目錄 (/home/testing) 然後切換目錄到

                              # /home/testing/data
                              後,我的螢幕就會出現『請讀取 README.important』

                              # 的字樣囉!以提醒使用者之用!
                               
                              # 5. 與 readme
                              的意義蠻相同的!不過這個 message 卻會將後面所接的檔案的

                              #  內容直接顯示在螢幕上面,而不僅是告知使用者去讀取而已~
                               
                              message /welcome.msg           
                              login

                              message .message               
                              cwd=*

                               
                              # 上面的意思是說,當我
                              login 或者切換到任何有檔名為 .message 的目錄時,

                              # 該檔案的內容就會顯示到螢幕上面!一般來說,那個
                              /welcome.msg 就是

                              # 『進站歡迎畫面』囉!這個等一下我們在底下會獨立出一小節來介紹他!
                               
                              # 6. 是否提供使用者線上立即執行的指令!
                              #  一般的格式為:
                              #  <指令名稱> <是否允許/yes/no> <針對的對象是誰>
                               
                              compress       
                              yes            
                              all

                              tar            
                              yes            
                              all

                              chmod          
                              no             
                              guest,anonymous

                              delete         
                              no             
                              anonymous

                              overwrite      
                              no             
                              anonymous

                              rename         
                              no             
                              anonymous

                              umask          
                              no             
                              all

                               
                              # 以上面的例子來說,我允許任何成功登入我主機的使用者(all)使用我的
                              # FTP 主機來執行壓縮這個指令的動作!但是我不許匿名者(anonymous)
                              # 使用我的
                              FTP 主機進行刪除(delete)以及改名(rename)的動作!

                              # 你當然還可以增加自己所想要提供,或者減少提供使用者使用的指令!
                              # 當然啦,既然
                              FTP 主要是針對『檔案』,所以指令以檔案的刪除、移動、

                              # 更改與壓縮為主!
                               
                              # 7. 將使用者執行的部分指令歷程記錄到
                              /var/log/xferlog 這個檔案

                              #  FTP 進行上傳、下載或者其他使用者動作時,可以將過程訊息記錄下來,
                              #  記錄的檔案就是
                              /var/log/xferlog 這個檔案囉!語法為:

                              #  <log> <欲登錄的項目> <記錄的使用者身份> <何種動作>
                               
                              log transfers
                              anonymous,guest,real inbound,outbound

                               
                              # 上面說明的是『針對檔案傳輸(transfers)進行記錄,而針對所有人均紀錄,
                              # 分別記錄上傳與下載(inbound,outbound)』,請注意,身份如果有多種,要以
                              # 逗號『,』隔開,不要加空白喔!所以,當你的
                              FTP 使用者連上主機,

                              # 並且有任何檔案傳輸的動作時,則檔案大小以及檔案數等資訊,就會被紀錄
                              # 到 /var/log/xferlog
                              裡面去啦!而除了檔案傳輸之外,還有什麼可以紀錄的呢?

                              # 基本上,那個『欲登錄的項目』內容就包含了下面幾項資料:
                              # a. log
                              commands <身份>
                              :例如『log
                              commands real,anonymous
                              』,表示

                              #  real 與
                              anonymous 這兩種身份的人,在 FTP 上面所下達的任何指令君會

                              #  被紀錄在
                              /var/log/xferlog 裡面

                              # b. log
                              security <typelist>
                              :例如『log
                              security guest,anonymous

                              #  表示當
                              guest 與 anonymous 使用者『違反安全機制』時,則會將當時

                              #  使用者所下達的指令或者其他動作紀錄下來!
                               
                              # 8. 關閉 FTP
                              的設定檔!

                              #  我們可以設定關閉
                              FTP 這個服務的時間,就利用 shutdown 後面接的檔案!

                               
                              shutdown /etc/shutmsg
                               
                              # 如果 /etc/shutmsg
                              不存在,則 FTP 服務就不會被關閉!所以不存在沒關係!

                              # 而如果 /etc/shutmsg
                              存在的話,他的內容包含有底下這些資料(注意:

                              # 第一行為時間參數,共有七個時間參數,用空白鍵分隔,而提示文字可以隨便
                              # 編寫內容喔!也可以使用變數啊!):
                              # <年> <月>
                              <日> <時> <分> <抵擋新連線> <刪除已連線> 

                              # <提示文字>
                              # 年:任何大於
                              1970 年的年份;月:0-11!請注意啊!是由 0-11 喔!

                              # 0 代表 1
                              月、 1 代表 2 月!

                              # 日:當然就是
                              1-31 囉!  ;時:由 0-23 ;分:0-59

                              # 抵擋新連線與刪除已連線:格式是
                              HHMM 例如 90 分鐘則是 0130 ,在關機前的

                              # 設定時內,會拒絕新連線與將以連線之通道切除喔!例如:
                              # 『2003
                              5 30 12 0 0230 0030

                              I
                              will shutdown my FTP server !sorry!

                              # 在 2003/6/30
                              的 12:00 要關閉 FTP ,而 12:00 之前的兩小時30分內(09:30)

                              # 就不許新的嘗試登入的連線,而在
                              30 分鐘前(11:30)就切掉已經已經連線之

                              # 使用者連線!事實上,這個
                              shutdown 蠻有趣的!因為實際上,您的 FTP

                              # 服務並沒有關掉,僅只是讓他人無法使用
                              FTP 而已啊!那麼如何重新啟動呢?

                              # 很簡單啊!將
                              /etc/shutmsg 殺掉,或者裡面的時間更動一下即可!

                               
                              # 9. 匿名者的密碼驗證:
                              #  如果您的
                              FTP 允許 anonymous 的話,那麼還是需要讓匿名者輸入密碼的,

                              #  不過就是密碼的設定比較鬆散就是了!目前的密碼格式為:
                              #  <passwd-check> <no|trivial|rfc822> <動作>
                               
                              passwd-check
                              rfc822 warn

                               
                              # 上面說的是,以匿名者登入的使用者也需要輸入密碼,而密碼的格式為
                              rfc822,

                              # 如果使用者的密碼不合格,那麼就警告(warn)使用者,但仍允許使用者登入!
                              # 密碼的格式方面目前有兩種(no是不需要密碼確認,所以不討論!)
                              # trivial:密碼當中必須含有
                              @ 這個 e-mail 的字元;

                              # rfc822 :密碼必須符合
                              frc822 的規範!

                              # 通常我們使用的是
                              rfc822 即可!至於動作主要有兩種動作:

                              # warn  
                              :使用者輸入錯誤的密碼時,僅顯示警告訊息,仍允許其登入;

                              # enforce:使用者若輸入錯誤密碼,儲顯示警告訊息,並中斷連線喔!
                              # 注意:
                              # 如果你不想讓某個
                              email 的型態通過認證時,可以使用 deny-email 這個

                              # 項目來抵擋!舉個例子來說,你不想讓
                              IE 的預設郵件地址通過認證,可使用

                              # deny-email
                              IE?0User@

                              # deny-email
                              mozilla@

                              # 上面這兩個項目可以同時存在,如果還有不想讓他通過的
                              email address 

                              # 可以持續上面的設定多行!這有什麼用途呢?如果您不想讓
                              web browsers 

                              # 通過密碼的確認,而僅想讓

                              抱歉!评论已关闭.