新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用LINUX架設(shè)FTP服務(wù)器

        用LINUX架設(shè)FTP服務(wù)器

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

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

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

        用戶接口 提供了一個用戶接口并使用客戶端協(xié)議解釋器的服務(wù)
        客戶 PI 客戶協(xié)議解釋器,其項遠(yuǎn)程服務(wù)器協(xié)議機(jī)發(fā)送命令并且驅(qū)動客戶數(shù)據(jù)傳輸過程
        服務(wù)器PI 服務(wù)器協(xié)議解釋器,響應(yīng)客戶協(xié)議機(jī)發(fā)出的命令并驅(qū)動服務(wù)器端數(shù)據(jù)傳輸過程
        客戶 DTP 客戶數(shù)據(jù)傳輸過程,其負(fù)責(zé)完成和服務(wù)器數(shù)據(jù)傳輸過程及客戶端本地文件系統(tǒng)的通信
        服務(wù)DTP 服務(wù)器數(shù)據(jù)傳輸過程,其負(fù)責(zé)完成和客戶數(shù)據(jù)傳輸過程及服務(wù)器端文件系統(tǒng)的通信

        在RFC 959中,一般使用用戶這個名詞來指代客戶。RFC 959定義了客戶PI和服務(wù)器PI交互的方式和規(guī)范。用戶接口與PI和DTP交互的機(jī)理都并不是協(xié)議標(biāo)準(zhǔn)的一部分。PI和DTP往往通常是在同一個程序模塊中實現(xiàn)的。

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

        使用TCP服務(wù)的控制和數(shù)據(jù)連接

        通常情況下,F(xiàn)TO服務(wù)器監(jiān)聽端口號21來等待控制連接建立請求。而數(shù)據(jù)連接端口號的選擇依賴于控制連接上命令。通常是客戶發(fā)送一個控制消息來指定客戶監(jiān)聽并等待服務(wù)器端發(fā)送數(shù)據(jù)連接建立請求的端口號。

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

        當(dāng)傳輸建立時,總是由客戶端首先發(fā)起。然而客戶和服務(wù)器都可能是數(shù)據(jù)發(fā)送者。除了傳輸用戶請求下載文件,數(shù)據(jù)傳輸過程同樣在客戶端請求列服務(wù)器端目錄結(jié)構(gòu)時建立。

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

        文件類型
        該屬性指定如何將文件的數(shù)據(jù)匹配成適于傳輸?shù)母袷剑还灿兴姆N可能的選擇:

        ASCII文件類型
        在發(fā)送端,文件從本地文本文件格式轉(zhuǎn)換為 NVT ASCII格式,每行結(jié)束有一個CR/LF對來標(biāo)識。 在接收端,再被轉(zhuǎn)換為本地的文本格式。

        這說明了為什么Unix主機(jī)之間傳輸文本文件為何傳輸?shù)臄?shù)據(jù)量要大于文件的實際大小。若傳輸一段端或傳輸兩端都不使用ASCII文本編碼,則是應(yīng)該由數(shù)據(jù)傳輸過程來實現(xiàn)本地編碼和NVT ASCII 編碼之間的轉(zhuǎn)換。

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

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

        本地文件系統(tǒng)
        用在字節(jié)大小不是8位的環(huán)境下。沒字節(jié)位數(shù)由發(fā)送者指定。

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

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

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

        結(jié)構(gòu)
        文件可以擁有內(nèi)部結(jié)構(gòu),在傳輸中該結(jié)構(gòu)被保留。由數(shù)據(jù)傳輸過程來負(fù)責(zé)在傳輸中的結(jié)構(gòu)及本地結(jié)構(gòu)之間相互匹配,有三種可能性:

        文件結(jié)構(gòu)
        這實際上意味著文件被看作沒有內(nèi)部結(jié)構(gòu)的連續(xù)的字節(jié)流。

        記錄結(jié)構(gòu)
        文件是有一系列記錄組成的結(jié)構(gòu)。這只適用于文本文件。

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

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

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

        流模式
        文件的以字節(jié)流的方式傳輸。

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

        壓縮模式
        一個簡單的運程長度壓縮編碼被應(yīng)用,來壓縮連續(xù)的相同的字節(jié)。

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

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

        FTP提供了充足的命令來使用戶和遠(yuǎn)程建立連接并訪問遠(yuǎn)程文件系統(tǒng)。

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

        應(yīng)答由三個NVT ASCII數(shù)字及一個選項消息組成。

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

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

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

        控制連接命令應(yīng)答有如下形式:

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

        y數(shù)字編碼進(jìn)一步的信息

        Digit Meaning
        0 語法錯誤
        1 信息
        2 連接狀態(tài)
        3 認(rèn)證和記帳
        4 保留
        5 File s文件系統(tǒng)狀態(tài)

        下面是一些典型的消息:

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

        具體的詳細(xì)情況可以參見RFC

         

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

         

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

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


        rpm包可以在http://rpmfind.net/linux/RPM/WByName.html處下載得到,以rpm包方式安裝非常簡單,只需要在按下面的簡單的幾個步驟就可以完成,假設(shè)下載得到的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) 對壓縮文檔進(jìn)行解壓縮:

        #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環(huán)境下的gcc編譯器,命令應(yīng)該為:./build CC=gcc xxx

        #build CC=gcc lnx


        xxx可以取下面的值:
        gen : 通用make(當(dāng)移植到心得系統(tǒng)時需要拷貝它)
        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
        : : :
        : : :
        : : :

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

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


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


        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守護(hù)進(jìn)程,大多數(shù)情況下,這一步是不必的,因為在build install時,會將新的守護(hù)進(jìn)程拷貝覆蓋老的守護(hù)進(jìn)程。若希望使用ftpd的增強(qiáng)的擴(kuò)展功能,應(yīng)該在這行最后加上-a選項。

        ftpd守護(hù)進(jìn)程一般可以攜帶如下參數(shù),也可以不帶任何參數(shù):

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

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

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

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

        1.4 配置文件的設(shè)置

        1.4.1 /etc/ftpaccess的設(shè)置
        這個配置文件是FTP服務(wù)器最重要的配置文件,這個文件的設(shè)置決定了FTP是否可以正常工作及許多訪問權(quán)限的設(shè)置。如下面的例子所示:
        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


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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

        [dirs|nodirs] []

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


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

        指示: cdpath 目錄
        該功能和系統(tǒng)的PATH環(huán)境變量設(shè)置類似,當(dāng)cd /etc時,F(xiàn)TP首先查看當(dāng)前目錄下是否有etc子目錄,無則看是否有別名,若沒有則根據(jù)該指示設(shè)定的路徑查詢。

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

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

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

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


        指示: nice []
        設(shè)定FTP服務(wù)器守護(hù)進(jìn)程的調(diào)度優(yōu)先級。

        指示: defumask []
        若遠(yuǎn)程用戶屬于class,則守護(hù)進(jìn)程創(chuàng)建的文件的umask為umask。若沒有指定class則將umask作為缺省的umask.

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

        指示:keepalive
        設(shè)置TCP socket的SO_KEEPALIVE參數(shù)選項。

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

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

        指示:byte-limit [] []

        限制某個類的任何一個用戶允許傳輸?shù)臄?shù)據(jù)總量。

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

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

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

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


        指示:private
        當(dāng)一個用戶登錄進(jìn)入,,指示SITE GROUP和 and SITE GPASS用來指定一個增強(qiáng)的訪問組和相應(yīng)的密碼。若輸入的組名和密碼有效的話,該用戶將變?yōu)樵摻M的成員,具有該組的訪問權(quán)限。

        指示:greeting full|brief|terse
        greeting text
        允許控制在遠(yuǎn)程用戶登陸進(jìn)來以后,給用戶多少greet信息及信息內(nèi)容。

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


        指示: hostname
        定義FTP服務(wù)器缺省的主機(jī)名。


        指示: email
        定義FTP維護(hù)者的emai地址。

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

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

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

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


        指示:virtual
        設(shè)置在greeting消息中顯示的主機(jī)名字或電子郵件。


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

        指示:virtual private
        通常,拒絕匿名用戶登陸進(jìn)入虛擬主機(jī)。


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

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


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

         

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

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

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

        /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為后綴的主機(jī)及10.0.0.0/255.0.0.0的主機(jī)登錄進(jìn)入FTP服務(wù)器;禁止fred從*.hacker.com和131.211.31.0/24登錄進(jìn)入FTP服務(wù)器。這里的username若為anonymous或ftp都指匿名用戶。

        1.4.3 /etc/ftpconversions設(shè)置
        該文件用來設(shè)定當(dāng)用戶下載文件時應(yīng)該做那些操作,例如壓縮、解壓縮等。文件內(nèi)容如下所示:

        :.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


        文件設(shè)置說明:

        :.Z: : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
        表示對所有以.Z結(jié)尾的文件使用/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
        表示將要傳送的文件進(jìn)行CRC校驗處理。

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

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

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

        1.4.1 wu-ftp的相關(guān)程序
        ftpcount這個程序可以統(tǒng)計當(dāng)前連接的用戶數(shù)目,并給出上限,如:

        [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)
        當(dāng)前三個類別都沒有用戶連接。

        ftpshut

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

        ftpshut [ -V ] [ -l min] [ -d min] time [ warning-message ... ]
        -l 該選項設(shè)置在關(guān)閉FTP服務(wù)器以前多少分鐘停止用戶的連接請求
        -d 該選項設(shè)置在關(guān)閉FTP服務(wù)器以前多少分鐘將已經(jīng)連接的用戶斷線
        time 設(shè)置關(guān)閉FTP服務(wù)器的時間,例如希望在晚上10點關(guān)閉FTP服務(wù)器,則為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 開設(shè)只能FTP的帳戶
        很多時候需要開設(shè)一些只允許ftp到服務(wù)器的用戶,實現(xiàn)方法如下:

        1、按照通常的方式為這些用戶在系統(tǒng)上開設(shè)帳戶。

        [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為該用戶設(shè)定口令

        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的系統(tǒng)的用戶的登錄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等服務(wù),而不能通過telnet登錄到系統(tǒng)中。

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

        1. 首先對本地某個網(wǎng)卡設(shè)置別名IP地址,即在一塊網(wǎng)卡上綁定多個IP地址:如你的內(nèi)部FTP主機(jī)為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. 先創(chuàng)建目錄/home/virtualftp和/var/log/virtualftp。生成banner文件/home/virtualftp/banner_message修改FTP服務(wù)器的主配置文件/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

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


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

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


        關(guān)鍵詞: FTP

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 河池市| 南康市| 木里| 屏边| 聂拉木县| 邵阳县| 丹凤县| 内丘县| 郓城县| 凤冈县| 嘉黎县| 三台县| 佛山市| 从化市| 筠连县| 株洲县| 阿坝县| 修武县| 旅游| 始兴县| 平和县| 尉犁县| 松阳县| 固原市| 怀化市| 平罗县| 蒙城县| 和田县| 徐水县| 闽侯县| 商城县| 延长县| 伊春市| 博罗县| 沙坪坝区| 根河市| 铁岭县| 屯门区| 保定市| 陇川县| 荆州市|