ITPub博客

首页 > IT基础架构 > 网络安全 > 簡易 FTP Server 架設 -- Pro FTPD

簡易 FTP Server 架設 -- Pro FTPD

原创 网络安全 作者:m77m78 时间:2006-05-20 01:06:37 0 删除 编辑

[@more@]

簡易 FTP Server 架設 -- Pro FTPD
前言:
    眾所皆知的, FTP 是一個行之有年的網路通訊協定,我們可以透過 FTP 這個協定在不同的作業平台上面進行檔案的傳輸、刪除與移動等等的工作,而使用最為廣泛的 FTP 架設軟體就是那個 Wu FTP 了!但是由於 Wu FTP 畢竟在『安全歷史』的過程中,實在是被發現了太多的危險漏洞了,所以目前有相當多強調安全性的 FTP 伺服器軟體漸漸抬頭,其中之一就是這個有名的 Professional FTPD 了!底下我們來談一談為何需要有這個伺服器軟體以及相關的其他說明吧!
     

    為什麼要使用 Professional FTP daemon 呢?
     
    既然 Wu FTP 這個伺服器軟體並不是十分的安全,所以這個 Pro FTPD 當然主要就是以較為安全的角度去設計的一個全新的 FTP 伺服器軟體了!在 ProFTPD 的官方網站上面也提出了,最早設計這個 FTP 的理念不是想要『幹掉 Wu FTP 』,而是希望給予大家一個更為安全,且在設定上面更為便利的一個 FTP 伺服器軟體囉!除了安全性之外,為何還要強調『設定便利性』呢?這是因為目前在 Windows 的系統當中 ( Win32 ),有個相當有名氣的 FTP 伺服器軟體,那就是鼎鼎大名的 Server-U 囉!這個 Server U 實在是很厲害,在設定上面相當的簡易,此外,還可以根據不同的使用者給予不同的傳輸速度與上傳、下載比例,設定上面又很有彈性,實在是難能可貴的一套軟體!那麼我們的 Wu FTP 能否達到這樣的功能呢?當然可以囉!不過.....設定上確實比較麻煩~因此上,這個 proftpd 可就幫了個大忙囉!
     
    基本上, ProFTPD 主要具有底下的幾個特徵:
     
    • 主要的設定檔僅有一個,設定上甚為簡易;
    • 每一個開放出去的目錄底下的 .ftpaccess 可以用來取代 ProFTPD 的主要設定檔規範的參數, .ftpaccess 功能類似於 Apache.htaccess 喔;
    • 設定 FTP 成為具有虛擬 FTP 主機與匿名登入 FTP 主機的設定甚為簡易;
    • 可以依據個人的設定要求,以 stand-alone 的方式或者 inet/xinet (Super daemon) 的管理方式來啟動;
    • 匿名登入時,使用者所登入的目錄底下,不需要額外的 binary 執行程式的支援,具有較佳的安全性;
    • 不需要 Linux System 本機的執行程式的支援,由於使用 Linux 本機的程式可能會造成系統安全上的顧慮, ProFTPD 在自己的原始碼當中已經含有所需要的執行指令了,所以不需要系統的 binary 執行檔的支援,系統安全上面較可靠;
    • 仍然具有 Linux 系統本身的 user/owner 權限屬性,以及隱藏檔的屬性等等均存在;
    • 使用者登入 ProFTPD 時,登入的資訊將會存放一份在 utmp/wtmp 的登錄檔中,這是什麼呢?這就是使用 last 可以顯示出登入資訊的重要登錄檔囉!
    • 登錄密碼可支援 Shadow 密碼檔案 ( /etc/shadow ),亦同時支援已經死亡的帳號 ( 請參考『鳥哥的 Linux 私房菜 -- 基礎學習篇』裡面的 帳號管理部分關於 shadow 的介紹 )
     
    看起來覺得真的很不錯吧!呵呵!尤其是那個 .ftpaccess 檔案更是能夠引起使用者的『興趣』呢!怎麼說呢?還記得在 Apache 裡面如果使用者想要架設一個屬於自己的個人首頁時,可以依照 .htaccess 設計自己的風格啊!同樣的,在 ProFTPD 當中,使用者也可以藉由 .ftpaccess 這個檔案來『設計屬於自己的 FTP 主機』喔!可以不必依照 Linux 本機 FTP 伺服器軟體的僵化設定呢!呵呵!真是粉不錯喔!
     

    架設之前你需要瞭解的原理
     
    與之前我們所說明各個 Server 的架設時需要知道的原理一樣,這裡我們還是得針對 FTP 的『連線原理』來說明一下,但是這部份我們已經在 Wu FTP 裡面說過了,所以請前往 Wu FTP 那一章節好好閱讀一下吧!在開始 FTP 的設定之前,你必須要知道的原理有:
     
    • FTP 在 Client 與 Server 進行連線時,主要使用到的 port 有幾個?分別具有什麼用途?
    • Client 與 Server 進行 FTP 連線時,其模式分為 Active 與 Passive ,這兩種模式的差異為何?
    • 當 FTP 架設在防火牆內部時,則這個 FTP 需要使用的連線模式為何?
     
    如果你能夠瞭解上面的幾個細節,那麼設定 FTP 是一點也不困難的呢!底下我們就來談一談這個好用的 proftpd 吧!

