此前,使用vsftp工具来搭建ftp时,我们使用的用户为Linux的系统用户,而当我们的人员过多时,且都需要用各自的账户登录,那么管理起来将会非常地不方便。使用虚拟用户的方式能很好地解决这个问题,不占用系统用户!

image-20231207151534479

1.配置基础环境

关闭seliux

# 永久关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
# 临时关闭selinux
setenforce 0

2.安装vsftp

这里需要安装两个模块,分别为vsftpd和db4-utils。

yum -y install vsftpd db4-utils

2.1、修改配置

养成好习惯,修改配置前备份一下配置,以防止后续修改后无法启动时作为参考依据。

cd /etc/vsftpd/
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak

修改配置如下:

2.2、配置虚拟用户口令库文件

文件格式:用户名和密码分别占两行,用户名在前。

添加虚拟用户backup和myftp,密码分别为 tom123 和 jack123。

[root@host ~]# 
cat >>/etc/vsftpd/vlogin<<eof
backup
123456
myftp
123456
eof

2.3、配置虚拟用户认证文件

运行下方命令生成虚拟用户认证文件,注意在新增或删除虚拟用户后,该文件需要重新生成。

[root@host ~]# db_load -T -t hash -f /etc/vsftpd/vlogin /etc/vsftpd/vlogin.db
[root@host ~]# chmod 600 /etc/vsftpd/vlogin.db  #修改文件权限为600

可以选择将该命令保存到脚本文件中,方便执行。

[root@host ~]# 
cat >>/etc/vsftpd/adduser.sh<<EOF
#!/bin/bash
db_load -T -t hash -f /etc/vsftpd/vusers.list /etc/vsftpd/vsftpd_login.db
EOF
[root@host ~]# chmod o+x /etc/vsftpd/adduser.sh   #修改脚本文件的权限

2.4、配置PAM文件

[root@host ~]# mv /etc/pam.d/vsftpd{,.bak}  #备份文件
[root@host ~]#
cat >/etc/pam.d/vsftpd.pam<<EOF
#%PAM-1.0
#auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login
#account required pam_userdb.so db=/etc/vsftpd/vsftpd_login
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vlogin
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vlogin
EOF

2.5、创建虚拟用户主目录

[root@host ~]# mkdir -p /home/ftp/{backup,myftp}    #创建虚拟用户的同名主目录

2.6、创建系统用户

创建系统用户vuser,指定其主目录为/data/ftp(与vsftpd.conf 文件中的:guest_username=vsftpd 一致)。

[root@host ~]# useradd -d /home/ftp -s /sbin/nologin vuser 
[root@host ~]# chown -R vuser:vuser /home/ftp/  #修改主目录的属主和属组

2.7、修改vsftpd配置文件

文章最后有配置文件的完整版,嫌参数逐个修改太麻烦的小伙伴,可以去文末直接复制粘贴。

