首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
技术百科首页 >Hadoop安全 >Hadoop安全如何实现Kerberos认证?

Hadoop安全如何实现Kerberos认证?

词条归属:Hadoop安全

要实现Hadoop的Kerberos认证,需遵循KDC部署→主体创建→配置同步→集群重启→验证测试的完整流程,以下是详细步骤(基于主流Hadoop版本及Kerberos最佳实践):

一、前置准备

  1. 环境要求
  • 所有节点(Master、Slave)安装Kerberos客户端​(如krb5-user或krb5-workstation);
  • 时间同步(Kerberos对时间差敏感,需通过NTP确保所有节点时间一致);
  • 网络连通(KDC服务器与Hadoop集群节点间可互相访问)。

​2. KDC部署

  • 选择独立节点​(如kdc-server)安装Kerberos服务端(如krb5-server);
  • 配置KDC核心文件:
  • /etc/krb5.conf(客户端及服务端均需配置,定义KDC地址、领域、加密类型等): [libdefaults] default_realm = EXAMPLE.COM # Kerberos领域名称(需大写) dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h # 票据有效期 renew_lifetime = 7d # 票据可续期时长 default_tkt_enctypes = aes256-cts-hmac-sha1-96 # 加密类型(需与Hadoop兼容) default_tgs_enctypes = aes256-cts-hmac-sha1-96 [realms] EXAMPLE.COM = { # 领域配置 kdc = kdc-server # KDC服务器地址 admin_server = kdc-server # 管理服务器地址 } [domain_realm] .example.com = EXAMPLE.COM # 域名与领域映射 example.com = EXAMPLE.COM
  • /var/kerberos/krb5kdc/kdc.conf(KDC服务端专属,定义数据库及策略): [kdcdefaults] kdc_ports = 88 # KDC服务端口 kdc_tcp_ports = 88 [realms] EXAMPLE.COM = { database_name = /var/kerberos/krb5kdc/principal # 主体数据库路径 admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab # 管理员keytab acl_file = /var/kerberos/krb5kdc/kadm5.acl # 管理员权限策略 supported_enctypes = aes256-cts:normal aes128-cts:normal # 支持的加密类型 }
  • 初始化Kerberos数据库(首次部署时执行): kdb5_util create -r EXAMPLE.COM -s # -s表示生成stash文件(存储master key)
  • 启动KDC服务: systemctl start krb5kdc # 启动KDC服务 systemctl enable krb5kdc # 设置开机自启 systemctl start kadmin # 启动Kerberos管理工具 systemctl enable kadmin # 设置开机自启

二、创建Kerberos主体

Kerberos主体(Principal)格式为:ServiceName/HostName@REALM(如hdfs/hadoop01@EXAMPLE.COM),需为Hadoop各组件创建对应主体:

  1. 登录Kerberos管理控制台​ 使用Kerberos管理员账号(如admin/admin@EXAMPLE.COM)登录: kadmin.local -q "addprinc admin/admin@EXAMPLE.COM" # 创建管理员主体(首次需设置密码) kadmin.local -q "addprinc cloudera-scm/admin@EXAMPLE.COM" # Cloudera Manager管理员主体(可选)
  2. 为Hadoop组件创建主体​ 根据Hadoop组件(NameNode、DataNode、ResourceManager等)所在主机,创建对应主体:
  • NameNode​(hadoop01节点): kadmin.local -q "addprinc -randkey nn/hadoop01@EXAMPLE.COM" # -randkey表示随机生成密钥
  • DataNode​(hadoop02、hadoop03节点): kadmin.local -q "addprinc -randkey dn/hadoop02@EXAMPLE.COM" kadmin.local -q "addprinc -randkey dn/hadoop03@EXAMPLE.COM"
  • ResourceManager​(hadoop02节点): kadmin.local -q "addprinc -randkey rm/hadoop02@EXAMPLE.COM"
  • NodeManager​(hadoop01、hadoop02、hadoop03节点): kadmin.local -q "addprinc -randkey nm/hadoop01@EXAMPLE.COM" kadmin.local -q "addprinc -randkey nm/hadoop02@EXAMPLE.COM" kadmin.local -q "addprinc -randkey nm/hadoop03@EXAMPLE.COM"
  • Web UI​(所有节点,用于HTTP认证): kadmin.local -q "addprinc -randkey HTTP/hadoop01@EXAMPLE.COM" kadmin.local -q "addprinc -randkey HTTP/hadoop02@EXAMPLE.COM" kadmin.local -q "addprinc -randkey HTTP/hadoop03@EXAMPLE.COM"

