ftp服務器:
參考資料:
(詳細的配置參數(shù)介紹見此鏈接)
http://blog.csdn.net/wave_1102/article/details/50651433
http://ktaeef.blog.51cto.com/3319268/1266628/
http://www.cnblogs.com/kevingrace/p/6641224.html
1 介紹:
FTP (File transfer protocol) 是相當古老的傳輸協(xié)議之一,他最主要的功能是在服務器與客戶端之間進行檔案的傳輸。 這個古老的協(xié)議使用的是明碼傳輸方式。 不支持udp, FTP使用2個端口,一個數(shù)據(jù)端口和一個命令端口(也可叫做控制端口。
特點:
不同等級的用戶身份:user, guest, anonymous, anonymous匿名登錄用來分享數(shù)據(jù)
命令記錄與登錄文件記錄:FTP 可以利用系統(tǒng)的 syslogd 來進行數(shù)據(jù)的紀錄, /var/log/xferlog 日志記錄文件
限制用戶活動的目錄: (change root, 簡稱 chroot), 包括一系列配置參數(shù)
端口:
使用TCP封包協(xié)議, 分為主動式和被動式兩種方式
主動模式(port方式):
FTP默認模式,客戶端主動告知服務器20端口,本地客戶端是數(shù)據(jù)傳輸是隨機端口(一般為1024以上的一個隨機端口),服務器通過20端口向客戶端這個端口建立鏈接,傳輸數(shù)據(jù)。
主動方式的FTP工作流程:客戶端從一個任意的非特權端口N(N>1024)連接到FTP服務器的命令端口,也就是21端口。然后客戶端開始監(jiān)聽端口N+1,并發(fā)送FTP命令“portN+1”到FTP服務器。接著服務器會從它自己的數(shù)據(jù)端口(20)連接到客戶端指定的數(shù)據(jù)端口(N+1)。
針對FTP服務器前面的防火墻來說,必須允許以下通訊才能支持主動方式FTP:
1)任何大于1024的端口到FTP服務器的21端口達成聯(lián)機,進行三次握手,然后客戶端便透過聯(lián)機對FTP服務器下達指令(上傳, 下載, 查詢等)。(客戶端初始化的連接)客戶端隨機啟動一個端口,通過第一個聯(lián)機通知服務端(接收數(shù)據(jù)端口和命令), 并等待FETP服務器的聯(lián)機。
2)FTP服務器的20端口到大于1024的端口。服務端主動向客戶端聯(lián)機, 通過自己的20端口向客戶端數(shù)據(jù)端口聯(lián)機, 也是經(jīng)過三次握手 (服務器端初始化數(shù)據(jù)連接到客戶端的數(shù)據(jù)端口)
3)大于1024端口到FTP服務器的20端口。 客戶端的數(shù)據(jù)端口響應握手(客戶端發(fā)送ACK響應到服務器的數(shù)據(jù)端口)
被動模式(pasv方式):
因考慮到網(wǎng)絡中存在的NAT路由器(防火墻NAT功能)的時候,主動模式就無法建立數(shù)據(jù)通道。被動模式可以解決客戶端在NAT環(huán)境內(nèi)的情況,數(shù)據(jù)通道建立。
FTP被動模式的連接方式有效解決了服務器發(fā)起到客戶的連接問題,這種方式由叫做PASV,當客戶端通知服務器它處于被動模式時才啟用。
在被動方式FTP中,命令連接和數(shù)據(jù)連接都由客戶端發(fā)起,這樣就可以解決從服務器到客戶端的數(shù)據(jù)端口的入方向連接被防火墻過濾掉的問題。當開啟一個FTP連接時,客戶端打開兩個任意的非特權本地端口(N>1024和N+1)。第一個端口連接服務器的21端口,但與主動方式的FTP不同,客戶端不會提交PORT命令并允許服務器來回連它的數(shù)據(jù)端口,而是提交PASV命令。這樣做的結(jié)果是服務器會開啟一個任意的非特權端口(P>1024),并發(fā)送PORTP命令給客戶端。然后客戶端發(fā)起從本地端口N+1到服務器的端口P的連接用來傳送數(shù)據(jù)。
對于服務器端的防火墻來說,必須允許下面的通訊才能支持被動方式的FTP:
1)從任何大于1024的端口到服務器的21端口。 命令聯(lián)機通道, 和主動式一樣, 三次交握建立TCP連接, 不同的是提交PASV命令。(客戶端初始化的連接)
2)服務器的21端口到任何大于1024的端口, 服務器透過命令聯(lián)機,以通知客戶端已開啟的數(shù)據(jù)監(jiān)聽端口(服務器響應到客戶端的控制端口的連接)
3)從任何大于1024端口到服務器的大于1024端口。 客戶端主動向服務端建立數(shù)據(jù)聯(lián)機(客戶端初始化數(shù)據(jù)連接到服務器指定的任意端口)
4)服務器的大于1024端口到遠程的大于1024的端口。 服務端回應三次交握, 建立第二個聯(lián)機用于數(shù)據(jù)傳輸(服務器發(fā)送ACK響應和數(shù)據(jù)到客戶端的數(shù)據(jù)端口)
主動FTP:
命令連接:客戶端>1023端口 ------> 服務器 21端口
數(shù)據(jù)連接:客戶端>1023端口 <------ 服務器 20端口
被動FTP:
命令連接:客戶端>1023端口 ------> 服務器 21端口
數(shù)據(jù)連接:客戶端>1023端口 ------> 服務器>1023端口
主動與被動FTP優(yōu)缺點:
主動FTP對FTP服務器的管理有利,但對客戶端的管理不利。因為FTP服務器企圖與客戶端的高位隨機端口建立連接,而這個端口很有可能被客戶端的防火墻阻塞掉。
被動FTP對FTP客戶端的管理有利,但對服務器端的管理不利。因為客戶端要與服務器端建立兩個連接,其中一個連到一個高位隨機端口,而這個端口很有可能被服務器端的防火墻阻塞掉。
隨著WWW的廣泛流行,許多人習慣用web瀏覽器作為FTP客戶端。大多數(shù)瀏覽器只在訪問ftp://這樣的URL時才支持被動模式。這到底是好還是壞取決于服務器和防火墻的配置。
被動式 FTP 數(shù)據(jù)信道的聯(lián)機方向是由客戶端向服務器端聯(lián)機,在 NAT 內(nèi)部的客戶端主機就可以順利的連接上 FTP Server了
vsftpd vs profited
vsftpd(Very Secure FTP Daemon)配置部署:
安裝
# 檢查是否安裝
rpm -qa | grep vsftpd
yum install vsftpd
yumdownloader vsftpd
rpm2cpio ctags-5.8-2.el6.x86_64.rpm |cpio -idvm
yum需要有root權限, 非root用戶可以選擇rpm或者源碼編譯
部署:
chkconfig --list
chkconfig vsftpd on
啟動:
service vsftpd start
或者
/etc/init.d/vsftpd restart
ftp原理配置參數(shù)
- /etc/vsftpd/vsftpd.conf
配置文件, man 5 vsftpd.conf 查看說明
-
/etc/pam.d/vsftpd
這個是 vsftpd 使用 PAM 模塊時的相關配置文件。主要用來作為身份認證之用,還有一些用戶身份的抵擋功能, 也是透過這個檔案來達成的
-
/etc/vsftpd/ftpusers (這個我用yum安裝時給放到 /etc/ftpusers了)
與上一個檔案有關系,也就是 PAM 模塊 (/etc/pam.d/vsftpd) 所指定的那個無法登入的用戶配置文件啊! 這個檔案的設定很簡單,你只要將『不想讓他登入 FTP 的賬號』寫入這個檔案即可。一行一個賬號,看起來像這樣:
[root@www ~]# cat /etc/vsftpd/ftpusers root bin daemon瞧見沒有?絕大部分的系統(tǒng)賬號都在這個檔案內(nèi)喔,也就是說,系統(tǒng)賬號默認是沒有辦法使用 vsftpd 的啦! 如果你還想要讓某些使用者無法登入,寫在這里是最快的!
-
/etc/vsftpd/user_list(自己創(chuàng)建)
這個檔案是否能夠生效與 vsftpd.conf 內(nèi)的兩個參數(shù)有關,分別是『 userlist_enable, userlist_deny 』。 如果說 /etc/vsftpd/ftpusers 是 PAM 模塊的抵擋設定項目,那么這個 /etc/vsftpd/user_list 則是 vsftpd 自定義的抵擋項目。事實上這個檔案與 /etc/vsftpd/ftpusers 幾乎一模一樣, 在預設的情況下,你可以將不希望可登入 vsftpd 的賬號寫入這里。不過這個檔案的功能會依據(jù) vsftpd.conf 配置文件內(nèi)的 userlist_deny={YES/NO} 而不同,這得要特別留意喔!
-
/etc/vsftpd/chroot_list (自己創(chuàng)建)
這個檔案預設是不存在的,所以你必須要手動自行建立。這個檔案的主要功能是可以將某些賬號的使用者 chroot 在他們的家目錄下!但這個檔案要生效與 vsftpd.conf 內(nèi)的『 chroot_list_enable, chroot_list_file 』兩個參數(shù)有關。 如果你想要將某些實體用戶限制在他們的家目錄下而不許到其他目錄去,可以啟動這個設定項目喔!
-
/usr/sbin/vsftpd
這就是 vsftpd 的主要執(zhí)行檔咯!不要懷疑, vsftpd 只有這一個執(zhí)行檔而已??!
-
/var/ftp/
這個是 vsftpd 的預設匿名者登入的根目錄喔!其實與 ftp 這個賬號的家目錄有關啦!vim /etc/passwd 中設置查看
sftpd 啟動的模式
vsftpd 可以使用 stand alone(listen=YES) 或 super daemon(listen=NO)的方式來啟動,我們 CentOS 預設是以 stand alone來啟動的。 那什么時候應該選擇 stand alone 或者是 super daemon 呢?如果你的 ftp 服務器是提供給整個因特網(wǎng)來進行大量下載的任務,例如各大專院校的 FTP 服務器,那建議你使用 stand alone 的方式, 服務的速度上會比較好。如果僅是提供給內(nèi)部人員使用的 FTP 服務器,那使用 super daemon 來管理即可啊。
利用 CentOS 提供的 script 來啟動 vsftpd (stand alone)
其實 CentOS 不用作任何設定就能夠啟動 vsftpd 啰!是這樣啟動的啦:
[root@www ~]# /etc/init.d/vsftpd start
[root@www ~]# netstat -tulnp| grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 11689/vsftpd
看到啰,是由 vsftpd 所啟動的呢!
自行設定以 super daemon 來啟動 (有必要再進行,不用實作)
如果你的 FTP 是很少被使用的,那么利用 super daemon 來管理不失為一個好主意。 不過若你想要使用 super daemon 管理的話,那就得要自行修改一下配置文件了。其實也不難啦,你應該要這樣處理的:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
**找到 listen=YES 這一行:大約在 109 行左右啦,并將它改成:listen=NO **
接下來修改一下 super daemon 的配置文件,底下這個檔案你必須要自行建立的,原本是不存在的喔:
[root@www ~]# yum install xinetd <==假設 xinetd 沒有安裝時
[root@www ~]# vim /etc/xinetd.d/vsftpd
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 10
disable = no
}
然后嘗試啟動看看呢:
[root@www ~]# /etc/init.d/vsftpd stop
[root@www ~]# /etc/init.d/xinetd restart
[root@www ~]# netstat -tulnp| grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 32274/xinetd
有趣吧!兩者啟動的方式可不一樣啊!管理的方式就會差很多的呦!不管你要使用哪種啟動的方式,切記不要兩者同時啟動,否則會發(fā)生錯誤的!你應該使用 chkconfig –list 檢查一下這兩種啟動的方式,然后依據(jù)你的需求來決定用哪一種方式啟動。鳥哥底下的設定都會以 stand alone 這個 CentOS 默認的啟動模式來處理,所以趕緊將剛剛的動作給他改回來喔!
**所以說, 如果采用stand alone模式, 可以 service xinetd close 關閉掉 **
vsftpd.conf 參數(shù)解釋
example:
# cat /etc/vsftpd/vsftpd.conf | grep -E -v '^$|#'
anonymous_enable=YES # 允許匿名登錄, 默認YES
local_enable=YES # 這個設定值必須要為 YES 時,在 /etc/passwd 內(nèi)的賬號才能以實體用戶的方式登入我們的 vsftpd 服務器喔!
write_enable=YES # 如果你允許用戶上傳數(shù)據(jù)時,就要啟動這個設定值
local_umask=022 # 建立新目錄 (755) 與檔案 (644) 的權限
dirmessage_enable=YES # 若目錄下有 .message 則會顯示該檔案的內(nèi)容
xferlog_enable=YES # 當設定為 YES 時,使用者上傳與下載文件都會被紀錄起來。記錄的檔案與下一個設定項目有關:xferlog_file 默認/var/log/xferlog
connect_from_port_20=YES
xferlog_std_format=YES # 是否設定為 wu ftp 相同的登錄檔格式?預設為 NO ,因為登錄檔會比較容易讀! 不過,如果你有使用 wu ftp 登錄文件的分析軟件,這里才需要設定為 YES
pam_service_name=vsftpd # 這個是 pam 模塊的名稱,我們放置在 /etc/pam.d/vsftpd 即是這個咚咚!
userlist_enable=YES
# 是否藉助 vsftpd 的抵擋機制來處理某些不受歡迎的賬號,與底下的參數(shù)設定有關: userlist_deny, userlist_file
listen=YES # 若設定為 YES 表示 vsftpd 是以 standalone 的方式來啟動的!預設是 NO
tcp_wrappers=YES # 當然我們都習慣支持 TCP Wrappers 的啦!所以設定為 YES 吧!
pasv_enable=YES # 支持數(shù)據(jù)流的被動式聯(lián)機模式(passive mode),一定要設定為 YES 的啦!
pasv_min_port=22222
pasv_max_port=22225
# 上面兩個是與 passive mode 使用的 port number 有關,如果你想要使用 65400 到 65410 這 11 個 port 來進行被動式聯(lián)機模式的連接,可以這樣設定 pasv_max_port=65410 以及 pasv_min_port=65400。 如果是 0 的話,表示隨機取用而不限制。
chroot_local_user=NO
# 在預設的情況下,是否要將使用者限制在自己的家目錄之內(nèi)(chroot)?如果是 YES 代表用戶默認就會被 chroot,如果是 NO, 則預設是沒有 chroot。不過,實際還是需要chroot_list_enable, chroot_list_file兩個參數(shù)互相參考才行。為了安全性,這里應該要設定成 YES 才好。
use_localtime=YES # 是否使用本地時間?vsftpd 預設使用 GMT 時間(格林威治),所以預設的 FTP 內(nèi)的檔案日期會比臺灣晚 8 小時,建議修改設定為 YES 吧!