FTP是File Transfer Protocol(文件傳輸協議),用來進行服務器和客戶端之間文件傳輸的協議。非常常用的服務,應用場景主要在設備間文件共享,服務程序發布,日志文件管理等方面。這里我在ubuntu環境下安裝和測試ftp的幾個服務。
FTP分類
FTP
FTP是基于TCP的傳輸,并且FTP采用雙TCP連接方式。
支持用戶登錄認證和目錄列出。
控制連接使用TCP端口號21;用于在FTP客戶端和FTP服務器之間傳輸FTP控制命令及命令執行信息。
數據連接使用TCP端口號不是確定的,需要根據使用的數據傳輸模式確定,主動模式下端口號是20,被動模式下隨機。
SFTP
SFTP(SSH File Transfer Protocol)是一種基于SSH的安全的文件傳輸協議,SSH前面有詳細介紹這里不再贅述。
TFTP
簡單文件傳輸協議(Trivial File Transfer Protocol,TFTP)是 TCP/IP 協議族中一種簡單的文件傳輸協議,用來在客戶端與服務器之間進行文件傳輸。
TFTP 基于UDP協議進行文件傳輸。與FTP協議不同的是,TFTP 傳輸文件時不需要用戶進行登錄。它只能從文件服務器上下載或上傳文件,不能列出目錄。
TFTP在嵌入式系統中傳輸文件使用比較多,因為u-boot本身就支持這個協議傳輸文件,可以用來進行目標機程序下載。
Ubuntu 安裝FTP服務
安裝vsftps服務
ubuntu@ubuntu-virtual-machine:~$ sudo apt install vsftpd
配置文件 /etc/vsftpd.conf
這里直接粘貼一個可以使用的ftp配置文件全文內容,也是來源于網上的教程,但是我也是使用的這個配置文件,所以確保是可以使用的。
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服務將使用20和21兩個網絡端口,所以避免防火墻限制,我們設置一下防火墻。
ubuntu@ubuntu-virtual-machine:~$ sudo ufw allow 20:21/tcp
防火墻規則已更新
規則已更新(v6)
ubuntu@ubuntu-virtual-machine:~$ sudo ufw allow 30000:31000/tcp
防火墻規則已更新
規則已更新(v6)
ubuntu@ubuntu-virtual-machine:~$ sudo ufw disable
防火墻在系統啟動時自動禁用
ubuntu@ubuntu-virtual-machine:~$ sudo ufw enable
此命令可能會中斷目前的 ssh 連接。要繼續嗎 (y|n)? y
在系統啟動時啟用和激活防火墻
ubuntu@ubuntu-virtual-machine:~$
創建ftp登錄賬戶
我們為ftp服務器創建單獨的賬戶,這個對于中大型的網絡環境安全是必須的,同時設置此賬戶只能用來訪問ftp服務。
ubuntu@ubuntu-virtual-machine:~$ sudo adduser ftpuser1
正在添加用戶"ftpuser1"...
正在添加新組"ftpuser1" (1002)...
正在添加新用戶"ftpuser1" (1002) 到組"ftpuser1"...
創建主目錄"/home/ftpuser1"...
正在從"/etc/skel"復制文件...
新的 密碼:
重新輸入新的 密碼:
passwd:已成功更新密碼
正在改變 ftpuser1 的用戶信息
請輸入新值,或直接敲回車鍵以使用默認值
全名 []: ftpuser1
房間號碼 []:
工作電話 []:
家庭電話 []:
其它 []:
這些信息是否正確? [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服務安裝完成,我們可以使用systemctl 命令看一下服務運行是否正確
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客戶端使用
我們在Windows下使用一個ftp客戶端訪問ubuntu的ftp測試安裝是否正確,這里我使用的是filezilla的ftp客戶端軟件。
可以訪問官網下載:FileZilla中文網 - 免費開源的FTP解決方案
這里簡單介紹一下使用方法,打開filezilla軟件以后,左上角有一個站點管理按鈕,點擊并參考下面的設置新建一個站點。
ftp 站點
新建站點以后點擊連接,會提示輸入密碼,按照創建ftp登錄用戶時創建的密碼輸入即可登錄。
ftp 登錄
可以看到ftp登錄成功,左側顯示本機Windows的文件目錄,右側顯示ubuntu服務器制定的ftp目錄,兩邊的文件夾可以相互進行文件傳輸,傳輸過程和狀態將在filezilla軟件下方顯示。
Windows SFTP客戶端使用
現在一般使用ftp服務的比較少,使用SFTP的更多,因為SFTP確實也比較方便不需要單獨進行服務配置,只要支持SSH登錄一般就可以使用SFTP。
filezilla也支持使用SFTP登錄服務器,非常簡單,知識在創建站點的時候協議選擇稍微修改一下就可以了。
sftp 站點
點擊連接輸入密碼即可連接成功。
sftp 登錄
文末
如果沒有特殊要求建議首選SFTP。
還有一個TFTP在后面繼續介紹,因為這個服務涉及一些不同的命令。