控制鏈接(持續鏈接) -> TCP21(命令信道) -> 用戶收發FTP命令linux
數據鏈接(按需鏈接) -> TCP20(數據信道) -> 用於上傳下載數據數據庫
ftp模式分爲主動模式(active mode)和被動模式(passive mode),ftp是tcp鏈接,因此要進行三次握手。vim
@See安全
在命令行輸入vim /etc/vsftpd/vsftpd.conf:服務器
active mode:app
pasv_enable=NO (passive模式關閉)
pasv_min_port=3000
pasv_max_port=4000
port_enable=YES (active模式開啓)
connect_from_port_20=YES (即默認狀況下,FTP PORT主動模式進行數據傳輸時使用20端口(ftp-data)。YES使用,NO不使用。)
passive mode:ssh
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=40000
設定在PASV模式下,創建數據傳輸所可使用port範圍的下界和上界,0 表示任意(1024 – 65535端口)。默認值爲0。把端口範圍設在比較高的一段範圍內,好比30000 -40000。
在linux上,若是不配置pasv_enable=NO,默認是passive模式。(之前在鎮江農商行,遇到文件傳輸過不去的問題,後來才發現爲被動模式,但配置的爲NO,改爲YES便可。tcp
service vsftpd restart 重啓ftp服務; ui
經過命令行鏈接ftp server:加密
active mode: ftp -A 192.168.180.106
active模式鏈接ftp server時必定要加 -A
passive mode: 能夠直接使用 ftp 192.168.180.106
在active模式下,以下圖抓的包中,在命令鏈接部分(ftp類型的包),client端使用的端口是36439,這個端口是大於1024的任意端口,ftp server端用的端口是21:
以下圖,在active模式下,要傳輸數據時,ftp client經過第23個包經過21號端口告訴server數據傳輸聯繫端口43187(大於1024的任意端口),並進行listen,server端用端口20主動和client端43187創建數據傳輸通道,並傳輸數據(第30,32,34個包)。這裏是server知道了client端的數據通道監聽端口後,主動創建了數據傳輸通道,因此是主動模式。
在active模式下,數據傳輸部分(FTP-DATA類型的包),ftp-server端用的端口是20,默認狀況下,FTP PORT主動模式進行數據傳輸時使用20端口,ftp-client端用的是43187端口,是上一步client發給server的數據傳輸監聽端口。
總結:active 模式
在passive 模式下,以下圖所抓的包中,在命令部分(ftp類型的包),client端使用的端口是36434,這個端口是大於1024的任意端口,ftp server用的端口是21.
在passive模式下,以下圖的第28個包,是由client端發起PASV(passive mode)的數據傳輸通道鏈接請求,因此爲被動模式。
而在passive模式的數據傳輸部分(FTP-DATA類型的包),ftp-server端用的端口是3542,這個端口是在/etc/vsftpd/vsftpd.conf文件中passive模式下設置的端口範圍(3000-4000,能夠本身設置)中任意選的一個端口,ftp-client端用的是53001端口,是大於1024的任意一個端口。
總結:
passive模式
Binary模式: 不對數據進行任何處理,適合進行可執行文件、壓縮文件、圖片等。
ASCII模式:進行文本傳輸時,自動適應目標操做系統的結束符,如回車符等
LINUX的紅帽發行版中VSFTP默認採用的是Binary模式,這樣能保證絕大多數文件傳輸後能正常使用
切換方式:
1 [root@localhost etc]# yum -y install vsftpd ftp 2 已加載插件:fastestmirror, langpacks 3 Loading mirror speeds from cached hostfile 4 epel/x86_64/metalink | 6.7 kB 00:00:00 5 * base: mirrors.zju.edu.cn 6 * epel: my.fedora.ipserverone.com 7 * extras: mirrors.163.com 8 * updates: mirrors.163.com 9 [root@localhost etc]# service vsftpd start 10 Redirecting to /bin/systemctl start vsftpd.service 11 [root@localhost etc]# netstat -antp 12 Active Internet connections (servers and established) 13 Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 14 tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd 15 tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 7421/X 16 tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 7737/dnsmasq 17 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 7099/sshd 18 tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 7100/cupsd 19 tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 7360/master 20 tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 18303/sshd: root@pt 21 tcp 0 0 192.168.180.106:22 192.168.180.1:51721 ESTABLISHED 18303/sshd: root@pt 22 tcp 0 0 192.168.180.106:22 192.168.180.1:51729 ESTABLISHED 18312/sshd: root@no 23 tcp6 0 0 :::111 :::* LISTEN 1/systemd 24 tcp6 0 0 :::6000 :::* LISTEN 7421/X 25 tcp6 0 0 :::21 :::* LISTEN 25188/vsftpd 26 tcp6 0 0 :::22 :::* LISTEN 7099/sshd 27 tcp6 0 0 ::1:631 :::* LISTEN 7100/cupsd 28 tcp6 0 0 ::1:25 :::* LISTEN 7360/master 29 tcp6 0 0 ::1:6010 :::* LISTEN 18303/sshd: root@pt
FTP的使用可使用?查詢全部命令
1 [root@localhost etc]# cd /var/ftp 2 [root@localhost ftp]# ls 3 pub 4 [root@localhost ftp]# touch test.txt 5 [root@localhost ftp]# cd 6 [root@localhost ~]# ftp 192.168.180.106 7 Connected to 192.168.180.106 (192.168.180.106). 8 220 (vsFTPd 3.0.2) 9 Name (192.168.180.106:root): ftp 10 331 Please specify the password. 11 Password: 12 230 Login successful. 13 Remote system type is UNIX. 14 Using binary mode to transfer files. 15 ftp> ? 16 Commands may be abbreviated. Commands are: 17 18 ! debug mdir sendport site 19 $ dir mget put size 20 account disconnect mkdir pwd status 21 append exit mls quit struct 22 ascii form mode quote system 23 bell get modtime recv sunique 24 binary glob mput reget tenex 25 bye hash newer rstatus tick 26 case help nmap rhelp trace 27 cd idle nlist rename type 28 cdup image ntrans reset user 29 chmod lcd open restart umask 30 close ls prompt rmdir verbose 31 cr macdef passive runique ? 32 delete mdelete proxy send 33 ftp> 34
注:關閉防火牆和SELINUX
anonymous_enable=YES #啓用匿名訪問
anon_umask=022 #匿名用戶上傳文件的權限掩碼(755,644) anon_root=/var/ftp #FTP的根目錄
anon_upload_enable=YES #容許上傳文件
anon_mkdir_write_enable=YES #容許建立目錄
anon_other_write_enable=YES #開放其餘寫入權
anon_max_rate=0 #限制最大傳輸速率(0爲不限速)
注:在客戶端登陸後,默認狀況下能夠下載,不能上傳
FTP服務器端
FTP客戶端
實現上傳
anonymous_enable=YES #啓用匿名訪問
須要FTP服務器端的上傳目錄要有足夠的權限(演示:第一次權限不足,第二次能夠)

實現建立目錄和文件其餘操做
anon_mkdir_write_enable=YES #容許建立目錄
anon_other_write_enable=YES #開放其餘寫入權

實現文件下載

anon_umask=022 #匿名用戶上傳文件的權限掩碼(755)
添加之後,就能夠get了,擁有了r權限。
local_enable=YES #是否啓用本地系統用戶
local_umask=022 #本地用戶所上傳文件的權限掩碼
(新建的目錄 權限是755 ,文件的權限是 644)
local_root=/var/ftp #設置本地用戶的FTP根目錄
chroot_local_user=YES #是否將用戶禁錮在主目錄
local_max_rate=0 #限制最大傳輸速率
userlist_enable=YES&userlist_deny=YES
#禁止/etc/vsftpd/user_list 文件中出現的用戶名登陸ftp
userlist_enable=YES&userlist_deny=NO
#僅容許/etc/vsftpd/user_list 文件中出現的用戶名登陸ftp
配置文件:ftpusers
#禁止/etc/vsftpd/user_list 文件中出現的用戶名登陸ftp,權限比User_list更高,及時生效
建立的用戶,不須要登陸操做系統,僅用來登陸VSFTP
[root@localhost ~]# useradd -s /sbin/nologin ftpuser
[root@localhost ~]# passwd ftpuser
更改用戶 ftpuser 的密碼 。
新的 密碼:
無效的密碼: 密碼少於 8 個字符
從新輸入新的 密碼:
passwd:全部的身份驗證令牌已經成功更新。
[root@localhost ~]
建立的時候,若是想限制用戶的家目錄,能夠這樣建立
useradd -d /tz/ftp -s /sbin/nologin dhftpuser
將全部的用戶禁錮在本身的家目錄下(即不能隨意切換路徑)
chroot_local_user=YES

將部分用戶禁錮在本身的家目錄下
chroot_list_enable=YES
chroot_list=file=/etc/vsftpd/chroot_list
注:白名單使用的前提,要把chroot_local_user=YES開啓,測了幾遍發現這個問題
配置文件:/etc/vsftpd/ftpusers
全部寫入此文件內的用戶名都不容許登陸ftp,當即生效
修改被動模式數據傳輸使用端口
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=35000
1 [root@localhost vsftpd]# vim vsftpd.user 2 #奇數行爲用戶,偶數行爲密碼 3 [root@localhost vsftpd]# db_load -T -t hash -f vsftpd.user vsftpd.db 4 #將用戶密碼的存放文本轉化數據庫類型,並使用hash加密 5 [root@localhost vsftpd]# ll 6 total 40 7 -rw-r--r-- 1 root root 13 May 26 01:03 chroot_list 8 -rw------- 1 root root 125 Mar 22 2017 ftpusers 9 -rw------- 1 root root 361 Mar 22 2017 user_list 10 -rw------- 1 root root 4638 May 26 01:09 vsftpd.conf 11 -rwxr--r-- 1 root root 338 Mar 22 2017 vsftpd_conf_migrate.sh 12 -rw-r--r-- 1 root root 12288 May 26 01:37 vsftpd.db 13 -rw-r--r-- 1 root root 33 May 26 01:36 vsftpd.user 14 [root@localhost vsftpd]# chmod 600 vsftpd.db 15 #修改文件權限爲600,保證其安全性 16 [root@localhost wgr]# useradd -d /wgr/tz -s /sbin/nologin tzftpuser 17 #建立用戶做爲ftp的虛擬用戶的映射用戶 18 /wgr/tz這裏的路徑不要建,建立用戶的時候會本身產生 19 20 [root@localhost wgr]# vim /etc/pam.d/vsftpd.pam 21 添加下面的內容 22 auth required pam_userdb.so db=/etc/vsftpd/vsftpd 23 account required pam_userdb.so db=/etc/vsftpd/vsftpd 24 修改 25 pam_service_name=vsftpd.pam 26 添加 27 guest_enable=YES 28 guest_username=tzftpuser 29 user_config_dir=/etc/vsftpd/dir
注:作虛擬用戶配置文件設置時,將主配置文件中的自定義的匿名用戶相關設置註釋掉
anon_upload_enable=YES #容許上傳文件 anon_mkdir_write_enable=YES #容許建立目錄 anon_other_write_enable=YES #開放其餘寫入權
給3個配置文件賦予權限
a1: anon_upload_enable=YES #容許上傳文件 a2: anon_mkdir_write_enable=YES #容許建立目錄 a3: anon_upload_enable=YES #容許上傳文件 anon_other_write_enable=YES #開放其餘寫入權
1 #建立dir目錄,並給3個用戶賦予不一樣的權限 2 [root@localhost dir]# ll 3 總用量 12 4 -rw-r--r--. 1 root root 23 5月 26 17:15 a1 5 -rw-r--r--. 1 root root 28 5月 26 17:15 a2 6 -rw-r--r--. 1 root root 50 5月 26 17:16 a3 7 [root@localhost dir]# 8 [root@localhost dir]# ls -ld /wgr/tz/ 9 drwx------. 3 tzftpuser tzftpuser 78 5月 26 17:08 /wgr/tz/ 10 # 注:要給映射用戶的家目錄 設置 O+r 讓虛擬用戶有讀權限 11 [root@localhost dir]# chmod o+r /wgr/tz 12 [root@localhost dir]# ls -ld /wgr/tz/ 13 drwx---r--. 3 tzftpuser tzftpuser 78 5月 26 17:08 /wgr/tz/ 14 [root@localhost dir]#