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用户,则需要:

  1. 在vuser.txt增加账号密码,重新db_load生成vuser.db
  2. 创建/etc/vsftpd/vconf/admin配置文件
  3. 创建/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

常见坑提示

  1. 不要用/usr/sbin/vsftpd &直接后台运行,优先systemctl;
  2. 一定要注释listen_ipv6=YES否则IPv4启动失败;
  3. 虚拟用户目录属主必须为宿主vsftpd
  4. pam.d/vsftpd路径必须是/lib64/security/,32位系统才是/lib;
  5. vuser.db权限设置600,删除明文vuser.txt;
  6. chroot禁锢目录需要开启allow_writeable_chroot=YES
  7. 客户端连不上检查防火墙端口、被动端口范围、SELinux状态。
posted @ 2018-06-29 21:12  睡到自然醒的猪  阅读(19598)  评论(0)    收藏  举报