​3. 生成Keytab文件​ Keytab文件存储主体密钥,用于服务无交互认证(避免每次启动输入密码)。将生成的Keytab文件复制到对应服务的配置目录(如/etc/security/keytab/),并设置权限: # 为NameNode生成Keytab(hadoop01节点) kadmin.local -q "xst -k /etc/security/keytab/nn.service.keytab nn/hadoop01@EXAMPLE.COM" # 为DataNode生成Keytab(hadoop02节点) kadmin.local -q "xst -k /etc/security/keytab/dn.service.keytab dn/hadoop02@EXAMPLE.COM" # 复制Keytab到所有节点(如通过scp) scp /etc/security/keytab/nn.service.keytab hadoop02:/etc/security/keytab/ scp /etc/security/keytab/nn.service.keytab hadoop03:/etc/security/keytab/ # 设置Keytab权限(仅允许服务用户读取) chmod 400 /etc/security/keytab/*.keytab chown hdfs:hadoop /etc/security/keytab/nn.service.keytab # NameNode Keytab属主为hdfs chown yarn:hadoop /etc/security/keytab/dn.service.keytab # DataNode Keytab属主为yarn

三、配置Hadoop使用Kerberos

修改Hadoop核心配置文件,启用Kerberos认证并关联Kerberos主体:

  1. 修改core-site.xml(所有节点)​​ 启用Kerberos认证、授权及RPC保护: <configuration> <!-- 启用Kerberos认证 --> <property> <name>hadoop.security.authentication</name> <value>kerberos</value> </property> <!-- 启用权限检查 --> <property> <name>hadoop.security.authorization</name> <value>true</value> </property> <!-- RPC通讯仅认证模式(可选:authentication/privacy) --> <property> <name>hadoop.rpc.protection</name> <value>authentication</value> </property> <!-- Kerberos主体到系统用户的映射(如nn/hadoop01@EXAMPLE.COM → hdfs用户) --> <property> <name>hadoop.security.auth_to_local</name> <value> RULE:[2:$1/$2@$0]([nd]n\/.*@EXAMPLE\.COM)s/.*/hdfs/ RULE:[2:$1/$2@$0]([rn]m\/.*@EXAMPLE\.COM)s/.*/yarn/ DEFAULT </value> </property> </configuration>
  2. 修改hdfs-site.xml(所有节点)​​ 配置NameNode、DataNode的Kerberos主体及Keytab路径: <configuration> <!-- NameNode的Kerberos主体 --> <property> <name>dfs.namenode.kerberos.principal</name> <value>nn/hadoop01@EXAMPLE.COM</value> </property> <!-- NameNode的Keytab路径 --> <property> <name>dfs.namenode.keytab.file</name> <value>/etc/security/keytab/nn.service.keytab</value> </property> <!-- DataNode的Kerberos主体 --> <property> <name>dfs.datanode.kerberos.principal</name> <value>dn/hadoop02@EXAMPLE.COM</value> </property> <!-- DataNode的Keytab路径 --> <property> <name>dfs.datanode.keytab.file</name> <value>/etc/security/keytab/dn.service.keytab</value> </property> <!-- Web UI的Kerberos主体(HTTP认证) --> <property> <name>dfs.web.authentication.kerberos.principal</name> <value>HTTP/hadoop01@EXAMPLE.COM</value> </property> <!-- Web UI的Keytab路径 --> <property> <name>dfs.web.authentication.kerberos.keytab</name> <value>/etc/security/keytab/nn.service.keytab</value> </property> </configuration>
  3. 修改yarn-site.xml(所有节点)​​ 配置ResourceManager、NodeManager的Kerberos主体及Keytab路径: <configuration> <!-- ResourceManager的Kerberos主体 --> <property> <name>yarn.resourcemanager.kerberos.principal</name> <value>rm/hadoop02@EXAMPLE.COM</value> </property> <!-- ResourceManager的Keytab路径 --> <property> <name>yarn.resourcemanager.keytab.file</name> <value>/etc/security/keytab/rm.service.keytab</value> </property> <!-- NodeManager的Kerberos主体 --> <property> <name>yarn.nodemanager.kerberos.principal</name> <value>nm/hadoop03@EXAMPLE.COM</value> </property> <!-- NodeManager的Keytab路径 --> <property> <name>yarn.nodemanager.keytab.file</name> <value>/etc/security/keytab/nm.service.keytab</value> </property> <!-- Web UI的Kerberos主体(HTTP认证) --> <property> <name>yarn.resourcemanager.webapp.delegation-token-auth-filter.enabled</name> <value>true</value> </property> </configuration>

