本文档风哥主要介绍Hadoop集群安全加固,包括Kerberos认证、权限控制、审计日志等内容,风哥教程参考Hadoop官方文档Security等内容,适合大数据运维人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 安全加固概述
Hadoop集群安全加固是保障数据安全的重要措施,需要建立完善的安全体系。学习交流加群风哥微信: itpux-com
- 身份认证:确认用户身份
- 权限控制:控制访问权限
- 数据加密:保护数据安全
- 审计日志:记录操作行为
安全加固是保障大数据平台安全的基础,
需要从多个维度进行防护。
主要目标:
1. 数据安全
– 防止数据泄露
– 防止数据篡改
– 防止数据丢失
2. 服务安全
– 防止未授权访问
– 防止服务攻击
– 保障服务可用
3. 合规要求
– 满足安全合规
– 满足审计要求
– 满足监管要求
# 安全威胁类型
威胁类型 描述 影响
未授权访问 无权限用户访问数据 数据泄露
数据篡改 恶意修改数据 数据损坏
拒绝服务 攻击导致服务不可用 业务中断
中间人攻击 截获通信数据 数据泄露
权限提升 获取更高权限 全面风险
# 安全架构
┌─────────────────────────────────────────┐
│ 应用层安全 │
│ 访问控制、数据脱敏、审计日志 │
├─────────────────────────────────────────┤
│ 服务层安全 │
│ Kerberos认证、权限控制、加密传输 │
├─────────────────────────────────────────┤
│ 网络层安全 │
│ 防火墙、VPN、网络隔离 │
├─────────────────────────────────────────┤
│ 系统层安全 │
│ 操作系统加固、用户管理、日志审计 │
└─────────────────────────────────────────┘
# 安全加固原则
1. 最小权限原则
只授予必要的权限
2. 纵深防御原则
多层次安全防护
3. 安全审计原则
记录所有操作行为
4. 及时更新原则
及时修复安全漏洞
5. 定期评估原则
定期进行安全评估
1.2 安全模型介绍
安全模型介绍:
1. 认证(Authentication)
目的: 确认用户身份
方式: Kerberos认证
流程:
1. 用户向KDC请求票据
2. KDC验证用户身份
3. KDC发放票据(TGT)
4. 用户使用票据访问服务
2. 授权(Authorization)
目的: 控制访问权限
方式: ACL、权限控制
HDFS权限:
– 用户权限: rwx
– 组权限: rwx
– 其他权限: rwx
YARN权限:
– 队列权限
– 应用权限
– 管理权限
3. 审计(Auditing)
目的: 记录操作行为
方式: 审计日志
审计内容:
– 用户身份
– 操作类型
– 操作对象
– 操作时间
– 操作结果
# Kerberos认证模型
组件 说明
KDC 密钥分发中心
AS 认证服务
TGS 票据授予服务
Principal 主体(用户/服务)
Ticket 票据
Keytab 密钥表文件
认证流程:
1. 用户 -> AS: 请求TGT
2. AS -> 用户: 返回TGT(用用户密码加密)
3. 用户 -> TGS: 请求服务票据(带TGT)
4. TGS -> 用户: 返回服务票据
5. 用户 -> 服务: 请求服务(带服务票据)
6. 服务 -> 用户: 提供服务
# 权限控制模型
1. HDFS ACL
类型: 用户ACL、组ACL、默认ACL
命令: hdfs dfs -setacl, -getfacl
2. YARN队列ACL
配置: yarn.scheduler.capacity.root.acl_submit_applications
权限: 提交权限、管理权限
3. Ranger权限(可选)
功能: 细粒度权限控制
支持: HDFS、Hive、HBase等
# 数据加密模型
1. 传输加密
方式: RPC加密、HTTPS
配置: hadoop.rpc.protection=privacy
2. 存储加密
方式: 透明数据加密(TDE)
配置: dfs.encryption.key.provider
3. 数据脱敏
方式: 动态脱敏、静态脱敏
工具: Ranger、自定义脚本
1.3 安全组件介绍
安全组件介绍:
Kerberos是网络认证协议,
提供强身份认证。
特点:
– 基于票据认证
– 单点登录
– 防止重放攻击
安装:
$ yum install krb5-server krb5-libs krb5-workstation
配置文件:
/etc/krb5.conf
/var/kerberos/krb5kdc/kdc.conf
# Apache Ranger
Ranger是Hadoop安全管理框架,
提供细粒度权限控制。
功能:
– 统一权限管理
– 细粒度访问控制
– 审计日志
– 数据脱敏
支持组件:
– HDFS
– YARN
– Hive
– HBase
– Kafka
– Spark
# Apache Atlas
Atlas是数据治理平台,
提供数据血缘和元数据管理。
功能:
– 数据分类
– 数据血缘
– 元数据管理
– 安全合规
# 审计日志
HDFS审计日志:
路径: /bigdata/app/hadoop/logs/hdfs-audit.log
内容: 文件操作记录
YARN审计日志:
路径: /bigdata/app/hadoop/logs/yarn-audit.log
内容: 应用操作记录
# 安全工具对比
工具 功能 适用场景
Kerberos 身份认证 基础认证
Ranger 权限管理 细粒度控制
Atlas 数据治理 数据血缘
LDAP 用户管理 用户目录
Part02-生产环境规划与建议
2.1 环境规划建议
环境规划建议:
组件 配置 数量
KDC服务器 4C/8G/100G 2(主备)
Ranger Admin 4C/8G/100G 2
Ranger UserSync 2C/4G/50G 1
# 网络规划
端口 用途
88 Kerberos KDC
749 Kerberos Admin
6080 Ranger Admin
5151 Ranger UserSync
# 用户规划
用户类型 命名规范 示例
服务用户 服务名 hdfs, yarn, hive
业务用户 业务_用户名 fgedu_etl
管理用户 admin_用户名 admin_root
# 权限规划
角色 权限范围
超级管理员 所有权限
安全管理员 安全配置权限
审计管理员 审计日志权限
业务用户 业务数据权限
2.2 Kerberos规划建议
Kerberos规划建议:
Realm名称: FGEDU.NET.CN
格式: 大写域名
# Principal规划
类型 格式 示例
用户Principal user@REALM fgedu@FGEDU.NET.CN
服务Principal service/hostname@REALM hdfs/fgedu-node1@FGEDU.NET.CN
# Keytab规划
服务 Keytab路径
NameNode /etc/security/keytabs/nn.service.keytab
DataNode /etc/security/keytabs/dn.service.keytab
ResourceManager /etc/security/keytabs/rm.service.keytab
NodeManager /etc/security/keytabs/nm.service.keytab
# 票据策略
参数 默认值 建议值
max_life 24h 24h
max_renewable_life 7d 7d
2.3 ACL规划建议
ACL规划建议:
目录 权限 所有者 组
/ 755 hdfs hadoop
/user 755 hdfs hadoop
/user/fgedu 750 fgedu fgedu
/tmp 1777 hdfs hadoop
/apps 755 hdfs hadoop
# YARN队列权限规划
队列 提交权限 管理权限
root * *
root.default * root
root.fgedu fgedu,hadoop root,fgedu
# 权限策略
1. 最小权限原则
只授予必要的权限
2. 职责分离原则
不同角色不同权限
3. 定期审计原则
定期审查权限配置
Part03-生产环境项目实施方案
3.1 Kerberos部署实战
$ yum install -y krb5-server krb5-libs krb5-workstation
# 2. 配置krb5.conf
$ cat > /etc/krb5.conf << 'EOF'
[libdefaults]
default_realm = FGEDU.NET.CN
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
FGEDU.NET.CN = {
kdc = fgedu-node1
admin_server = fgedu-node1
}
[domain_realm]
.fgedu.net.cn = FGEDU.NET.CN
fgedu.net.cn = FGEDU.NET.CN
EOF
# 3. 配置kdc.conf
$ cat > /var/kerberos/krb5kdc/kdc.conf << 'EOF'
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
FGEDU.NET.CN = {
max_life = 24h
max_renewable_life = 7d
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal
}
EOF
# 4. 配置kadm5.acl
$ cat > /var/kerberos/krb5kdc/kadm5.acl << 'EOF'
*/admin@FGEDU.NET.CN *
EOF
# 5. 创建数据库
$ kdb5_util create -r FGEDU.NET.CN -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'FGEDU.NET.CN',
master key name 'K/M@FGEDU.NET.CN'
Enter KDC database master key:
Re-enter KDC database master key to verify:
# 6. 创建管理员
$ kadmin.local
kadmin.local: addprinc root/admin
Enter password for principal "root/admin@FGEDU.NET.CN":
Re-enter password for principal "root/admin@FGEDU.NET.CN":
Principal "root/admin@FGEDU.NET.CN" created.
kadmin.local: exit
# 7. 启动Kerberos服务
$ systemctl start krb5kdc
$ systemctl start kadmin
$ systemctl enable krb5kdc
$ systemctl enable kadmin
# 8. 创建服务Principal
$ kadmin.local
kadmin.local: addprinc -randkey hdfs/fgedu-node1@FGEDU.NET.CN
kadmin.local: addprinc -randkey yarn/fgedu-node1@FGEDU.NET.CN
kadmin.local: addprinc -randkey HTTP/fgedu-node1@FGEDU.NET.CN
kadmin.local: exit
# 9. 创建Keytab文件
$ kadmin.local
kadmin.local: xst -k /etc/security/keytabs/hdfs.service.keytab hdfs/fgedu-node1
kadmin.local: xst -k /etc/security/keytabs/yarn.service.keytab yarn/fgedu-node1
kadmin.local: exit
# 10. 验证
$ kinit hdfs/fgedu-node1@FGEDU.NET.CN -k -t /etc/security/keytabs/hdfs.service.keytab
$ klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: hdfs/fgedu-node1@FGEDU.NET.CN
Valid starting Expires Service principal
04/08/2026 10:00:00 04/09/2026 10:00:00 krbtgt/FGEDU.NET.CN@FGEDU.NET.CN
3.2 Hadoop安全配置实战
$ cat >> /bigdata/app/hadoop/etc/hadoop/core-site.xml << 'EOF'
RULE:[2:$1@$0](hdfs@FGEDU.NET.CN)s/.*/hdfs/
RULE:[2:$1@$0](yarn@FGEDU.NET.CN)s/.*/yarn/
DEFAULT
# 2. 配置hdfs-site.xml
$ cat >> /bigdata/app/hadoop/etc/hadoop/hdfs-site.xml << 'EOF'
# 3. 配置yarn-site.xml
$ cat >> /bigdata/app/hadoop/etc/hadoop/yarn-site.xml << 'EOF'
# 4. 配置HDFS ACL
# 启用ACL
$ cat >> /bigdata/app/hadoop/etc/hadoop/hdfs-site.xml << 'EOF'
# 5. 重启服务
$ stop-dfs.sh
$ start-dfs.sh
$ stop-yarn.sh
$ start-yarn.sh
# 6. 验证安全配置
# 获取票据
$ kinit hdfs/fgedu-node1@FGEDU.NET.CN -k -t /etc/security/keytabs/hdfs.service.keytab
# 测试访问
$ hdfs dfs -ls /
Found 5 items
drwxr-xr-x – hdfs hadoop 0 2026-04-08 10:00 /apps
drwxr-xr-x – hdfs hadoop 0 2026-04-08 10:00 /tmp
drwxr-xr-x – hdfs hadoop 0 2026-04-08 10:00 /user
# 未认证访问失败
$ kdestroy
$ hdfs dfs -ls /
ls: Failed on local exception: java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed
3.3 审计配置实战
$ cat >> /bigdata/app/hadoop/etc/hadoop/hdfs-site.xml << 'EOF'
# 2. 配置log4j
$ cat >> /bigdata/app/hadoop/etc/hadoop/log4j.properties << 'EOF'
# HDFS Audit Logging
hdfs.audit.logger=INFO,RFAAUDIT
log4j.logger.org.apache.hadoop.hdfs.server.namenode.FSNamesystem.audit=${hdfs.audit.logger}
log4j.additivity.org.apache.hadoop.hdfs.server.namenode.FSNamesystem.audit=false
log4j.appender.RFAAUDIT=org.apache.log4j.RollingFileAppender
log4j.appender.RFAAUDIT.File=${hadoop.log.dir}/hdfs-audit.log
log4j.appender.RFAAUDIT.MaxFileSize=256MB
log4j.appender.RFAAUDIT.MaxBackupIndex=10
log4j.appender.RFAAUDIT.layout=org.apache.log4j.PatternLayout
log4j.appender.RFAAUDIT.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
EOF
# 3. 重启NameNode
$ hdfs --daemon stop namenode
$ hdfs --daemon start namenode
# 4. 查看审计日志
$ tail -f /bigdata/app/hadoop/logs/hdfs-audit.log
2026-04-08 10:00:00,000 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem.audit: allowed=true ugi=hdfs@FGEDU.NET.CN auth=KERBEROS ip=/192.168.1.100 cmd=listStatus src=/ dst=null perm=null
# 5. 审计日志分析脚本
$ cat > /tmp/audit_analysis.sh << 'EOF'
#!/bin/bash
# audit_analysis.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
AUDIT_LOG="/bigdata/app/hadoop/logs/hdfs-audit.log"
echo "=== 审计日志分析 $(date) ==="
# 用户操作统计
echo ""
echo "=== 用户操作统计 ==="
awk -F'\t' '{
for(i=1;i<=NF;i++) {
if($i ~ /^ugi=/) print $i
}
}' $AUDIT_LOG | cut -d'=' -f2 | sort | uniq -c | sort -rn | head -10
# 操作类型统计
echo ""
echo "=== 操作类型统计 ==="
awk -F'\t' '{
for(i=1;i<=NF;i++) {
if($i ~ /^cmd=/) print $i
}
}' $AUDIT_LOG | cut -d'=' -f2 | sort | uniq -c | sort -rn
# 拒绝访问统计
echo ""
echo "=== 拒绝访问统计 ==="
grep "allowed=false" $AUDIT_LOG | head -10
EOF
$ chmod +x /tmp/audit_analysis.sh
$ /tmp/audit_analysis.sh
=== 审计日志分析 2026年 04月 08日 11:00:00 CST ===
=== 用户操作统计 ===
5678 hdfs@FGEDU.NET.CN
2345 fgedu@FGEDU.NET.CN
123 hive@FGEDU.NET.CN
=== 操作类型统计 ===
5678 cmd=listStatus
2345 cmd=open
1234 cmd=create
567 cmd=delete
=== 拒绝访问统计 ===
2026-04-08 10:00:00,000 INFO ... allowed=false ... ugi=fgedu@FGEDU.NET.CN ... cmd=open src=/user/root/secret.txt
Part04-生产案例与实战讲解
4.1 安全加固案例
# 1. 安全需求
– 身份认证: Kerberos
– 权限控制: HDFS ACL + Ranger
– 数据加密: 传输加密 + 存储加密
– 审计日志: 完整审计
# 2. 实施步骤
# 步骤1: 部署Kerberos
# (参考3.1节)
# 步骤2: 配置Hadoop安全
# (参考3.2节)
# 步骤3: 部署Ranger
$ tar -xzf ranger-2.4.0.tar.gz
$ cd ranger-2.4.0
$ mvn clean package -DskipTests
# 配置Ranger Admin
$ ./setup.sh
# 步骤4: 配置权限策略
# Ranger UI -> Resource Based Policies -> HDFS
# 创建策略:
# – 路径: /user/fgedu
# – 用户: fgedu
# – 权限: read, write, execute
# 步骤5: 配置加密
# 传输加密
$ cat >> /bigdata/app/hadoop/etc/hadoop/core-site.xml << 'EOF'
# 存储加密
$ hdfs crypto -createZone -path /user/fgedu/secure -keyName fgedukey
# 3. 验证安全配置
# 认证测试
$ kinit fgedu@FGEDU.NET.CN
Password for fgedu@FGEDU.NET.CN:
# 权限测试
$ hdfs dfs -ls /user/root
ls: Permission denied: user=fgedu, access=READ_EXECUTE, inode=”/user/root”:root:hadoop:drwx——
# 审计测试
$ grep “fgedu” /bigdata/app/hadoop/logs/hdfs-audit.log | tail -5
4.2 审计分析案例
# 1. 审计需求
– 发现异常访问行为
– 追踪敏感数据访问
– 合规审计报告
# 2. 审计分析
# 查找敏感目录访问
$ grep “/user/fgedu/secure” /bigdata/app/hadoop/logs/hdfs-audit.log
# 查找删除操作
$ grep “cmd=delete” /bigdata/app/hadoop/logs/hdfs-audit.log
# 查找权限变更
$ grep -E “setOwner|setPermission” /bigdata/app/hadoop/logs/hdfs-audit.log
# 查找拒绝访问
$ grep “allowed=false” /bigdata/app/hadoop/logs/hdfs-audit.log
# 3. 审计报告生成
$ cat > /tmp/audit_report.sh << 'EOF'
#!/bin/bash
# audit_report.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
AUDIT_LOG="/bigdata/app/hadoop/logs/hdfs-audit.log"
REPORT="/tmp/audit_report_$(date +%Y%m%d).txt"
echo "=== HDFS审计报告 $(date) ===" > $REPORT
echo “” >> $REPORT
echo “一、访问统计” >> $REPORT
echo “总访问次数: $(wc -l < $AUDIT_LOG)" >> $REPORT
echo “用户数: $(awk -F’\t’ ‘{for(i=1;i<=NF;i++) if($i ~ /^ugi=/) print $i}' $AUDIT_LOG | cut -d'=' -f2 | sort -u | wc -l)" >> $REPORT
echo “” >> $REPORT
echo “二、拒绝访问” >> $REPORT
grep “allowed=false” $AUDIT_LOG >> $REPORT
echo “” >> $REPORT
echo “三、敏感操作” >> $REPORT
grep -E “cmd=delete|cmd=setOwner” $AUDIT_LOG >> $REPORT
mail -s “HDFS审计报告 $(date +%Y%m%d)” admin@fgedu.com < $REPORT EOF $ chmod +x /tmp/audit_report.sh $ /tmp/audit_report.sh
4.3 常见问题处理
4.3.1 Kerberos认证失败
# 排查步骤
# 1. 检查KDC服务
$ systemctl status krb5kdc
# 2. 检查时间同步
$ ntpdate -q pool.ntp.org
# 3. 检查Principal
$ klist -kt /etc/security/keytabs/hdfs.service.keytab
# 4. 检查日志
$ tail -f /var/log/krb5kdc.log
# 常见原因
– 时间不同步
– Principal不存在
– Keytab文件损坏
– 配置错误
4.3.2 权限拒绝
# 排查步骤
# 1. 检查用户身份
$ klist
# 2. 检查文件权限
$ hdfs dfs -ls /path/to/file
# 3. 检查ACL
$ hdfs dfs -getfacl /path/to/file
# 解决方案
# 添加权限
$ hdfs dfs -chmod 755 /path/to/file
$ hdfs dfs -setfacl -m user:fgedu:rwx /path/to/file
Part05-风哥经验总结与分享
5.1 安全加固最佳实践
安全加固最佳实践建议:
1. 启用Kerberos认证
2. 配置细粒度权限
3. 开启审计日志
4. 定期安全评估
5. 及时更新补丁
5.2 使用建议
使用建议:
- 安全要全面考虑
- 权限要最小授予
- 审计要完整记录
- 评估要定期进行
5.3 工具推荐
安全工具推荐:
- Kerberos:身份认证
- Ranger:权限管理
- Atlas:数据治理
- 审计日志:操作审计
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