套件安裝
    雖然 Wu FTP 可能還是目前使用上最廣泛的 FTP 伺服器軟體,不過,畢竟安全上面有點小問題,所以近年來各主要的 Linux distributions 在發佈 FTP 伺服器軟體時,漸漸的都以 ProFTPD 來取代 Wu FTP 了!例如近期的 Mandrake 9.x 等等!而由於這些主要的 distribution 使用的是 RPM 的安裝方式,因此,呵呵!如果您的系統是屬於這些較近期的版本,那麼就直接以 RPM 的方式來安裝這個 FTP 伺服器軟體即可!
     
    不過,畢竟使用 Wu FTP 的朋友大有人在,而且在提供 Wu FTP 套件的 distributions 通常是不提供 proftpd 的 RPM 版本的,所以這裡我們主要也以 Tarball 的方式來安裝 ProFTPD 。如此一來,不論您原先是使用 Wu FTP 還是原本就是 ProFTPD ,都可以經由 Tarball 的方式來重新安裝一次你的 FTP 伺服器軟體呢!廢話不再多說了,趕緊來看看怎麼以 Tarball 的方式安裝 ProFTPD 吧!
     
    • 下載 proftpd:
      您可以前往 ProFTPD 的官方網站下載 proftpd ,不過,蠻建議在台灣的中山大學 FTP 網站下載的,他的速度也是粉快的喔!中山大學關於 ProFTPD 的網址在:http://ftp.nsysu.edu.tw/Unix/FTP/proftpd/distrib/source/,我在這裡測試的版本是 1.2.8 這個在 2003/03 出的最新版的 ProFTPD 喔!所以他的檔名應該是:proftpd-1.2.8.tar.gz 這個檔案的啦!你也可以在我們網站下載 ( http://linux.vbird.org/download/index.php#proftpd ),你可以使用 wget 或者是 ncftp 來到各大 FTP 網站下載喔!
     
    • 設定、編譯與安裝 proftpd:
      又到了這個時刻了!請注意您的 gcc 以及 make 有沒有安裝啊!如果沒有安裝的話,就趕緊先安裝吧!我們要來安裝 ProFTPD 囉 ( 註:我是在 Red Hat 9 上面進行編譯測試的! ):
      1. 將剛剛下載的 proftpd 解壓縮:
      [root@tet root]# wget
      > http://ftp.nsysu.edu.tw/Unix/FTP/proftpd/distrib/source/proftpd-1.2.8.tar.gz
      [root@test root]# cd /usr/local/src
      [root@test src]# tar -zxvf /root/proftpd-1.2.8.tar.gz
      # ...(略)...會主動產生 proftpd-1.2.8 的目錄
      [root@test src]# cd proftpd-1.2.8
      # 在這個目錄底下的 INSTALL 請詳細的閱讀,裡面有安裝的幾個重要資訊!
       
      2. 進行編譯前的參數設定:
      [root@test proftpd-1.2.8]# ./configure --prefix=/usr/local/proftpd
      > --enable-shadow --enable-autoshadow
      > --with-modules=mod_ratio:mod_readme:mod_wrap
      # 請注意,那個 prefix 表示我預計要安裝 proftpd 的目錄;
      # 至於 --enable-shadow 與 --enable-autoshadow 則是預計要以
      # 系統的 /etc/shadow 做為我的 FTP 登入時的密碼驗證檔案!
      # 此外,還加入許多的支援模組,會讓我們的 Proftpd 變的更活潑!
       
      [root@test proftpd-1.2.8]# make && make install
      # 經過這個步驟之後,你的 proftpd 就會安裝在 /usr/local/proftpd 之內,
      # 其中,設定檔在 /usr/local/proftpd/etc/proftpd.conf !
      # 至於說明檔 (man pages)則在 /usr/local/proftpd/man 當中!
       
      3. 設定一些查詢的相關功能!
      [root@test proftpd-1.2.8]# vi /etc/man.config
      # 加入底下這一行,這樣才能以 man 來查詢指令的用法!
      MANPATH /usr/local/proftpd/man
      很簡單吧!這樣就已經編譯並且安裝好了 Proftpd 囉!^_^!接下來就要開始來測試看看囉!
       
    • 設定以 xinetd 來啟動 proftpd :
      事實上,目前大部分的 FTP daemon 多是以 super daemon 來啟動的!所以這裡我們也直接以 xinetd 來設定 proftpd 吧!畢竟多了一層管理,會更安全的啊! ^_^!設定的方法也真是很簡單~只要編輯 xinetd 底下的 proftpd 以及 proftpd.conf 檔案裡面的一些內容即可!
      [root@test root]# vi /etc/xinetd.d/proftpd
      service ftp
      {
      disable = no
      flags = REUSE
      socket_type = stream
      wait = no
      user = root
      server = /usr/local/proftpd/sbin/proftpd
      server_args = -c /usr/local/proftpd/etc/proftpd.conf
      log_on_success += DURATION USERID
      log_on_failure += USERID
      }
      # 上面的重點在於兩行粗體字的地方!尤其是 server =.. 那一行!
      # 由於我們是使用 Tarball 安裝的,自然就以我們的檔案放置目錄為主,
      # 如果您使用 RPM 安裝,這裡就不太相同囉!
      # 另外,那個 server_args 後面接的則是設定檔的檔名咯!
       
      [root@test root]# vi /usr/local/proftpd/etc/proftpd.conf
      # 找到底下這個設定值:
      ServerType standalone
      Group nogroup
      # 因為我們的系統預設並沒有 nogroup 這個群組,所以必須要將他改成
      # 系統裡面有的群組才行吶!而伺服器啟動的方式有 super daemon 與
      # stand alone ,所以:
      ServerType inetd
      Group nobody
       
      [root@test root]# /etc/rc.d/init.d/xinetd restart
      [root@test root]# netstat -tlnp
      tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 8483/xinetd
      # 呵呵! 21 這個埠口出現了!理論上沒有問題,不過還是需要分析一下
      # /var/log/messages 這個檔案的內容才行喔!
      一般來說,我們還是比較建議使用 xinetd 的方式來啟動服務的,尤其是 FTP 之類的伺服器架設。在這個案例當中,我們就使用了 xinetd 來啟動,不過, proftpd 的設定檔 proftpd.conf 裡面就必須要規定好 ServerType 這個設定值,有兩個選擇:
       
      • standalone:表示獨立啟動的意思;
      • inetd:表示使用 super daemon ,不論是 inetd 或者是 xinetd 均使用這個設定值。
       
      所以囉,這裡需要修訂好才行!然後就可以正確的來啟動囉!很簡單吧! ^_^!好了,準備來詳細的分析 proftpd 囉!