[root@host ~]# cp /etc/vsftpd/vsftpd.conf{,.bak}    #备份配置文件
[root@host ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO     #关闭匿名访问
listen=YES              #开启standalone模式,并监听ipv4的sockets,不能与ipv6同时启用
listen_ipv6=NO          #如果开启,会同时监听ipv4和ipv6的sockets
xferlog_enable=YES              #启用日志记录上传下载
xferlog_file=/var/log/xferlog   #设置日志文件存储位置
xferlog_std_format=YES          #使用日志标准格式
guest_enable=YES                #启用虚拟用户
guest_username=vuser            #定义虚拟用户名
chroot_local_user=YES           #限制本地用户切换出主目录
allow_writeable_chroot=YES      #表示被限制在主目录的用户对主目录具备写权限
user_config_dir=/etc/vsftpd/vsftpd_user_conf   #定义每个用户的配置文件夹
pasv_enable=YES                 #开启被动模式
pasv_min_port=30000             #被动模式的最小端口
pasv_max_port=30999             #被动模式的最大端口

生产环境配置如下:

vim vsftpd.conf
[root@myserver_198 ~]#cat /etc/vsftpd/vsftpd.conf
local_enable=YES
write_enable=YES
connect_from_port_20=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
chroot_local_user=YES
guest_enable=YES
guest_username=virtual
listen=YES
listen_ipv6=NO
allow_writeable_chroot=YES
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
allow_writeable_chroot=YES
listen_port=21
# 被动模式,占用30000-30999端口
#pasv_enable=NO
#pasv_min_port=30000
#pasv_max_port=30999
pam_service_name=vsftpd.pam
user_config_dir=/etc/vsftpd/vsftpd_user_conf
#user_sub_token=root
#virtual_use_local_privs=YES
#pasv_address=149.205.61.50

2.8、配置虚拟用户权限

分别创建配置用户backup和用户myftp的独立配置文件,文件名与用户同名,按用户名为每个用户写配置内容

但凡能访问到的文件都可以进行下载,不会受到配置中主目录写权限的影响。

[root@host ~]# mkdir /etc/vsftpd/vsftpd_user_conf   #创建虚拟用户配置文件夹
[root@host ~]# 
cat >/etc/vsftpd/vsftpd_user_conf/backup<<EOF
local_root=/home/ftp/backup             #指定用户tom的主目录
chroot_local_user=YES           #限制用户tom切换出主目录,仅能访问主目录tom
write_enable=YES                #开启主目录的写权限
virtual_use_local_privs=YES     #用户backup具备对主目录的使用权限,即对文件或目录的增删改
EOF
[root@host ~]# 
cat >/etc/vsftpd/vsftpd_user_conf/myftp<<EOF
local_root=/home/ftp/myftp
chroot_local_user=YES
write_enable=YES
#virtual_use_local_privs=YES
EOF

其它可选参数如下:

max_clients=0 #设置vsftpd允许的最大连接数,默认值为0,表示不受限制。若设置为100时,则同时允许有100个连接,超出的将被拒绝。只有在standalone模式运行才有效。
max_per_ip=0 #设置每个IP允许与FTP服务器同时建立连接的数目。默认值为0,表示不受限制。只有在standalone模式运行才有效。
local_max_rate=0 #用于设置本地用户的最大传输速率,单位为B/s,值为0时表示不限制。
例如 local_max_rate=500000 表示FTP服务器的本地用户最大传输速率设置为500KB/s。

2.8.1 按用户名为每个用户写配置内容

仅下载权限

mkdir -p /home/vsftpd/user1
chown -R vsftpd:vsftpd /home/vsftpd
# 注意这里创建的文件名要和你的用户一致
vim /etc/vsftpd/vsftpd_user_conf/user1
anon_world_readable_only=NO    
local_root=/home/vsftpd/user1

上传、下载权限,不能删除、不能重命名

anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
local_root=/home/vsftpd/user1

全部权限:可上传、下载、删除和改名

write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/home/vsftpd/user1

2.9、启动vsftpd服务

[root@host ~]# systemctl start vsftpd   #启动服务
[root@host ~]# systemctl enable vsftpd  #设置服务开机自启

2.10.允许vsftp防火墙通过

firewall-cmd --add-service=ftp --permanent
firewall-cmd --add-port=5090-6000/tcp --permanent
firewall-cmd --reload

2.11、登录vsftpd服务器

可以在window系统使用软件进行登录(比如FileZilla),输入服务器ip,使用用户tom或者jack登录,输入用户名和密码,最后点击快速连接完成登录。登录成功会显示目录tom或目录jack中的内容。

在这里插入图片描述

2.12.允许vsftp防火墙通过

firewall-cmd --add-service=ftp --permanent
firewall-cmd --add-port=5090-6000/tcp --permanent
firewall-cmd --reload

最后发现已经可以正常登录使用了,各种权限正常!

3 附加:vsftpd生产环境配置如下:

隐藏内容
本内容需权限查看
  • 普通用户: 0.1金币
  • VIP会员: 0.1金币
  • 永久会员: 0.1金币
已有1人解锁查看

完美一键SHELL脚本:

隐藏内容
本内容需权限查看
  • 普通用户: 0.1金币
  • VIP会员: 0.1金币
  • 永久会员: 0.1金币
已有1人解锁查看
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。