温馨提示×

VSFTP在CentOS上的安全策略

小樊
41
2025-11-29 16:06:02
栏目: 智能运维

VSFTP在CentOS上的安全策略

一 基础加固与访问控制

  • 禁用匿名访问,仅启用本地或虚拟用户;将本地用户chroot到其主目录,且避免对chroot目录授予可写权限(不使用或关闭allow_writeable_chroot),降低提权与符号链接攻击风险。
  • 启用传输日志(如xferlog_enable=YES),便于审计与异常追踪。
  • 使用用户黑名单文件**/etc/vsftpd/ftpusers**(该文件始终生效,优先级最高),禁止root等高权限账户登录。
  • 通过**/etc/vsftpd/user_list与参数userlist_enable**、userlist_deny实现白名单或黑名单控制:
    • 黑名单模式:userlist_enable=YES,userlist_deny=YES(默认拒绝列表内用户);
    • 白名单模式:userlist_enable=YES,userlist_deny=NO(仅允许列表内用户)。
  • 主机访问控制优先使用firewalld富规则限制来源网段/IP,替代已不推荐或不生效的 tcp_wrappers(CentOS 8 起不再支持 hosts.allow/hosts.deny 对 FTP 的控制)。

二 传输加密与端口管理

  • 启用TLS/SSL加密:设置ssl_enable=YES,禁用匿名加密(allow_anon_ssl=NO),强制本地登录与数据传输加密(force_local_logins_ssl=YES、force_local_data_ssl=YES),仅启用安全协议(如ssl_tlsv1=YES;ssl_sslv2=NO;ssl_sslv3=NO),并正确配置证书与私钥路径(如rsa_cert_file、rsa_private_key_file)。
  • 防火墙放行控制通道与被动模式端口:
    • 控制通道:放行21/tcp
    • 被动模式数据端口:在 vsftpd.conf 中设置pasv_min_port / pasv_max_port(例如10060–10090),并在防火墙放行该端口段,避免随机端口带来的暴露与审计困难。

三 用户隔离与最小权限

  • 推荐采用虚拟用户方案:
    • 使用db_load将明文口令生成**/etc/vsftpd/access.db**;
    • 配置 PAM 文件**/etc/pam.d/vsftpd使用pam_userdb.so**进行虚拟用户认证;
    • 创建一个不可登录的系统用户(如vsftpd)作为所有虚拟用户的映射账户,家目录作为FTP根(如**/data/vsftpd**),并设其不可写;在根下为上传创建子目录(如**/data/vsftpd/pub**)并赋予适当权限,实现“根不可写、上传目录可写”的最小权限模型。
  • 若使用本地用户:启用chroot_local_user=YES并关闭allow_writeable_chroot;如需例外,使用chroot_list_enable/chroot_list_file精确控制少数账户。

四 SELinux与系统安全联动

  • 保持SELinuxenforcing,按需开启布尔值:
    • 允许本地用户家目录访问:setsebool -P ftp_home_dir on
    • 需要更宽松的FTP访问时可启用:setsebool -P allow_ftpd_full_access on(仅在明确需求与风险评估后使用)。
  • 目录与权限:确保FTP根目录不可写(或按虚拟用户模型将可写权限仅赋予上传子目录),避免因chroot可写引入安全风险。

五 快速检查清单与推荐配置片段

  • 快速检查清单:
    • 已禁用匿名(anonymous_enable=NO);本地/虚拟用户按需启用;
    • 已启用chroot且chroot目录不可写;
    • ftpusers黑名单已覆盖高危账户(如root);
    • user_listuserlist_deny策略符合“白名单优先”原则;
    • 已启用TLS/SSL并禁用不安全协议;
    • 防火墙已放行21/tcp与被动端口段;
    • 已开启xferlog等日志并定期审计;
    • SELinux 布尔值与目录权限配置正确。
  • 推荐配置片段(示例,按实际环境调整):
    • vsftpd.conf(关键项):
      • anonymous_enable=NO
      • local_enable=YES
      • write_enable=YES
      • chroot_local_user=YES
      • allow_writeable_chroot=NO
      • xferlog_enable=YES
      • xferlog_file=/var/log/vsftpd.log
      • pam_service_name=vsftpd
      • guest_enable=YES(虚拟用户时)
      • guest_username=vsftpd(虚拟用户时)
      • virtual_use_local_privs=YES(虚拟用户时)
      • ssl_enable=YES
      • allow_anon_ssl=NO
      • force_local_logins_ssl=YES
      • force_local_data_ssl=YES
      • ssl_tlsv1=YES;ssl_sslv2=NO;ssl_sslv3=NO
      • rsa_cert_file=/etc/pki/tls/certs/your_cert.crt
      • rsa_private_key_file=/etc/pki/tls/private/your_key.key
      • pasv_min_port=10060;pasv_max_port=10090
    • 防火墙:
      • firewall-cmd --permanent --add-port=21/tcp
      • firewall-cmd --permanent --add-port=10060-10090/tcp
      • firewall-cmd --reload
    • 虚拟用户 PAM:/etc/pam.d/vsftpd
      • auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/access
      • account required /lib64/security/pam_userdb.so db=/etc/vsftpd/access

0