一、安装vsftpd
1、查看是否有安装过
rpm -q vsftpd
2、安装
yum install -y vsftpd
3、服务启动步骤
设置开机启动并此次立即启动
systemctl enable --now vsftpd
启动
systemctl start vsftpd
重启
systemctl restart vsftpd
停止
systemctl stop vsftpd
查看状态
systemctl status vsftpd
4、系统防火墙放行ftp服务
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
如果没有重要的数据在服务器里面,或者在本地虚拟机中外网无法访问的情况下,建议直接关闭防火墙即可省略以上繁琐的步骤
systemctl stop firewalld.service
二、创建用户
1、首先创建一个目录,作为这个ftp用户所拥有的目录
mkdir -p /home/ftproot/ftptest
2、创建用户ftptest,并且指定其目录为用户目录中创建的/home/ftproot/ftptest
useradd -d /home/ftproot/ftptest -g ftp -s /sbin/nologin ftptest
-g ftp 表示该用户属于ftp分组 (ftp分组是内置的,本来就存在,不需要自己创建)
-s /sbin/nologin 表示这个用户不能用来登录secureCRT这样的客户端,这种不能登陆的用户又叫做虚拟用户
创建过程给出的警告信息是正常的,不用理会
3、把目录/home/ftproot/ftptest的拥有者设置为ftptest
chown -R ftptest /home/ftproot/ftptest
使ftptest用户拥有这个目录的读写权限
chmod -R 775 /home/ftproot/ftptest
为ftptest用户设置密码
复制代码
passwd ftptest
三、配置文件修改
目前 FTP 服务登陆允许匿名登陆,也无法区分用户访问,我们需要配置 FTP 访问权限;
vsftpd 的配置目录为 /etc/vsftpd,包含下列的配置文件:
vsftpd.conf 为主要配置文件
ftpusers 配置禁止访问 FTP 服务器的用户列表
user_list 配置用户访问控制
1、配置文件位置
/etc/vsftpd/vsftpd.conf
建议先备份一下。
vi /etc/vsftpd/vsftpd.conf
编辑器显示行号
:set number
修改第12行,禁止匿名登录
anonymous_enable=NO
2、文件传输速度优化
vsftpd有两种端口:
一种是21端口,用来监听客户端连接请求的。 这个一般说来是固定的,就一直使用21端口。
一种是,一旦获取到请求之后,再专门用户服务端和客户端传输数据的端口。 (安装用的这种)
(1)、在vsftpd.conf的最后追加
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
这表示使用被动模式,用于传输数据的端口分配从30000-31000之间
开启后需要执行下面的操作
可以选择关闭防火墙 或者开启对应的端口
# ftp被动模式 端口
firewall-cmd --zone=public --add-port=起始端口-结束端口/tcp --permanent
# ftp登录端口
firewall-cmd --zone=public --add-port=xxx端口/tcp --permanent
(2)、
#本地用户最大传输速率(字节/秒),0为不限制
local_max_rate=0
#允许ip变化 防止 425 Security: Bad IP connecting.
pasv_promiscuous=YES
四、 用户鉴权
因为用户 ftptest 是 nologin的,所以存在鉴权的问题。 如果鉴权问题不解决,就是永不停息的 530错误。。。
解决办法有如下两种:
1、方式一:编辑/etc/pam.d/vsftpd
vim /etc/pam.d/vsftpd
注释下面这一行
#auth required pam_shells.so
加上新的一行
auth required pam_nologin.so
这样不去鉴权,从而允许 ftptest 这种 nologin用户登录 ftp 服务器
2、方式二:shells 文件
在/etc/shells文件里面增加一行:/sbin/nologin
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/sbin/nologin
这样允许不能登录系统的用户通过鉴权
重启服务
systemctl restart vsftpd.service
然后用浏览器,ftp命令或ftp工具访问了