centos7安装ftp

安装FTP软件包

在CentOS7中,采用yum来安装ftp软件包,包括ftp服务器和ftp客户端

查看是否已经安装了vsftpd

# 如果没有返回任何结果,表示没有安装;如果返回文件包名,这表示已经安装了该服务;
[root@centos7 ~]# rpm -qa|grep vsftpd
vsftpd-3.0.2-29.el7_9.x86_64               # 代表已安装
[root@centos7 ~]# vsftpd -version
vsftpd: version 3.0.2                      # 代表已安装
[root@centos7 ~]# rpm -e vsftpd            # 卸载vsftpd
# 再次检查
[root@centos7 ~]# rpm -qa|grep vsftpd
[root@centos7 ~]# vsftpd -version
bash: vsftpd: 未找到命令...

安装vsftpd

安装

yum install -y vsftpd

设置开机启动

systemctl enable vsftpd.service

启动服务

systemctl start  vsftpd.service
systemctl stop  vsftpd.service        # 停止服务
systemctl restart vsftpd.service      # 重启服务
systemctl status vsftpd.service       # 查看服务状态
systemctl enable vsftpd.service       # 设置开机自启动vsftpd服务
systemctl disable vsftpd.service      # 禁用开机自启动vsftpd服务

创建用户

如果我们直接使用useradd -d ftpuser,则新建的用户是可以登录系统的,这样会给FTP服务器带来安全隐患

因此我们为了不让FTP用户登录系统,就必须为FTP用户统一创建一个不能登录系统的shell,这一行的命令只运行一次即可,后面新建用户就不需要执行了

echo /usr/bin/nologin>>/etc/shells
# 新建用户组ftp
groupadd ftp
# 指定用户主目录:/data/ftp/ftpuser -M
# 指定用户的shell: -s /usr/bin/nologin
# 新建用户ftpuser,并且设置不支持ssh系统登录,只能登录ftp服务器
# -g 用户组; -d 指定家目录; -s 不能登陆系统; -M 不创建家目录
useradd -g ftp -d /soft/ftp/test/ -M -s /usr/bin/nologin ftpuser

# 设置密码
# echo "新密码" | passwd --stdin 用户名
echo "123" | passwd --stdin ftpuser

# 给用户赋予目录的权限,这样才能上传文件
chown ftpuser:ftp /soft/ftp/test

==============================================================
# 如果要恢复ftpuser用户的ssh登录(可登入CentOS7系统),执行下面的语句即可
usermod -s /bin/bash ftpuser

配置文件

# 
cd /etc/vsftpd/

配置文件解释

# 是否开启匿名用户,匿名都不安全,默认NO
anonymous_enable=NO
# 允许本机账号登录FTP
# 这个设定值必须要为YES时,在/etc/passwd内的账号才能以实体用户的方式登入我们的vsftpd主机
local_enable=YES
# 允许账号都有写操作
write_enable=YES
# 本地用户创建文件或目录的掩码
# 意思是指:文件目录权限:777-022=755,文件权限:666-022=644
local_umask=022
# 进入某个目录的时候,是否在客户端提示一下
dirmessage_enable=YES
# 当设定为YES时,使用者上传与下载日志都会被记录起来
xferlog_enable=YES
# 日志成为std格式
xferlog_std_format=YES
# 上传与下载日志存放路径
xferlog_file=/var/log/xferlog
# 开放port模式的20端口的连接
connect_from_port_20=YES
# 关于系统安全的设定值:
# ascii_download_enable=YES(NO)
# 如果设定为YES,那么client就可以使用ASCII格式下载档案
# 一般来说,由于启动了这个设定项目可能会导致DoS的攻击,因此预设是NO
# ascii_upload_enable=YES(NO)
# 与上一个设定类似的,只是这个设定针对上传而言,预设是NO
ascii_upload_enable=NO
ascii_download_enable=NO
# 通过搭配能实现以下几种效果:
# ①当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录
# ②当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录
# ③当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录
# ④当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录
# 限制用户只能在自己的目录活动
chroot_local_user=YES
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd/chroot_list
# 可以更改ftp的端口号,使用默认值21
# listen_port=60021
# 监听ipv4端口,开了这个就说明vsftpd可以独立运行,不用依赖其他服务
listen=NO
# 监听ipv6端口
listen_ipv6=YES
# 打开主动模式
port_enable=YES
# 启动被动式联机(passivemode)
pasv_enable=YES
# 被动模式端口范围:注意:linux客户端默认使用被动模式,windows 客户端默认使用主动模式。在ftp客户端中执行"passive"来切换数据通道的模式。也可以使用"ftp -A ip"直接使用主动模式。主动模式、被动模式是有客户端来指定的
# 上面两个是与passive mode使用的port number有关,如果您想要使用64000到65000这1000个port来进行被动式资料的连接,可以这样设定
# 这两项定义了可以同时执行下载链接的数量
# 被动模式起始端口,0为随机分配
pasv_min_port=64000
# 被动模式结束端口,0为随机分配
pasv_max_port=65000
# 文件末尾添加
# 这个是pam模块的名称,我们放置在/etc/pam.d/vsftpd,认证用
pam_service_name=vsftpd
# 使用允许登录的名单,在/etc/vsftpd/user_list文件中添加新建的用户ftpuser
userlist_enable=YES
# 限制允许登录的名单,前提是userlist_enable=YES,其实这里有点怪,禁止访问名单在/etc/vsftpd/ftpusers
userlist_deny=NO
# 允许限制在自己的目录活动的用户拥有写权限
# 不添加下面这个会报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES
# 当然我们都习惯支持TCP Wrappers的啦
# Tcp wrappers : Transmission Control Protocol (TCP) Wrappers 为由 inetd 生成的服务提供了增强的安全性
tcp_wrappers=YES
# FTP访问目录,一般不设置,添加用户的时候设置用户的根目录更灵活,不同的用户有不同的根目录
# local_root=/soft/ftp/

