CentOS 上保障 HDFS 数据安全的可落地方案
一 身份与访问控制
- 启用强认证:将 Hadoop 配置为 Kerberos 认证,确保只有合法用户与服务可接入集群。
- 启用权限校验与 ACL:在 hdfs-site.xml 中开启 dfs.permissions.enabled=true、dfs.namenode.acls.enabled=true,用 POSIX 权限结合 ACL 实现细粒度授权。
- 合理设置默认权限:通过 fs.permissions.umask-mode 调整新建文件/目录的默认权限,例如设为 077 可让新建文件默认仅属主可读写。
- 关键目录加固:如将 /user 设为 1777(粘滞位),防止非属主删除他人文件;业务目录按最小权限原则配置。
- 示例命令:
- 查看/设置 ACL:
hdfs dfs -getfacl /path;hdfs dfs -setfacl -m user:alice:rwx /path
- 修改默认 umask(Manager 或配置文件方式):将 fs.permissions.umask-mode 设为 077 并重启相关实例生效。
二 加密体系 传输与静态
- 传输加密:开启 SSL/TLS 对客户端与服务端、节点间通信进行加密,防止链路窃听与篡改。
- 静态加密 TDE:使用 HDFS 透明数据加密(TDE),对写入指定目录的数据自动加密、读取时自动解密,应用无需改造。
- 核心机制:创建 加密区域(Encryption Zone),每个文件拥有唯一 DEK,NameNode 仅存储 EDEK;客户端经 KMS 解密 EDEK 后使用 DEK 加解密。
- 关键配置:在 core-site.xml 设置 hadoop.security.key.provider.path 指向 KMS/KeyProvider;使用 CLI 管理密钥与加密区域:
hdfs crypto -createZone -keyName <key> -path <dir>。
- 复制与兼容性:跨加密区使用 DistCp 时需遵循加密区语义与注意事项。
三 网络安全与系统加固
- 边界防护:用 firewalld/iptables 仅开放 NameNode、DataNode 等必要端口,限制来源网段,最小化暴露面。
- 主机加固:在 CentOS 上禁用不必要的超级用户与高危服务,强制复杂口令策略,限制 su 使用,保护 /etc/shadow 等关键文件,设置 root TMOUT 自动注销,启用 SELinux 提升系统态安全。
- 节点互联:配置 SSH 互信 仅用于受控的运维自动化,禁止滥用;保持系统与安全补丁的及时更新。
四 审计监控与可用性
- 审计与日志:启用并集中 HDFS 审计日志 与系统日志(如 rsyslog/journald),设置合理的保留与轮转策略,便于合规与溯源。
- 完整性校验:HDFS 在读写路径进行 校验和 检查,及时发现存储或传输过程中的数据损坏。
- 备份与恢复:制定定期备份与异地容灾策略,定期演练恢复流程,降低灾难性损失。
- 运行期防护:在维护或异常恢复时,合理利用 安全模式(Safemode) 保护数据块一致性(只读、禁止写入/元数据变更)。
- 监控告警:部署监控与告警系统,对异常访问、权限变更、磁盘/网络异常等进行实时监测与处置。
五 关键配置与命令清单
- 最小权限基线(示例):
- 启用权限与 ACL:
- dfs.permissions.enabled=true
- dfs.namenode.acls.enabled=true
- 目录与数据目录权限:
- hdfs dfs -chmod 1777 /user
- dfs.datanode.data.dir.perm=700;dfs.namenode.name.dir.perm=700
- 默认 umask(更严格):fs.permissions.umask-mode=077
- 加密与 KMS:
- core-site.xml:hadoop.security.key.provider.path=kms://
- 创建加密区:hdfs crypto -createZone -keyName mykey -path /data/enc
- 审计日志(示例路径与滚动参数):
- hadoop.security.audit.log.path=/var/log/hadoop-hdfs/audit.log
- hadoop.security.audit.log.maxsize=1000000;hadoop.security.audit.log.maxbackupindex=10
- 网络与主机:
- firewalld/iptables 仅放行 NameNode/DataNode 端口与必要管理网段
- SELinux 启用并设定合适策略;SSH 互信仅用于受控运维场景