简介

使用虚拟用户列表

系统:centos7

端口:21

目录:/data/ftp

ftp客户端:https://www.filezilla.cn/download/client

一 部署

yum install vsftpd -y
yum install libdb libdb-utils -y
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

二 配置虚拟用户

2.1 创建虚拟用户信息

cat >>/etc/vsftpd/vusers.list<<eof
test1
密码
test2
密码
eof

2.2 配置虚拟用户认证文件

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

db_load -T -t hash -f /etc/vsftpd/vusers.list /etc/vsftpd/vsftpd_login.db
chmod 600 /etc/vsftpd/vsftpd_login.db

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

cat >>/etc/vsftpd/adduser.sh<<EOF
#!/bin/bash
db_load -T -t hash -f /etc/vsftpd/vusers.list /etc/vsftpd/vsftpd_login.db
EOF
chmod o+x /etc/vsftpd/adduser.sh	 

2.4 配置PAM文件

mv /etc/pam.d/vsftpd{,.bak}
cat >/etc/pam.d/vsftpd<<EOF
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login
EOF

2.5 创建虚拟用户主目录

mkdir -p /data/ftp/test1,test2}

2.6 创建系统用户vuser,指定其主目录为/data/ftp

#修改主目录的属主和属组

useradd -d /data/ftp -s /sbin/nologin vuser 
chown -R vuser:vuser /data/ftp/  

三 主配置文件修改

3.1 修改vsftpd配置文件

cp /etc/vsftpd/vsftpd.conf{,.bak} #备份配置文件

cp /etc/vsftpd/vsftpd.conf{,.bak}
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=vuser
allow_writeable_chroot=YES
chroot_local_user=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999

参数解释

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				#被动模式的最大端口

3.2 配置虚拟用户权限

分别创建配置用户tom和用户jack的独立配置文件,文件名与用户同名。

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

创建2个用户test,test2

mkdir /etc/vsftpd/vsftpd_user_conf
cat >/etc/vsftpd/vsftpd_user_conf/test<<EOF
local_root=/data/ftp/test		#指定用户的主目录
chroot_local_user=YES			#限制用户切换出主目录,仅能访问主目录
write_enable=YES				#开启主目录的写权限
virtual_use_local_privs=YES	    #用户具备对主目录的使用权限,即对文件或目录的增删改
EOF

cat >/etc/vsftpd/vsftpd_user_conf/test2<<EOF
local_root=/data/ftp/test2
chroot_local_user=YES
write_enable=YES
virtual_use_local_privs=YES
EOF

#给目录授权
chown test:test /data/ftp/tesst
chown test2:test2 /var/ftp/test2
chmod 755 /data/ftp/test /data/ftp/test2

其它可选参数如下:

#设置vsftpd允许的最大连接数,默认值为0,表示不受限制。若设置为100时,则同时允许有100个连接,超出的将被拒绝。只有在standalone模式运行才有效。
max_clients=0

#设置每个IP允许与FTP服务器同时建立连接的数目。默认值为0,表示不受限制。只有在standalone模式运行才有效。
max_per_ip=0

#用于设置本地用户的最大传输速率,单位为B/s,值为0时表示不限制。
local_max_rate=0

四 启动vsftpd服务

#检测语法是否错误
sudo vsftpd -o /etc/vsftpd/vsftpd.conf

#启动
systemctl restart vsftpd
systemctl enable vsftpd