FTP是File Transfer Protocol(文件傳輸協(xié)議),用來進(jìn)行服務(wù)器和客戶端之間文件傳輸?shù)膮f(xié)議。非常常用的服務(wù),應(yīng)用場(chǎng)景主要在設(shè)備間文件共享,服務(wù)程序發(fā)布,日志文件管理等方面。這里我在ubuntu環(huán)境下安裝和測(cè)試ftp的幾個(gè)服務(wù)。
FTP分類
FTP
FTP是基于TCP的傳輸,并且FTP采用雙TCP連接方式。
支持用戶登錄認(rèn)證和目錄列出。
控制連接使用TCP端口號(hào)21;用于在FTP客戶端和FTP服務(wù)器之間傳輸FTP控制命令及命令執(zhí)行信息。
數(shù)據(jù)連接使用TCP端口號(hào)不是確定的,需要根據(jù)使用的數(shù)據(jù)傳輸模式確定,主動(dòng)模式下端口號(hào)是20,被動(dòng)模式下隨機(jī)。
SFTP
SFTP(SSH File Transfer Protocol)是一種基于SSH的安全的文件傳輸協(xié)議,SSH前面有詳細(xì)介紹這里不再贅述。
TFTP
簡(jiǎn)單文件傳輸協(xié)議(Trivial File Transfer Protocol,TFTP)是 TCP/IP 協(xié)議族中一種簡(jiǎn)單的文件傳輸協(xié)議,用來在客戶端與服務(wù)器之間進(jìn)行文件傳輸。
TFTP 基于UDP協(xié)議進(jìn)行文件傳輸。與FTP協(xié)議不同的是,TFTP 傳輸文件時(shí)不需要用戶進(jìn)行登錄。它只能從文件服務(wù)器上下載或上傳文件,不能列出目錄。
TFTP在嵌入式系統(tǒng)中傳輸文件使用比較多,因?yàn)閡-boot本身就支持這個(gè)協(xié)議傳輸文件,可以用來進(jìn)行目標(biāo)機(jī)程序下載。
Ubuntu 安裝FTP服務(wù)
安裝vsftps服務(wù)
ubuntu@ubuntu-virtual-machine:~$ sudo apt install vsftpd
配置文件 /etc/vsftpd.conf
這里直接粘貼一個(gè)可以使用的ftp配置文件全文內(nèi)容,也是來源于網(wǎng)上的教程,但是我也是使用的這個(gè)配置文件,所以確保是可以使用的。
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=NO
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
防火墻配置
前面說到了ftp服務(wù)將使用20和21兩個(gè)網(wǎng)絡(luò)端口,所以避免防火墻限制,我們?cè)O(shè)置一下防火墻。
ubuntu@ubuntu-virtual-machine:~$ sudo ufw allow 20:21/tcp
防火墻規(guī)則已更新
規(guī)則已更新(v6)
ubuntu@ubuntu-virtual-machine:~$ sudo ufw allow 30000:31000/tcp
防火墻規(guī)則已更新
規(guī)則已更新(v6)
ubuntu@ubuntu-virtual-machine:~$ sudo ufw disable
防火墻在系統(tǒng)啟動(dòng)時(shí)自動(dòng)禁用
ubuntu@ubuntu-virtual-machine:~$ sudo ufw enable
此命令可能會(huì)中斷目前的 ssh 連接。要繼續(xù)嗎 (y|n)? y
在系統(tǒng)啟動(dòng)時(shí)啟用和激活防火墻
ubuntu@ubuntu-virtual-machine:~$
創(chuàng)建ftp登錄賬戶
我們?yōu)閒tp服務(wù)器創(chuàng)建單獨(dú)的賬戶,這個(gè)對(duì)于中大型的網(wǎng)絡(luò)環(huán)境安全是必須的,同時(shí)設(shè)置此賬戶只能用來訪問ftp服務(wù)。
ubuntu@ubuntu-virtual-machine:~$ sudo adduser ftpuser1
正在添加用戶"ftpuser1"...
正在添加新組"ftpuser1" (1002)...
正在添加新用戶"ftpuser1" (1002) 到組"ftpuser1"...
創(chuàng)建主目錄"/home/ftpuser1"...
正在從"/etc/skel"復(fù)制文件...
新的 密碼:
重新輸入新的 密碼:
passwd:已成功更新密碼
正在改變 ftpuser1 的用戶信息
請(qǐng)輸入新值,或直接敲回車鍵以使用默認(rèn)值
全名 []: ftpuser1
房間號(hào)碼 []:
工作電話 []:
家庭電話 []:
其它 []:
這些信息是否正確? [Y/n] y
ubuntu@ubuntu-virtual-machine:~$ echo "ftpuser1" | sudo tee -a /etc/vsftpd.user_list
ftpuser1
ubuntu@ubuntu-virtual-machine:~$ cat /etc/vsftpd.user_list
ftpuser1
ubuntu@ubuntu-virtual-machine:~$ sudo mkdir -p /home/ftpuser1/ftp/upload
ubuntu@ubuntu-virtual-machine:~$ sudo chmod 550 /home/ftpuser1/ftp
ubuntu@ubuntu-virtual-machine:~$ sudo chmod 750 /home/ftpuser1/ftp/upload
ubuntu@ubuntu-virtual-machine:~$ sudo chown -R ftpuser1: /home/ftpuser1/ftp
ubuntu@ubuntu-virtual-machine:~$ echo -e '#!/bin/shnecho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly
ubuntu@ubuntu-virtual-machine:~$ sudo chmod a+x /bin/ftponly
ubuntu@ubuntu-virtual-machine:~$ echo "/bin/ftponly" | sudo tee -a /etc/shells
ubuntu@ubuntu-virtual-machine:~$ sudo usermod ftpuser1 -s /bin/ftponly
至此ubuntu下ftp服務(wù)安裝完成,我們可以使用systemctl 命令看一下服務(wù)運(yùn)行是否正確
ubuntu@ubuntu-virtual-machine:~$ sudo systemctl status vsftpd.service
● vsftpd.service - vsftpd FTP server
Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2022-06-26 19:03:52 CST; 16min ago
Process: 1047 ExecStartPre=/bin/mkdir -p /var/run/vsftpd/empty (code=exited, status=0/SUCC> Main PID: 1053 (vsftpd)
Tasks: 1 (limit: 4578)
Memory: 772.0K
CGroup: /system.slice/vsftpd.service
└─1053 /usr/sbin/vsftpd /etc/vsftpd.conf
6月 26 19:03:51 ubuntu-virtual-machine systemd[1]: Starting vsftpd FTP server...
6月 26 19:03:52 ubuntu-virtual-machine systemd[1]: Started vsftpd FTP server.
lines 1-12/12 (END)
windows FTP客戶端使用
我們?cè)赪indows下使用一個(gè)ftp客戶端訪問ubuntu的ftp測(cè)試安裝是否正確,這里我使用的是filezilla的ftp客戶端軟件。
可以訪問官網(wǎng)下載:FileZilla中文網(wǎng) - 免費(fèi)開源的FTP解決方案
這里簡(jiǎn)單介紹一下使用方法,打開filezilla軟件以后,左上角有一個(gè)站點(diǎn)管理按鈕,點(diǎn)擊并參考下面的設(shè)置新建一個(gè)站點(diǎn)。
ftp 站點(diǎn)
新建站點(diǎn)以后點(diǎn)擊連接,會(huì)提示輸入密碼,按照創(chuàng)建ftp登錄用戶時(shí)創(chuàng)建的密碼輸入即可登錄。
ftp 登錄
可以看到ftp登錄成功,左側(cè)顯示本機(jī)Windows的文件目錄,右側(cè)顯示ubuntu服務(wù)器制定的ftp目錄,兩邊的文件夾可以相互進(jìn)行文件傳輸,傳輸過程和狀態(tài)將在filezilla軟件下方顯示。
Windows SFTP客戶端使用
現(xiàn)在一般使用ftp服務(wù)的比較少,使用SFTP的更多,因?yàn)镾FTP確實(shí)也比較方便不需要單獨(dú)進(jìn)行服務(wù)配置,只要支持SSH登錄一般就可以使用SFTP。
filezilla也支持使用SFTP登錄服務(wù)器,非常簡(jiǎn)單,知識(shí)在創(chuàng)建站點(diǎn)的時(shí)候協(xié)議選擇稍微修改一下就可以了。
sftp 站點(diǎn)
點(diǎn)擊連接輸入密碼即可連接成功。
sftp 登錄
文末
如果沒有特殊要求建議首選SFTP。
還有一個(gè)TFTP在后面繼續(xù)介紹,因?yàn)檫@個(gè)服務(wù)涉及一些不同的命令。