首页主机资讯CentOS与VSFTP的虚拟用户配置

CentOS与VSFTP的虚拟用户配置

时间2026-01-15 21:14:04发布访客分类主机资讯浏览1096
导读: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/ftproot
      • chmod 500 /data/ftproot/vuser1
      • chmod 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/ftproot
    • chmod 500 /data/ftproot/vuser1
    • chmod 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/vsftpddb= 路径与 vuserlist.db 权限(600),以及 pam_service_name=vsftpd 一致。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: CentOS与VSFTP的虚拟用户配置
本文地址: https://pptw.com/jishu/780464.html
CentOS系统中VSFTP的最佳实践 CentOS环境下VSFTP的更新方法

游客 回复需填写必要信息