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
- 重新加载防火墙:
- 放行 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 存在一定安全隐患,仅在确有写入需求时启用,并确保目录权限最小化。