搭建FTP服務(wù)器(Linux)
vsftpd(very secure FTP daemon)是Linux操作系統(tǒng)下的一款小巧輕快、安全易用的FTP服務(wù)器軟件。本文介紹如何在Linux服務(wù)器中安裝、配置vsftpd,并測試連接FTP服務(wù)器。
前提條件
已創(chuàng)建Linux輕量應(yīng)用服務(wù)器。具體操作,請參見創(chuàng)建輕量應(yīng)用服務(wù)器。
背景信息
FTP(File Transfer Protocol)是一種文件傳輸協(xié)議,基于客戶端/服務(wù)器架構(gòu),支持以下兩種工作模式:
主動模式(PORT):客戶端向FTP服務(wù)器發(fā)送端口信息,由服務(wù)器主動連接該端口。
被動模式(PASV):FTP服務(wù)器開啟并發(fā)送端口信息給客戶端,由客戶端連接該端口,服務(wù)器被動接受連接。
FTP支持以下三種認(rèn)證模式:
匿名用戶模式:任何人無需密碼驗(yàn)證就可以直接登錄FTP服務(wù)器。該模式不安全,一般只用來傳輸不重要的公開文件,不推薦在生產(chǎn)環(huán)境中使用。
本地用戶模式:通過Linux系統(tǒng)本地用戶驗(yàn)證登錄權(quán)限,相較于匿名用戶模式更安全。
虛擬用戶模式:通過虛擬用戶驗(yàn)證登錄權(quán)限,虛擬用戶只能訪問Linux系統(tǒng)為其提供的FTP服務(wù),而不能訪問Linux系統(tǒng)的其他資源。該模式相較于其他兩種模式更加安全,如果您對服務(wù)器的數(shù)據(jù)有較高的安全性要求,建議在相關(guān)專業(yè)人員的指導(dǎo)下,自行配置該模式。
本文主要介紹配置簡單的匿名用戶模式以及較為安全的本地用戶模式。
步驟一:準(zhǔn)備工作
本文將使用FTP客戶端工具FileZilla連接FTP服務(wù)器,因此您需要完成以下準(zhǔn)備工作:
在本地主機(jī)上,下載并安裝FileZilla。
具體下載地址,請參見FileZilla下載中心。
設(shè)置Linux服務(wù)器的用戶密碼。
具體操作,請參見管理服務(wù)器密碼。
步驟二:安裝與配置vsftpd
本示例以在CentOS 7為例,不同的操作系統(tǒng)操作略有差異。更多信息,請參見搭建FTP站點(diǎn)。
遠(yuǎn)程連接Linux服務(wù)器。
具體操作,請參見遠(yuǎn)程連接Linux服務(wù)器。
執(zhí)行以下命令,查看輕量服務(wù)器是否已安裝vsftpd。
部分使用應(yīng)用鏡像部署的輕量應(yīng)用服務(wù)器已經(jīng)預(yù)安裝了vsftpd,如果再次安裝可能會出現(xiàn)沖突。
vsftpd -v
如果回顯信息類似如下所示,表示當(dāng)前輕量應(yīng)用服務(wù)器已經(jīng)安裝了vsftpd,您無需再次安裝,您可以參考應(yīng)用鏡像文檔獲取FTP的用戶名和密碼,然后配置防火墻和通過FTP客戶端測試連接FTP服務(wù)器。
[admin@iZ2579sxicu**** ~]$ vsftpd -v vsftpd: version 3.0.2
運(yùn)行以下命令,安裝vsftpd。
sudo yum install -y vsftpd
出現(xiàn)如下圖所示信息,表示vsftpd安裝成功。
運(yùn)行以下命令,設(shè)置FTP服務(wù)開機(jī)自啟動。
sudo systemctl enable vsftpd.service
運(yùn)行以下命令,啟動FTP服務(wù)。
sudo systemctl start vsftpd.service
說明如果出現(xiàn)無法啟動FTP,且提示錯誤信息
Job for vsftpd.service failed because the control process exited with error code
,請排查是否存在21端口被占用問題。使用
lsof -i:21
命令,查看是否存在進(jìn)程。如果存在進(jìn)程,使用
kill -9 <進(jìn)程號>
命令,殺掉進(jìn)程。
運(yùn)行以下命令,查看FTP服務(wù)的端口號。
sudo netstat -antup | grep ftp
如下圖所示,可查看到FTP服務(wù)的端口號,表示服務(wù)已正常啟動。
步驟三:設(shè)置FTP服務(wù)器的訪問模式
您可以選擇以下任一方式設(shè)置FTP服務(wù)器,建議您使用更加安全的本地用戶模式。
本地用戶模式(推薦)
運(yùn)行以下命令為FTP服務(wù)創(chuàng)建一個(gè)Linux用戶。
本示例中,該用戶名為
ftptest
。sudo adduser ftptest
運(yùn)行以下命令修改
ftptest
用戶的密碼。sudo passwd ftptest
運(yùn)行命令后,根據(jù)命令行提示完成FTP用戶的密碼修改。
運(yùn)行以下命令創(chuàng)建一個(gè)供FTP服務(wù)使用的文件目錄。
sudo mkdir /var/ftp/test
運(yùn)行以下命令更改/var/ftp/test目錄的擁有者為
ftptest
。sudo chown -R ftptest:ftptest /var/ftp/test
修改vsftpd.conf配置文件。
運(yùn)行以下命令,修改配置文件/etc/vsftpd/vsftpd.conf。
如果您在安裝vsftpd時(shí),使用的是apt install vsftpd安裝命令,則配置文件路徑為/etc/vsftpd.conf。
sudo vim /etc/vsftpd/vsftpd.conf
按i進(jìn)入編輯模式。
配置FTP服務(wù)器為被動模式。
具體的配置參數(shù)說明如下,除下面提及的參數(shù),其他參數(shù)保持默認(rèn)值即可。
重要復(fù)制以下參數(shù),然后粘貼至Linux服務(wù)器的配置文件時(shí),請注意參數(shù)不要被
#
號注釋掉。同時(shí),請注意格式問題。例如,添加多余的空格會造成無法重啟服務(wù)的結(jié)果。修改下列參數(shù)的值:
#禁止匿名登錄FTP服務(wù)器。 anonymous_enable=NO #允許本地用戶登錄FTP服務(wù)器。 local_enable=YES #監(jiān)聽IPv4 sockets。 listen=YES
在行首添加#注釋掉以下參數(shù),關(guān)閉監(jiān)聽IPv6 sockets:
#listen_ipv6=YES
在配置文件的末尾添加下列參數(shù),其中
pasv_address
參數(shù)需要替換為輕量應(yīng)用服務(wù)器的公網(wǎng)IP地址:#設(shè)置本地用戶登錄后所在目錄。 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 #本示例中為輕量應(yīng)用服務(wù)器的公網(wǎng)IP地址。 pasv_address=39.105.xx.xx #設(shè)置被動模式下,建立數(shù)據(jù)傳輸可使用的端口范圍的最小值。 #建議您把端口范圍設(shè)置在一段比較高的范圍內(nèi),例如50000~50010,有助于提高訪問FTP服務(wù)器的安全性。 pasv_min_port=50000 #設(shè)置被動模式下,建立數(shù)據(jù)傳輸可使用的端口范圍的最大值。 pasv_max_port=50010
更多參數(shù)的詳細(xì)信息,請參見vsftp配置文件及參數(shù)說明。
按Esc退出編輯模式,然后輸入
:wq
并回車,保存退出文件。
創(chuàng)建chroot_list文件,并在文件中寫入例外用戶名單。
運(yùn)行以下命令,創(chuàng)建chroot_list文件。
sudo vim /etc/vsftpd/chroot_list
按i進(jìn)入編輯模式。
輸入例外用戶名單。此名單中的用戶不會被鎖定在主目錄,可以訪問其他目錄。
重要沒有例外用戶時(shí),也必須創(chuàng)建chroot_list文件,內(nèi)容可為空。
按Esc退出編輯模式,然后輸入
:wq
并回車,保存退出文件。
運(yùn)行以下命令,關(guān)閉防火墻。
sudo systemctl stop firewalld
修改配置文件。
運(yùn)行以下命令,打開/etc/ssh/sshd_config文件。
sudo vi /etc/ssh/sshd_config
在文件尾行將
PasswordAuthentication
的值改為yes
。修改完成后,按
Esc
,輸入:wq!
,并按Enter
,保存修改后的配置文件并退出編輯模式。
運(yùn)行以下命令,重啟FTP服務(wù)。
sudo systemctl restart vsftpd.service
匿名訪問模式
運(yùn)行以下命令,修改配置文件/etc/vsftpd/vsftpd.conf。
如果您在安裝vsftpd時(shí),使用的是apt install vsftpd安裝命令,則配置文件路徑為/etc/vsftpd.conf。
sudo vim /etc/vsftpd/vsftpd.conf
按i進(jìn)入編輯模式。
分別找到匿名模式(
anonymous_enable
)以及匿名上傳權(quán)限(anon_upload_enable
),并確認(rèn)已修改為開啟狀態(tài)。不同操作系統(tǒng)版本中,默認(rèn)的配置文件信息可能有所不同,您需要保證修改后的參數(shù)配置,如下所示:
anonymous_enable=YES anon_upload_enable=YES listen=YES listen_ipv6=NO
在文件的末尾,新增以下參數(shù)。
重要復(fù)制以下參數(shù),然后粘貼至Linux服務(wù)器的配置文件時(shí),請注意參數(shù)不要被
#
號注釋掉。同時(shí),請注意格式問題。例如,添加多余的空格會造成無法重啟服務(wù)的結(jié)果。#開啟被動模式。 pasv_enable=YES #設(shè)置被動模式下,建立數(shù)據(jù)傳輸可使用的端口范圍的最小值。 #建議您把端口范圍設(shè)置在一段比較高的范圍內(nèi),例如50000~50010,有助于提高訪問FTP服務(wù)器的安全性。 pasv_min_port=50000 #設(shè)置被動模式下,建立數(shù)據(jù)傳輸可使用的端口范圍的最大值。 pasv_max_port=50010 #輕量應(yīng)用服務(wù)器的公網(wǎng)IP地址 pasv_address=39.105.xx.xx
按Esc退出編輯模式,然后輸入
:wq
并回車,保存退出文件。運(yùn)行以下命令,更改/var/ftp/pub目錄的權(quán)限,為FTP用戶添加寫權(quán)限。
/var/ftp/pub為FTP服務(wù)默認(rèn)的文件目錄。
sudo chmod o+w /var/ftp/pub/
運(yùn)行以下命令,重啟FTP服務(wù)。
sudo systemctl restart vsftpd.service
步驟四:配置Linux服務(wù)器的防火墻
搭建好FTP站點(diǎn)后,在Linux服務(wù)器的防火墻中,需要放行下列FTP端口。具體操作,請參見添加防火墻規(guī)則。
被動模式需開放21端口,以及配置文件/etc/vsftpd/vsftpd.conf中參數(shù)pasv_min_port
和pasv_max_port
之間的所有端口。配置詳情如下表所示。
應(yīng)用類型 | 協(xié)議 | 端口范圍 |
FTP | TCP | 21 |
自定義 | TCP |
|
配置完成后,如下圖所示:
步驟五:通過FTP客戶端測試連接FTP服務(wù)器
打開FileZilla客戶端。
在頂部菜單欄,選擇
。在站點(diǎn)管理器對話框的左下角,單擊新站點(diǎn)(N)。
輸入新站點(diǎn)的名稱,并完成站點(diǎn)配置。
說明以下界面為3.64.0版本的FileZilla,其他版本的FileZilla界面可能有所不同。
具體的配置項(xiàng)說明如下:
新站點(diǎn)名稱:您自定義的站點(diǎn)名稱。例如
test-01
。協(xié)議:FTP-文件傳輸協(xié)議。
主機(jī):FTP服務(wù)器公網(wǎng)IP地址。本文中為Linux實(shí)例的公網(wǎng)IP地址,例如
121.43.XX.XX
。端口:21。
登錄類型:匿名。
本示例中使用FTP客戶端連接匿名模式的FTP服務(wù)器。如果您需要使用FTP用戶密碼連接FTP服務(wù)器,則登錄類型需要設(shè)置為正常,并需要配置用戶和密碼信息。
單擊連接。
連接成功后,您可以對文件進(jìn)行上傳、下載和刪除等操作。FileZilla工具界面如下圖所示。圖中各區(qū)域的信息說明如下表所示。
序號
說明
①
顯示命令、FTP連接狀態(tài)和任務(wù)執(zhí)行結(jié)果。
②
本地區(qū)域,顯示本地主機(jī)的目錄信息。
③
遠(yuǎn)程區(qū)域,顯示FTP服務(wù)器的目錄信息。匿名模式下,默認(rèn)目錄為/pub。
④
記錄區(qū)域,可查看FTP任務(wù)的隊(duì)列信息和日志信息。
vsftp配置文件及參數(shù)說明
/etc/vsftpd
目錄下文件說明如下:
/etc/vsftpd/vsftpd.conf
是vsftpd的核心配置文件。/etc/vsftpd/ftpusers
是黑名單文件,此文件中的用戶不允許訪問FTP服務(wù)器。/etc/vsftpd/user_list
是白名單文件,此文件中的用戶允許訪問FTP服務(wù)器。
vsftpd.conf
配置文件參數(shù)說明如下:
用戶登錄控制參數(shù)說明如下表所示。
參數(shù)
說明
anonymous_enable=YES
接受匿名用戶
no_anon_password=YES
匿名用戶login時(shí)不詢問口令
anon_root=(none)
匿名用戶主目錄
local_enable=YES
接受本地用戶
local_root=(none)
本地用戶主目錄
用戶權(quán)限控制參數(shù)說明如下表所示。
參數(shù)
說明
write_enable=YES
可以上傳文件(全局控制)
local_umask=022
本地用戶上傳的文件權(quán)限
file_open_mode=0666
上傳文件的權(quán)限配合umask使用
anon_upload_enable=NO
匿名用戶可以上傳文件
anon_mkdir_write_enable=NO
匿名用戶可以建目錄
anon_other_write_enable=NO
匿名用戶修改刪除
chown_username=lightwiter
匿名上傳文件所屬用戶名