目录
编辑1.3.2 被动模式(PASV):服务器被动等待数据连接
1. FTP服务介绍
1.1 FTP简介
- FTP是File Transfer Protocol(文件传输协议)的英文简称,
用来传输文件的协议
,用于Internet上的文件双向传输。使用FTP来传输时,是具有一定程度的危险性, 因为数据在因特网上面是完全没有受到保护的明文传输方式 - VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP,从名称定义上基本可以看出,这是为了解决ftp传输安全性问题的。
1.2 FTP端口
- FTP服务器默认使用
TCP协议
的20、21端口
与客户端进行通信
20端口用于建立数据连接,并传输文件数据
21端口用于建立控制连接,并传输FTP控制命令
1.3 FTP两种模式
1.3.1 主动模式(PORT):服务器主动发起数据连接
- 工作的原理
FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据。
1.3.2 被动模式(PASV):服务器被动等待数据连接
- 工作原理
FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输。
2. FTP服务配置
2.1 FTP服务程序
- 服务端安装 vsftpd 软件包,vsftpd是“very secure FTP daemon”的缩写,是一个完全免费的、开放源代码的ftp服务器软件。
- 客户端安装FTP程序,安装后才能使用ftp命令。
- VSFTP软件信息
服务端软件名:vsftpd
客户端软件名:ftp
服务名:vsftpd
端口号:20、21、指定范围内随机端口
配置文件:/etc/vsftpd/vsftpd.conf
2.2vsftpd 软件配置文件详解
- 主要配置文件:/etc/vsftpd/vsftpd.conf
- 使用rpm -qc vsftpd 可查看配置文件地址
`anonymous_enable=YES` //支持匿名用户访问(CentOS8 默认不允许匿名);
#no_anon_password=YES //匿名用户login时不询问口令。如果希望不询问口令,需要自己添加
`#anon_upload_enable=YES` //是否允许上传文件,注意:文件系统权限。默认是被注释的。
anon_mkdir_write_enable=YES //允许匿名用户新建目录
`local_enable=YES` //启用本地系统用户访问;
`write_enable=YES` //本地系统用户写入权限;
local_umask=022 //本地用户创建文件及目录默认权限掩码;
dirmessage_enable=YES //打印目录显示信息,通常用于用户第一次访问目录时,信息提示;
xferlog_enable=YES //启用上传和下载日志记录;
connect_from_port_20=YES //FTP使用20端口进行数据传输;
xferlog_std_format=YES //日志文件将根据xferlog的标准格式写入;
listen=NO //Vsftpd不以独立的服务启动,通过Xinetd服务管理,建议改成YES;
listen_ipv6=YES //启用IPV6监听;
pam_service_name=vsftpd //登录FTP服务器,依据/etc/pam.d/vsftpd中内容进行认证;
userlist_enable=YES //vsftpd.user_list和ftpusers配置文件里用户禁止访问FTP;
tcp_wrappers=YES //设置vsftpd与tcp wrapper结合进行主机的访问控制,Vsftpd服务器检查/etc/hosts.allow 和/etc/hosts.deny中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。
2.3 实验配置
2.3.1 服务配置准备工作
- 实验机器
- 服务端 IP:192.168.200.102
- 客户端 IP:192.168.200.100
- 关闭防火墙
[root@localhost ~]#systemctl stop firewalld
- 关闭核心防护
[root@localhost ~]#setenforce 0
- 挂载光盘
[root@localhost ~]#mount /dev/sr0 /mnt/
- 下载vsftpd服务
[root@localhost ~]#yum -y install vsftpd
[root@localhost ~]#rpm -qa | grep vsftpd
vsftpd-3.0.2-22.el7.x86_64
2.3.2 实验一(匿名访问)
- 实验内容
- 使用匿名访问登录到服务端进行操作
- 修改配置文件
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost ~]# cp vsftpd.conf vsftpd.conf.bak
设置匿名用户访问的FTP服务(最大权限)
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES #开启匿名用户访问。默认已开启
write_enable=YES #开放服务器的写权限(若要上传,必须开启)。默认已开启
anon_umask=022 #设置匿名用户所上传数据的权限掩码(反掩码)。
anon_upload_enable=YES #允许匿名用户上传文件。默认已注释,需取消注释
anon_mkdir_write_enable=YES #允许匿名用户创建(上传)目录。默认已注释,需取消注释
anon_other_write_enable =YES #允许删除、重命名、覆盖等操作。需添加
[root@localhost ~]# systemctl restart vsftpd ##重启服务
复制代码
- 为匿名访问ftp的根目录下的 pub子目录设置最大权限,以便匿名用户上传数据(
虽然在服务上给了写的功能,但在机器上也要给其他用户可以写入的权限
)
[root@localhost ~]# chmod 777 /var/ftp/pub/
- 匿名访问测试
在Windows文件目录搜索框输入:ftp://192.168.200.102/
也可以使用浏览器和cmd命令行
- 建立ftp连接
ftp://192.168.80.10 #匿名访问ftp的根目录为Linux系统的/var/ftp/目录
点击进入pub目录,复制文件1.txt到pub目录
在服务器中可以查看
2.3.2 实验一(白名单访问)
- 实验内容
- 设置本地用户验证访问ftp,并禁止切换到ftp以外的目录(
默认登录的根目录为本地用户的家目录
)
- 设置本地用户验证访问ftp,并禁止切换到ftp以外的目录(
- 修改配置文件
- 本地用户登录
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
local_enable=Yes #启用本地用户
anonymous_enable=NO #关闭匿名用户访问
write_enable=YES #开放服务器的写权限(若要上传,必须开启)
local_umask=077 #可设置仅宿主用户拥有被上传的文件的权限(反掩码)
chroot_local_user=YES #将访问禁锢在用户的宿主目录中
allow_writeable_chroot=YES #允许被限制的用户主目录具有写权限
复制代码
修改匿名用户、本地用户登录的默认根目录 ##可选择配置
anon_root=/opt/ky22 #anon_root 针对匿名用户
local_root=/opt/ky22 #local_root 针对系统用户
- 设置白名单登录
使用user_list 用户列表文件
[root@localhost ~]#vim /etc/vsftpd/user_list
//末尾添加yh用户
yh
[root@localhost ~]#vim /etc/vsftpd/vsftpd.conf
userlist_enable=YES #启用user_list用户列表文件
userlist_deny=NO #设置白名单,仅允许user_list用户列表文件的用户访问。默认为YES,为黑名单,禁用
[root@localhost ~]# systemctl restart vsftpd ##重启服务
- 白名单用户登录
ftp://192.168.200.102/
或
ftp://yh@192.168.200.102/
点击进入本地用户家目录,复制文件1.txt到本地用户家目录
在服务器中可以查看yh用户家目录