CentOS与VSFTP的虚拟用户配置
导读:CentOS 7 下使用 VSFTP 配置虚拟用户的实操指南 一 环境准备与安装 安装 vsftpd 与必要工具(用于生成用户数据库): 执行:yum install -y vsftpd db4-utils 建议准备一个用于映射虚拟...
CentOS 7 下使用 VSFTP 配置虚拟用户的实操指南
一 环境准备与安装
- 安装 vsftpd 与必要工具(用于生成用户数据库):
- 执行:
yum install -y vsftpd db4-utils
- 执行:
- 建议准备一个用于映射虚拟用户的系统账号(不可登录系统),后续所有虚拟用户都映射到此账号:
- 执行:
useradd -d /data/ftproot -s /sbin/nologin virtusers
- 执行:
- 创建目录结构(示例为单个用户 vuser1,可按需扩展 vuser2…):
- 执行:
mkdir -p /data/ftproot/vuser1/rootdir - 权限建议:主目录不可写,工作目录可写
chown -R virtusers:virtusers /data/ftprootchmod 500 /data/ftproot/vuser1chmod 755 /data/ftproot/vuser1/rootdir
- 执行:
- 说明:新版 vsftpd 对“用户主目录可写”较严格,通常将主目录设为只读,在具体工作目录下放可写子目录以避免登录或写入失败。
二 创建虚拟用户与数据库
- 新建明文用户密码文件(奇数行为用户名,偶数行为密码):
- 执行:
vi /etc/vsftpd/vuserlist - 示例内容:
vuser1 StrongPass!23
- 执行:
- 生成 Berkeley DB 格式的认证库(仅 root 可读):
- 执行:
db_load -T -t hash -f /etc/vsftpd/vuserlist /etc/vsftpd/vuserlist.db - 执行:
chmod 600 /etc/vsftpd/vuserlist.db
- 执行:
- 说明:该数据库文件供 PAM 模块进行虚拟用户认证使用。
三 配置 PAM 认证
- 备份并编辑 PAM 配置文件:
vi /etc/pam.d/vsftpd - 注释掉文件中原有行,仅保留或新增基于用户数据库的认证(64 位系统路径通常为 /lib64/security/pam_userdb.so):
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuserlist account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuserlist - 说明:确保 db= 指向不含 .db 后缀的数据库文件路径(即 vuserlist),PAM 会自动读取 vuserlist.db。
四 配置 VSFTP 主配置文件
- 备份并编辑:
vi /etc/vsftpd/vsftpd.conf,建议关键参数如下(按实际环境调整):# 基础 listen=YES listen_ipv6=NO anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES use_localtime=YES # 安全与隔离 chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list # 虚拟用户 guest_enable=YES guest_username=virtusers virtual_use_local_privs=YES user_config_dir=/etc/vsftpd/vuser_conf pam_service_name=vsftpd # 被动模式(云环境强烈建议显式配置) pasv_enable=YES pasv_min_port=30100 pasv_max_port=30200 pasv_address=YOUR_PUBLIC_IP # 在 VPC/云环境填服务器公网地址 - 创建 chroot 例外文件(若启用了 chroot_list_enable):
- 执行:
touch /etc/vsftpd/chroot_list - 如需对 vuser1 不做额外 chroot 例外,可写入其用户名(示例):
echo "vuser1" > > /etc/vsftpd/chroot_list
- 执行:
- 说明:
virtual_use_local_privs=YES让虚拟用户使用本地用户的权限模型,便于在用户级配置中启用写入等能力。- 被动模式端口范围与公网出口地址需与云安全组/防火墙策略一致。
五 配置用户级目录与权限及测试
- 为用户创建个性化配置(文件名必须与虚拟用户名一致):
- 执行:
mkdir -p /etc/vsftpd/vuser_conf - 新建:
vi /etc/vsftpd/vuser_conf/vuser1 - 示例内容(仅授予工作目录写入):
local_root=/data/ftproot/vuser1 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES anon_world_readable_only=NO
- 执行:
- 权限与所有权(再次强调主目录不可写,工作目录可写):
chown -R virtusers:virtusers /data/ftprootchmod 500 /data/ftproot/vuser1chmod 755 /data/ftproot/vuser1/rootdir
- 启动与验证:
- 启动/重启:
systemctl restart vsftpd & & systemctl enable vsftpd - 防火墙放行:
- 主动/命令端口:
firewall-cmd --add-port=21/tcp --permanent & & firewall-cmd --reload - 被动端口段:
firewall-cmd --add-port=30100-30200/tcp --permanent & & firewall-cmd --reload
- 主动/命令端口:
- 客户端测试(FileZilla/命令行):
- 主机:服务器公网 IP
- 协议:FTP
- 登录类型:正常
- 用户/密码:vuser1 / StrongPass!23
- 模式:优先使用被动模式(PASV),在站点设置中填入被动端口范围与公网 IP(若客户端未自动获取)
- 启动/重启:
- 常见排错要点:
- 登录报“500 OOPS: vsftpd: refusing to run with writable root inside chroot()”:主目录权限需为 500/550,写入放在子目录。
- 被动模式连不上:检查云安全组/本机防火墙是否放行 21 与 30100–30200,且
pasv_address是否正确。 - 认证失败:确认
/etc/pam.d/vsftpd的db=路径与vuserlist.db权限(600),以及pam_service_name=vsftpd一致。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS与VSFTP的虚拟用户配置
本文地址: https://pptw.com/jishu/780464.html
