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地址或綁定彈性公網IP(EIP)。具體操作,請參見綁定和解綁彈性公網IP。
安全組:入方向放行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)。