Server 端設定:
    Proftpd 在設定上簡單是很簡單,不過,如果要說複雜的設定的話,又很多樣化喔!那麼就來談一談吧!
     

    proftpd 的結構
     
    這個 proftpd 伺服器的架構其實也是很簡單的!主要設定檔僅有一個而已,我們就來說一說 proftpd 需要注意的檔案吧!
     
    • proftpd.conf:這個就是主要的 proftpd 的設定檔了!在 RPM 安裝的範例中,他所在的目錄為 /etc/proftpd.conf ,在鳥哥的這個範例中,則是放置在 /usr/local/proftpd/etc/proftpd.conf 當中喔!我們未來要談的種種 proftpd 的設定,均是在這個檔案裡面設定的。他詳細的設定方法其實在這個 proftpd.conf 檔案裡面就已經寫得很詳細咯!而且 proftpd 也提供了很詳細的文件資料了,如果是以 RPM 安裝您的 proftpd 的話,那麼文件檔案放置在 /usr/share/doc/proftpd-"版本"/Configuration.html ,若以 Tarball 安裝則在 /usr/local/src/proftpd-"版本"/ Configuration.html。不過,該說明檔實在是太複雜了~只要知道其中一些主要設定即可!這也是我們在後續的介紹所想要傳達的喔!
       
    • proftpd:這個是主要的 proftpd 的 daemon 執行檔!我們得要啟動他才行喔!此外,這也是 TCP Wrappers (/etc/hosts.deny(allow))設定裡頭的服務檔案檔名。另外,當 proftpd 在啟動的時候會去讀取設定檔,也就是 proftpd.conf 這個檔案,不過,我們也可以指定其他的檔案來進行 proftpd 的設定喔!果真如此,就必須要這樣啟動 proftpd 了:
      [root@test root]# proftpd -c 設定檔檔名
      [root@test root]# proftpd -c /usr/local/proftpd/etc/proftpd.conf
       
    • ftpcount:目前在主機上面使用 proftpd 的連線數,直接在指令列下達 ftpcount 即可!
       
    • ftpshut:指定再過多久之後 proftpd 服務會終止!有的時候我們會需要維護 FTP 主機對吧!所以需要關機啊!關掉 ftp 服務之前,可以使用這個 ftpshut 指令來進行喔!他的語法如下所示:
      [root@test root]# ftpshut [-l 分鐘] -d [分鐘] 時間 "訊息"
      參數說明:
      -l :在 FTP 伺服器關閉服務之前的多少分鐘,嘗試建立新的 FTP 連線者均不被接受
      -d :在 FTP 伺服器關閉服務之前的多少分鐘,以建立的 FTP 連線將強制被終止
      時間:在什麼時候或多少分鐘後, FTP 伺服器將關閉 FTP 服務!格式有兩種:
         +number :再經過 number 分鐘後 FTP 會關閉
         MMHH :在今天的 MM:HH 時間 FTP 會關閉
      訊息:顯示給 user 看的資訊!
      範例:
       
      範例一:
      # 再經過 180 分鐘後,FTP 會關機,且關機前 20 分鐘即不可再接受新連線,
      # 而以建立的連線在關機前 10 分鐘強制斷線,並在 client 端顯示:
      # FTP will shutdown at time
      [root@test root]# ftpshut -l 20 -d 10 +180 "This FTP will shutdown at time"
      事實上, ftpshut 僅會建立一個檔案,亦即是 /etc/shutmsg 而已,還記得這個檔案吧?!在前一章 Wu FTP 主機設定裡面的最簡單的 ftpaccess 設定,裡頭第八項提到的項目,呵呵!沒錯!就是這個檔案咯!如果您想要重新啟動 FTP 服務的話,只要將這個檔案殺掉,或者是將這個檔案裡面的相關數字修改一下即可!請翻至前一章節查閱喔!
       
    • ftpwho:可以用來察看目前有多少人使用 proftpd 這個服務喔!簡單的語法直接下達 ftpwho 即可,如下所示:
      [root@test root]# ftpwho
      standalone FTP daemon [8451]:
      10194 badbird [ 0m11s] 0m6s (idle)
      Service class - 1 user
      # 如上所示,目前有一個使用者,名為 badbird 的帳號,在使用 proftpd 喔!
       
    大致上就是這樣啦!咦!怎麼沒有提到 anonymous 登入 FTP 時的根目錄呢?呵呵!那個咚咚是在 proftpd.conf 裡面設定的啦!等一下再告訴你!
     

    proftpd.conf 的設定方式
     
    Proftpd 最重要的設定是在 proftpd.conf 這個檔案內了!好了,那麼這個檔案的內容是如何設定的呢?基本上,這個檔案的設定與 Apache 很類似吶!有點像這樣:
     
    # 關於主機相關的設定
    設定項目一 參數內容
    設定參數二 參數內容
     
    # 關於某些目錄的權限設定

    ...
    ...
    ...

     
    # 關於 Anonymous 的目錄與權限設定

    ...
    ...
     
     ...
     ...
     
     
    是否與 Apache 主機的設定檔: httpd.conf 語法很類似呢?所以囉,呵呵,設定上也有很相似的參數喔!反正,只要是沒有被 包含在內的設定參數,都是屬於主機與 Real User 的設定值,而與匿名者有關的設定則是在 內的設定值!此外,我們還可以透過 這個設定參數來訂定某些動作是否可做喔!至於在這個檔案內,只要該行是以 # 開頭,表示該行是『註解』而已的啦!好了,那麼 Limit 有哪些動作呢?!基本上有底下這些:
     
    • CWD :Change Working Directory,變換目錄之意;
    • MKD :MaKe Directory,可建立目錄與否;
    • RNFR :ReName FRom,可更改檔名與否;
    • DELE :DELEt,可刪除檔案語法;
    • RMD :ReMove Directory,可移除目錄與否;
    • RETR :RETRieve,下載之意!由 Server 傳送資料到 Client;
    • READ :可讀取與否
    • WRITE:可寫入與否
    • STOR :STORe,上傳之意,由 Client 傳送資料到 Server !
    • ALL :全部的動作!
     
    除此之外,我們還可以指定 .ftpaccess 這個檔案的設定呢!這與 proftpd.conf 內的 AllowOverride 參數有關!這個 .ftpaccess 就是允許使用者自行設定 FTP 的風格,當 FTP 的 Client 軟體登入某個目錄,而該目錄內支援 .ftpaccess 時,那麼該 FTP Client 軟體將接受 .ftpaccess 的使用者自訂風格喔!這個 .ftpaccess 與 Apache 的 .htaccess 有類似的用法咯! ^_^!還有, proftpd.conf 也支援變數,變數的內容如下:
    %T 目前的時間
    %F 所在硬碟剩下的容量
    %C 目前所在的目錄
    %R Client 端的主機名稱
    %L Server 端的主機名稱
    %U 使用者帳號名稱
    %M 最大允許連線人數
    %N 目前的主機連線人數
    %E FTP 主機管理員的 email
    %i 本次上傳的檔案數目
    %o 本次下載的檔案數量
    %t 本次上傳+下載的檔案數量
     

    最簡單的 proftpd.conf 設定檔
     
    事實上,當我們安裝好了 proftpd 之後,就已經提供了一個很簡單但是已經夠用的 proftpd.conf 的設定內容了!我們就來談一談這個簡易的設定內容吧!
     
    [root@test root]# vi /usr/local/proftpd/etc/proftpd.conf
    # 底下是 FTP 主機的環境設定,每個項目的內容為:
    # ServerName :當使用者登入主機的時候,proftpd 會顯示在 Client 端
    #       的 FTP 軟體的一些基本訊息啦!
    # ServerType :啟動 proftpd 的方法,有兩種方式,分別是 standalone
    #       與 inetd ,因為我們是以 super daemon 啟動的,所以
    #       設定為 inetd 喔!如果您想獨立啟動(不透過 xinetd )
    #       就需要設定為 standalone 了
    # DefaultServer:預設的主機啊!這個項目可以設定為 on 或 off ,基本上,
    #        除非您有兩個 IP 或者是設定了虛擬主機 (virtualhost),
    #        否則這個項目都應該要設定為 on 才行!不然有些 uknown
    #        的連線會無法連接到您的 FTP 服務喔!
    # Port :設定主機的 FTP 命令通道埠口!如前面 Wu FTP 所說明的,FTP
    #    命令通道通常為 21 ,您也可以更改,不過,這個設定只有當
    #    ServerType 為 standalone 時才有效!若為 inetd 則與 xientd 及
    #    /etc/services 有關那!請前往參考 wu FTP 的修改 port 設定
    # Umask :與建立目錄及檔案的預設屬性有關的設定喔!用 022 就夠了!
    # MaxInstances:同一時間允許的連線數目,這個設定項目與 process (PID) 有關!
    #       所以您的 FTP 主機中,proftpd 啟用的 process 最多能有30個
    #       這個與 MaxClients 不一樣喔!
    # User 與 Group:proftpd 預設的服務啟動者!後面接的使用者與群組
    #        必須在 /etc/passwd 與 /etc/group 裡面存在方可!
    ServerName "這個是鳥哥的測試用的 Proftp 主機"
    ServerType inetd
    DefaultServer on
    Port 21
    Umask 022
    MaxInstances 30
    User nobody
    Group nobody
     
    # 底下則是與目錄有關的設定!在這個設定中,顯示允許讀寫與覆蓋檔案!
    # AllowOverwrite 就是允許覆寫的意思!

    AllowOverwrite on

     
    # 底下與匿名登入者有關!由 顯示:『預設的匿名登入之
    # 根目錄為 ftp 這個使用者的家目錄!』,因為 ~ 代表家目錄的意思!
    # 而且,匿名登入主機後,該 process 取得的 user:group 權限為 ftp:ftp!
    # 至於那個 UserAlias 就是在設定『名字的別名』啊!語法為:
    # UserAlias "登入者的帳號" "實際 Linux 主機的帳號"
    # MaxClients:最多僅允許 10 個 anonymous 登入我們主機的意思!
    # DisplayLogin:當使用者登入之後的歡迎畫面的檔案內容!
    # DisplayFirstChdir:轉換到某目錄時(cd指令),顯示該目錄的注意事項檔案內容

    User ftp
    Group ftp
    UserAlias anonymous ftp
    MaxClients 10
    DisplayLogin welcome.msg
    DisplayFirstChdir .message
     # 底下則是限制 anonymous 『不具有寫入的權限!』因為 WRITE 是寫入,
     # 加上 DenyAll 則是寫入的權限被取消之意!

    DenyAll

     
    所以,在這個例子當中,我們的 proftpd 具有下列功能:
     
    • 以 super daemon 啟動 proftpd ,且啟動 proftpd 的權限為 nobody:nobody ,此外,最多僅具有 30 個 process;
    • proftpd 使用 port number 為 port 21 喔(其實是需要看 /etc/xinetd.d/proftpd 的設定)!
    • 這個 proftpd 同時允許實體用戶(real user)與匿名用戶(anonymous)登入!
    • real user 可以跳離自己的家目錄(沒有 chroot),且具有寫入的權限,此外,建立目錄與檔案預設權限為 dir:755, file:644;
    • anonymous 用戶最多僅能同時 10 人上線,且具有的權限為 ftp:ftp,並且『anonymous 沒有寫入的權限!』
     
    事實上,這樣的設定已經能夠符合一般主機的設定囉!如果您還不滿意,可以額外的再加入其他的設定喔!底下就來談一談!
     

    針對實體用戶的設定
     
    事實上,在上面的 最簡單 proftpd.conf 設定 當中就已經針對了實體用戶( Real User )進行了若干的設定了!不過,如果您還想額外的加入某些設定,那麼就繼續來修改吧!假設我們需要這樣的設定項目:
     
    • 使用主機本地端時間,而不要使用 GMT 時間;
    • 主機最多允許 50 條連線,且最多允許 100 個使用者上線,當超過 100 個使用者還有其他 FTP 要求時,就顯示:『很抱歉,上線人數額滿了!』;
    • 同一個 IP (或主機) 來源最多僅能具有 5 個 FTP 服務;
    • 允許續傳的動作;
    • 被動式資料流(passive mode)的埠口為 65400 到 65420 這21個埠口!
    • 主機不允許 Root 登入;
    • 想建立一個名為 badbird 的群組,在該群組內的所有使用者都無法離開自己的家目錄(chroot);
    • 在 badbird 這個群組當中的 nogoodbird 這個使用者,該使用者能夠使用 ftp 但是無法使用 ssh 連到主機;
    • 在這個公開的目錄 /home/ftp/pub 中,所有人均不可寫入,只有讀取的權限;
     
    [root@test root]# vi /usr/local/proftpd/etc/proftpd.conf
    # 底下是 FTP 主機的環境設定:
    ServerName "這個是鳥哥的測試用的 Proftp 主機"
    ServerType inetd
    DefaultServer on
    Port 21
    User nobody
    Group nobody
    TimesGMT off # 所謂的 GMT 時間就是格林威治時間,
                       # 詳細的時區觀念請參考後續的NTP伺服器
                       # 因為要使用本地時間,所以設為 off !
    MaxInstances 50 # 最多僅有 50 條 prftpd 的 PID
    MaxClients 100 "很抱歉上線人數額滿了" # 最多允許 100 個使用者在線上
    MaxClientsPerHost 5 # 同一個主機最多可以同時 5 個 FTP 連線
    AllowStoreRestart on # 允許使用者上傳續傳!預設是 off
    PassivePorts 65400 65420
    # 後面接的是埠口,最小到最大的埠口共 21 個!
     
    # 其他與實體用戶較相關的設定值!
    Umask 022
    RootLogin off # 不許 root 登入!預設就是 off
    RequireValidShell off
    # 這個設定可以讓使用者不需要具有『能夠執行的 shell 』!例如讓
    # nogoodbird 這個具有 /bin/false 的使用者,依然可以使用 ftp 喔!
    DefaultRoot ~ badbird
    # 注意啊!那個 ~ 代表家目錄的意思喔!特別特別留意! DefaultRoot
    # 後面接的是『群組』喔所以在這裡 badbird 為群組,而不是使用者喔!
    # 這裡特別容易搞混亂,請再特別的留意一下阿!只要不屬於 badbird
    # 這個群組的 User 就可以離開自己的家目錄了!(沒有被 chroot ) ^_^

    AllowOverwrite on



    Denyall


    # 上面的設定中,在根目錄內的所有目錄均具有可讀寫的權力,但是在
    # /home/ftp/pub 這個目錄中,不論 Linux 屬性為何,使用者均無法寫入!
    # 但是可以瀏覽以及下載喔!在我們這個設定當中, badbird 這個群組無法離開
    # 自己的家目錄,至於其他可以離開自己家目錄的使用者,來到這個
    # /home/ftp/pub 當中,也不具有寫入的權限喔!
     
    [root@test root]# useradd -g badbird -m -s /bin/false nogoodbird
    # 建立這個 nogoodbird 由於不具有 shell 所以不能 SSH 但可以 ftp 喔!
     
    [root@test root]# /etc/rc.d/init.d/xinetd restart
     
    事實上,對於實體用戶實在不需要限制的太多!要不然就不要開放,要不然就直接改成 sftp 說!此外,在上面這個設定當中,我們暫時拿掉了 anonymous 的登入,所以使用 anonymous 將無法登入喔!
     

    針對匿名者的設定
     
    談完了實體用戶之後,我們來談一談,那麼 anonymous 的相關登入權限要怎麼設定呢?!我們的要求假設如下:
     
    • 主機環境與實體用戶的需求與上面相同;
    • anonymous 的根目錄為 /var/ftp 這個目錄;
    • anonymous 登入後取得的 PID 在 Linux 的權限為 ftp:ftp 這個人物;
    • 當 anonymous 登入 FTP 之後,在 Client 端的 FTP 軟體顯示一些歡迎訊息!;
    • 最多允許 30 個 anonymous 的登入;
    • 限制上傳/下載速度為 100Kbytes/s 與 50 Kbytes/s;
    • 在 /var/ftp/ 裡面,除了 /var/ftp/upload 之外,其他的目錄均不可寫入;
    • 在 /var/ftp/upload 這個目錄中,僅可以寫入,不能下載,並且在使用者進入這個目錄後,顯示出一些相關的資訊;
    • 使用者帳號為 nogoodbird 因為不乖,所以將他們的 FTP 使用權限降級而設定為 anonymous 而已!
     
    如何設定呢?!我們沿用上面的設定項目,再額外的新增底下的項目即可!
     
    1. 建立基本的設定檔案:
    [root@test root]# vi /usr/local/proftpd/etc/proftpd.conf
    # 關於主機與實體用戶的設定如同前一小節所示,所以我這裡就略過了!
    ...(沿用上一小節的設定,這裡略過).....
     
    # 底下則是 anonymous 的設定喔!

    # 底下為建立 Anonymous 在 Linux 系統下的 PID 權限擁有者!
    # 此外,使用 UserAlias 將 nogoodbird 降級為 anonymous 的帳號!
    User ftp
    Group ftp
    UserAlias anonymous ftp
    UserAlias nogoodbird ftp
    # 建立顯示的訊息給 anonymous 觀察用的!
    DisplayLogin welcome.msg
    DisplayFirstChdir .message
    MaxClients 30 "匿名登入者連線數已經飽和了!"
    # 這個就重要啦!用來限制傳輸速率的吶!基本語法為:
    # TransferRate (STOR|RETR) 速度(Kbytes/s) user 使用者
    # STOR 為上傳而 RETR 為下載的意思!速度為 Kbytes/second 喔!
    TransferRate STOR 100 user anonymous,ftp # 單位為 KBytes/second
    TransferRate RETR 50 user anonymous,ftp

    Denyall

    # 底下這個則僅與 upload 這個目錄以及其下的子目錄有關而已!


    Denyall


    Allowall



     
    2. 建立歡迎畫面:
    # 特別留意,因為我的 anonymous 根目錄在 /var/ftp ,因此,我的
    # welcome.msg 就必須放置在 /var/ftp/welcome.msg 了!
    [root@test root]# vi /var/ftp/welcome.msg
    歡迎光臨!這個是鳥哥的測試 FTP 站台喔!
    我的主機: %L
    目前時間: %T
    最大連線: %M
    目前連線: %N
    您的主機: %R
    您的帳號: %U
    目前目錄: %C
     
    3. 建立特殊注意事項:
    # 剛剛提到,需要在 /var/ftp/upload 裡面建立一個特殊訊息!
    [root@test root]# vi /var/ftp/upload/.message
    這個目錄僅能上傳不能下載;
    您的身份為 anonymous 喔!
     
    4. 建立 upload 的權限:
    [root@test root]# chown ftp:ftp /var/ftp/upload
    [root@test root]# chmod 755 /var/ftp/upload
     
    5. 重新啟動!
    [root@test root]# /etc/rc.d/init.d/xinetd restart
     
    呵呵!這樣就將您的 Anonymous 設定好了!等你一進站,哇!怎麼這麼棒啊!已經將您的資訊都給他設定好了,歡迎畫面可真的是不錯啊! ^_^
     

    建立特殊交流帳號 (建立一個 ftpguest 群組!將所有的 guset 設定在這個群組內!
     
    我想,很多朋友都有使用 FTP 網站與其他網站交流的經驗了!您可以給予某些站長一些上傳與下載的權限,並且這些權限是可以保留或者是累積的,真的是很棒啊!在 Windows 系統上面有 Server-U 這個好用的傢伙,那麼我們的 Linux 上頭的 FTP 可以達到這樣的功能嗎?!呵呵! proftpd 就可以!而且設定還真的是很簡單喔!假設我們要達成這樣的功能好了:
     
    • 主機環境、實體用戶、anonymous 的環境都與前兩節的內容相同;
    • 建立一個群組名為 ftpguest ,如果使用者屬於該群組,則該使用者登入主機之後他的根目錄會在 /var/ftp2 這個目錄下;
    • 有三個使用者,名為 ftpuser1, ftpuser2, ftpuser3 ,都屬於 ftpguest 群組,他們沒有家目錄,不能使用 ssh,但是他們在 /var/ftp2/upload 有寫入的權限,但不可讀取資料;
    • 在 /var/ftp2 內的所有相關下載中,最高流量為 50 Kbytes/second;
    • ftpuser1 的上傳/下載比例為 1:2 ,且具有 100 MB 的預設下載量; ftpuser2 與 ftpuser3 的上傳/下載比例則為 1:1,僅具有 30MB 的預設下載量;
    • 當使用者進入 /var/ftp2 時,會顯示該使用者的上傳/下載比例,以及剩下的下載容量,還有其他的相關訊息;
    • 與使用者有關的上傳/下載比例以及剩下的可下載容量,都記錄在 /var/ftp2/work/ratio.dat, /var/ftp2/work/ratio.tmp 當中,所以使用者在這個目錄都無法讀、寫!
     
    在這個案例當中,最重要的就是那個『紀錄使用者上傳/下載的 ratio 以及可用空間的記錄檔』了,在我的案例當中,使用的就是 /var/ftp2/work/ratio.dat 這個檔案,請注意,這個檔案必須要能被 ftpuser1, ftpuser2, ftpuser3 所讀取與寫入才行!相當的重要喔!所以,我應該要這樣設計我的設定檔:
     
    1. 建立所需要的群組與使用者:
    # 我要建立一個群組為 ftpguest ,此外,所有相關的使用者都是這個群組!
    [root@test root]# groupadd ftpguest
    [root@test root]# useradd -M -g ftpguest -s /bin/false ftpuser1
    [root@test root]# useradd -M -g ftpguest -s /bin/false ftpuser2
    [root@test root]# useradd -M -g ftpguest -s /bin/false ftpuser3
    [root@test root]# passwd ftpuser1
    # 請依序建立 ftpuser1 ftpuser2 ftpuser3 的密碼!
     
    2. 建立所需要的 FTP 相關路徑:
    # 我要的路徑在 /var/ftp2 當中,而且 ftpguest 必須要能夠寫入!
    [root@test root]# mkdir -p /var/ftp2
    [root@test root]# mkdir -p /var/ftp2/upload
    [root@test root]# mkdir -p /var/ftp2/work
    [root@test root]# chmod -R 775 /var/ftp2
    [root@test root]# touch /var/ftp2/work/ratio.dat #底下兩個檔案用在 ratio
    [root@test root]# touch /var/ftp2/work/ratio.tmp
    [root@test root]# chown -R ftpuser1:ftpguest /var/ftp2
    [root@test root]# chmod 666 /var/ftp2/work/*

    3. 建立基本的設定檔案:
    [root@test root]# vi /usr/local/proftpd/etc/proftpd.conf
    # 關於主機,實體用戶,anonymous 的設定如同前兩小節所示,所以我這裡就略過了!
    ...(沿用上兩小節的設定,這裡略過).....
     
    # 底下則是 /var/ftp2 的設定喔!就是與 ftpguest 有關的設定喔!
    DefaultRoot /var/ftp2 ftpguest
    DisplayLogin welcome.msg
    # 開始設定上傳/下載比例
    Ratios on
    SaveRatios on
    RatioFile /work/ratio.dat
    RatioTempFile /work/ratio.tmp
    # 上面這兩個檔案需要比較注意!他的路徑與 DefaultRoot 有關係!
    # 因為我們的 DefaultRoot 在 /var/ftp2 ,因此,這個檔案在
    # 『根目錄為 /var/ftp2 時,路徑為 /work/』也就是說, /work/ratio.dat
    # 其實就是 /var/ftp2/work/ratio.dat (因為 / 是 /var/ftp2 喔)
    # 這個地方是最容易搞錯的!請再次的看清楚喔! ^_^
     
    # 至於底下的設定就是要讓 /var/ftp2/work 這個目錄下的檔案都無法被使用!


    Denyall


     
    # 這裡就是在設定使用者的上傳/下載比例啦!語法為:
    # UserRatio "使用者帳號" fileratio filequota byteratio bytequota
    #  使用者帳號:就是登入 proftpd 的帳號啊!
    #  fileratio :這個是以檔案為基準的『比例』,通常不限制,故為 0
    #  filequota :預設能夠下載多少檔案,不限制時為 0
    #  byteratio :就是上傳/下載的比例,這個數字代表『 1:下載 』之意!
    #  bytequota :預設能夠下載多少 KBytes 的檔案!注意單位喔!
    UserRatio &

    你怎么不说话
    责任编辑: lyingjie

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

下一篇: 簡易 SAMBA 伺服器
请登录后发表评论 登录
全部评论

注册时间:2008-04-25

  • 博文量
    168
  • 访问量
    735297