ftp服務(wù)器:
參考資料:
(詳細(xì)的配置參數(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) 是相當(dāng)古老的傳輸協(xié)議之一,他最主要的功能是在服務(wù)器與客戶端之間進(jìn)行檔案的傳輸。 這個(gè)古老的協(xié)議使用的是明碼傳輸方式。 不支持udp, FTP使用2個(gè)端口嚎研,一個(gè)數(shù)據(jù)端口和一個(gè)命令端口(也可叫做控制端口挨约。
特點(diǎn):
不同等級(jí)的用戶身份:user, guest, anonymous叉橱, anonymous匿名登錄用來分享數(shù)據(jù)
命令記錄與登錄文件記錄:FTP 可以利用系統(tǒng)的 syslogd 來進(jìn)行數(shù)據(jù)的紀(jì)錄胖烛, /var/log/xferlog 日志記錄文件
限制用戶活動(dòng)的目錄: (change root, 簡(jiǎn)稱 chroot), 包括一系列配置參數(shù)
端口:
使用TCP封包協(xié)議诅迷, 分為主動(dòng)式和被動(dòng)式兩種方式
主動(dòng)模式(port方式):
FTP默認(rèn)模式佩番,客戶端主動(dòng)告知服務(wù)器20端口,本地客戶端是數(shù)據(jù)傳輸是隨機(jī)端口(一般為1024以上的一個(gè)隨機(jī)端口)罢杉,服務(wù)器通過20端口向客戶端這個(gè)端口建立鏈接趟畏,傳輸數(shù)據(jù)。
主動(dòng)方式的FTP工作流程:客戶端從一個(gè)任意的非特權(quán)端口N(N>1024)連接到FTP服務(wù)器的命令端口滩租,也就是21端口赋秀。然后客戶端開始監(jiān)聽端口N+1利朵,并發(fā)送FTP命令“portN+1”到FTP服務(wù)器。接著服務(wù)器會(huì)從它自己的數(shù)據(jù)端口(20)連接到客戶端指定的數(shù)據(jù)端口(N+1)猎莲。
針對(duì)FTP服務(wù)器前面的防火墻來說绍弟,必須允許以下通訊才能支持主動(dòng)方式FTP:
1)任何大于1024的端口到FTP服務(wù)器的21端口達(dá)成聯(lián)機(jī),進(jìn)行三次握手著洼,然后客戶端便透過聯(lián)機(jī)對(duì)FTP服務(wù)器下達(dá)指令(上傳樟遣, 下載, 查詢等)身笤。(客戶端初始化的連接)客戶端隨機(jī)啟動(dòng)一個(gè)端口豹悬,通過第一個(gè)聯(lián)機(jī)通知服務(wù)端(接收數(shù)據(jù)端口和命令), 并等待FETP服務(wù)器的聯(lián)機(jī)液荸。
2)FTP服務(wù)器的20端口到大于1024的端口瞻佛。服務(wù)端主動(dòng)向客戶端聯(lián)機(jī), 通過自己的20端口向客戶端數(shù)據(jù)端口聯(lián)機(jī)娇钱, 也是經(jīng)過三次握手 (服務(wù)器端初始化數(shù)據(jù)連接到客戶端的數(shù)據(jù)端口)
3)大于1024端口到FTP服務(wù)器的20端口伤柄。 客戶端的數(shù)據(jù)端口響應(yīng)握手(客戶端發(fā)送ACK響應(yīng)到服務(wù)器的數(shù)據(jù)端口)
被動(dòng)模式(pasv方式):
因考慮到網(wǎng)絡(luò)中存在的NAT路由器(防火墻NAT功能)的時(shí)候,主動(dòng)模式就無法建立數(shù)據(jù)通道忍弛。被動(dòng)模式可以解決客戶端在NAT環(huán)境內(nèi)的情況响迂,數(shù)據(jù)通道建立。
FTP被動(dòng)模式的連接方式有效解決了服務(wù)器發(fā)起到客戶的連接問題细疚,這種方式由叫做PASV蔗彤,當(dāng)客戶端通知服務(wù)器它處于被動(dòng)模式時(shí)才啟用。
在被動(dòng)方式FTP中疯兼,命令連接和數(shù)據(jù)連接都由客戶端發(fā)起然遏,這樣就可以解決從服務(wù)器到客戶端的數(shù)據(jù)端口的入方向連接被防火墻過濾掉的問題寸爆。當(dāng)開啟一個(gè)FTP連接時(shí)年扩,客戶端打開兩個(gè)任意的非特權(quán)本地端口(N>1024和N+1)。第一個(gè)端口連接服務(wù)器的21端口璧疗,但與主動(dòng)方式的FTP不同姨裸,客戶端不會(huì)提交PORT命令并允許服務(wù)器來回連它的數(shù)據(jù)端口秧倾,而是提交PASV命令。這樣做的結(jié)果是服務(wù)器會(huì)開啟一個(gè)任意的非特權(quán)端口(P>1024)傀缩,并發(fā)送PORTP命令給客戶端那先。然后客戶端發(fā)起從本地端口N+1到服務(wù)器的端口P的連接用來傳送數(shù)據(jù)。
對(duì)于服務(wù)器端的防火墻來說赡艰,必須允許下面的通訊才能支持被動(dòng)方式的FTP:
1)從任何大于1024的端口到服務(wù)器的21端口售淡。 命令聯(lián)機(jī)通道, 和主動(dòng)式一樣, 三次交握建立TCP連接揖闸, 不同的是提交PASV命令揍堕。(客戶端初始化的連接)
2)服務(wù)器的21端口到任何大于1024的端口, 服務(wù)器透過命令聯(lián)機(jī)汤纸,以通知客戶端已開啟的數(shù)據(jù)監(jiān)聽端口(服務(wù)器響應(yīng)到客戶端的控制端口的連接)
3)從任何大于1024端口到服務(wù)器的大于1024端口衩茸。 客戶端主動(dòng)向服務(wù)端建立數(shù)據(jù)聯(lián)機(jī)(客戶端初始化數(shù)據(jù)連接到服務(wù)器指定的任意端口)
4)服務(wù)器的大于1024端口到遠(yuǎn)程的大于1024的端口。 服務(wù)端回應(yīng)三次交握蹲嚣, 建立第二個(gè)聯(lián)機(jī)用于數(shù)據(jù)傳輸(服務(wù)器發(fā)送ACK響應(yīng)和數(shù)據(jù)到客戶端的數(shù)據(jù)端口)
主動(dòng)FTP:
命令連接:客戶端>1023端口 ------> 服務(wù)器 21端口
數(shù)據(jù)連接:客戶端>1023端口 <------ 服務(wù)器 20端口
被動(dòng)FTP:
命令連接:客戶端>1023端口 ------> 服務(wù)器 21端口
數(shù)據(jù)連接:客戶端>1023端口 ------> 服務(wù)器>1023端口
主動(dòng)與被動(dòng)FTP優(yōu)缺點(diǎn):
主動(dòng)FTP對(duì)FTP服務(wù)器的管理有利递瑰,但對(duì)客戶端的管理不利。因?yàn)镕TP服務(wù)器企圖與客戶端的高位隨機(jī)端口建立連接隙畜,而這個(gè)端口很有可能被客戶端的防火墻阻塞掉抖部。
被動(dòng)FTP對(duì)FTP客戶端的管理有利,但對(duì)服務(wù)器端的管理不利议惰。因?yàn)榭蛻舳艘c服務(wù)器端建立兩個(gè)連接慎颗,其中一個(gè)連到一個(gè)高位隨機(jī)端口,而這個(gè)端口很有可能被服務(wù)器端的防火墻阻塞掉言询。
隨著WWW的廣泛流行俯萎,許多人習(xí)慣用web瀏覽器作為FTP客戶端。大多數(shù)瀏覽器只在訪問ftp://這樣的URL時(shí)才支持被動(dòng)模式运杭。這到底是好還是壞取決于服務(wù)器和防火墻的配置夫啊。
被動(dòng)式 FTP 數(shù)據(jù)信道的聯(lián)機(jī)方向是由客戶端向服務(wù)器端聯(lián)機(jī),在 NAT 內(nèi)部的客戶端主機(jī)就可以順利的連接上 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權(quán)限辆憔, 非root用戶可以選擇rpm或者源碼編譯
部署:
chkconfig --list
chkconfig vsftpd on
啟動(dòng):
service vsftpd start
或者
/etc/init.d/vsftpd restart
ftp原理配置參數(shù)
- /etc/vsftpd/vsftpd.conf
配置文件撇眯, man 5 vsftpd.conf 查看說明
-
/etc/pam.d/vsftpd
這個(gè)是 vsftpd 使用 PAM 模塊時(shí)的相關(guān)配置文件。主要用來作為身份認(rèn)證之用虱咧,還有一些用戶身份的抵擋功能熊榛, 也是透過這個(gè)檔案來達(dá)成的
-
/etc/vsftpd/ftpusers (這個(gè)我用yum安裝時(shí)給放到 /etc/ftpusers了)
與上一個(gè)檔案有關(guān)系,也就是 PAM 模塊 (/etc/pam.d/vsftpd) 所指定的那個(gè)無法登入的用戶配置文件巴笱病玄坦! 這個(gè)檔案的設(shè)定很簡(jiǎn)單,你只要將『不想讓他登入 FTP 的賬號(hào)』寫入這個(gè)檔案即可绘沉。一行一個(gè)賬號(hào)煎楣,看起來像這樣:
[root@www ~]# cat /etc/vsftpd/ftpusers root bin daemon
瞧見沒有?絕大部分的系統(tǒng)賬號(hào)都在這個(gè)檔案內(nèi)喔车伞,也就是說择懂,系統(tǒng)賬號(hào)默認(rèn)是沒有辦法使用 vsftpd 的啦! 如果你還想要讓某些使用者無法登入帖世,寫在這里是最快的!
-
/etc/vsftpd/user_list(自己創(chuàng)建)
這個(gè)檔案是否能夠生效與 vsftpd.conf 內(nèi)的兩個(gè)參數(shù)有關(guān),分別是『 userlist_enable, userlist_deny 』日矫。 如果說 /etc/vsftpd/ftpusers 是 PAM 模塊的抵擋設(shè)定項(xiàng)目赂弓,那么這個(gè) /etc/vsftpd/user_list 則是 vsftpd 自定義的抵擋項(xiàng)目。事實(shí)上這個(gè)檔案與 /etc/vsftpd/ftpusers 幾乎一模一樣哪轿, 在預(yù)設(shè)的情況下盈魁,你可以將不希望可登入 vsftpd 的賬號(hào)寫入這里。不過這個(gè)檔案的功能會(huì)依據(jù) vsftpd.conf 配置文件內(nèi)的 userlist_deny={YES/NO} 而不同窃诉,這得要特別留意喔杨耙!
-
/etc/vsftpd/chroot_list (自己創(chuàng)建)
這個(gè)檔案預(yù)設(shè)是不存在的,所以你必須要手動(dòng)自行建立飘痛。這個(gè)檔案的主要功能是可以將某些賬號(hào)的使用者 chroot 在他們的家目錄下珊膜!但這個(gè)檔案要生效與 vsftpd.conf 內(nèi)的『 chroot_list_enable, chroot_list_file 』兩個(gè)參數(shù)有關(guān)。 如果你想要將某些實(shí)體用戶限制在他們的家目錄下而不許到其他目錄去宣脉,可以啟動(dòng)這個(gè)設(shè)定項(xiàng)目喔车柠!
-
/usr/sbin/vsftpd
這就是 vsftpd 的主要執(zhí)行檔咯!不要懷疑塑猖, vsftpd 只有這一個(gè)執(zhí)行檔而已爸竦弧!
-
/var/ftp/
這個(gè)是 vsftpd 的預(yù)設(shè)匿名者登入的根目錄喔羊苟!其實(shí)與 ftp 這個(gè)賬號(hào)的家目錄有關(guān)啦塑陵!vim /etc/passwd 中設(shè)置查看
sftpd 啟動(dòng)的模式
vsftpd 可以使用 stand alone(listen=YES) 或 super daemon(listen=NO)的方式來啟動(dòng),我們 CentOS 預(yù)設(shè)是以 stand alone來啟動(dòng)的蜡励。 那什么時(shí)候應(yīng)該選擇 stand alone 或者是 super daemon 呢令花?如果你的 ftp 服務(wù)器是提供給整個(gè)因特網(wǎng)來進(jìn)行大量下載的任務(wù),例如各大專院校的 FTP 服務(wù)器巍虫,那建議你使用 stand alone 的方式彭则, 服務(wù)的速度上會(huì)比較好。如果僅是提供給內(nèi)部人員使用的 FTP 服務(wù)器占遥,那使用 super daemon 來管理即可啊俯抖。
利用 CentOS 提供的 script 來啟動(dòng) vsftpd (stand alone)
其實(shí) CentOS 不用作任何設(shè)定就能夠啟動(dòng) vsftpd 啰!是這樣啟動(dòng)的啦:
[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 所啟動(dòng)的呢芬萍!
自行設(shè)定以 super daemon 來啟動(dòng) (有必要再進(jìn)行,不用實(shí)作)
如果你的 FTP 是很少被使用的搔啊,那么利用 super daemon 來管理不失為一個(gè)好主意柬祠。 不過若你想要使用 super daemon 管理的話,那就得要自行修改一下配置文件了负芋。其實(shí)也不難啦漫蛔,你應(yīng)該要這樣處理的:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
**找到 listen=YES 這一行:大約在 109 行左右啦,并將它改成:listen=NO **
接下來修改一下 super daemon 的配置文件,底下這個(gè)檔案你必須要自行建立的莽龟,原本是不存在的喔:
[root@www ~]# yum install xinetd <==假設(shè) xinetd 沒有安裝時(shí)
[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
}
然后嘗試啟動(dòng)看看呢:
[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
有趣吧蠕嫁!兩者啟動(dòng)的方式可不一樣啊毯盈!管理的方式就會(huì)差很多的呦剃毒!不管你要使用哪種啟動(dòng)的方式,切記不要兩者同時(shí)啟動(dòng)搂赋,否則會(huì)發(fā)生錯(cuò)誤的赘阀!你應(yīng)該使用 chkconfig –list 檢查一下這兩種啟動(dòng)的方式,然后依據(jù)你的需求來決定用哪一種方式啟動(dòng)脑奠。鳥哥底下的設(shè)定都會(huì)以 stand alone 這個(gè) CentOS 默認(rèn)的啟動(dòng)模式來處理基公,所以趕緊將剛剛的動(dòng)作給他改回來喔!
**所以說捺信, 如果采用stand alone模式酌媒, 可以 service xinetd close 關(guān)閉掉 **
vsftpd.conf 參數(shù)解釋
example:
# cat /etc/vsftpd/vsftpd.conf | grep -E -v '^$|#'
anonymous_enable=YES # 允許匿名登錄, 默認(rèn)YES
local_enable=YES # 這個(gè)設(shè)定值必須要為 YES 時(shí)迄靠,在 /etc/passwd 內(nèi)的賬號(hào)才能以實(shí)體用戶的方式登入我們的 vsftpd 服務(wù)器喔秒咨!
write_enable=YES # 如果你允許用戶上傳數(shù)據(jù)時(shí),就要啟動(dòng)這個(gè)設(shè)定值
local_umask=022 # 建立新目錄 (755) 與檔案 (644) 的權(quán)限
dirmessage_enable=YES # 若目錄下有 .message 則會(huì)顯示該檔案的內(nèi)容
xferlog_enable=YES # 當(dāng)設(shè)定為 YES 時(shí)掌挚,使用者上傳與下載文件都會(huì)被紀(jì)錄起來雨席。記錄的檔案與下一個(gè)設(shè)定項(xiàng)目有關(guān):xferlog_file 默認(rèn)/var/log/xferlog
connect_from_port_20=YES
xferlog_std_format=YES # 是否設(shè)定為 wu ftp 相同的登錄檔格式?預(yù)設(shè)為 NO 吠式,因?yàn)榈卿洐n會(huì)比較容易讀陡厘! 不過,如果你有使用 wu ftp 登錄文件的分析軟件特占,這里才需要設(shè)定為 YES
pam_service_name=vsftpd # 這個(gè)是 pam 模塊的名稱糙置,我們放置在 /etc/pam.d/vsftpd 即是這個(gè)咚咚!
userlist_enable=YES
# 是否藉助 vsftpd 的抵擋機(jī)制來處理某些不受歡迎的賬號(hào)是目,與底下的參數(shù)設(shè)定有關(guān): userlist_deny, userlist_file
listen=YES # 若設(shè)定為 YES 表示 vsftpd 是以 standalone 的方式來啟動(dòng)的谤饭!預(yù)設(shè)是 NO
tcp_wrappers=YES # 當(dāng)然我們都習(xí)慣支持 TCP Wrappers 的啦!所以設(shè)定為 YES 吧懊纳!
pasv_enable=YES # 支持?jǐn)?shù)據(jù)流的被動(dòng)式聯(lián)機(jī)模式(passive mode)揉抵,一定要設(shè)定為 YES 的啦!
pasv_min_port=22222
pasv_max_port=22225
# 上面兩個(gè)是與 passive mode 使用的 port number 有關(guān)嗤疯,如果你想要使用 65400 到 65410 這 11 個(gè) port 來進(jìn)行被動(dòng)式聯(lián)機(jī)模式的連接冤今,可以這樣設(shè)定 pasv_max_port=65410 以及 pasv_min_port=65400。 如果是 0 的話茂缚,表示隨機(jī)取用而不限制戏罢。
chroot_local_user=NO
# 在預(yù)設(shè)的情況下屋谭,是否要將使用者限制在自己的家目錄之內(nèi)(chroot)?如果是 YES 代表用戶默認(rèn)就會(huì)被 chroot龟糕,如果是 NO戴而, 則預(yù)設(shè)是沒有 chroot。不過翩蘸,實(shí)際還是需要chroot_list_enable, chroot_list_file兩個(gè)參數(shù)互相參考才行。為了安全性淮逊,這里應(yīng)該要設(shè)定成 YES 才好催首。
use_localtime=YES # 是否使用本地時(shí)間?vsftpd 預(yù)設(shè)使用 GMT 時(shí)間(格林威治)泄鹏,所以預(yù)設(shè)的 FTP 內(nèi)的檔案日期會(huì)比臺(tái)灣晚 8 小時(shí)郎任,建議修改設(shè)定為 YES 吧!