介紹
FTP(File Transfer Protocol,文件傳輸協議) 是 TCP/IP 協議組中的協議之一。FTP協議包括兩個組成部分,其一為FTP服務器,其二為FTP客戶端。其中FTP服務器用來存儲文件,用戶可以使用FTP客戶端通過FTP協議訪問位於FTP服務器上的資源。在開發網站的時候,通常利用FTP協議把網頁或程序傳到Web服務器上。此外,由於FTP傳輸效率非常高,在網絡上傳輸大的文件時,一般也採用該協議。
默認情況下FTP協議使用TCP端口中的 20和21這兩個端口,其中20用於傳輸數據,21用於傳輸控制信息。但是,是否使用20作為傳輸數據的端口與FTP使用的傳輸模式有關,如果採用主動模式,那麼數據傳輸端口就是20;如果採用被動模式,則具體最終使用哪個端口要服務器端和客戶端協商決定。
同大多數Internet服務一樣,FTP也是一個客戶/服務器系統。用戶通過一個客戶機程序連接至在遠程計算機上運行的服務器程序。依照 FTP 協議提供服務,進行文件傳送的計算機就是 FTP服務器,而連接FTP服務器,遵循FTP協議與服務器傳送文件的電腦就是FTP客戶端。用戶要連上FTP 服務器,就要用到 FTP 的客戶端軟件,通常 Windows自帶“ftp”命令,這是一個命令行的 FTP客戶程序,另外常用的 FTP 客戶程序還有FileZilla、 CuteFTP、Ws_FTP、Flashfxp、LeapFTP、流星雨-貓眼等。
搭建過程
1.打開系統自帶的終端工具。
Windows:CMD或Powershell。
MAC:Terminal。
Windows用戶請檢查系統中是否安裝有ssh工具。檢查方法:
a. 在終端中輸入命令ssh -V。
b. 出現如下結果說明已安裝。
2.在終端中輸入連接命令 ssh [username]@[ipaddress]。將其中的 username 和 ipaddress 替換為雲產品資源提供的ECS服務器的 用戶和 彈性IP。
根據提示輸入密碼。
3.安裝vsftpd服務
使用 yum命令安裝,yum install -y vsftpd
4.設置ftp服務開機自啟
systemctl enable vsftpd.service
5.啟動ftp服務
systemctl start vsftpd.service
6.查看ftp監聽端口
netstat -antup | grep ftp
端口號默認為21,至此vsftpd默認開啟匿名登錄但無修改創建權限。
二、配置FTP服務
匿名用戶模式
- 修改配置文件vsftpd.conf。
vim /etc/vsftpd/vsftpd.conf
按 i 鍵進入編輯模式,將匿名上傳權限 anon_upload_enable=YES 的註釋解開
2.按ESC鍵退出編輯模式,輸入:wq 保存並退出vim。
3.更改/var/ftp/pub目錄的權限,為FTP用戶添加寫權限。
chmod o+w /var/ftp/pub/
4.重啟FTP服務。
systemctl restart vsftpd.service
本地用戶模式
1.為FTP服務創建一個Linux用戶。
adduser [username]
為用戶設置密碼。
passwd [userpassword]
2.創建一個供FTP服務使用的文件目錄。
mkdir /var/ftp/test
3.更改/var/ftp/test目錄的擁有者為ftptest。
chown -R ftptest:ftptest /var/ftp/test
4.修改vsftpd.conf配置文件。
配置FTP為主動模式請執行如下命令:
sed -i 's/anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd/vsftpd.conf #禁止匿名登錄FTP服務器
sed -i 's/listen=NO/listen=YES/' /etc/vsftpd/vsftpd.conf #監聽IPv4 sockets
sed -i 's/listen_ipv6=YES/#listen_ipv6=YES/' /etc/vsftpd/vsftpd.conf #關閉監聽IPv6 sockets
sed -i 's/#chroot_local_user=YES/chroot_local_user=YES/' /etc/vsftpd/vsftpd.conf #全部用戶被限制在主目錄
sed -i 's/#chroot_list_enable=YES/chroot_list_enable=YES/' /etc/vsftpd/vsftpd.conf #啟用例外用戶名單
sed -i 's/#chroot_list_file=/chroot_list_file=/' /etc/vsftpd/vsftpd.conf #指定例外用戶列表文件,列表中的用戶不被鎖定在主目錄
echo "allow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf
echo "local_root=/var/ftp/test" >> /etc/vsftpd/vsftpd.conf #設置本地用戶登錄後所在的目錄
配置FTP為被動模式請執行如下命令:
sed -i 's/anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd/vsftpd.conf #禁止匿名登錄FTP服務器
sed -i 's/listen=NO/listen=YES/' /etc/vsftpd/vsftpd.conf #監聽IPv4 sockets
sed -i 's/listen_ipv6=YES/#listen_ipv6=YES/' /etc/vsftpd/vsftpd.conf #關閉監聽IPv6 sockets
sed -i 's/#chroot_local_user=YES/chroot_local_user=YES/' /etc/vsftpd/vsftpd.conf #全部用戶被限制在主目錄
sed -i 's/#chroot_list_enable=YES/chroot_list_enable=YES/' /etc/vsftpd/vsftpd.conf #啟用例外用戶名單
sed -i 's/#chroot_list_file=/chroot_list_file=/' /etc/vsftpd/vsftpd.conf #指定例外用戶列表文件,列表中的用戶不被鎖定在主目錄
echo "allow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf
echo "local_root=/var/ftp/test" >> /etc/vsftpd/vsftpd.conf #設置本地用戶登錄後所在的目錄
echo "pasv_enable=YES" >> /etc/vsftpd/vsftpd.conf #開啟被動模式
echo "pasv_address=" >> /etc/vsftpd/vsftpd.conf #本教程中為ECS服務器彈性IP
echo "pasv_min_port=20" >> /etc/vsftpd/vsftpd.conf #設置被動模式下,建立數據傳輸可使用的端口範圍的最小值
echo "pasv_max_port=21" >> /etc/vsftpd/vsftpd.conf #設置被動模式下,建立數據傳輸可使用的端口範圍的最大值
5.在/etc/vsftpd目錄下創建chroot_list文件,並在文件中寫入例外用戶名單。
使用vim命令編輯chroot_list文件,添加例外用戶名單。此名單中的用戶不會被鎖定在主目錄,可以訪問其他目錄。
vim /etc/vsftpd/chroot_list
說明: 沒有例外用戶時,也必須創建chroot_list文件,內容可為空。
6.重啟FTP服務。
systemctl restart vsftpd.service
測試FTP服務
瀏覽器或資源管理器中地址欄輸入ftp://:FTP端口,輸入之前設置的賬號和密碼
若可以進行讀寫創建操作則證明服務啟用成功