vsftpd(very secure FTP daemon)是一個廣泛使用的、開源的FTP伺服器軟體,以其高效能、高安全性和穩定性著稱,支援多種FTP相關協議,包括FTP、SFTP(通過SSH)、TLS/SSL加密的FTP等。本文介紹如何在Linux系統的ECS執行個體上安裝並配置vsftpd。
準備資源
已建立一台基礎ECS執行個體,並滿足以下配置。如果您還未建立,請參見自訂購買執行個體。
作業系統:Alibaba Cloud Linux、CentOS 7.x 64位、CentOS 8.x 64位、Ubuntu
IP地址:執行個體已指派公網IP地址或綁定Elastic IP Address(EIP)。具體操作,請參見綁定和解除綁定Elastic IP Address。
安全性群組:入方向允許存取80、22、443連接埠。具體操作,請參見添加安全性群組規則。
操作步驟
步驟一:安裝vsftpd
遠端連線Linux執行個體。
具體操作,請參見通過密碼或密鑰認證登入Linux執行個體。
運行以下命令,安裝vsftpd。
Alibaba Cloud Linux/CentOS 7.x/CentOS 8.x
重要CentOS 8作業系統版本結束了生命週期(EOL),按照社區規則,CentOS 8的源地址http://mirror.centos.org/centos/8/內容已移除,您在阿里雲上繼續使用預設配置的CentOS 8的源會發生報錯。如果您需要使用CentOS 8系統中的一些安裝包,則需要手動切換源地址。具體操作,請參見CentOS 8 EOL如何切換源?。
sudo yum install -y vsftpd
Ubuntu
sudo apt update sudo apt install -y vsftpd
出現類似如下圖所示介面時,表示vsftpd安裝成功。
說明不同系統所安裝的vsftpd版本有所不同,以實際介面顯示為準。
運行以下命令,啟動FTP服務,並設定開機自啟動。
sudo systemctl start vsftpd sudo systemctl enable vsftpd
說明執行該命令時如果提示錯誤資訊
Job for vsftpd.service failed because the control process exited with error code
,請排查是否存在下述問題。網路環境不支援IPv6時,在
/etc/vsftpd/vsftpd.conf
配文檔案中,將listen_ipv6=YES
修改為listen_ipv6=NO
。MAC地址不匹配時,運行
ifconfig
命令查看MAC地址,並在/etc/sysconfig/network-scripts/ifcfg-xxx
設定檔中新增或修改HWADDR=<MAC地址>
。
運行以下命令,查看FTP服務監聽的連接埠。
sudo netstat -antup | grep ftp
出現如下圖所示介面,表示FTP服務已啟動,監聽的連接埠號碼為21。
此時,vsftpd預設已開啟匿名訪問功能,您無需輸入使用者名稱密碼即可登入FTP伺服器,但沒有修改或上傳檔案的許可權。
步驟二:配置vsftpd
建立一個Linux使用者並設定密碼。
FTP支援以下三種認證模式:
匿名使用者模式:任何人無需密碼驗證就可以直接登入到FTP伺服器。這種模式最不安全,一般只用來儲存不重要的公開檔案,不推薦在生產環境中使用。
本機使用者模式:通過Linux系統本地帳號進行驗證的模式,相較於匿名使用者模式更安全。
虛擬使用者模式:FTP伺服器的專有使用者。虛擬使用者只能訪問Linux系統為其提供的FTP服務,而不能訪問Linux系統的其他資源,進一步增強了FTP伺服器的安全性。
本文介紹為FTP服務建立一個Linux系統本地帳號。
Alibaba Cloud Linux/CentOS 7.x/CentOS 8.x
運行以下命令,為FTP服務建立一個Linux使用者。
本樣本中,該使用者名稱為
ftptest
。sudo adduser ftptest
運行以下命令,修改
ftptest
使用者的密碼。sudo passwd ftptest
運行命令後,根據命令列提示完成FTP使用者的密碼修改。
Ubuntu
運行以下命令,為FTP服務建立一個Linux使用者。
本樣本中,該使用者名稱為
ftptest
。sudo adduser ftptest
根據提示輸入密碼,並完成二次確認。
運行以下命令,建立一個供FTP服務使用的檔案目錄。
sudo mkdir -p /var/ftp/test
運行以下命令,建立測試檔案。
該測試檔案用於FTP用戶端訪問FTP伺服器時使用。
sudo touch /var/ftp/test/testfile.txt
運行以下命令,更改
/var/ftp/test
目錄的擁有者為ftptest
。sudo chown -R ftptest:ftptest /var/ftp/test
修改
vsftpd.conf
設定檔。運行以下命令,開啟vsftpd的設定檔。
Alibaba Cloud Linux/CentOS 7.x/CentOS 8.x
sudo vim /etc/vsftpd/vsftpd.conf
Ubuntu
sudo vim /etc/vsftpd.conf
按
i
進入編輯模式。配置FTP伺服器工作模式。
FTP伺服器支援以下兩種工作模式:
主動模式(Active Mode):用戶端向FTP伺服器傳送埠資訊,由伺服器主動串連該連接埠。
被動模式(Passive Mode):FTP伺服器開啟並傳送埠資訊給用戶端,由用戶端串連該連接埠,伺服器被動接受串連。
說明大多數FTP用戶端都在區域網路中,沒有獨立的公網IP地址,且有防火牆阻攔,主動模式下FTP伺服器成功串連到用戶端比較困難。因此,如無特殊需求,建議您將FTP伺服器配置為被動模式。
本文介紹配置FTP伺服器為被動模式。具體的配置參數說明如下,除下面提及的參數,其他參數保持預設值即可。
重要修改和添加設定檔內的資訊時,請注意格式問題。例如,添加多餘的空格會造成無法重啟服務的結果。
修改下列參數的值:
#禁止匿名登入FTP伺服器。 anonymous_enable=NO #允許本機使用者登入FTP伺服器。 local_enable=YES #監聽IPv4 sockets。 listen=YES
在行首添加#注釋掉以下參數,關閉監聽IPv6 sockets:
#listen_ipv6=YES
在設定檔的末尾添加下列參數,其中
pasv_address
需修改為FTP伺服器的公網IP地址。Alibaba Cloud Linux/CentOS 7.x/CentOS 8.x
#設定本機使用者登入後所在目錄。 local_root=/var/ftp/test #全部使用者被限制在主目錄。 chroot_local_user=YES #啟用例外使用者名稱單。 chroot_list_enable=YES #指定例外使用者列表檔案,列表中使用者不被鎖定在主目錄。 chroot_list_file=/etc/vsftpd/chroot_list #開啟被動模式。 pasv_enable=YES allow_writeable_chroot=YES #本教程中為Linux執行個體的公網IP。 pasv_address=<FTP伺服器公網IP地址> #設定被動模式下,建立資料轉送可使用的連接埠範圍的最小值。 #建議您把連接埠範圍設定在一段比較高的範圍內,例如50000~50010,有助於提高訪問FTP伺服器的安全性。 pasv_min_port=50000 #設定被動模式下,建立資料轉送可使用的連接埠範圍的最大值。 pasv_max_port=50010
Ubuntu
#設定本機使用者登入後所在目錄。 local_root=/var/ftp/test #全部使用者被限制在主目錄。 chroot_local_user=YES #啟用例外使用者名稱單。 chroot_list_enable=YES #指定例外使用者列表檔案,列表中使用者不被鎖定在主目錄。 chroot_list_file=/etc/vsftpd.chroot_list #開啟被動模式。 pasv_enable=YES allow_writeable_chroot=YES #本教程中為Linux執行個體的公網IP。 pasv_address=<FTP伺服器公網IP地址> #設定被動模式下,建立資料轉送可使用的連接埠範圍的最小值。 #建議您把連接埠範圍設定在一段比較高的範圍內,例如50000~50010,有助於提高訪問FTP伺服器的安全性。 pasv_min_port=50000 #設定被動模式下,建立資料轉送可使用的連接埠範圍的最大值。 pasv_max_port=50010
更多參數的詳細資料,請參見vsftp設定檔及參數說明。
按
Esc
鍵,輸入:wq
,按Enter
鍵關閉並儲存設定檔。
建立
chroot_list
檔案,並在檔案中寫入例外使用者名稱單。運行以下命令,建立
chroot_list
檔案。Alibaba Cloud Linux/CentOS 7.x/CentOS 8.x
sudo vim /etc/vsftpd/chroot_list
Ubuntu
sudo vim /etc/vsftpd.chroot_list
按
i
進入編輯模式。輸入例外使用者名稱單。此名單中的使用者不會被鎖定在主目錄,可以訪問其他目錄。
按
Esc
鍵,輸入:wq
,按Enter
鍵關閉並儲存設定檔。
重要沒有例外使用者時,也必須建立
chroot_list
檔案,內容可為空白。運行以下命令,重啟vsftpd服務。
sudo systemctl restart vsftpd
步驟三:設定安全性群組
搭建好FTP網站後,在執行個體安全性群組的入方向添加規則並允許存取下列FTP連接埠。具體操作,請參見添加安全性群組規則。
大多數用戶端位於區域網路中,IP地址是經過轉換的,因此ipconfig
或ifconfig
命令返回的IP不一定是用戶端的真實公網IP地址。若後續用戶端無法登入FTP伺服器,請重新確認其公網IP地址。
被動模式需開放21連接埠,以及/etc/vsftpd/vsftpd.conf
設定檔中參數pasv_min_port
和pasv_max_port
之間的所有連接埠。配置詳情如下表所示。
規則方向 | 授權策略 | 協議類型 | 連接埠範圍 | 授權對象 |
入方向 | 允許 | 自訂TCP | 21/21 | 所有要訪問FTP伺服器的用戶端公網IP地址,多個地址之間用逗號隔開。 允許所有用戶端訪問時,授權對象為0.0.0.0/0。 |
入方向 | 允許 | 自訂TCP |
| 所有要訪問FTP伺服器的用戶端公網IP地址,多個地址之間用逗號隔開。 允許所有用戶端訪問時,授權對象為0.0.0.0/0。 |
步驟四:測試搭建的FTP伺服器
FTP用戶端、Windows命令列工具或瀏覽器均可用來測試FTP伺服器。本文以Windows Server 2012 R2 64位系統的本地主機作為FTP用戶端,介紹FTP伺服器的訪問步驟。
在本地主機,開啟這台電腦。
在地址欄中輸入
ftp://<FTP伺服器公網IP地址>:<FTP連接埠>
,本文中為Linux執行個體的公網IP地址。例如:ftp://121.43.XX.XX:21
。在彈出的登入身份對話方塊中,輸入已設定的FTP使用者名稱和密碼,然後單擊登入。
登入後,您可以查看到FTP伺服器指定目錄下的檔案,例如:測試檔案testfile.txt。
vsftp設定檔及參數說明
/etc/vsftpd
目錄下檔案說明如下:
/etc/vsftpd/vsftpd.conf
是vsftpd的核心設定檔。/etc/vsftpd/ftpusers
是黑名單檔案,此檔案中的使用者不允許訪問FTP伺服器。/etc/vsftpd/user_list
是白名單檔案,此檔案中的使用者允許訪問FTP伺服器。
vsftpd.conf
設定檔參數說明如下:
使用者登入控制參數說明如下表所示。
參數
說明
anonymous_enable=YES
接受匿名使用者
no_anon_password=YES
匿名使用者login時不詢問口令
anon_root=(none)
匿名使用者主目錄
local_enable=YES
接受本機使用者
local_root=(none)
本機使用者主目錄
使用者權限控制參數說明如下表所示。
參數
說明
write_enable=YES
可以上傳檔案(全域控制)
local_umask=022
本機使用者上傳的檔案許可權
file_open_mode=0666
上傳檔案的許可權配合umask使用
anon_upload_enable=NO
匿名使用者可以上傳檔案
anon_mkdir_write_enable=NO
匿名使用者可以建目錄
anon_other_write_enable=NO
匿名使用者修改刪除
chown_username=lightwiter
匿名上傳檔案所屬使用者名稱
常見問題
問題一:本地主機為Windows系統,為什麼我無法下載FTP伺服器中的檔案?
您需要根據以下操作步驟,開啟IE瀏覽器的下載許可權。
在本地主機中開啟IE瀏覽器。
在瀏覽器的右上方單擊表徵圖,然後單擊Internet 選項。
在Internet 選項對話方塊的頂部,單擊安全頁簽。
在選擇一個地區以查看或更改安全設定地區,單擊Internet,然後在該地區的安全層級地區,單擊自訂層級。
選擇
,然後單擊確定。單擊應用,然後單擊確定。
問題二:在Windows系統中,使用命令列工具、瀏覽器等方式串連FTP伺服器報錯如何處理?
您可以根據FTP的報錯資訊手動排查問題。當您的報錯難以排查解決時,建議您使用第三方FTP用戶端串連工具。例如:FileZilla。下載地址為FileZilla。本樣本介紹使用FileZilla串連匿名模式的FTP伺服器。
配置vsftpd為匿名模式。
運行以下命令,修改設定檔
/etc/vsftpd/vsftpd.conf
。如果您在安裝vsftpd時,使用的是
apt install vsftpd
安裝命令,則設定檔路徑為/etc/vsftpd.conf
。sudo vim /etc/vsftpd/vsftpd.conf
按
i
進入編輯模式。將匿名上傳許可權的注釋去掉,修改為
anon_upload_enable=YES
。按
Esc
退出編輯模式,然後輸入:wq
並斷行符號以儲存並關閉檔案。修改後的設定檔,如下圖所示。
運行以下命令更改
/var/ftp/pub
目錄的許可權,為FTP使用者添加寫入權限。/var/ftp/pub
為FTP服務預設的檔案目錄。sudo chmod o+w /var/ftp/pub/
運行以下命令重新載入設定檔。
sudo systemctl restart vsftpd
下載並安裝FileZilla。
通過FileZilla串連匿名模式的FTP伺服器。
開啟FileZilla用戶端。
在頂部功能表列,選擇
。在網站管理器對話方塊的左下角,單擊新網站(N)。
輸入新網站的名稱,並完成網站配置。
說明以下介面為3.64.0版本的FileZilla,其他版本的FileZilla介面可能有所不同。
具體的配置項說明如下:
新網站名稱:您自訂的網站名稱。例如
test-01
。協議:FTP-檔案傳輸通訊協定。
主機:FTP伺服器公網IP地址。本文中為Linux執行個體的公網IP地址,例如
121.43.XX.XX
。連接埠:21。
登入類型:匿名。
本樣本中使用FTP用戶端串連匿名模式的FTP伺服器。如果您需要使用FTP使用者密碼串連FTP伺服器,則登入類型需要設定為正常,並需要配置使用者和密碼資訊。
單擊串連(C)。
串連成功後,您可以對檔案進行上傳、下載和刪除等操作。FileZilla工具介面如下圖所示。圖中各地區的資訊說明如下表所示。
序號
說明
①
顯示命令、FTP串連狀態和任務執行結果。
②
本地地區,顯示本地主機的目錄資訊。
③
遠程地區,顯示FTP伺服器的目錄資訊。匿名模式下,預設目錄為
/pub
。④
記錄地區,可查看FTP任務的隊列資訊和日誌資訊。
相關文檔
您也可以在Windows執行個體中搭建FTP網站,具體操作,請參見手動搭建FTP網站(Windows)。