四、分发配置与重启集群

  1. 分发配置文件​ 将修改后的core-site.xml、hdfs-site.xml、yarn-site.xml同步到所有Hadoop节点(如通过scp或Ansible)。
  2. 重启Hadoop集群​ 按照NameNode→DataNode→ResourceManager→NodeManager的顺序重启集群(或使用集群管理工具如Cloudera Manager一键重启): # 停止HDFS stop-dfs.sh # 启动HDFS start-dfs.sh # 停止YARN stop-yarn.sh # 启动YARN start-yarn.sh

五、验证Kerberos认证

  1. 用户登录测试​ 使用kinit命令获取Kerberos票据(需输入用户密码): kinit tenantA@EXAMPLE.COM # 租户A用户登录 klist # 查看票据是否有效(应显示tenantA@EXAMPLE.COM的票据)
  2. HDFS操作测试​ 使用认证后的用户访问HDFS,验证认证是否生效: hdfs dfs -ls / # 应返回根目录列表(若未认证则会提示权限不足) hdfs dfs -mkdir /tenantA # 创建租户A目录 hdfs dfs -put test.txt /tenantA # 上传文件到租户A目录
  3. YARN作业测试​ 提交一个MapReduce作业,验证YARN认证是否生效: hadoop jar hadoop-mapreduce-examples-3.1.3.jar pi 2 4 # 计算π值(应正常启动作业)
相关文章
CDH 启用Kerberos安全认证
看错误信息提示是你没有定义realm,这时需要检查/var/kerberos/krb5kdc/kdc.conf和/etc/krb5kdc.conf两文件是否有定义
笨兔儿
2019-05-26
1.3K0
Windows安全认证机制之Kerberos 域认证
Kerberos是由麻省理工学院(MIT)开发的网络身份验证协议,它的主要好处是强大的加密和单点登录(SSO)。Kerberos作为一种可信任的第三方认证服务,是通过传统的密码技术(如共享密钥)实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据的情况下保证通讯安全。
一只特立独行的兔先生
2024-01-23
1.2K0
MongoDB安全实战之Kerberos认证
邓开表同学MongoDB系列文章,本文主要讲诉MongoDB的Kerberos配置实战。MongoDB Enterprise版本支持Kerberos服务认证。Kerberos是大型客户端/服务器系统的行业标准认证协议。上一篇文章是: 1 1、环境准备 需要事先在机器上安装MongoDB Enterprise版本和Kerberos,在这里安装的是MongoDB Enterprise 3.6.2和Kerberos 1.10. 2 2、启动mongod服务,并连接到mongoshell。 3 3、在$extern
企鹅号小编
2018-02-02
1.2K0
Hadoop HDFS-认证(Kerberos) 简介及入门
作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2025-07-27
3270
Hadoop HDFS-认证(Kerberos) 部署与配置
作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2025-07-27
2980
点击加载更多
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
领券