新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 用LINUX架設FTP服務器

        用LINUX架設FTP服務器

        作者: 時間:2007-05-18 來源:網絡 收藏
        1.1 什么是:文件傳輸協議原理
        1.1.1 命令選擇
        1.1.2 命令格式
        1.2 wu-Ftpd的安裝
        1.3 讓服務器運轉起來
        1.4 配置文件的設置
        1.4.1 /etc/ftpaccess的設置
        1.4.2 /etc/ftpusers和/etc/ftphosts的設置
        1.4.3 /etc/ftpconversions設置
        1.4.1 wu-ftp的相關程序
        1.5 開設只能的帳戶
        1.6 設置虛擬FTP主機

        什么是FTP:文件傳輸協議原理
        互聯網文件傳輸協議(File Transfer Protocol ,FTP) 標準是在RFC959說明的。該協議定義了一個從遠程計算機系統和本地計算機系統之間傳輸文件的一個標準。一般來說,傳輸文件的用戶需要先經過認證以后才能登錄網站,然后方能訪問在遠程服務器的文件。而大多數的FTP服務器往往提供一個GUEST的公共帳戶來允許沒有遠程服務器的用戶可以訪問該FTP服務器。

        一個FTP會話通常包括五個軟件元素的交互。

        用戶接口 提供了一個用戶接口并使用客戶端協議解釋器的服務
        客戶 PI 客戶協議解釋器,其項遠程服務器協議機發送命令并且驅動客戶數據傳輸過程
        服務器PI 服務器協議解釋器,響應客戶協議機發出的命令并驅動服務器端數據傳輸過程
        客戶 DTP 客戶數據傳輸過程,其負責完成和服務器數據傳輸過程及客戶端本地文件系統的通信
        服務DTP 服務器數據傳輸過程,其負責完成和客戶數據傳輸過程及服務器端文件系統的通信

        在RFC 959中,一般使用用戶這個名詞來指代客戶。RFC 959定義了客戶PI和服務器PI交互的方式和規范。用戶接口與PI和DTP交互的機理都并不是協議標準的一部分。PI和DTP往往通常是在同一個程序模塊中實現的。

        在FTP會話中,一共會存在有兩個獨立的網絡連接,一個是由兩端的PI使用的,另一個是由兩端的DTP使用的。PI之間的連接一般被稱作控制連接(control connection),DTP之間的連接被稱做數據連接(data connection)

        使用TCP服務的控制和數據連接

        通常情況下,FTO服務器監聽端口號21來等待控制連接建立請求。而數據連接端口號的選擇依賴于控制連接上命令。通常是客戶發送一個控制消息來指定客戶監聽并等待服務器端發送數據連接建立請求的端口號。

        對數據傳輸和控制命令傳輸來使用不同的獨立連接有如下優點:兩個連接可以選擇不同的合適服務質量,如:對控制連接來說高需要更小的延遲時間,對數據連接來說需要更大的數據吞吐量;而且可以避免實現數據流中的命令的通明性及逃逸。

        當傳輸建立時,總是由客戶端首先發起。然而客戶和服務器都可能是數據發送者。除了傳輸用戶請求下載文件,數據傳輸過程同樣在客戶端請求列服務器端目錄結構時建立。

        1.1.1 命令選擇
        當一個傳輸建立時,一般通常需要指定四個方面的屬性:

        文件類型
        該屬性指定如何將文件的數據匹配成適于傳輸的格式,一共有四種可能的選擇:

        ASCII文件類型
        在發送端,文件從本地文本文件格式轉換為 NVT ASCII格式,每行結束有一個CR/LF對來標識。 在接收端,再被轉換為本地的文本格式。

        這說明了為什么Unix主機之間傳輸文本文件為何傳輸的數據量要大于文件的實際大小。若傳輸一段端或傳輸兩端都不使用ASCII文本編碼,則是應該由數據傳輸過程來實現本地編碼和NVT ASCII 編碼之間的轉換。

        EBCDIC文件類型
        類似于ASCII,區別僅僅上使用EBCDIC字符編碼

        圖象 (或二進制)文件類型
        文件以本地傳輸內容傳輸,在遠端以同本地完全相同的內容存儲。

        本地文件系統
        用在字節大小不是8位的環境下。沒字節位數由發送者指定。

        在實際應用中,只有ASCII和圖象格式使用的較多。

        格式控制
        該屬性是和將文本文件最后傳送到打印設備相關的,其中有多種方式來實現將垂直格式信息編碼到文件中,包括指示一個新頁開始的方式。有如下方式可供選擇:

        無須打印格式控制,這是缺省值
        Telnet打印控制,在telnet協議中定義的控制字符包含在數據流中。.
        Fortran打印控制,
        該屬性在實際中很少使用。

        結構
        文件可以擁有內部結構,在傳輸中該結構被保留。由數據傳輸過程來負責在傳輸中的結構及本地結構之間相互匹配,有三種可能性:

        文件結構
        這實際上意味著文件被看作沒有內部結構的連續的字節流。

        記錄結構
        文件是有一系列記錄組成的結構。這只適用于文本文件。

        頁面結構
        也可以稱做塊結構。每一頁都伴隨一個頁號來傳輸,從而以順序的方式來完成傳輸。

        頁面結構很少在實際中遇到。記錄結構也不是很常見。對于文本文件使用ASCII文件類型可以獲得相同的效果。

        傳輸模式
        該屬性可以取三個不同的值:

        流模式
        文件的以字節流的方式傳輸。

        塊模式
        文件以一個塊連接一個塊的方式傳輸,每個塊的開頭都有一個頭。

        壓縮模式
        一個簡單的運程長度壓縮編碼被應用,來壓縮連續的相同的字節。

        實際中,一般只有流模式被使用。而壓縮一般通過使用各種其他的工具程序來獲得。

        當一次傳輸被建立,客戶端一般指定一個或多個前面說明的屬性。若服務器端不能支持某個選項,服務器將用一個錯誤信息來響應客戶端,并不具有協商機制。

        FTP提供了充足的命令來使用戶和遠程建立連接并訪問遠程文件系統。

        1.1.2 命令格式
        命令以NVT ASCII串的格式被傳輸。每個命令以三個或四個大寫的NVT ASCII字符開始,后面帶有選項參數和一個CR/LF對來標識命令結束

        應答由三個NVT ASCII數字及一個選項消息組成。

        一個長的應答也許會有多個消息組成,第一個消息的三個數字后帶有一個破折號,最后的消息不帶有破折號。中間的消息無須攜帶三個數字,但是如果帶了三個數字,則也需要破折號。

        下面是所有的命令的列表。帶有星號的命令一般很少使用,所以往往在具體實現中不支持。

        String Meaning
        ABOR 放棄傳輸
        *ACCT 某些系統將帳號和用戶與文件系統相關聯
        *ALLO 為即將傳送的文件分配空間。后面攜帶的參數來確定字節數
        *APPE 將文件附加到已經存在的文件后面
        CDUP 在遠程系統上將當前目錄切換到上級父目錄
        CWD 改變遠程系統的工作目錄
        DELE 刪除遠程系統的文件
        HELP 讀取服務器的幫助信息,如:支持的命令的列表
        LIST 在一個新建立的數據連接上發送當前工作目錄下的文件名列表
        MKD 創建目錄
        MODE 指定傳輸模式,可攜帶的參數是:S、B或 C.
        NLST 在一個新建立的數據連接上發送一個當前目錄下的“完全”的目錄列表
        NOOP 空操作,防止連接斷掉
        PASS 提供一個用戶登錄密碼,必須立即跟隨在USER命令后
        *PASV 指定服務器數據傳輸過程監聽等待客戶端的數據連接連接建立請求
        PORT 指定客戶端監聽等待服務器端建立的連接的端口號
        PWD 顯示服務器端的當前工作目錄名
        QUIT 退出登錄并終止連接
        *REIN 重新初始化,退出登錄但是并不斷開連接,后面必須隨后發出一個新的USER命令
        *REST 從服務器的一個標識處重新開始傳輸
        RETR 從遠程系統取回一個文件
        RMD 刪除一個目錄
        *RNFR 指定要被命名的文件的老的路徑名,隨后必須是一個RNTO命令
        *RNTO 指定要被命名的文件的新的路徑名
        *SITE 站點特有的服務器提供的服務
        *SMNT 結構加載,提供一個文件系統結構的遠程系統路徑名
        *STAT 狀態信息
        STOR 上載一個文件到服務器上,若文件已經存在則覆蓋
        *STOU 上載一個文件到服務器上,不覆蓋已經存在的文件
        STRU 指定文件結構,參數可以是F、R或P.
        *SYST 報告遠程系統的操作系統類型
        TYPE 指定文件類型,參數可以是A、E、I、L只有TYPE A和TYPE I常用

        控制連接命令應答有如下形式:

        Type Description
        1yz 主動初步應答,在發送另一個命令以前等待另一個應答
        2yz 主動最后應答,最后一個命令成功結束
        3yz 主動中間應答,必須再發送一個命令
        4yz 暫時被動應答,要求的動作當時不能完成,但可以重試
        5yz 永久被動應答,要求的動作不能完成,不應該重試

        y數字編碼進一步的信息

        Digit Meaning
        0 語法錯誤
        1 信息
        2 連接狀態
        3 認證和記帳
        4 保留
        5 File s文件系統狀態

        下面是一些典型的消息:

        Number Meaning
        125 數據連接打開,傳輸開始
        200 命令OK
        331 用戶名OK 需要輸入密碼
        425 不能打開數據連接
        452 錯誤寫文件
        500 語法錯誤-不可識別的命

        具體的詳細情況可以參見RFC

         

        wu-Ftpd的官方權威站點地址是:http://www.wu-ftpd.org/。

         

        1.2 wu-Ftpd的安裝
        當前,Linux環境下有許多ftp服務器軟件可供選擇,但是目前最常見的仍然是wu-Ftpd服務器。這里主要討論該軟件的安裝和配置。

        一般來說,在安裝了linux時,缺省都會自動安裝wu-ftpd服務器,但是有時候為了某種需要也需要自己親自重新安裝該服務器軟件。安裝wu-Ftpd有兩方式,一種是安裝rpm形式的發布包;一種是自己動手去編譯生成Ftp服務器。


        rpm包可以在http://rpmfind.net/linux/RPM/WByName.html處下載得到,以rpm包方式安裝非常簡單,只需要在按下面的簡單的幾個步驟就可以完成,假設下載得到的rpm包存放在/tmp目錄下:

        #cd /tmp
        #rpm -ivh wu-ftpd-1.6.0-9.i386.rpm

        壓縮的源代碼可以在ftp://ftp.wu-ftpd.org/pub/wu-ftpd/出得到。這里我們以最新的1.6.0為例說明如何編譯安裝wu-ftpd。

        1、解開源代碼

        1) 將壓縮的源代碼拷貝到/usr/src下

        #cp wu-ftpd.1.6.0.tar.gz /usr/src

        2) 對壓縮文檔進行解壓縮:

        #tar xvfz wu-ftpd.1.6.0.tar.gz
        #cd wu-ftpd-1.6.0

        2、敲入命令 ./build xxx ,可以在這里指定一個C語言編譯器:./build CC=yyy xxx yyy 指用來替代 cc 的其他的編譯器。對于linux環境下的gcc編譯器,命令應該為:./build CC=gcc xxx

        #build CC=gcc lnx


        xxx可以取下面的值:
        gen : 通用make(當移植到心得系統時需要拷貝它)
        aix : IBM AIX
        aux : AU/X
        bdi : BSD/OS
        bsd : BSD
        dec : DEC Unix 3.X
        du4 : DEC Unix 4.X or later
        dyn : Dynix
        fbs : FreeBSD 1.0 or later
        hiu : Hitachi Unix
        hpx : HP-UX
        lnx : Linux (tested on 1.0.30)
        nbs : NetBSD 1.X
        nx2 : NeXTstep 1.x
        nx3 : NeXTstep 3.x
        osf : OSF/1
        osx : Mac OS X
        ptx : ???
        sco : SCO Unix 3.2v4.2/SCO OpenServer 5
        sgi : SGI Irix 4.0.5a
        sny : Sony NewsOS
        sol : SunOS 5.x / Solaris 1.x
        s41 : SunOS 4.1.x
        ult : Ultrix 4.x
        uxw : UnixWare 1.1 or later
        clean : Clean up object files and such to reduce disk space after building.
        install: Install ftpd


        Copying Makefiles.

        Linking src/config.h

        Making support library.
        gcc -O3 -fomit-frame-pointer -fno-strength-reduce -pipe -c strcasestr.c
        gcc -O3 -fomit-frame-pointer -fno-strength-reduce -pipe -c authuser.c
        gcc -O3 -fomit-frame-pointer -fno-strength-reduce -pipe -c snprintf.c
        rm -f libsupport.a
        ar cq libsupport.a strcasestr.o authuser.o snprintf.o
        ranlib libsupport.a
        : : :
        : : :
        : : :

        編譯成功以后將生成如下幾個可執行文件:

        ftpd FTP服務器程序
        ftpshut 用于關閉FTP守護進程的程序
        ftpcount 記數程序,顯示目前ftp登錄的人數
        ftpwho 查看當前FTP服務器的連線情況,類似與系統的who命令,只不過是查看ftp登錄的用戶
        ckconfig 檢查FTP的設置是否正確
        ftprestart 重新啟動ftp服務器
        privatepw 改變wu_ftpd組訪問文件信息


        3、若只是升級到一個新的版本,應該首先備份系統所有的舊的配置文件。否則這些配置文件將被覆蓋。為了適應自己的需求,應當編輯樣本配置文件來滿足自己的要求,具體配置文件的需求參見后面的內容。


        4、以超級用戶身份敲入命令./build install

        #build install

        installing binaries.
        install -c -o bin -g bin -m 110 bin/ftpd /usr/sbin/in.ftpd
        install -c -o bin -g bin -m 111 bin/ftpshut /usr/bin/ftpshut
        install -c -o bin -g bin -m 111 bin/ftprestart /usr/bin/ftprestart
        install -c -o bin -g bin -m 111 bin/ftpcount /usr/bin/ftpcount
        install -c -o bin -g bin -m 111 bin/ftpwho /usr/bin/ftpwho
        install -c -o bin -g bin -m 111 bin/privatepw /usr/bin/privatepw
        installing manpages.
        install -c -o bin -g bin -m 444 doc/ftpcount.1 /usr/man/man1/ftpcount.1
        install -c -o bin -g bin -m 444 doc/ftpwho.1 /usr/man/man1/ftpwho.1
        install -c -o bin -g bin -m 444 doc/ftpaccess.5 /usr/man/man5/ftpaccess.5
        install -c -o bin -g bin -m 444 doc/ftpconversions.5 /usr/man/man5/ftpconversio5
        install -c -o bin -g bin -m 444 doc/ftphosts.5 /usr/man/man5/ftphosts.5
        install -c -o bin -g bin -m 444 doc/xferlog.5 /usr/man/man5/xferlog.5
        install -c -o bin -g bin -m 444 doc/ftpd.8 /usr/man/man8/ftpd.8


        5、編輯 /etc/inetd.conf 文件,指向新的ftpd守護進程,大多數情況下,這一步是不必的,因為在build install時,會將新的守護進程拷貝覆蓋老的守護進程。若希望使用ftpd的增強的擴展功能,應該在這行最后加上-a選項。

        ftpd守護進程一般可以攜帶如下參數,也可以不帶任何參數:

        -d debug參數,當ftpd守護進程出現錯誤時,會將錯誤信息寫入到系統記錄文件/usr/adm/syslog中
        -l 記錄每次ftp會話信息到/usr/adm/messages中
        -t 設置當FTP客戶端多久無操作就自動斷線,這個參數后面指定等待的時間,如 -t 600 表示若客戶
        端若連續10分鐘沒有動作就自動斷線,缺省值是15分鐘
        -a 使用ftpaccess配置文件內容對ftpd進行更詳細復雜的設置
        -A 不使用ftpaccess配置文件的設置,缺省值是-A
        -i 當客戶端有上載文件的動作時,就記錄在文件xferlog中
        -L 使用戶連接ftp服務器期間使用的所有命令都被記錄到/usr/adm/messages中

        6、拷貝tar、gzip、gunzip、compress、uncompress等文件到 ~ftp/bin中,拷貝ls為~ftp/bin/ls。

        7、若是第一次安裝,使用ckconfig程序查找ftpd的各種配置文件存放目錄:ftpconversions、ftpusers、 和ftpgroups。在doc/examples目錄下有樣本文件。ckconfig是一個可執行程序,確保修復該程序檢測到的任何問題。

        1.3 讓FTP服務器運轉起來
        一般來說,只要正確地編譯安裝了wu-ftpd,該服務器就可以正常運行。用戶可以通過FTP命令從各種系統上連接該服務器。

        1.4 配置文件的設置

        1.4.1 /etc/ftpaccess的設置
        這個配置文件是FTP服務器最重要的配置文件,這個文件的設置決定了FTP是否可以正常工作及許多訪問權限的設置。如下面的例子所示:
        class all real,guest,anonymous *

        limit all 10 Any /etc/msgs/msg.dead

        readme README* login
        readme README* cwd=*

        message /welcome.msg login
        message .message cwd=*

        compress yes all
        tar yes all

        log commands real
        log transfers anonymous,real inbound,outbound

        shutdown /etc/shutmsg

        email user@hostname


        下面是設置文件各個指示(directive)的詳細說明:

        指示: loginfails n
        密碼輸入n次就自動斷開連接

        指示:autogroup 組名 類別 [ ...]
        若一個匿名用戶屬于任何一個參數類別的類,則FTP服務器將實施setegid()調用使其屬于這個組名定義的組,這樣做是為了實現某些特定類別的匿名用戶可以訪問一些只允許本組及擁有者可以訪問的文件。組名必須是/etc/group內定義的有效組。

        指示: class 類名 類別(real、guest、anonumous) IP地址
        這個指示是設定FTP服務器用戶的類別。
        FTP服務器的用戶可以分為以下三種類別:
        real 在該FTP服務器上擁有合法帳戶的用戶;
        guest 另外定義某些特定組的用戶;
        anonymous 匿名用戶;

        舉例說明:
        class outworld real,guest,anonymous *
        定義一個名為outworld的類,該類包含三種類型的用戶:real,guest,anonymous。該類在后面的指示中使用。其中*是類定義中的IP地址部分,表示網絡上的所用主機。也就是說明允許任何主機連接FTP服務器。若希望對訪問FTP的主機進行一定的權限設置,可以這樣做:
        class friend real,guest,anonymous *.linuxaid.com.cn 201.101.13.*
        指定義一個friend類,該類從*.linuxaid.com.cn 及201.101.13.*訪問FTP服務器時有特定的權限設定。

        指示: limit 類別 人數 時間 文件名
        該指示設定在某個類在某個時間內允許連接FTP服務器的人數的限制,并指定當連接人數超過限制,后面的用戶連接時顯示給用戶的消息信息。

        舉例說明:
        limit local 20 Any /tmp/message/msg.toomany
        上面的例子限定local這個類中的擁護同一時間只能有20人同時上網連接這臺FTP服務器,若超過20人則顯示/tmp/message/msg.toomany的文件的內容
        limit outworld 100 MoTu|Any 2200-0800 /tmp/message/msg.limit
        這個例子限制outworld這個類的用戶只能在周一周二或每天的晚上10點到第二天早上的8點之間訪問該FTP服務器,而且同時連線的人數不可以超過100人,若超過100人,則顯示/tmp/message/msg.limit的文件的內容

        /tmp/message/msg.limit的內容為:
        對不起!本服務器只允許匿名用戶在周一周二全天及其他每天晚上10點到第二天早上的8點之間訪問,當前時間為%T;而且只允許同時有%M個匿名用戶訪問,當前有%N個用戶在訪問該服務器。請在合適的時間訪問本FTP服務器,謝謝!
        這里的%M是一個變量,代表同時允許連接的人數的上限,FTP服務器可以用前面設置的值自動替代該變量,其他允許的變量包括:
        %T 本地當前時間;
        %F CWD所在分區剩余空間,以KB為單位。但該變量不是所有系統都支持。
        %C 當前工作目錄;
        %E 定義在/etc/ftpaccess文件中的系統管理員的E-mail地址;
        %R 遠端主機名;
        %L 本地主機名;
        %U 登錄時所給的用戶名;
        %N 這個類別當前連接的用戶數目;
        利用這些參數,可以編輯一個詳細的說明文件,這樣可以讓用戶清楚當前服務器資源使用情況。

        指示: readme 說明文件 指令
        當用戶執行指定的指令時,系統就會自動顯示所設置的說明文件;
        舉例說明:
        readme README* login
        當用戶執行登錄動作時,只要以README開頭的文件內容就會顯示給用戶。
        readme README* cwd=*
        表示用戶切換目錄時(cwd),只要以README開頭的文件內容就會顯示給用戶。
        通常README*應該是該目錄下文件的說明,讓登錄的用戶可以清楚地知道目錄中存放了那些文件;

        指示: message 文件名 指令
        使當用戶執行特定的指令時,系統就將指定的文件內容顯示給用戶;
        舉例說明:
        message /msg.welcome login
        指定當用戶登錄時,將自動顯示/tmp/message/msg.welcome的內容給用戶,注意這里的/msg.welcome指ftp根目錄下的msg.welcome文件,即/home/ftp/msg.welcome。
        message /welcome cwd=*
        指定當用戶切換另一個目錄時,只要目錄中有msg.welcome文件,就顯示給用戶

        指示: compress (yes/no) 類別
        設置哪個類別的用戶可以使用壓縮功能;
        舉例: compress yes local outworld
        允許local 和outworld兩個類別的 用戶使用壓縮功能

        指示: tar (yes/no) 類別
        指定哪個類別的用戶可以使用tar功能;


        指示: passwd-check (none/trivial/rfc822) (enforce/warn)
        設定當用戶以匿名方式登錄服務器時密碼的方式:
        none 表示不對密碼進行驗證,任何密碼都可以登錄;
        trival 表示只要密碼中包含@就可以登錄;
        rfc822 表示密碼一定要符合rfc822中規定的E-mail格式才能登錄。如:webmaster@linuxaid.com.cn
        enforce 表示輸入的密碼不符合指定格式就不允許登錄;
        warn 表示輸入的密碼不符合指定格式顯示警告信息,但仍然允許登錄;

        指示: log commands 類別(read/guest/anonumous)
        設定那些用戶登錄時,所使用的操作會被記錄在文件/usr/adm/xferlog中。

        指示: log transfer 類別(read/guest/anonumous) (inbound/outbound)
        設定指定的用戶類別在上載還是下載時的相關信息被記錄到/usr/adm/xferlog中。
        舉例說明:
        log transfer anonymous,real inbound,outbound
        當anonymous或real用戶登錄后,上載和下載的操作會被記錄在文件/usr/adm/xferlog中。

        指示: shutdown 文件名
        FTP服務器關閉的時間可以后面的文件名中指定的文件中指定,設定的時間一到,便無法登錄FTP服務器了,只有將這個文件刪除才能恢復FTP服務器。文件的格式可以由命令ftpshut來建立。

        指示: delete (yes/no) 類別(real/anonymous/guest)
        設定是否允許指定用戶使用delete命令。
        舉例說明:
        delete no guest,anonymous
        設定大概內登錄的用戶為guest或anonymous上不允許執行delete命令。

        指示: overwrite (yes/no) 類別(real/anonymous/guest)
        設定是否允許指定用戶使用overwrite指令。

        指示: reame (yes/no) 類別(real/anonymous/guest)
        設定是否允許指定用戶使用readme指令。

        指示: chmod (yes/no) 類別(real/anonymous/guest)
        設定是否允許指定用戶使用chmod指令。

        指示: umask (yes/no) 類別(real/anonymous/guest)
        設定是否允許指定用戶使用umask指令。


        指示: upload [absolute|relative] [class=]... [-]

        [dirs|nodirs] []

        定義允許用來上載的目錄。若允許上載,所有新上載的文件的所有者及組由和定義 ,訪問權限將為。對于覆蓋老文件的上載文件將保持原來的所有者及訪問權限信息。文件上載的權限信息由最大匹配目錄項定義,如:
        upload /var/ftp * no
        upload /var/ftp /incoming yes ftp daemon 0666
        upload /var/ftp /incoming/gifs yes jlc guest 0600 nodirs
        would only allow uploads into /incoming and /incom-
        :
        將只允許/incoming和/incom-ing/gifs目錄上載。上載到/incoming目錄下的文件將屬于ftp/daemon,訪問權限為0666;而上載到/incoming/gifs下的文件將屬于jlc/guest,訪問權限為0600。應該注意的是 必須匹配ftp用戶的passwd文件中的主目錄。
        dirs和nodirs選項用來設定是否允許在該目錄下創建新的子目錄。但是缺省是允許創建子目錄的。
        設定新創建的目錄的訪問權限,缺省為0777。
        上載指示只能施用于用戶主目錄(chroot()的參數)等同于的用戶,可以為*來表示匹配任何主目錄。
        和也可能指定為*,在這種情況下,任何上載的文件或創建的目錄的所有者都等于起父目錄的所有者。
        選項[absolute|relative]指定是是絕對路徑還是相對于chroot()參數指定的目錄的相對路徑。缺省是絕對路徑。也可以指定任意多個class='來進行進一步限定。若指定了任何目錄,則該上載指示只影響這些組的用戶。


        指示: alias 目錄別名 目錄路徑
        給指定目錄設置一個別名,當切換目錄時可以使用別名。
        舉例說明:
        alias xwin /pub/linux/xwindows
        為/pub/linux/xwindows設置別名xwin,登錄以后只要輸入命令cd xwin就可以進入該目錄。

        指示: cdpath 目錄
        該功能和系統的PATH環境變量設置類似,當cd /etc時,FTP首先查看當前目錄下是否有etc子目錄,無則看是否有別名,若沒有則根據該指示設定的路徑查詢。

        舉例說明:
        cdpath /pub/linux
        cdpath /pub
        cdpath /
        搜索順序為:/pub/linux /pub /

        指示: path-filter 類別(real/anonymous/guest) 目錄
        設定上載文件名限制。
        舉例說明:
        path-filter anonymous /etc/pathmsg^[-A-Za-z0-9_.]*$^.^-
        path-filter guest /etc/pathmsg^[-A-Za-z0-9_.]*$^.^-
        設置限制anonymous和guest用戶上載的文件名只能包含A-Z、a-z、0-9和._-,名字以.和-開頭的文件不能上載到服務器上。

        指示: guestgroup [ ...]
        guestuser [ ...]
        realgroup [ ...]
        realuser [ ...]
        對于guestgroup指示,若一個真實(real)用戶屬于任何一個所指定的組,則其FTP會話都被FTP服務器以匿名的方式進行處理。也就是說,chroot()被調用,用戶不再允許發出USER和 PASS 命令。必須是有效的組。
        這里用戶的home目錄必須被爭取的設置,要確實和匿名用戶一致,/etc/passwd中的相關項的home目錄被分割為兩個部分,第一部分是chroot()調用的根目錄參數,第二個是用戶相對于根目錄的主目錄,兩部分之間以/./分隔,如:
        guest1::100:92:Guest Account:/ftp/./incoming:/etc/ftponly
        當guest1成功登錄進入,FTP服務器將調用chroot(/ftp然后調用chdir(/incoming。則guest1就如同匿名用戶一樣只能訪問/ftp下面的容(對于guest1來說,它就是/。
        可以是組名或數字ID。若使用數字ID,需要在數字前面加上一個%。使用*表示所有組。
        guestuser和guestgroup指示類似,只不過是限定一個單一用戶罷了。
        realuser和realgroup有同樣的語法,但是和guestuser及guestgroup起相反的作用,其是允許某個組的用戶或某個用戶以真實身份訪問FTP服務器。如:
        guestuser *
        realgroup admin
        指定所有的非匿名用戶登錄進入服務器以后,都被做為匿名用戶處理,但是admin組的用戶是例外,登錄以后以真實身份存在。

        指示: guestgroup 功能
        設定guest組的功能。
        舉例說明:
        guestgroup ftponly


        指示: nice []
        設定FTP服務器守護進程的調度優先級。

        指示: defumask []
        若遠程用戶屬于class,則守護進程創建的文件的umask為umask。若沒有指定class則將umask作為缺省的umask.

        指示: tcpwindow []
        設置數據連接的TCP窗口大小,若不明白含義,一般不要去設置它。

        指示:keepalive
        設置TCP socket的SO_KEEPALIVE參數選項。

        指示:timeout accept
        timeout connect
        timeout data
        timeout idle
        timeout maxidle
        timeout RFC931
        設置各種超時時鐘,這些參數必須在對TCP協議非常熟悉的情況下才應該去設定,一般不要改動這些值,具體含義參見man ftpaccess。

        指示: file-limit [] []
        限制某個組的任何一個用戶允許上載的文件的數量,若沒有指定class,則該限制施用于所有沒有限定的組。raw指示這個限制包括所有的傳輸,而不僅僅是數據文件。

        指示:byte-limit [] []

        限制某個類的任何一個用戶允許傳輸的數據總量。

        指示: limit-time {*|anonymous|guest}
        限定一個對話允許的持續時間,缺省無限制。真實用戶沒有該限制。

        指示:guestserver []
        控制哪個站點允許進行匿名連接,若沒有指定hostname,則拒絕所有匿名連接。

        指示: noretrieve [absolute|relative] [class=] ... [-] ...
        設定拒絕那些類訪問哪些特定文件。例如:
        noretrieve /etc/passwd core
        指定任何訪問者都不可以訪問文件/etc目錄下的passwd文件和所有的名為core的文件。

        指示:allow-retrieve [absolute|relative] [class=]... [-] ...
        允許訪問這些文件。


        指示:private
        當一個用戶登錄進入,,指示SITE GROUP和 and SITE GPASS用來指定一個增強的訪問組和相應的密碼。若輸入的組名和密碼有效的話,該用戶將變為該組的成員,具有該組的訪問權限。

        指示:greeting full|brief|terse
        greeting text
        允許控制在遠程用戶登陸進來以后,給用戶多少greet信息及信息內容。

        指示:banner
        和message類似,不過banner消息是在用戶輸入用戶名和密碼以前顯示給用戶的。


        指示: hostname
        定義FTP服務器缺省的主機名。


        指示: email
        定義FTP維護者的emai地址。

        指示: log security (anonymous|guest|real)
        使記錄違背安全規則如:(noretrieve, .notar, ...)的命令。

        指示:log syslog
        log syslog+xferlog
        重定向記錄消息到系統記錄文件syslog,缺省只記錄到xferlog。

        指示:daemonaddress
        若該值沒有被設置,則服務器則監聽所有的接入請求,否則,服務器只接受來自定義的連接請求。這個設置一般不要設置,設置以后會阻止使用虛擬主機或其他一些以后擴展的功能。

        指示: virtual
        打開虛擬FTP服務器的支持。是虛擬服務器的IP地址。第二個參數指定如root目錄,bannner文件,log文件等的路徑。


        指示:virtual
        設置在greeting消息中顯示的主機名字或電子郵件。


        指示:virtual allow [ ...]
        virtual deny [ ...]
        一般真實和guest用戶不允許登陸進入虛擬主機,該兩個指示用來重新對允許和拒絕訪問的虛擬主機的用戶進行細化定義。

        指示:virtual private
        通常,拒絕匿名用戶登陸進入虛擬主機。


        指示: defaultserver deny [ ...]
        defaultserver allow [ ...]
        對允許訪問缺省(非虛擬)FTP服務器的用戶進行定義。

        指示:defaultserver private
        拒絕匿名用戶訪問缺省FTP服務器。


        指示: deny ip地址/域名 說明文件
        設定限制哪個IP地址或域名的用戶不允許登錄到服務器。
        舉例說明:
        deny 201.101.15* *.hacker,com /tmp/message/deny.msg
        限制IP地址為201.101.15*及域名為*.hacker,com的機器不允許登錄服務器

         

        1.4.2 /etc/ftpusers和/etc/ftphosts的設置
        /etc/ftpusers是用來設定系統上的某些用戶不允許使用FTP傳送文件,/etc/ftphosts是用來設定某些主機不允許連接本FTP服務器的。這樣做的目的都是為了安全考慮。

        /etc/ftpusers使用的范例如下:

        root
        bin
        daemon
        adm
        lp
        sync
        shutdown
        halt
        mail
        news
        uucp
        operator
        games
        nobody
        限制某些用戶登入FTP服務器是出于系統安全的原因,例如要避免超級用戶登入系統。并且禁止某些和一些命令名相同的用戶進入FTP服務器。

        /etc/ftphosts的示例如下:

        # Example host access file
        #
        # Everything after a '#' is treated as comment,
        # empty lines are ignored
        #allow [ ...]
        # Only allow host(s) matching to log in as .
        #deny [ ...]
        # Always deny host(s) matching to log in as .

        allow ideal *.linuxaid.com.cn 10.0.0.0/8
        deny fred *.hacker.com 131.211.31.0/24

        這里只允許ideal從域名以linuxaid.com.cn為后綴的主機及10.0.0.0/255.0.0.0的主機登錄進入FTP服務器;禁止fred從*.hacker.com和131.211.31.0/24登錄進入FTP服務器。這里的username若為anonymous或ftp都指匿名用戶。

        1.4.3 /etc/ftpconversions設置
        該文件用來設定當用戶下載文件時應該做那些操作,例如壓縮、解壓縮等。文件內容如下所示:

        :.Z: : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
        : : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
        :.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
        : : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP
        : : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR
        : : :.tar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
        : : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP
        : : :.crc:/bin/cksum %s:T_REG::CKSUM
        : : :.md5:/bin/md5sum %s:T_REG::MD5SUM


        文件設置說明:

        :.Z: : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
        表示對所有以.Z結尾的文件使用/bin/compress -d -c的方式解壓縮。

        : : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
        表示將傳送的文件壓縮為.Z格式。

        :.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
        表示將所有以.gz的文件用/bin/gzip -cd解壓縮。

        : : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP
        表示將傳送的文件壓縮為.gz格式。

        : : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR
        表示將要傳送的文件用tar打包。

        : : :.tar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
        表示將要傳送的文件壓縮成tar.Z的格式

        : : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP
        表示將要傳送的文件壓縮成tar.gz的格式

        : : :.crc:/bin/cksum %s:T_REG::CKSUM
        表示將要傳送的文件進行CRC校驗處理。

        : : :.md5:/bin/md5sum %s:T_REG::MD5SUM
        表示將要傳送的文件進行md5校驗。

        其實安裝FTP以后缺省的配置文件已經將常用的壓縮也解壓縮的程序定義進去了,所以一般不需要修改這個文件的內容,但可以根據實際需要修改內容的順序。例如,用戶要下載一個file.tar.gz的文件,但此FTP上沒有這個文件,但是有文件file,那么FTP服務器會將file打包壓縮為file.tar.gz在傳遞給用戶。若服務器上沒有file這個文件,服務器會按照/etc/ftpconversions文件中指定的順序去搜索,,以這個例子而言,會依次搜索file.Z、file.gz、file.tar、file.tar.Z、file.tar.gz、file.crc、file.md5文件,將先找到的傳送給用戶。所以文件/etc/ftpconversions的內容可以按照需要而改變順序。

        到現在為止,已經安裝配置成功了一個提供匿名訪問的FTP服務器,可以連接上去測試功能是否符合需要。

        1.4.1 wu-ftp的相關程序
        ftpcount這個程序可以統計當前連接的用戶數目,并給出上限,如:

        [root@linux doc]# ftpcount
        Service class friend - 0 users (no maximum)
        Service class local - 0 users (no maximum)
        Service class outworld - 0 users (no maximum)
        這里正在連接的屬于local的有0個人,沒有上限。其他幾個類別含義一樣。

        [root@linux doc]# ftpwho
        Service class friend:
        - 0 users (no maximum)
        Service class local:
        - 0 users (no maximum)
        Service class local:
        - 0 users (no maximum)
        當前三個類別都沒有用戶連接。

        ftpshut

        該程序主要用來生成/etc/shutmsg,也就是前面/etc/ftpaccess中設定的shutdown命令,ftpshut的使用格式如下:

        ftpshut [ -V ] [ -l min] [ -d min] time [ warning-message ... ]
        -l 該選項設置在關閉FTP服務器以前多少分鐘停止用戶的連接請求
        -d 該選項設置在關閉FTP服務器以前多少分鐘將已經連接的用戶斷線
        time 設置關閉FTP服務器的時間,例如希望在晚上10點關閉FTP服務器,則為2200
        warning-message 斷線以前顯示給用戶的告警信息
        例如:

        [root@linux /etc]# ftpshut -l15 -d5 1800 ftp server will shutdown
        [root@lix /etc]# less shutmsg
        2000 04 07 18 00 0015 0005
        ftp server will shutdown


        1.5 開設只能FTP的帳戶
        很多時候需要開設一些只允許ftp到服務器的用戶,實現方法如下:

        1、按照通常的方式為這些用戶在系統上開設帳戶。

        [root@ns /etc]#useradd ftp_user1
        [root@ns /etc]#chmod 700 /etc/shadows
        [root@ns /etc]#vi /etc/shadows

        刪除項:
        ftp_user1:!!:11113:0:99999:7:-1:-1:134537372
        中第二個字段的!!,然后再以ftp_usre1用戶登錄,就不會詢問口令,然后使用passwd為該用戶設定口令

        2、使用vi修改/etc/shells文件,添加/dev/null項或/bin/passwd,如下所示:

        [root@ns /etc]# cat shells
        /bin/bash
        /bin/sh
        /bin/ash
        /bin/bsh
        /bin/tcsh
        /bin/csh

        修改為:

        [root@ns /etc]# cat shells
        /bin/bash
        /bin/sh
        /bin/ash
        /bin/bsh
        /bin/tcsh
        /bin/csh
        /dev/null
        /bin/passwd


        2、使用vi打開文件/etc/passwd
        3、將那些只允許FTP的系統的用戶的登錄shell改為/dev/null(若不允許用戶修改其口令)或/bin/passwd(若允許用戶修改其口令字),如下所示:

        ftp_user1:503:504::/home/ftp_user1:/bin/bash
        改為:
        ftp_user1:503:504::/home/ftp_user1:/dev/null

        ftp_user1:503:504::/home/ftp_user1:/bin/passwd

        這樣,則該用戶只能使用如pop3、FTP等服務,而不能通過telnet登錄到系統中。

        1.6 設置虛擬FTP主機
        所謂虛擬匿名主機,指一臺機器上有多個IP地址,并且可以向外提供過個匿名的FTP服務器,這些服務器在邏輯上是獨立的,有不同的訪問控制表,不同的下載內容。下面是設置一臺虛擬FTP服務器的步驟:

        1. 首先對本地某個網卡設置別名IP地址,即在一塊網卡上綁定多個IP地址:如你的內部FTP主機為191.168.0.4

        你可再綁定一個IP地址如下:
        /sbin/ifconfig eth0:0 191.168.0.5 up //向接口添加一個新的IP
        /sbin/route add -host 191.168.11.7 eth0:0 //增添路由信息

        1. 先創建目錄/home/virtualftp和/var/log/virtualftp。生成banner文件/home/virtualftp/banner_message修改FTP服務器的主配置文件/etc/ftpaccess,增加對虛擬FTP的支持信息,加下面的行到該文件中:

        virtual 191.168.0.5 root /home/virtualftp
        virtual 191.168.0.5 banner /home/virtualftp/banner_message
        virtual 191.168.0.5 logfile /var/log/virtualftp/xferlog

        上面三條指示分別設置虛擬主機的根目錄,虛擬主機的記錄文件,虛擬主機的登錄顯示信息。上面路徑和文件名可隨便定義。


        3. 拷貝所需要的匿名FTP文件,主要是/lib,/etc,/bin目錄
        # cp /home/ftp/* /home/virtualftp -a

        4.在DNS中定義191.168.0.5,設置成虛擬FTP的域名映射。


        關鍵詞: FTP

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 清河县| 大田县| 民勤县| 武乡县| 高雄市| 天祝| 林西县| 龙山县| 来凤县| 砚山县| 五峰| 前郭尔| 明星| 海兴县| 土默特左旗| 雅安市| 蒲城县| 高陵县| 石首市| 盐城市| 岐山县| 肥西县| 亚东县| 徐州市| 临泽县| 栾川县| 万全县| 南昌县| 且末县| 来安县| 得荣县| 湾仔区| 调兵山市| 扶绥县| 秦安县| 贵德县| 西贡区| 新河县| 宽城| 孝义市| 科技|