1. 首页 > Hadoop教程 > 正文

大数据教程FG095-Hadoop集群安全加固

本文档风哥主要介绍Hadoop集群安全加固,包括Kerberos认证、权限控制、审计日志等内容,风哥教程参考Hadoop官方文档Security等内容,适合大数据运维人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 安全加固概述

Hadoop集群安全加固是保障数据安全的重要措施,需要建立完善的安全体系。学习交流加群风哥微信: itpux-com

安全加固核心要素:

  • 身份认证:确认用户身份
  • 权限控制:控制访问权限
  • 数据加密:保护数据安全
  • 审计日志:记录操作行为
# Hadoop安全加固简介

安全加固是保障大数据平台安全的基础,
需要从多个维度进行防护。

主要目标:
1. 数据安全
– 防止数据泄露
– 防止数据篡改
– 防止数据丢失

2. 服务安全
– 防止未授权访问
– 防止服务攻击
– 保障服务可用

3. 合规要求
– 满足安全合规
– 满足审计要求
– 满足监管要求

# 安全威胁类型

威胁类型 描述 影响
未授权访问 无权限用户访问数据 数据泄露
数据篡改 恶意修改数据 数据损坏
拒绝服务 攻击导致服务不可用 业务中断
中间人攻击 截获通信数据 数据泄露
权限提升 获取更高权限 全面风险

# 安全架构

┌─────────────────────────────────────────┐
│ 应用层安全 │
│ 访问控制、数据脱敏、审计日志 │
├─────────────────────────────────────────┤
│ 服务层安全 │
│ Kerberos认证、权限控制、加密传输 │
├─────────────────────────────────────────┤
│ 网络层安全 │
│ 防火墙、VPN、网络隔离 │
├─────────────────────────────────────────┤
│ 系统层安全 │
│ 操作系统加固、用户管理、日志审计 │
└─────────────────────────────────────────┘

# 安全加固原则

1. 最小权限原则
只授予必要的权限

2. 纵深防御原则
多层次安全防护

3. 安全审计原则
记录所有操作行为

4. 及时更新原则
及时修复安全漏洞

5. 定期评估原则
定期进行安全评估

1.2 安全模型介绍

安全模型介绍:

# Hadoop安全模型

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

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规划

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规划建议:

# HDFS目录权限规划

目录 权限 所有者 组
/ 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. 定期审计原则
定期审查权限配置

生产环境建议:生产环境建议启用Kerberos认证,配置细粒度权限控制,开启审计日志。定期进行安全评估和漏洞扫描。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 Kerberos部署实战

# 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安全配置实战

# 1. 配置core-site.xml
$ cat >> /bigdata/app/hadoop/etc/hadoop/core-site.xml << 'EOF' hadoop.security.authentication
kerberos
hadoop.security.authorization
true
hadoop.security.auth_to_local

RULE:[2:$1@$0](hdfs@FGEDU.NET.CN)s/.*/hdfs/
RULE:[2:$1@$0](yarn@FGEDU.NET.CN)s/.*/yarn/
DEFAULT
EOF

# 2. 配置hdfs-site.xml
$ cat >> /bigdata/app/hadoop/etc/hadoop/hdfs-site.xml << 'EOF' dfs.block.access.token.enable
true
dfs.namenode.keytab.file
/etc/security/keytabs/hdfs.service.keytab
dfs.namenode.kerberos.principal
hdfs/_HOST@FGEDU.NET.CN
dfs.namenode.kerberos.internal.spnego.principal
HTTP/_HOST@FGEDU.NET.CN
dfs.datanode.keytab.file
/etc/security/keytabs/hdfs.service.keytab
dfs.datanode.kerberos.principal
hdfs/_HOST@FGEDU.NET.CN
dfs.datanode.data.dir.perm
700
dfs.web.authentication.kerberos.principal
HTTP/_HOST@FGEDU.NET.CN
dfs.web.authentication.kerberos.keytab
/etc/security/keytabs/spnego.service.keytab
EOF

# 3. 配置yarn-site.xml
$ cat >> /bigdata/app/hadoop/etc/hadoop/yarn-site.xml << 'EOF' yarn.resourcemanager.keytab
/etc/security/keytabs/yarn.service.keytab
yarn.resourcemanager.principal
yarn/_HOST@FGEDU.NET.CN
yarn.nodemanager.keytab
/etc/security/keytabs/yarn.service.keytab
yarn.nodemanager.principal
yarn/_HOST@FGEDU.NET.CN
EOF

# 4. 配置HDFS ACL
# 启用ACL
$ cat >> /bigdata/app/hadoop/etc/hadoop/hdfs-site.xml << 'EOF' dfs.namenode.acls.enabled
true
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 审计配置实战

# 1. 配置HDFS审计日志
$ cat >> /bigdata/app/hadoop/etc/hadoop/hdfs-site.xml << 'EOF' dfs.namenode.audit.log.enabled
true
dfs.namenode.audit.log.token.tracking
true
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

风哥提示:安全加固需要全面考虑,包括认证、授权、加密、审计等方面。建议在生产环境启用Kerberos认证,配置细粒度权限控制。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 安全加固案例

# 案例:企业级Hadoop安全加固

# 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' hadoop.rpc.protection
privacy
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认证失败

# 问题现象: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:数据治理
  • 审计日志:操作审计
风哥提示:安全加固是保障数据安全的重要措施。建议建立完善的安全体系,定期进行安全评估和漏洞扫描,及时修复安全问题。from bigdata视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息