- 文件傳輸協議(File Transfer Protocol,FTP),基于該協議FTP客戶端與服務端可以實現共享文件、上傳文件、下載文件。 FTP 基于TCP協議生成一個虛拟的連接,主要用于控制FTP連接信息,同時再生成一個單獨的TCP連接用于FTP數據傳輸。用戶可以通過客戶端向FTP服務器端上傳、下載、删除文件,FTP服務器端可以同時提供給多人共享使用。
- FTP服務是Client/Server(簡稱C/S)模式,基于FTP協議實現FTP文件對外共享及傳輸的軟件稱之為FTP服務器源端,客戶端程序基于FTP協議,則稱之為FTP客戶端,FTP客戶端可以向FTP服務器上傳、下載文件。
FTP Server
作用:提供文件共享服務,實現上傳下載
端口:
21号,建立tcp連接 默認端口
20号:傳輸數據
一、FTP基礎
軟件包: vsftpd
FTP端口: 控制端口 command 21/tcp
配置文件: /etc/vsftpd/vsftpd.conf
ftp主動模式
ftp主動模式:客戶端開啟一個端口N(>1023)向服務端的21端口,建立連接,同時開啟一個N 1,告訴服務端,我監聽的是N 1端口,服務端接到請求之後,用自己的20端口連接到客戶端的N 1端口,進行傳輸
21端口建立連接
20端口傳輸數據
ftp被動模式
ftp被動模式:客戶端同時開啟兩個端口(1024,1025),一個端口(1024)跟服務端的21端口建立連接,并請求,大哥,我連上了,你再開一個端口呗。服務端接到請求之後,随機會開啟一個端口(1027)并告訴客戶端我開啟的是1027端口,客戶端用另一個端口(1025)與服務端的(1027)端口進行連接,傳輸數據
- 非常安全的FTP服務進程(Very Secure FTP daemon,Vsftpd),Vsftpd在Unix/Linux發行版中最主流的FTP服務器程序,優點小巧輕快,安全易用、穩定高效、滿足企業跨部門、多用戶的使用(1000用戶)等。
二、vsftpd配置
FTP Server(服務端)
實驗環境--準備兩台機器
關閉防火牆和selinux
#systemctl stop firewalld
#systemctl disable firewalld
#setenforce 0
=========================================
ftp-server 192.168.246.160
client 192.168.246.161
==========================================
[root@ftp-server ~]# yum install -y vsftpd
[root@ftp-server ~]# systemctl start vsftpd
FTP默認共享目錄:/var/ftp
[root@ftp-server ~]# touch /var/ftp/pub/test.txt #創建文件到共享目錄
[root@ftp-server ~]# systemctl enable vsftpd
[root@ftp-server ~]# cd /var/ftp/
[root@ftp-server ftp]# ls
pub
[root@ftp-server ftp]# chown ftp.ftp pub/ -R #修改根目錄的屬主與屬組
[root@ftp-server ftp]# ll
total 0
drwxr-xr-x. 2 ftp ftp 22 Aug 3 03:15 pub
- 重點:改變根目錄的屬主,如果不改變的話,隻能訪問,其他權限不能生效。因為我們是以ftp用戶的身份訪問的,而pub默認的屬主屬組是root。
- 注意:- 修改完配置之後需要重啟完服務才能生效- 還需要從新從客戶端登陸,否則修改後的配置看不到效果。
[root@ftp-server ~]# vi /etc/vsftpd/vsftpd.conf ----找到29行将下面的注釋取消
34 anon_other_write_enable=YES
[root@ftp-server ~]# systemctl restart vsftpd
FTP Clinet(客戶端)
關閉防火牆和selinux
[root@client ~]# yum -y install lftp #安裝客戶端
get命令(下載,首先要開啟下載功能)
[root@client ~]# lftp 192.168.246.160
lftp 192.168.246.160:~> ls
drwxr-xr-x 2 0 0 6 Oct 30 2018 pub
lftp 192.168.246.160:/> cd pub/
lftp 192.168.246.160:/pub> ls
-rw-r--r-- 1 14 50 0 Aug 02 19:14 test.txt
lftp 192.168.246.160:/pub> get test.txt #下載
lftp 192.168.246.160:/pub> exit
[root@client ~]# ls #會下載到當前目錄
anaconda-ks.cfg test.txt
[root@client ~]# lftp 192.168.246.160
lftp 192.168.246.160:/pub> mkdir dir #也可以創建目錄
mkdir ok, `dir' created
put命令(上傳命令,上傳之前請在服務端進行配置,将上傳功能打開)
[root@client ~]# touch upload.txt #創建測試文件
[root@client ~]# mkdir /test/ #創建測試目錄
[root@client ~]# touch /test/test1.txt #在測試目錄下面創建測試文件
[root@client ~]# lftp 192.168.246.160
lftp 192.168.246.160:~> cd pub/
lftp 192.168.246.160:/pub> put /root/upload.txt #上傳文件
lftp 192.168.246.160:/pub> ls
-rw------- 1 14 50 0 Nov 16 12:14 upload.txt
drwx------ 2 14 50 6 Aug 02 19:17 dir
lftp 192.168.246.160:/pub> mirror -R /test/ #上傳目錄以及目錄中的子文件
Total: 1 directory, 1 file, 0 symlinks
New: 1 file, 0 symlinks
lftp 192.168.246.160:/pub> ls
drwx------ 2 14 50 23 Nov 16 12:18 test
-rw------- 1 14 50 0 Nov 16 12:14 upload.txt
mirror 下載目錄