用LINUX架設FTP服務器 |
發布時間: 2012/5/24 20:36:58 |
以前自己弄的東西,現在帖出來,希望對大家有點用:) 1.1 什么是FTP:文件傳輸協議原理 1.1.1 命令選擇 1.1.2 命令格式 1.2 wu-Ftpd的安裝 1.3 讓FTP億恩科技服務器運轉起來 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 開設只能FTP的帳戶 1.6 設置虛擬FTP億恩科技主機 什么是FTP:文件傳輸協議原理 互聯網文件傳輸協議(File Transfer Protocol ,FTP) 標準是在RFC959說明的。該協議定義了一個從遠程計算機系統和本地計算機系統之間傳輸文件的一個標準。一般來說,傳輸文件的用戶需要先經過認證以后才能登錄網站:(www.laynepeng.cn),然后方能訪問在遠程億恩科技服務器的文件。而大多數的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 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) 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:x:503:504::/home/ftp_user1:/bin/bash 改為: ftp_user1:x:503:504::/home/ftp_user1:/dev/null 或 ftp_user1:x: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的域名注冊映射。 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 本文出自:億恩科技【www.laynepeng.cn】 |