查看單個文章
舊 2006-07-07, 11:53 PM   #4 (permalink)
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

LINUX穿越FTP




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說明的。該協議定義了一個從遠端電腦系統和本機電腦系統之間傳輸文件的一個標準。一般來說,傳輸文件的用戶需要先經過認證以後才能登入網站,然後方能訪問在遠端服務器的文件。而大多數的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...mp目錄下:

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

壓縮的源代碼可以在ftp://ftp.wu-ftpd.org/pub/wu-ftpd/...裝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: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的域名映射
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
向 psac 送花的會員:
s8321414 (2008-02-06)
感謝您發表一篇好文章