#禁止反向域名解析,若是没有添加这个参数可能会出现用户登陆较慢,或则客户链接不上ftp的现象
reverse_lookup_enable=NO

FTP的主动模式和被动模式

PORT(主动模式)

在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,发送FTP用户名和密码,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令,告诉服务端客户端采用主动模式并开放了端口。FTP服务器接收到PORT命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。

PASV(被动模式)

在被动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,发送用户名和密码进行登陆。然后端口N向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P(端口P的范围是可以设置的,后面会说到这个是很重要的)进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过另一个随机端口连接服务器的端口P,然后在两个数据端口之间进行数据传输

被动模式从服务器下载文件抓包分析

在这里插入图片描述
看绿色字体为注释,登录的过程,密码为明文
50837为客户端端口,21为ftp服务器端口
在这里插入图片描述

上图为服务端切换到二进制模式

  • 1:客户端请求文件大小
  • 1-1:服务器端响应大小为41396byte
  • 2:客户端请求文件最好修改时间,用的MDTM命令,
  • 2-2:服务端响应是20220929080146
  • 3:客户端请求开启被动模式
  • 3-3:服务端响应进入被动模式,并且返回服务端的数据端口36235在这里插入图片描述

在这里插入图片描述
此图为请求文件并传输过程

  1. 客户端用新的数据端口50873发送RETR命令给服务端的数据端口36235请求下载文件

  2. 客户端响应进入二进制文件传输模式,并响应了两次数据文件,每次1460byte的数据,即1kb多点,还可以在响应中看到的响应内容在这里插入图片描述

  3. 客户端通过继续请求文件,并通过ack传输要请求的文件索引,图中请求的2921,因为上一步服务器已经传输了1460 + 1460,所以再次请求就ack加1,可见是把文件转为byte数组,通过多次请求完成获取,每次服务器只响应1460byte的数据

  4. 下图为请求完毕在这里插入图片描述

抓包总结

1、只有服务端的21端口是固定的,像服务端的数据端口36235、客户端的命令端口50837、客户端的数据端口50873都是随机端口,所以在打通网络时,只需要服务器端的21端口对客户端放通即可,如果还不不能下载文件则考虑服务器的数据端口对客户端放通,且服务器端的数据端口是可以配置在一个区间内的
2、且每次传输请求完毕后都会关闭数据端口,再次请求会起新的端口

客户端上传文件抓包分析

在这里插入图片描述
过程和下载过程差不多,都是要客户端和服务器端开启数据端口,并传输文件,不同的是客户端是连续的发送多次数据文件,每次也是1460byte

两种模式的比较

主动模式和被动模式的不同简单概述为: 主动模式传送数据时是“服务器”连接到“客户端”的端口(客户端开启数据端口);被动模式传送数据是“客户端”连接到“服务器”的端口(服务端开启数据端口)。

主动模式需要客户端必须开放端口给FTP服务端,很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。

被动模式只需要服务器端开放端口给客户端连接就行了,如果服务端在防火墙内,也需要做端口映射才行。

被动模式入的坑

我们系统里FTP使用的是被动模式,而且服务是安装在小网内的,与大网通信,要做IP和端口映射。当时没收手动配置FTP服务端数据传输的端口范围,在防火墙上只是做了这么一段的30000-30010的端口映射。导致客服端(一种设备)上传的时候只有一次上传成功了,这是因为服务端随机开放的一个端口恰好在30000-30010范围之内。其他任何时候都上传不成功。抓包看,只有客服端连接服务端数据包。

所以,FTP服务安装在小网中(防火墙内部),使用被动模式的话,且客户端位于防火墙外部,要限制FTP服务起的数据传输端口范围,而且要把这些端口要映射出去。

遇到的问题

用ftp工具连接不报任何异常,但是连接失败,用cmd窗口的ftp ip命令连接提示500 OOPS: vsftpd: refusing to run with writable root inside chroot(),经查询得出如下结论

错误原因

从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。

解决办法

方法一:
用命令chmod a-w /home/user(换成自已的目录名)去除用户主目录的写权限;

方法二:
在vsftp主配文件中加入下行:
allow_writeable_chroot=YES

转载:https://blog.csdn.net/weixin_42039228/article/details/124338444

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值