Linux - vsftpd 使用小結

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端口的連接。連接成功後,開始傳輸數據。

image-20200617203101285


被動模式

被動模式對應命令爲 PASV(全稱Passive)。在被動模式中,命令連接和數據連接都由客戶端發起。當開啓FTP連接時,客戶端打開任意兩個非特權端口(N>1023和N+1)。第一個端口連接服務器的21端口,併發送PASV命令告知服務器啓動被動模式,服務端接收到PASV命令後,開啓一個任意非特權端口(P>1024),併發送PORT P命令給客戶端,然後由客戶端主動從本地N+1到服務器的P端口的連接

image-20200617203211883

區別

簡單說 主動模式就是服務器 主動連接 到客戶端的端口,而被動模式就是客戶端主動連接服務器的端口,服務器負責開放端口後進行監聽,等待客戶端連接。


使用場景

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章