一.FTP协议--文件传输协议
1.了解FTP协议
(1)FTP服务是用来传输文件的协议
FTP(File Transfer Protocol,文件传输协议)是TCP/IP协议组中的协议之一,用于互联网上的控制文件的双向传输。是传输文件到Linux服务器的工具。
常用的传输文件到Linux服务器的工具有以下几种:
vsftp(FTP)、sftp(SSH)、samba(CIFS)、winscp、lrzsz(sz传出、rz传入)
(2)FTP服务器默认使用TCP协议的20、21端口与客户端进行通信
20端口用于建立数据连接,并传输文件数据
21端口用于建立控制连接,并传输FTP控制命令
(3)FTP数据连接分为主动模式和被动模式
主动模式:FTP服务端接收下载控制命令后,会主动从tcp/20号端口发送数据传输给客户端
主动模式:客户端给服务端的21控制端口发命令说,我要下载什么什么,并且还会说我已经打开了自己的某个端口,你就从这里把东西给我吧,服务器知道后就会连接客户端已打开的那个数据端口把东西传给客户端,这就是主动模式,可理解为服务端主动给客户端传输文件。
被动模式:FTP服务端接收下载控制命令后,会开启一个空闲端口被动等待客户端数据传输连接
被动模式:客户端给服务器端的21端口发命令说,我要下载什么什么,服务端知道后,就打开一个空闲的端口,然后告诉客户端,我已经打开了某某端口,你自己进去拿吧。于是客户端就从那个端口进去拿文件了,这就是被动模式,可理解为服务端被客户端拿走了东西。
2.FTP工具的安装
(1)vsftp 的安装
[root@192 ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@192 ~]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
devtmpfs                 1913552       0  1913552    0% /dev
tmpfs                    1930628       0  1930628    0% /dev/shm
tmpfs                    1930628   12820  1917808    1% /run
tmpfs                    1930628       0  1930628    0% /sys/fs/cgroup
/dev/mapper/centos-root 37202180 4526604 32675576   13% /
/dev/sda1                 520868  184528   336340   36% /boot
tmpfs                     386128      64   386064    1% /run/user/0
/dev/sr0                 4635056 4635056        0  100% /mnt
[root@192 ~]# cd /mnt/Packages/
[root@192 Packages]# ls | grep vsftp
vsftpd-3.0.2-29.el7_9.x86_64.rpm
[root@192 Packages]# rpm -ivh vsftpd-3.0.2-29.el7_9.x86_64.rpm
警告:vsftpd-3.0.2-29.el7_9.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...1:vsftpd-3.0.2-29.el7_9            ################################# [100%]
(2)vsftp 文件存放的位置
[root@192 Packages]# rpm -qpc vsftpd-3.0.2-29.el7_9.x86_64.rpm
警告:vsftpd-3.0.2-29.el7_9.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
[root@192 Packages]# cd /etc/vsftpd/
[root@192 vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh(3)vsftp 服务的配置文件
                   #vsftpd.conf文件中基本配置的含义 
anonymous_enable=YES    #默认允许匿名用户登录local_enable=YES        #允许本地用户登录write_enable=YES        #是否开放ftp写的权限local_umask=022         #本地用户上传的文件的默认权限值anon_upload_enable=YES  #允许匿名用户上传文件anon_mkdir_write_enable=YES   #允许用户上传和创建目录anon_other_write_enable=YES   #允许用户其他的写入操作:删除、重命名和覆盖(4)修改配置文件的操作

之后重启 vsftp 服务即可
[root@192 vsftpd]# systemctl start vsftpd
[root@192 vsftpd]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
[root@192 vsftpd]# netstat -lntp | grep vsftpd         #查看软件使用的端口号tcp6       0      0 :::21                   :::*                    LISTEN      12473/vsftpd (5)验证 vsftpd 的使用-win10为例
【1】要先将win10的网络设置为服务端一样的NAT模式

【2】尝试是否连接和连接操作
C:\Users\liu>ping 192.168.10.10             #查看是否能接收到主机的IP正在 Ping 192.168.10.10 具有 32 字节的数据:
来自 192.168.10.10 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.10 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.10.10 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.10.10 的回复: 字节=32 时间=1ms TTL=64192.168.10.10 的 Ping 统计信息:数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):最短 = 0ms,最长 = 1ms,平均 = 0msC:\Users\liu>ftp 192.168.10.10          #连接到主机
连接到 192.168.10.10。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.10.10:(none)): ftp         #设置用户类型
331 Please specify the password.  
密码:                                   #创建密码
230 Login successful.
ftp> pwd                                #查看当前位置
257 "/"                    #‘/’目录即为在vsftpd.conf文件内设置的目录/var/ftp/
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
pub
test1
226 Directory send OK.
ftp: 收到 15 字节,用时 0.00秒 15000.00千字节/秒。(6)FTP的一些常用命令
                #ftp 的一些常用指令
ftp> pwd                #查看当前的位置
ftp> ls                #查看当前目录的信息
ftp> cd pub            #切换到pub 目录
ftp> get 文件名        #下载文件到本地目录
ftp> put 文件名        #上传文件到主机ftp目录
ftp> quit             #退出【1】get 命令 下载主机文件到目录
ftp> get lxp.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for lxp.txt (15 bytes).
226 Transfer complete.
ftp: 收到 15 字节,用时 0.00秒 15000.00千字节/秒。
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
lxp.txt
pub
test1
226 Directory send OK.
ftp: 收到 24 字节,用时 0.02秒 1.50千字节/秒。
ftp>【3】cd 命令 切换目录

(7)关闭匿名用户登录

C:\Users\liu\Desktop>ftp 192.168.10.10   
连接到 192.168.10.10。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.10.10:(none)): ftp      #匿名用户登录失败
331 Please specify the password.
密码:
530 Login incorrect.
登录失败。
ftp> quit
221 Goodbye.C:\Users\liu\Desktop>ftp 192.168.10.10
连接到 192.168.10.10。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.10.10:(none)): zhangsan    #非匿名用户登录成功
331 Please specify the password.
密码:
230 Login successful.
ftp>3.图形化界面登录FTP

4.设置黑名单和白名单
userlist_enable=YES     #启用用户列表
进入到文件 vsftpd.conf 中,到最底部加入下图的配置,黑名单和白名单的用户列表在 user_list 文件中,
若是想要 user_list 文件成为黑名单,进入到文件 vsftpd.conf 中添加userlist_enable=YES
若是想要 user_list 文件成为白名单,进入到文件 vsftpd.conf 中添加userlist_enable=NO

拓展:其他配置文件含义
listen_port=2121 #设置监控端口
max_clients=100 #最大连接数
max_per_ip=5 #每个IP的最大连接数
五 .总结:
1.FTP协议采用的是TCP作为传输协议,21号端口用来传输FTP控制命令的,20号端口用来传输文件数据的
2.了解FTP的传输模式:主动模式和被动模式
3.知道黑白名单的设置,黑名单,是名单上的用户被拒绝访问。白名单是只有名单上的用户才可以进行访问
