FTP
介紹
FTP(File transfer protocol)
在TCP/IP協議族中屬於應用層協議運行於TCP協議之上是一種可靠的傳輸協議,主要功能用於實現用戶間文件分發共享,以及網絡管理者在進行設備版本升級、日誌下載和配置保存等業務操作時,均會使用到FTP功能。
FTP不同於其他服務的是它使用了兩個端口,一個數據端口(通常爲20端口),一個命令端口,也稱控制端口(通常爲21端口)
傳輸模式
FTP協議有兩種工作方式:PORT
方式和PASV
方式,中文意思爲主動模式和被動模式。其中是否主動是站在FTP
服務端來討論的,而選擇使用哪種傳輸方式的選擇權則是在FTP
客戶端。
主動模式
主動模式下,FTP客戶端從任意的非特殊端口(N>1023)連入到FTP服務器的21命令端口,然後客戶端在(N+1)端口監聽,並且通過N+1端口發送PORT命令將N+1端口告知服務器,然後服務器會主動從自己的20數據端口發起到客戶端告知的N+1端口的連接。連接成功後,開始傳輸數據。
被動模式
被動模式對應命令爲 PASV(全稱Passive)。在被動模式中,命令連接和數據連接都由客戶端發起。當開啓FTP連接時,客戶端打開任意兩個非特權端口(N>1023和N+1)。第一個端口連接服務器的21端口,併發送PASV命令告知服務器啓動被動模式,服務端接收到PASV命令後,開啓一個任意非特權端口(P>1024),併發送PORT P命令給客戶端,然後由客戶端主動從本地N+1到服務器的P端口的連接
區別
簡單說 主動模式就是服務器 主動連接 到客戶端的端口,而被動模式就是客戶端主動連接服務器的端口,服務器負責開放端口後進行監聽,等待客戶端連接。
使用場景
當client
端和server
端同處一個局域網使用兩種模式都不會存在問題,
但現實環境中無論是Client
端還是Server
端都是在防火牆後面,在主動模式下VSFTP
會鏈接Client
端的隨機+1號端口,Client
端顯然不會將防火牆上所有隨機端口開放;而在被動下問題同樣的問題仍然會擺在Server端的防火牆面前,這就需要Server
端的防火牆開啓連接追蹤功能,即放行與21號端口有關聯的端口訪問請求,這也就是爲什麼大部分情況下VSFTP
是以被動模式工作。
Vsftpd
介紹
vsftpd(Very Secure FTP Daemon)
,是一個以安全爲主的FTP
服務器
安裝
[root@suhw ~]# yum install -y vsftpd
啓動
# 啓動 vsftpd
[root@suhw ~]# systemctl start vsftpd
# 查看狀態
[root@suhw ~]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2020-06-17 20:12:50 CST; 6s ago
Process: 17277 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 17278 (vsftpd)
Tasks: 1
Memory: 648.0K
CGroup: /system.slice/vsftpd.service
└─17278 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Jun 17 20:12:47 suhw systemd[1]: Starting Vsftpd ftp daemon...
Jun 17 20:12:50 suhw systemd[1]: Started Vsftpd ftp daemon.
配置文件
文件地址 | 作用 |
---|---|
/etc/vsftpd/vsftpd.conf | vsftpd 配置文件 |
/etc/pam.d/vsftpd | vsftpd 使用 pam 時的相關破欸之 |
/etc/vsftpd/ftpusers | 記錄着 拒絕登錄ftp 的賬號 |
/etc/vsftpd/user_list | 記錄需要管理的 vsftpd 用戶賬號 ,與 vsftpd.conf 中的 userlist_anle,userlist_deny 有關,控制列表中的用戶是否可登錄 vsftpd 賬號 |
/etc/vsftpd/chroot_list | 將指定用戶 chroot 在對應的家目錄下,與vsftpd.conf 中的 chroot_list_enable 和 chroot_list_file 有關 |
/var/ftp | vsftpd 預設匿名者登錄的根目錄 |
參數介紹
下面只列舉/etc/vsftpd/vsftpd.conf
中部分參數介紹,詳細介紹參考man 5 vsftpd.conf
參數 | 作用 |
---|---|
anonymous_enable=NO | 是否允許匿名帳戶登錄 FTP 服務器 |
local_enable=YES | 是否允許本地賬戶登錄 FTP 服務器 |
write_enable =YES | 是否開啓目錄上次權限 |
local_umask=022 | 本地用戶上傳文件的權限掩碼 |
目錄消息 | |
dirmessage_enable=YES | 用戶第一次進入目錄時,vsftpd會查看.message文件,並將其內容顯示給用戶 |
message_file | 指定文件路徑,而非默認的.message |
數據傳輸日誌 | |
xferlog_enable=YES | 是否開啓日誌功能 |
xferlog_file=/var/log/vsftpd.log | 日誌的存放路徑 |
xferlog_std_format=No | 日誌的格式 |
數據傳輸模式 | |
connect_from_port_20=YES | 是否啓用PORT模式 |
chroot_local_user=YES | |
修改匿名用戶上傳的文件的屬主 | |
chown_uploads | 是否修改 |
chown_username | 啓用chown_uploads指令時,將文件屬主修改爲此指令指定的用戶,默認爲root |
chown_upload_mode | 設置匿名用戶上傳文件的權限,默認600 |
設定會話超時時長 | |
idle_session_timeout | 空閒會話超時時長 |
connect_timeout | prot模式下,服務器連接客戶端的超時時長 |
data_connection_timeout | 數據傳輸的超時時長 |
與主機相關的設定值 | |
listen_port | 默認爲21 |
listen | 若設定爲YES 表示 vsftpd 以standalone 方式啓動,默認爲No |
設定連接及傳輸速率 | |
local_max_rate | 本地用戶的最大傳輸速率 |
anon_max_rate | 匿名用戶的最大傳輸速率 |
max_clients | 最大併發連接數 |
max_per_ip | 每個ip所允許發起的最大連接數 |
禁錮本地用戶 | |
chroot_local_user | 是否禁錮所有本地用戶 |
chroot_list_enable | |
用戶訪問控制 | |
userlist_enable | 若置爲開啓,vsftpd將加載由userlist_file指令指定的用戶列表文件,此文件中的用戶是否能訪問vsftpd服務取決於userlist_deny指令; |
userlist_deny | 表示此列表是否爲黑名單(YES表示爲黑名單,反之爲白名單) |
pasv_enable | 值爲 YES 表示啓動被動模式 |
pasv_min_port=0 pasv_max_port=0 | 設定被動模式所用的端口號,0代表隨機取用 |
pasv_address | 設置ftp服務器返回的pasv地址 |
被動模式配置
上面介紹了兩種傳輸模式的區別以及各自應用場景,實際開發過程中被動模式十分常見,相關的配置可參考如下:
# 啓用被動模式
pasv_enable=YES
# 隨機端口所用的端口號範圍
pasv_min_port=6000
pasv_max_port=7000
#指定被動模式回傳的服務器IP地址
pasv_address=10.44.192.126
# 指定vsftpd偵聽的地址爲非IPv6格式
listen_ipv6=NO
# 以 standalone 方式啓動
listen=YES
參考
- http://linux.vbird.org/linux_server/0410vsftpd.php
- https://yq.aliyun.com/articles/545714
- http://blog.sina.com.cn/s/blog_946cb2b70100x4zc.html