centos7安装vsftpd,配置
安装该软件需要使用最高用户(root)进行安装
一. 安装vsftp
查看是否已安装
[root@mariadb-10 ~]# rpm -q vsftpd
vsftpd-3.0.2-21.el7.x86_64
或者
[root@mariadb-10 ~]# vsftpd -v vsftpd: version 3.0.2
在线安装
yum -y install vsftpd
查看位置
[root@mariadb-10 ~]# whereis vsftpd vsftpd: /usr/sbin/vsftpd /etc/vsftpd /usr/share/man/man8/vsftpd.8.gz
设置开机启动
systemctl enable vsftpd
启动
systemctl start vsftpd
重启
systemctl restart vsftpd
停止
systemctl stop vsftpd
查看状态
systemctl status vsftpd
二. 配置防火墙
1.关闭SELinux
vi /etc/selinux/config
修改SELINUX=disabled
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
然后输入命令
setenforce 0
注,临时生效命令
修改firewall使之允许ftp功能启动firewall
systemctl start firewalld.service
输入命令
[root@mariadb-10 home]# firewall-cmd --permanent --zone=public --add-service=ftp
success
重启firewall
[root@mariadb-10 home]# firewall-cmd --reload
success
如果没有重要的数据在服务器里面,或者在本地虚拟机中外网无法访问的情况下,建议直接关闭防火墙即可省略以上繁琐的步骤
systemctl stop firewalld.service
三. 启动ftp服务
启动ftp
systemctl start vsftpd
查看ftp状态,返回以下说明服务已启动
[root@mariadb-10 home]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: active (running) since 四 2021-12-09 16:13:39 CST; 3s ago
Process: 8706 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 8707 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─8707 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
12月 09 16:13:39 mariadb-10.3.23 systemd[1]: Starting Vsftpd ftp daemon...
12月 09 16:13:39 mariadb-10.3.23 systemd[1]: Started Vsftpd ftp daemon.
设置开机自启动
chkconfig vsftpd on
三 ftp访问匿名访问测试
在浏览器输入ftp服务访问地址 ,例如 ftp://192.168.0.14/ ,安装完毕默认匿名可访问
默认浏览的是/var/ftp目录
四. 创建用户
首先创建一个目录,作为这个ftp用户所拥有的目录
mkdir -p /home/ftproot/ftptest
创建用户ftptest,并且指定其目录为用户目录中创建的/home/ftproot/ftptest
useradd -d /home/ftproot/ftptest -g ftp -s /sbin/nologin ftptest
-g ftp 表示该用户属于ftp分组 (ftp分组是内置的,本来就存在,不需要自己创建)
-s /sbin/nologin 表示这个用户不能用来登录secureCRT这样的客户端,这种不能登陆的用户又叫做虚拟用户
创建过程给出的警告信息是正常的,不用理会
把目录/home/ftproot/ftptest的拥有者设置为ftptest
chown -R ftptest /home/ftproot/ftptest
使ftptest用户拥有这个目录的读写权限
chmod -R 775 /home/ftproot/ftptest
为ftptest用户设置密码
[root@mariadb-10 vconf]# passwd ftptest
更改用户 ftptest 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
五. 配置
目前 FTP 服务登陆允许匿名登陆,也无法区分用户访问,我们需要配置 FTP 访问权限;
vsftpd 的配置目录为 /etc/vsftpd,包含下列的配置文件:
- vsftpd.conf 为主要配置文件
- ftpusers 配置禁止访问 FTP 服务器的用户列表
- user_list 配置用户访问控制
配置文件位置
/etc/vsftpd/vsftpd.conf
建议先备份一下。
vi /etc/vsftpd/vsftpd.conf
编辑器显示行号
:set number
修改第12行,禁止匿名登录
anonymous_enable=NO
限制用户访问,创建的ftptest用户所拥有的目录是 /home/ftproot/ftptest,如果不做限制,那么使用ftptest登陆之后可以切换到其他敏感目录去,比如切换到/usr目录去,这样就存在巨大的安全隐患。 为了规避这个隐患,需要限制ftptest用户只能通过ftp访问到 /home/ftproot/ftptest 目录以及子目录。
第102行,去掉注释
chroot_list_enable=YES
第104行,去掉注释
chroot_list_file=/etc/vsftpd/chroot_list
注:
chroot_list_enable=YES: 表示对用户访问进行限制
chroot_list_file=/etc/vsftpd/chroot_list 表示对chroot_list里面指定的用户进行限制
vsftpd服务器,一旦某个用户被限制访问了,那么默认情况下,该用户的写权限也被剥夺了。 这就导致ftp客户端连接上服务器之后无法上传文件。这个时候,就需要打开此用户的写权限。
添加账号到chroot_list里,一行一个用户账号
[root@localhost vsftpd]# vi /etc/vsftpd/chroot_list filesync
在vsftpd.conf的最后加上
allow_writeable_chroot=YES
vsftpd有两种端口:
一种是21端口,用来监听客户端连接请求的。 这个一般说来是固定的,就一直使用21端口。
一种是,一旦获取到请求之后,再专门用户服务端和客户端传输数据的端口。 (安装用的这种)
在vsftpd.conf的最后追加
pasv_enable=YES pasv_min_port=30000 pasv_max_port=30010
这表示使用被动模式,用于传输数据的端口分配从30000-30010之间
六. 用户鉴权
因为用户 ftptest 是 nologin的,所以存在鉴权的问题。 如果鉴权问题不解决,就是永不停息的 530错误。。。
解决办法有如下两种:
1. 方式一:编辑/etc/pam.d/vsftpd
vi /etc/pam.d/vsftpd
注释下面这一行
#auth required pam_shells.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工具访问了
参考:
https://blog.csdn.net/zwd926/article/details/89884089
https://blog.csdn.net/qq_28245087/article/details/85631049