温馨提示×

CentOS中VSFTP安全设置怎么做

小樊
42
2025-11-23 17:49:10
栏目: 智能运维

CentOS 中 VSFTP 安全设置清单

一 基础加固

  • 禁用匿名访问,仅允许本地系统用户登录,并开启基本日志与连接安全:
    • 编辑配置文件:/etc/vsftpd/vsftpd.conf
    • 建议关键项:
      • anonymous_enable=NO
      • local_enable=YES
      • write_enable=YES
      • local_umask=022
      • dirmessage_enable=YES
      • xferlog_enable=YES
      • connect_from_port_20=YES
      • chroot_local_user=YES
      • secure_chroot_dir=/var/run/vsftpd/empty
      • pam_service_name=vsftpd
      • userlist_enable=YES
    • 说明:chroot_local_user=YES 会将本地用户限制在其主目录;日志默认写入 /var/log/xferlog,也可结合系统日志审计。完成后重启服务:systemctl restart vsftpd。以上设置能显著降低匿名与越权访问风险,并提供必要的传输审计能力。

二 用户访问控制

  • 使用两个关键文件进行登录控制:
    • /etc/vsftpd/ftpusers:系统级黑名单,列出如 root 等高权限账户,条目在此文件中将始终被拒绝,优先级高于其他配置。
    • /etc/vsftpd/user_list:配合参数决定是黑名单还是白名单:
      • userlist_enable=YES
      • userlist_deny=YES:列表内为黑名单(默认行为)
      • userlist_deny=NO:列表内为白名单(仅允许列表内用户登录)
  • 示例(白名单模式):
    • 在 vsftpd.conf 中设置:userlist_enable=YES、userlist_deny=NO
    • 在 /etc/vsftpd/user_list 中仅保留允许登录的本地用户(每行一个用户名)
  • 说明:两个文件作用不同、可叠加使用;ftpusers 为强制黑名单,务必确保关键系统账户被列入其中。

三 主机访问控制与防火墙

  • CentOS 8 及更新版本中,系统不再推荐使用 tcp_wrappers(/etc/hosts.allow、/etc/hosts.deny)来控制 vsftpd 的访问,建议改用 firewalld 进行基于 IP 的允许/拒绝:
    • 拒绝某网段访问 FTP:
      • firewall-cmd --permanent --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.0/24” reject’ --permanent
    • 重新加载防火墙:
      • firewall-cmd --reload
  • 放行 FTP 服务或端口(配合被动模式端口段):
    • 放行服务:firewall-cmd --permanent --add-service=ftp && firewall-cmd --reload
    • 或放行端口:firewall-cmd --permanent --add-port=21/tcp(以及被动模式端口段,见第四节)
  • 说明:使用 firewalld 的 rich rule 能更灵活地按源地址实施拒绝/允许策略,替代过时的 tcp_wrappers 做法。

四 加密传输与被动模式端口

  • 启用 TLS/SSL 加密(推荐 FTPS):
    • 准备证书(示例自签,生产环境请使用受信任 CA):
      • 生成私钥与证书请求:openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.key -out /etc/vsftpd/vsftpd.crt
      • 设置权限:chmod 600 /etc/vsftpd/vsftpd.key
    • vsftpd.conf 关键项:
      • ssl_enable=YES
      • allow_anon_ssl=NO
      • force_local_data_ssl=YES
      • force_local_logins_ssl=YES
      • ssl_tlsv1_2=YES
      • rsa_cert_file=/etc/vsftpd/vsftpd.crt
      • rsa_private_key_file=/etc/vsftpd/vsftpd.key
  • 被动模式端口范围与防火墙放行:
    • vsftpd.conf:
      • pasv_enable=YES
      • pasv_min_port=40000
      • pasv_max_port=50000
    • 防火墙放行端口段:
      • firewall-cmd --permanent --add-port=40000-50000/tcp && firewall-cmd --reload
  • 说明:启用 TLS/SSL 可防止明文凭据与数据泄露;配置被动端口段并在防火墙放行,可确保数据通道在 NAT/云环境中稳定工作。

五 用户隔离与目录权限

  • 用户禁锢与可写根目录:
    • 全局禁锢:chroot_local_user=YES(所有本地用户限制在其主目录)
    • 如确需被禁锢用户对主目录有写入权限,开启:allow_writeable_chroot=YES(注意安全影响)
    • 也可采用“例外名单”方式:chroot_list_enable=YES、chroot_list_file=/etc/vsftpd/chroot_list,结合 chroot_local_user 的值决定“名单内/外”用户的禁锢策略(两种组合语义相反,务必按注释与版本说明核对)。
  • 创建受限 FTP 用户与目录:
    • 新建系统用户仅用于 FTP:useradd -d /home/ftpuser -s /sbin/nologin ftpuser
    • 设置密码:passwd ftpuser
    • 目录与权限示例:
      • 主目录:chown ftpuser:ftpuser /home/ftpuser && chmod 755 /home/ftpuser
      • 仅允许上传的子目录:mkdir -p /home/ftpuser/upload && chown ftpuser:ftpuser /home/ftpuser/upload && chmod 755 /home/ftpuser/upload
  • SELinux 场景:
    • 如遇权限问题,可核对目录上下文或按需调整(示例:chcon -Rv --reference=/var/www/html /home/yourusername);不建议直接关闭 SELinux,必要时仅做最小范围策略调整。
  • 说明:chroot 能有效降低被攻破后的横向移动风险;allow_writeable_chroot 存在一定安全隐患,仅在确有写入需求时启用,并确保目录权限最小化。

0