小阿軒yx-FTP文件傳輸服務
協議
- 用來上傳和下載
- 實現遠程共享文件
- 統一管理文件
原理?
- 控制文件的雙向傳輸,是一個應用程序
- 工作在TCP/IP協議簇的
- 提高文件傳輸的共享性和可靠性
- 使用C/S模式的工作方式連接同時處理服務器和客戶端的連接命令和數據傳輸
- 將命令和數據分開傳輸,提高傳輸效率
端口:21
(注:端口號通常是21,主動模式下20,被動模式下隨機端口)
連接方式兩個階段
- 管理連接
- 數據連接
管理連接:客戶端使用隨機端口(要>1024端口,高位端口)---> 連接服務器的21端口
數據連接
主動模式:服務器會使用(20端口)主動向客戶端(隨機端口,高位端口)發起連接(服務器連客戶端)?
被動模式:服務器(隨機端口)等待客戶端(隨機端口)向自己發起連接(客戶端連服務器)
區別
- 主動模式客戶端的防火墻會攔截服務器發起的連接
- 被動模式服務器需要處理防火墻(要么關閉、要么添加策略)
兩種傳輸模式?
文本模式
ASCII模式美國信息交換信息標準碼,傳輸文件使用 ASCII 標準字符序列,一般只用于傳輸文件的傳輸
二進制模式
又稱為 Binary 這種模式不會轉換文件中的字符序列,跟適合傳輸程序圖片等非文本文件
Vsftpd可支持最大 15000 并發連接數
FTP兩種模式
主動模式
客戶端使用隨機端口與服務器的21號端口建立控制連接,服務器端主動的使用20號端口向客戶端的隨機端口建立據連接,經過三次握手完成
被動模式
?客戶端使用隨機端口向服務器的21號端口建立管理連接,服務器使用建立好的管理通道向客戶端發送一個隨機的端口號,然后客戶端隨機的向服務器端發過來的端口經過三次握手后建立好這個數據連接
使用兩個端口
-
控制端口數據端口
-
FTP服務
首先關閉防火墻
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld
安裝vsftpd
[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# systemctl start vsftpd
開啟一個客戶端,在客戶端安裝ftp軟件并測試?
[root@localhost ~]# yum -y install ftp
[root@localhost ~]# ftp 192.168.10.101
Connected to 192.168.10.101 (192.168.10.101).
220 (vsFTPd 3.0.2)
Name (192.168.10.101:root):ftp
331 Please specify the password.
Password: # 這里直接按Enter就行
230 Login successful. # 看到這個就是登錄成功了
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit # 這里退出可以用exit、quit、bye
221 Goodbye.
?開啟主動模式并關閉被動模式
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
# 允許服務器主動模式,用20端口連接
connect_from_port_20=YES
# 關閉被動模式
pasv enable=NO
查看vsftpd的配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YESpam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
將#號開頭的行刪掉
[root@localhost ~]# sed -i '/^#/d' /etc/vsftpd/vsftpd.conf
三種用戶登錄方式
本地用戶模式
- localhost_enable=YES? ? ? ? //允許本地用戶訪問
- Write_enable=YES? ? ? ? ? ? ? //本地用戶的寫入權限
- Local_umask=002? ? ? ? ? ? ? ?//本地用戶上傳文件的權限減去這個umask值
- Userlist_deny=YES? ? ? ? ? ? ? //是否禁用user_list列表中的用戶賬號,若啟用必須等于==NO
- Userlist_enable=YES? ? ? ? ? //是否啟用user_list列表中的用戶無法登錄User_list白名單文件,如果設置userlist_deny=NO ?Userlist_enable=YES則只允許該列表中的用戶登錄若一個用戶同時存在兩個文件中,黑名單生效,該用戶不能登錄
虛擬用戶模式
-
可以將用戶的登錄名和密碼設置不相同
-
提高服務器的安全性
第一步:創建文本格式的用戶名和密碼 ?奇數行為用戶名,偶數行為密碼
第二步:建立虛擬FTP用戶的數據庫文件
第三步:添加虛擬用戶的映射賬號
第三步:為虛擬用戶建立PAM認證文件
第四步:修改配置文件添加虛擬用戶的支持
Local_enable=YES ?#需要映射本地用戶所以啟用
Write_enable=YES ?##啟用上傳寫入權限
Guest_enable=YES ?##開啟虛擬用戶
Anon_umask=022 ### 指定上次權限掩碼
Guest_username=* ?###指定映射的本地系統用戶
Pam_serrivce_name=vsftpd.vu ?##指定新的pam認證文件
User_config_dir=/*/*/*/ ??###為不同的虛擬用戶設置不同的權限
匿名用戶
匿名訪問 FTP 服務
- FTP無需密碼直接登錄(有時賬號也不需要)
- 妥善設置權限不要太高,一般僅允許下載
準備匿名 FTP 訪問目錄
[root@localhost ~]# touch /var/ftp/test
[root@localhost ~]# chown ftp /var/ftp/pub
[root@localhost ~]# chmod 755 /var/ftp/pub
[root@localhost ~]# cd/var/ftp/pub
開放匿名用戶
添加以下內容
[root@localhost ftp]# vim /etc/vsftpd/vsftpd.conf
anon_umask=022
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
重啟服務?
[root@localhost ~]# systemctl restart vsftpd
找出運行在指定端口的進程?
[root@localhost ~]# netstat -anpt | grep vsftpd
測試匿名 FTP 服務器
測試訪問
[root@localhost ~]# ftp 192.168.10.101
Connected to 192.168.10.101 (192.168.10.101).
220 (vsFTPd 3.0.2)
Name (192.168.10.101:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
227 Entering Passive Mode (192,168,10,101,221,180).
150 Here comes the directory listing.
drwxr-xr-x 2 14 0 6 Nov 05 2016 pub
-rw-r--r-- 1 0 0 0 May 20 02:14 test
-rw-r--r-- 1 0 0 0 May 20 02:14 text
226 Directory send OK.
ftp> lcd /opt
Local directory now /opt
ftp> get test
local: test remote: test
227 Entering Passive Mode (192,168,10,101,141,88).
150 Opening BINARY mode data connection for test (0 bytes).
226 Transfer complete.
ftp> lcd /root
Local directory now /root
ftp> cd pub
250 Directory successfully changed.
ftp> put initial-setup-ks.cfg
local: initial-setup-ks.cfg remote: initial-setup-ks.cfg
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
1638 bytes sent in 0.00327 secs (501.22 Kbytes/sec)
ftp> quit
221 Goodbye.
wget測試
[root@localhost ~]# wget ftp://192.168.10.101/pub/111
--2021-11-16 09:50:15-- ftp://192.168.10.101/pub/111=> “111”
正在連接 192.168.10.101:21... 已連接。
正在以 anonymous 登錄 ... 登錄成功!
==> SYST ... 完成。 ==> PWD ... 完成。
==> TYPE I ... 完成。 ==> CWD (1) /pub ... 完成。
==> SIZE 111 ... 完成。
==> PASV ... 完成。 ==> RETR 111 ... 完成。[ <=> ] 0 --.-K/s 用時 0s 2021-11-16 09:50:15 (0.00 B/s) - “111” 已保存 [0]
?用戶驗證的 FTP 服務
本地用戶驗證配置
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
#anon_upload_enable=yes
#anon_mkdir_write_enable=yes
#anon_other_write_enable=yes
......省略部分內容
chroot_local_user=yes
allow_writeable_chroot=yes
listen=NO
listen_ipv6=YES
開啟root訪問權限
[root@localhost ~]# vim /etc/vsftpd/user_list
# 在root賬號前價格注釋符
#root
編輯配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
#anon_upload_enable=yes
#anon_mkdir_write_enable=yes
#anon_other_write_enable=yes
重啟服務
[root@localhost ~]# systemctl restart vsftpd
修改監聽地址與端口
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
listen=YES
listen_address=192.168.10.101 # 添加監聽地址
listen_port=2121 #添加監聽端口
listen_ipv6=no
[root@localhost ~]# ftp 192.168.10.101 2121
# 使用ftp的被動模式
pasv_enable=yes
pasv_min_port=24500
pasv_max_port=24600
重啟服務
[root@localhost ~]# systemctl restart vsftpd
客戶端測試?
[root@localhost ~]# touch aaa
[root@localhost ~]# ftp 192.168.10.101
Connected to 192.168.10.101 (192.168.10.101).
220 (vsFTPd 3.0.2)
Name (192.168.10.101:root): zhangsan
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> put aaa
local: aaa remote: aaa
227 Entering Passive Mode (192,168,10,101,114,218).
150 Ok to send data.
226 Transfer complete.
ftp> quit
221 Goodbye.
擴展
修改匿名用戶的目錄
[root@localhost ~]# mkdir -p /opt/ftp/myftp
[root@localhost ~]# chown ftp /opt/ftp/myftp
修改配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
# 添加以下字段:
anon_root=/opt/ftp
修改系統用戶的根目錄
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
# 添加以下字段:
#anon_root=/opt/ftp
local_root=/opt/ftp
授權用戶
- 識別賬號并授權
- 比匿名用戶高級
- 賬號密碼:密碼直接敲回車,不用輸入密碼
ftp服務分為
- 服務器端(vsftpd)
- 客戶端(ftp)
文件:666-022
目錄:777-022?
(注:022是反掩碼)
xinetd超級服務:代替ftp類的服務,監聽其對應的端口,如果有應用訪問這個端口,立即喚醒ftp這個程序