vsftpd(very secure FTP daemon)是Linux作業系統下的一款小巧輕快、安全易用的FTP伺服器軟體。本文介紹如何在Linux伺服器中安裝、配置vsftpd,並測試連接FTP伺服器。
前提條件
已建立LinuxSimple Application Server。具體操作,請參見建立Simple Application Server。
背景資訊
FTP(File Transfer Protocol)是一種檔案傳輸通訊協定,基於用戶端/伺服器架構,支援以下兩種工作模式:
主動模式(PORT):用戶端向FTP伺服器傳送埠資訊,由伺服器主動串連該連接埠。
被動模式(PASV):FTP伺服器開啟並傳送埠資訊給用戶端,由用戶端串連該連接埠,伺服器被動接受串連。
FTP支援以下三種認證模式:
匿名使用者模式:任何人無需密碼驗證就可以直接登入FTP伺服器。該模式不安全,一般只用來傳輸不重要的公開檔案,不推薦在生產環境中使用。
本機使用者模式:通過Linux系統本機使用者驗證登入許可權,相較於匿名使用者模式更安全。
虛擬使用者模式:通過虛擬使用者驗證登入許可權,虛擬使用者只能訪問Linux系統為其提供的FTP服務,而不能訪問Linux系統的其他資源。該模式相較於其他兩種模式更加安全,如果您對伺服器的資料有較高的安全性要求,建議在相關專業人員的指導下,自行配置該模式。
本文主要介紹配置簡單的匿名使用者模式以及較為安全的本機使用者模式。
步驟一:準備工作
本文將使用FTP用戶端工具FileZilla串連FTP伺服器,因此您需要完成以下準備工作:
在本地主機上,下載並安裝FileZilla。
具體下載地址,請參見FileZilla下載中心。
設定Linux伺服器的使用者密碼。
具體操作,請參見管理伺服器密碼。
步驟二:安裝與配置vsftpd
本樣本以在CentOS 7為例,不同的作業系統操作略有差異。更多資訊,請參見搭建FTP網站。
遠端連線Linux伺服器。
具體操作,請參見遠端連線Linux伺服器。
執行以下命令,查看輕量伺服器是否已安裝vsftpd。
部分使用應用鏡像部署的Simple Application Server已經預先安裝了vsftpd,如果再次安裝可能會出現衝突。
vsftpd -v
如果回顯資訊類似如下所示,表示當前Simple Application Server已經安裝了vsftpd,您無需再次安裝,您可以參考應用鏡像文檔擷取FTP的使用者名稱和密碼,然後配置防火牆和通過FTP用戶端測試連接FTP伺服器。
[admin@iZ2579sxicu**** ~]$ vsftpd -v vsftpd: version 3.0.2
運行以下命令,安裝vsftpd。
sudo yum install -y vsftpd
出現如下圖所示資訊,表示vsftpd安裝成功。
運行以下命令,設定FTP服務開機自啟動。
sudo systemctl enable vsftpd.service
運行以下命令,啟動FTP服務。
sudo systemctl start vsftpd.service
說明如果出現無法啟動FTP,且提示錯誤資訊
Job for vsftpd.service failed because the control process exited with error code
,請排查是否存在21連接埠被佔用問題。使用
lsof -i:21
命令,查看是否存在進程。如果存在進程,使用
kill -9 <進程號>
命令,殺掉進程。
運行以下命令,查看FTP服務的連接埠號碼。
sudo netstat -antup | grep ftp
如下圖所示,可查看到FTP服務的連接埠號碼,表示服務已正常啟動。
步驟三:設定FTP伺服器的訪問模式
您可以選擇以下任一方式設定FTP伺服器,建議您使用更加安全的本機使用者模式。
本機使用者模式(推薦)
運行以下命令為FTP服務建立一個Linux使用者。
本樣本中,該使用者名稱為
ftptest
。sudo adduser ftptest
運行以下命令修改
ftptest
使用者的密碼。sudo passwd ftptest
運行命令後,根據命令列提示完成FTP使用者的密碼修改。
運行以下命令建立一個供FTP服務使用的檔案目錄。
sudo mkdir /var/ftp/test
運行以下命令更改/var/ftp/test目錄的擁有者為
ftptest
。sudo chown -R ftptest:ftptest /var/ftp/test
修改vsftpd.conf設定檔。
運行以下命令,修改設定檔/etc/vsftpd/vsftpd.conf。
如果您在安裝vsftpd時,使用的是apt install vsftpd安裝命令,則設定檔路徑為/etc/vsftpd.conf。
sudo vim /etc/vsftpd/vsftpd.conf
按i進入編輯模式。
配置FTP伺服器為被動模式。
具體的配置參數說明如下,除下面提及的參數,其他參數保持預設值即可。
重要複製以下參數,然後粘貼至Linux伺服器的設定檔時,請注意參數不要被
#
號注釋掉。同時,請注意格式問題。例如,添加多餘的空格會造成無法重啟服務的結果。修改下列參數的值:
#禁止匿名登入FTP伺服器。 anonymous_enable=NO #允許本機使用者登入FTP伺服器。 local_enable=YES #監聽IPv4 sockets。 listen=YES
在行首添加#注釋掉以下參數,關閉監聽IPv6 sockets:
#listen_ipv6=YES
在設定檔的末尾添加下列參數,其中
pasv_address
參數需要替換為Simple Application Server的公網IP地址:#設定本機使用者登入後所在目錄。 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 #本樣本中為Simple Application Server的公網IP地址。 pasv_address=39.105.xx.xx #設定被動模式下,建立資料轉送可使用的連接埠範圍的最小值。 #建議您把連接埠範圍設定在一段比較高的範圍內,例如50000~50010,有助於提高訪問FTP伺服器的安全性。 pasv_min_port=50000 #設定被動模式下,建立資料轉送可使用的連接埠範圍的最大值。 pasv_max_port=50010
更多參數的詳細資料,請參見vsftp設定檔及參數說明。
按Esc退出編輯模式,然後輸入
:wq
並斷行符號,儲存退出檔案。
建立chroot_list檔案,並在檔案中寫入例外使用者名稱單。
運行以下命令,建立chroot_list檔案。
sudo vim /etc/vsftpd/chroot_list
按i進入編輯模式。
輸入例外使用者名稱單。此名單中的使用者不會被鎖定在主目錄,可以訪問其他目錄。
重要沒有例外使用者時,也必須建立chroot_list檔案,內容可為空白。
按Esc退出編輯模式,然後輸入
:wq
並斷行符號,儲存退出檔案。
運行以下命令,關閉防火牆。
sudo systemctl stop firewalld
修改設定檔。
運行以下命令,開啟/etc/ssh/sshd_config檔案。
sudo vi /etc/ssh/sshd_config
在檔案尾行將
PasswordAuthentication
的值改為yes
。修改完成後,按
Esc
,輸入:wq!
,並按Enter
,儲存修改後的設定檔並退出編輯模式。
運行以下命令,重啟FTP服務。
sudo systemctl restart vsftpd.service
匿名訪問模式
運行以下命令,修改設定檔/etc/vsftpd/vsftpd.conf。
如果您在安裝vsftpd時,使用的是apt install vsftpd安裝命令,則設定檔路徑為/etc/vsftpd.conf。
sudo vim /etc/vsftpd/vsftpd.conf
按i進入編輯模式。
分別找到匿名模式(
anonymous_enable
)以及匿名上傳許可權(anon_upload_enable
),並確認已修改為開啟狀態。不同作業系統版本中,預設的設定檔資訊可能有所不同,您需要保證修改後的參數配置,如下所示:
anonymous_enable=YES anon_upload_enable=YES listen=YES listen_ipv6=NO
在檔案的末尾,新增以下參數。
重要複製以下參數,然後粘貼至Linux伺服器的設定檔時,請注意參數不要被
#
號注釋掉。同時,請注意格式問題。例如,添加多餘的空格會造成無法重啟服務的結果。#開啟被動模式。 pasv_enable=YES #設定被動模式下,建立資料轉送可使用的連接埠範圍的最小值。 #建議您把連接埠範圍設定在一段比較高的範圍內,例如50000~50010,有助於提高訪問FTP伺服器的安全性。 pasv_min_port=50000 #設定被動模式下,建立資料轉送可使用的連接埠範圍的最大值。 pasv_max_port=50010 #Simple Application Server的公網IP地址 pasv_address=39.105.xx.xx
按Esc退出編輯模式,然後輸入
:wq
並斷行符號,儲存退出檔案。運行以下命令,更改/var/ftp/pub目錄的許可權,為FTP使用者添加寫入權限。
/var/ftp/pub為FTP服務預設的檔案目錄。
sudo chmod o+w /var/ftp/pub/
運行以下命令,重啟FTP服務。
sudo systemctl restart vsftpd.service
步驟四:配置Linux伺服器的防火牆
搭建好FTP網站後,在Linux伺服器的防火牆中,需要允許存取下列FTP連接埠。具體操作,請參見添加防火牆規則。
被動模式需開放21連接埠,以及設定檔/etc/vsftpd/vsftpd.conf中參數pasv_min_port
和pasv_max_port
之間的所有連接埠。配置詳情如下表所示。
應用類型 | 協議 | 連接埠範圍 |
FTP | TCP | 21 |
自訂 | TCP |
|
配置完成後,如下圖所示:
步驟五:通過FTP用戶端測試連接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任務的隊列資訊和日誌資訊。
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
匿名上傳檔案所屬使用者名稱