温馨提示×

CentOS与VSFTP的虚拟用户配置

小樊
34
2025-12-25 06:09:26
栏目: 云计算

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 一致。

0