FTP服務(wù)器的模式
FTP服務(wù)器工作端口
- TCP21 命令傳輸端口
- TCP20 數(shù)據(jù)傳輸端口
主動(dòng)模式
FTP主動(dòng)模式聯(lián)機(jī)示意圖
如上圖所示辜王,F(xiàn)TP服務(wù)器在主動(dòng)模式下烹困,聯(lián)機(jī)步驟如下:
1,建立命令信號(hào)通道
客戶機(jī)會(huì)隨機(jī)選取大于1024以上的端口(port AA)來與FTP服務(wù)器的21端口連接,這個(gè)過程需要TCP的三次握手建立可靠的連接,建立連接后,客戶機(jī)會(huì)對(duì)服務(wù)器進(jìn)行命令的下達(dá)蠢壹。
2,協(xié)商階段
客戶機(jī)通知FTP服務(wù)器使用主動(dòng)模式(active)進(jìn)行數(shù)據(jù)的傳輸宏浩,并且會(huì)告知服務(wù)器知残,自己采用的數(shù)據(jù)傳輸?shù)亩丝谔?hào)。
3,傳輸數(shù)據(jù)階段
此時(shí)求妹,F(xiàn)TP服務(wù)器由命令通道知道了客戶機(jī)的數(shù)據(jù)傳輸請(qǐng)求后乏盐,且知道了客戶機(jī)的數(shù)據(jù)傳輸端口;服務(wù) 器會(huì)主動(dòng)向客戶機(jī)的數(shù)據(jù)傳輸端口建立鏈接請(qǐng)求,這個(gè)時(shí)候也會(huì)用TCP的三次握手!建立連接后盼理,此時(shí),客戶機(jī)和服務(wù)器共會(huì)建立兩天可靠的TCP連接何吝,在命令信道進(jìn)行下載或上傳的指令,在數(shù)據(jù)信道進(jìn)行實(shí)際的數(shù)據(jù)傳輸鹃唯。
注: 一句話總結(jié)爱榕,主動(dòng)模式是,服務(wù)器端主動(dòng)發(fā)出數(shù)據(jù)連接請(qǐng)求坡慌,客戶端等待服務(wù)器的主動(dòng)連接黔酥。
被動(dòng)模式
被動(dòng)模式主要使用與客戶端有防火墻的情況下,如下圖中洪橘,服務(wù)器當(dāng)主動(dòng)和客戶機(jī)進(jìn)行數(shù)據(jù)連接請(qǐng)求時(shí)跪者,會(huì)被客戶端的防火墻阻止。
由上圖可知熄求,由于有防火墻的存在或透過 NAT 的轉(zhuǎn)換后渣玲,F(xiàn)TP 服務(wù)器只能得知 NAT 的 IP 而不是客戶端的 IP , 因此 FTP 服務(wù)器會(huì)以 port 20 主動(dòng)的向 NAT 的 port BB 發(fā)送主動(dòng)聯(lián)機(jī)的要求弟晚。 但你的 NAT 并沒有啟動(dòng) port BB 來監(jiān)聽 FTP 服務(wù)器的聯(lián)機(jī)巴堋!因此指巡,不能順利建立數(shù)據(jù)連接淑履。
解決以上的問題有兩種方式
1. 使用iptables的兩個(gè)模塊隶垮,你可以用modprobe這個(gè)命令來加載 ip_conntrack_ftp和ip_nat_ftp模塊來實(shí)現(xiàn)藻雪,條件是FTP服務(wù)器必須使用標(biāo)準(zhǔn)的21端口
2. 使用FTP的被動(dòng)模式,如下圖
具體的過程是這樣的:
1.客戶機(jī)和服務(wù)器建立命令通道
這和之前主動(dòng)模式是一樣的
2. 協(xié)商連接模式
這時(shí)客戶機(jī)會(huì)使用建立好的命令信道狸吞,向服務(wù)器發(fā)出PASV的被動(dòng)模式連接要求勉耀,并等待服務(wù)器的回應(yīng)。此時(shí)客戶機(jī)并沒有告知服務(wù)器自己的數(shù)據(jù)傳輸端口蹋偏,只是個(gè)請(qǐng)求
3. 當(dāng)服務(wù)器接收到要求被動(dòng)模式的連接時(shí)便斥,且服務(wù)器支持此模式;就會(huì)先啟動(dòng)一個(gè)大于1024的端口號(hào)進(jìn)入監(jiān)聽狀態(tài)威始。這個(gè)號(hào)碼也可以通過自己FTP服務(wù)器設(shè)定一個(gè)范圍枢纠。之后服務(wù)器會(huì)透過命令信道,告知客戶端自己已經(jīng)啟動(dòng)的數(shù)據(jù)傳輸端口黎棠,并等待客戶機(jī)的連接
4. 這時(shí)晋渺,客戶機(jī)知道了服務(wù)器端的數(shù)據(jù)連接端口后镰绎,會(huì)隨機(jī)用一個(gè)大于1024的端口號(hào)來和服務(wù)器的數(shù)據(jù)端口號(hào)進(jìn)行連接。此時(shí)一切OK的話木西,就可傳輸數(shù)據(jù)畴栖。
注:一句話總結(jié),被動(dòng)模式是服務(wù)器端先開啟一個(gè)數(shù)據(jù)端口進(jìn)行監(jiān)聽八千,等待客戶機(jī)的連接吗讶。而客戶機(jī)會(huì)主動(dòng)向服務(wù)器進(jìn)行連接。
安裝
安裝服務(wù)端軟件
yum install vsftpd
服務(wù)管理
啟動(dòng)服務(wù)
systemctl restart vsftpd
查看監(jiān)聽端口
ss -ntal
輸入中應(yīng)該有 21 號(hào)端口被監(jiān)聽
LISTEN 0 32 *:21 *:*
配置文件 /etc/vsftpd/vsftpd.conf
port_enable=YES|NO
如果你要在數(shù)據(jù)連接時(shí)取消PORT模式時(shí)恋捆,設(shè)此選項(xiàng)為NO照皆。默認(rèn)值為YES。
connect_from_port_20=YES|NO
控制以PORT模式進(jìn)行數(shù)據(jù)傳輸時(shí)是否使用20端口(ftp-data)沸停。YES使用纵寝,NO不使用。
默認(rèn)值為NO星立,但RHEL 自帶的vsftpd.conf文件中此參數(shù)設(shè)為YES爽茴。
ftp_data_port=port number
設(shè)定ftp數(shù)據(jù)傳輸端口值(ftp-data)。默認(rèn)值為20绰垂。此參數(shù)用于PORT FTP模式室奏。
port_promiscuous=YES|NO
默認(rèn)值為NO。為YES時(shí)劲装,取消PORT安全檢查胧沫。該檢查確保外出的數(shù)據(jù)只能連接到客戶端上。
pasv_enable=YES|NO
YES占业,允許數(shù)據(jù)傳輸時(shí)使用PASV模式绒怨。NO,不允許使用PASV模式谦疾。默認(rèn)值為YES南蹂。
pasv_min_port=port number
設(shè)定在PASV模式下,建立數(shù)據(jù)傳輸所可以使用port范圍的下界和上界念恍,0 表示任意六剥。默認(rèn)值為0。
pasv_max_port=port number
把端口范圍設(shè)在比較高的一段范圍內(nèi)峰伙,比如50000-60000疗疟,將有助于安全性的提高。
pasv_promiscuous=YES|NO
此選項(xiàng)激活時(shí)瞳氓,將關(guān)閉PASV模式的安全檢查策彤。該檢查確保數(shù)據(jù)連接和控制連接是來自同一個(gè)IP地址。小心打開此選項(xiàng)。此選項(xiàng)唯一合理的用法是存在于由安全隧道方案構(gòu)成的組織中店诗。默認(rèn)值為NO叽赊。
pasv_address=
此選項(xiàng)為一個(gè)數(shù)字IP地址,作為PASV命令的響應(yīng)必搞。默認(rèn)值為none必指,即地址是從呼入的連接套接字(incoming connectd socket)中獲取
三、FTP服務(wù)器的用戶分類
匿名用戶 (anonymous或ftp)
本地用戶(local user)
虛擬用戶(guest) use_localtime=YES //使用本地主機(jī)的時(shí)間恕洲,建議設(shè)置
1. 匿名用戶的配置選項(xiàng)
anonymous_enable=YES|NO
控制是否允許匿名用戶登錄塔橡,YES允許,NO不允許霜第,默認(rèn)值為YES葛家。
ftp_username=
匿名用戶所使用的系統(tǒng)用戶名。默認(rèn)下泌类,此參數(shù)在配置文件中不出現(xiàn)癞谒,值為ftp
no_anon_password=YES|NO
控制匿名用戶登入時(shí)是否需要密碼,YES不需要刃榨,NO需要弹砚。默認(rèn)值為NO。
deny_email_enable=YES|NO
此參數(shù)默認(rèn)值為NO枢希。當(dāng)值為YES時(shí)桌吃,拒絕使用banned_email_file參數(shù)指定文件中所列出的e-mail地址進(jìn)行登錄的匿名用戶。
即苞轿,當(dāng)匿名用戶使用 banned_email_file 文件中所列出的e-mail進(jìn)行登錄時(shí)茅诱,被拒絕。
顯然搬卒,這對(duì)于阻擊某些Dos攻擊有效瑟俭。當(dāng)此參數(shù)生效時(shí),需追加banned_email_file參數(shù)
banned_email_file=/etc/vsftpd.banned_emails
指定包含被拒絕的e-mail地址的文件契邀,默認(rèn)文件為/etc/vsftpd.banned_emails摆寄。
anon_root=
設(shè)定匿名用戶的根目錄,即匿名用戶登入后蹂安,被定位到此目錄下椭迎。主配置文件中默認(rèn)無此項(xiàng),默認(rèn)值為/var/ftp/田盈。
anon_world_readable_only=YES|NO
控制是否只允許匿名用戶下載可閱讀文檔。YES缴阎,只允許匿名用戶下載可閱讀的文件允瞧。NO,允許匿名用戶瀏覽整個(gè)服務(wù)器的文件系統(tǒng)。默認(rèn)值為YES述暂。
anon_upload_enable=YES|NO
控制是否允許匿名用戶上傳文件痹升,YES允許,NO不允許畦韭,默認(rèn)是不設(shè)值疼蛾,即為NO。
除了這個(gè)參數(shù)外艺配,匿名用戶要能上傳文件察郁,還需要兩條件:
一、write_enable=YES;
二转唉、在文件系統(tǒng)上皮钠,目錄有寫權(quán)限。
anon_mkdir_write_enable=YES|NO
控制是否允許匿名用戶創(chuàng)建新目錄赠法,YES允許麦轰,NO不允許,默認(rèn)是不設(shè)值砖织,即為NO款侵。當(dāng)然在文件系統(tǒng)上,F(xiàn)TP匿名用戶必需對(duì)新目錄的上層目錄擁有寫權(quán)限侧纯。 ? 如果要設(shè)定為 YES喳坠, 那么 anony_other_write_enable 必須設(shè)定為 YES
anon_other_write_enable=YES|NO
控制匿名用戶是否擁有除了上傳和新建目錄之外的其他權(quán)限,如刪除茂蚓、更名等壕鹉。YES擁有,NO不擁有聋涨,默認(rèn)值為NO晾浴。
chown_uploads=YES|NO
是否修改匿名用戶所上傳文件的所屬主。YES牍白,匿名用戶所上傳的文件的所有權(quán)將改為另外一個(gè)不同的用戶所有脊凰,用戶由chown_username參數(shù)指定。此選項(xiàng)默認(rèn)值為NO
chown_username=whoever
指定擁有匿名用戶所上傳文件的所屬主的用戶茂腥。此參數(shù)與chown_uploads一起用狸涌。不推薦使用root用戶。
2.本地用戶配置選項(xiàng)
local_enable=YES|NO
控制服務(wù)器的本地用戶是否可以登錄vsftpd最岗。默認(rèn)值為YES帕胆。
local_root=
定義所有本地用戶的根目錄。當(dāng)本地用戶登入時(shí)般渡,將被更換到此目錄下懒豹。默認(rèn)值為無此配置語句芙盘。
user_config_dir=
定義用戶個(gè)人配置文件所在的目錄。用戶的個(gè)人配置文件為該目錄下的同名文件脸秽。個(gè)人配置文件的格式與vsftpd.conf格式相同儒老。
例如定義user_config_dir=/etc/vsftpd/userconf,并且主機(jī)上有用戶zenxiaoxian记餐,那我們可以在user_config_dir的目錄新增名為zenxiaoxian的文件驮樊。當(dāng)用戶zenxiaoxian登入時(shí),VSFTPD則會(huì)讀取user_config_dir下zenxiaoxian這個(gè)文件中的設(shè)定值片酝,應(yīng)用于用戶zenxiaoxian囚衔。默認(rèn)值為無
3.虛擬用戶配置選項(xiàng)
虛擬用戶就是可以使用一個(gè) Linux 系統(tǒng)中不存在的用戶。
讓這個(gè)虛擬用戶使用 ftp
guest_enable=YES|NO
若是啟動(dòng)這項(xiàng)功能钠怯,所有的非匿名登入者都視為guest佳魔。默認(rèn)值為關(guān)閉。
guest_username=
定義VSFTPD的虛擬用戶在系統(tǒng)中所映射的本地用戶名晦炊。默認(rèn)值為ftp鞠鲜。
4.用戶的登陸控制
pam_service_name=vsftpd
指出VSFTPD進(jìn)行PAM認(rèn)證時(shí)所使用的PAM配置文件名,默認(rèn)值是vsftpd断国,默認(rèn)PAM配置文件是 /etc/pam.d/vsftpd贤姆。
/etc/vsftpd/ftpusers
VSFTPD禁止列在此文件中的用戶登錄FTP服務(wù)器。這個(gè)機(jī)制是在/etc/pam.d/vsftpd中默認(rèn)設(shè)置的稳衬。
userlist_enable=YES|NO
此選項(xiàng)為YES時(shí)霞捡,VSFTPD將讀取userlist_file參數(shù)所指定的文件中的用戶列表。當(dāng)列表中的用戶登錄FTP服務(wù)器時(shí)薄疚,該用戶在提示輸入密碼之前就被禁止了碧信。即該用戶名輸入后,VSFTPD查到該用戶名在列表街夭,VSFTPD就直接禁止掉該用戶砰碴,不會(huì)再進(jìn)行詢問密碼等后續(xù)步聚。默認(rèn)值為NO板丽。
userlist_file=/etc/vsftpd/user_list
指出userlist_enable選項(xiàng)生效后呈枉,被讀取的包含用戶列表的文件。默認(rèn)值是/etc/vsftpd/user_list埃碱。
userlist_deny=YES|NO
決定禁止還是只允許由userlist_file指定文件中的用戶登錄FTP服務(wù)器猖辫。此選項(xiàng)在userlist_enable 選項(xiàng)啟動(dòng)后才生效。YES砚殿,默認(rèn)值啃憎,禁止文件中的用戶登錄,同時(shí)也不向這些用戶發(fā)出輸入口令的提示瓮具。NO荧飞,只允許在文件中的用戶登錄FTP服務(wù)器凡人。
tcp_wrappers=YES|NO
在VSFTPD中使用TCP_Wrappers遠(yuǎn)程訪問控制機(jī)制名党,默認(rèn)值為YES
5.用戶的目錄訪問控制
chroot_list_enable=YES|NO
鎖定某些用戶在自家目錄中叹阔。即當(dāng)這些用戶登錄后,不可以轉(zhuǎn)到系統(tǒng)的其他目錄传睹,只能在自家目錄(及其子目錄)下耳幢。具體的用戶在chroot_list_file參數(shù)所指定的文件中列出。默認(rèn)值為 注釋欧啤。
chroot_list_file=/etc/vsftpd/chroot_list
指出被鎖定在自家目錄中的用戶的列表文件睛藻。文件格式為一行一用戶。
通常該文件是/etc/vsftpd/chroot_list邢隧。此選項(xiàng)默認(rèn)不設(shè)置店印。
chroot_local_users=YES|NO
將本地用戶鎖定在自家目錄中。
當(dāng)此項(xiàng)被激活時(shí)倒慧,chroot_list_enable=YES參數(shù)的作用將發(fā)生變化按摘,chroot_list_file所指定文件中的用戶將不被鎖定在自家目錄。本參數(shù)被激活后纫谅,可能帶來安全上的沖突
passwd_chroot_enable
當(dāng)此選項(xiàng)激活時(shí)炫贤,與chroot_local_user選項(xiàng)配合,chroot()容器的位置可以在每個(gè)用戶的基礎(chǔ)上指定付秕。每個(gè)用戶的容器來源于/etc/passwd中每個(gè)用戶的自家目錄字段兰珍。默認(rèn)值為NO
tcp_wrappers=YES
支持 TCP Wrappers 的防火墻機(jī)制
客戶端操作
安裝客戶軟件
yum install -y lftp
連接到 FTP Server
lftp 172.18.0.2
# lftp FTP Server 的 ip
基本操作
查看
lftp 172.18.0.2:/> ls
-rw-r--r-- 1 0 0 4707 Jul 29 11:03 an.cfg
drwxr-xr-x 2 0 0 4096 Jul 29 11:13 pub
執(zhí)行 shell 命令
lftp 172.18.0.2:/> !ls
下載單一文件
lftp 172.18.0.2:/> get an.cfg
4707 bytes transferred
下載目錄
lftp 172.18.0.2:/> mirror pub