1,安装必要的软件包
yum install -y vsftpd libdb-utils
2,设置虚拟账号信息(使用文件存储)
2.1 创建明文账户信息
# vim /etc/vsftpd/vuser_list
linghu
123456
peng
123456
2.2 创建数据库账户信息
db_load -T -t hash -f /etc/vsftpd/vuser_list /etc/vsftpd/vuser_list.db
3,设置基于虚拟用户验证的pam文件
# vim /etc/pam.d/vsftpd.vuser
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_list
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_list
4,创建虚拟账号的主目录
# 创建ftp用户目录
mkdir -p /data/apk
# 修改ftp用户家目录
usermod -d /data/apk ftp
# 更改用户目录权限
chmod 755 /data/apk
#更改用户目录宿主账户
chown -R ftp.root /data/apk
# 创建公共资源目录
mkdir /data/apk/public
chmod -R 777 /data/apk/public
5,修改vsftpd的主配置文件
anonymous_enable=NO # 禁止匿名用户访问FTP服务器。
local_enable=YES # 允许本地用户访问FTP服务器。
write_enable=YES # 允许用户上传文件到FTP服务器。
local_umask=022 # 本地用户上传的文件默认权限为644。
dirmessage_enable=YES # 允许FTP服务器向用户发送目录信息。
connect_from_port_20=YES # 使用20号端口进行数据连接。
listen=YES # 启用独立模式,FTP服务器以独立进程的方式运行。
guest_enable=YES # 允许虚拟用户访问FTP服务器。
guest_username=ftp # 指定虚拟用户的登录名。
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/vsftpd.log # 启动日志文件
user_config_dir=/etc/vsftpd/vuser_conf # 指定虚拟用户的配置文件存放目录。
chroot_local_user=YES # 将会应用 chroot 到本地用户的家目录,防止用户访问系统的其它目录。
allow_writeable_chroot=YES
pam_service_name=vsftpd.vuser # 指定PAM服务名称。
userlist_enable=YES # 启用用户列表,即限制用户访问FTP服务器。
tcp_wrappers=YES # 启用TCP包过滤机制。
pasv_min_port=30000 # 指定被动模式的最小端口号。
pasv_max_port=65000 # 指定被动模式的最大端口号。
pasv_address=10.0.0.57 # 指定FTP服务器的被动模式IP地址。
local_root=/data/apk # 指定FTP服务器的根目录。
6,设置每个虚拟账号的配置文件
# 准备虚拟账户配置目录
mkdir -p /etc/vsftpd/vuser_conf
# 创建虚拟账户的个性化配置文件,每个账户的配置文件名与账户名一致,以peng为例
local_root=/data/apk # 设置登录后进入的目录
ftpd_banner=welcome to ly # 欢迎语
virtual_use_local_privs=YES
chmod_enable=YES
anon_max_rate=0 # 不限制传输速率
write_enable=no # 禁用上传
download_enable=YES # 开放下载
force_dot_files=YES
7,开放防火墙对应的权限,或者将防火墙全部关闭,修改selinux设置
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload
setsebool ftpd_full_access on -P
8,启动vsftpd服务,并加入服务自启动
systemctl start vsftpd && systemctl enable vsftpd
9,创建虚拟用户脚本
#!/bin/bash
#创建
oper=$1
ftpuser=$2
ftppasswd=$3
[ "$oper"a == "a" ] && echo "oper为空!!!" && exit 1
[ "$ftpuser"a == "a" ] && echo "ftpuser 为空!!!" && exit 1
[ "$ftppasswd"a == "a" ] && echo "passwd为空!!!" && exit 1
[ ! -d /data/apk/$oper ] && mkdir -p /data/apk/$oper/public
# 挂载公共资源目录
mount --bind /data/apk/public /data/apk/$oper/public
# 虚拟用户个性化权限配置
cat > /etc/vsftpd/vuser_conf/$ftpuser << EOF
local_root=/data/apk/${oper}
ftpd_banner=welcome to ly
virtual_use_local_privs=YES
chmod_enable=YES
anon_max_rate=0
write_enable=YES
download_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
force_dot_files=YES
EOF
echo $ftpuser >> /etc/vsftpd/vuser_list
echo $ftppasswd >>/etc/vsftpd/vuser_list
db_load -T -t hash -f /etc/vsftpd/vuser_list /etc/vsftpd/vuser_list.db