Linux_vsftpd_centos7_虚拟用户完整配置
CentOS7 vsftpd 虚拟用户模式安装配置完整手册
环境说明
- 操作系统:CentOS 7.x
- 软件:vsftpd‑3.0.2‑22.el7.x86_64
说明:本文整合两份文档,去除重复内容,统一采用 systemctl 管理服务,推荐使用虚拟用户模式,安全性更高。
一、下载并安装 vsftpd
1. 下载rpm安装包
wget https://mirrors.aliyun.com/centos/7.5.1804/os/x86_64/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm
2. 安装与校验
# 安装RPM包
rpm -ivh vsftpd-3.0.2-22.el7.x86_64.rpm
# 验证是否安装成功
rpm -qa | grep vsftpd
# 预期输出:vsftpd-3.0.2-22.el7.x86_64
❗不建议直接使用
/usr/sbin/vsftpd &后台启动,容易出现连接拒绝问题,统一使用systemctl管理服务。
二、基础服务配置与启动
1. 编辑主配置文件
vim /etc/vsftpd/vsftpd.conf
- 确保
listen=YES(独立守护进程模式) - 注释 IPv6 监听:
#listen_ipv6=YES,避免IPv4启动失败
2. 服务启停与开机自启
# 启动服务
systemctl start vsftpd.service
# 设置开机自启
systemctl enable vsftpd.service
# 查看服务状态
systemctl status vsftpd
# 本地测试连接
ftp localhost
三、虚拟用户模式完整配置
虚拟用户:ftp登录账号不是系统真实账号,映射到一个系统宿主用户,安全隔离。
3.1 备份原有配置文件
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.backup.conf
3.2 创建宿主系统用户
虚拟用户全部映射到此nologin系统用户,不允许ssh登录。
# 创建宿主用户vsftpd,家目录 /home/vsftpd,禁止shell登录
useradd -d /home/vsftpd -s /sbin/nologin vsftpd
3.3 创建vsftpd日志文件并授权
touch /var/log/vsftpd.log
chown vsftpd.vsftpd /var/log/vsftpd.log
3.4 vsftpd.conf完整配置
建议清空原有配置,粘贴下面全部内容
# ===== 基础全局设置 =====
# 关闭匿名访问
anonymous_enable=NO
# 允许本地用户登录,虚拟用户依赖该选项
local_enable=YES
# 开启文件写入权限
write_enable=YES
# 上传文件掩码
local_umask=022
# ===== 日志与提示 =====
# 开启目录提示标语
dirmessage_enable=YES
# 开启传输日志
xferlog_enable=YES
# 20端口作为数据连接端口
connect_from_port_20=YES
# 日志文件路径
xferlog_file=/var/log/vsftpd.log
# 标准日志格式
xferlog_std_format=YES
# 数据传输超时时间
data_connection_timeout=3600
# 禁用ls -R递归查询,降低服务器负载
ls_recurse_enable=NO
# ===== 用户目录安全限制 =====
# 禁锢用户在自家目录,禁止跳出根目录
chroot_local_user=YES
allow_writeable_chroot=YES
# ===== 用户列表与PAM认证 =====
userlist_enable=YES
# PAM认证配置文件名,对应/etc/pam.d/vsftpd
pam_service_name=vsftpd
# 支持TCP Wrappers访问控制
tcp_wrappers=YES
# 关闭DNS反向解析,加快登录速度
reverse_lookup_enable=NO
# ===== 虚拟用户核心参数 =====
# 开启guest模式,启用虚拟用户
guest_enable=YES
# 指定虚拟用户映射的本地宿主用户
guest_username=vsftpd
# 虚拟用户权限继承宿主用户权限
virtual_use_local_privs=YES
# 虚拟用户独立配置文件存放目录
user_config_dir=/etc/vsftpd/vconf
# 如不使用IPv6,请注释下面这行
# listen_ipv6=YES
四、创建FTP虚拟登录账号
4.1 编写虚拟用户明文密码文件
vim /etc/vsftpd/vuser.txt
格式:一行用户名,一行密码
testuser
testpassword123
admin
adminpassword
4.2 安装工具并生成Berkeley DB认证数据库
# 安装db4工具,用于生成密码数据库
yum install -y db4-utils
# 由明文txt生成db数据库
db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db
# 设置数据库权限,仅root可读
chmod 600 /etc/vsftpd/vuser.db
# 删除明文密码文件(重要,消除明文泄露风险)
rm -f /etc/vsftpd/vuser.txt
4.3 修改PAM认证配置
修改PAM模块,使用db数据库完成虚拟用户校验
vim /etc/pam.d/vsftpd
✅注释掉原有全部内容,添加下面两行(CentOS7 64位使用/lib64路径)
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
4.4 创建虚拟用户个性化配置
每个虚拟用户单独配置文件,文件名与用户名完全一致。
# 创建虚拟用户配置总目录
mkdir -p /etc/vsftpd/vconf
# 创建testuser用户的独立配置
vim /etc/vsftpd/vconf/testuser
/etc/vsftpd/vconf/testuser内容:
# 指定该虚拟用户访问的根目录
local_root=/home/vsftpd/testuser
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
4.5 创建用户数据存储目录并授权
⚠目录属主必须是宿主
vsftpd,否则会出现权限拒绝无法上传
mkdir -p /home/vsftpd/testuser
chown -R vsftpd:vsftpd /home/vsftpd
如果新增admin用户,则需要:
- 在vuser.txt增加账号密码,重新db_load生成vuser.db
- 创建
/etc/vsftpd/vconf/admin配置文件- 创建
/home/vsftpd/admin目录并授权
五、防火墙与SELinux设置
vsftpd需要21控制端口,以及被动模式数据端口。
# 放行ftp控制端口21/tcp
firewall-cmd --permanent --add-port=21/tcp
# 放行被动模式端口范围,建议在vsftpd.conf补充 pasv_min_port=30000 pasv_max_port=31000
firewall-cmd --permanent --add-port=30000-31000/tcp
# 重载防火墙规则生效
firewall-cmd --reload
# 临时关闭SELinux(测试环境,重启失效)
setenforce 0
永久关闭SELinux修改配置文件
/etc/selinux/config设置SELINUX=disabled,需要重启系统生效。
六、重启服务与验证
# 修改完全部配置后重启服务
systemctl restart vsftpd.service
# 查看运行状态
systemctl status vsftpd
# 本地测试登录
ftp localhost
附录:vsftpd常用运维命令
# 启动服务
systemctl start vsftpd
# 停止服务
systemctl stop vsftpd
# 重启服务
systemctl restart vsftpd
# 查看运行状态
systemctl status vsftpd
# 开机自启
systemctl enable vsftpd
# 取消开机自启
systemctl disable vsftpd
# 本地ftp测试
ftp localhost
常见坑提示
- 不要用
/usr/sbin/vsftpd &直接后台运行,优先systemctl; - 一定要注释
listen_ipv6=YES否则IPv4启动失败; - 虚拟用户目录属主必须为宿主
vsftpd; - pam.d/vsftpd路径必须是
/lib64/security/,32位系统才是/lib; - vuser.db权限设置600,删除明文vuser.txt;
- chroot禁锢目录需要开启
allow_writeable_chroot=YES; - 客户端连不上检查防火墙端口、被动端口范围、SELinux状态。
浙公网安备 33010602011771号