最全【kerberos】hadoop集群使用keytab认证的逻辑_centos 8 hadoop-2,2024年最新为了跳槽强刷1000道大数据开发真题

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

Caused by: javax.security.auth.login.LoginException: null (68)
Caused by: KrbException: null (68)
Caused by: KrbException: Identifier doesn’t match expected value (906)


#### 2、hadoop conf信息配置


Hadoop configuration配置(类`org.apache.hadoop.conf.Configuration`)  
 文档中明确了:会默认加载类路径下的`core-default.xml`文件内容。



Unless explicitly turned off, Hadoop by default specifies two resources, loaded in-order from the classpath:
core-default.xml: Read-only defaults for hadoop.
core-site.xml: Site-specific configuration for a given hadoop installation.


`core-default.xml`中含有hadoop的安全配置`hadoop.security.authentication`,在`UserGroupInformation`中依据此项配置,查询集群是否启动kerberos。  
 HADOOP\_SECURITY\_AUTHENTICATION路径如下:  
 `org.apache.hadoop.fs.CommonConfigurationKeysPublic#HADOOP_SECURITY_AUTHENTICATION`



public static AuthenticationMethod getAuthenticationMethod(Configuration conf) {
String value = conf.get(HADOOP_SECURITY_AUTHENTICATION, “simple”);
try {
return Enum.valueOf(AuthenticationMethod.class,
StringUtils.toUpperCase(value));
} catch (IllegalArgumentException iae) {
throw new IllegalArgumentException("Invalid attribute value for " +
HADOOP_SECURITY_AUTHENTICATION + " of " + value);
}
}


所以如果在环境变量中配置了`HADOOP_HOME`或者`HADOOP_CONF_DIR`对于`UserGroupInformation`是没有用的。  
 必须将`core-site.xml`放在类路径下,或者直接调用`org.apache.hadoop.security.UserGroupInformation#setConfiguration`设置加载过core-site.xml的conf对象。


#### 3、UserGroupInformation认证


##### 3.1 、apache原生的UserGroupInformation验证:


UserGroupInformation类中使用静态变量存放hadoop conf和已认证用户信息,所以只需要程序中认证一次,不同类不需要传递认证的user,只需要都到UserGroupInformation取即可。



private static Configuration conf;
private static UserGroupInformation loginUser = null;
private static String keytabPrincipal = null;
private static String keytabFile = null;

调用`org.apache.hadoop.security.UserGroupInformation#loginUserFromKeytab`传入principal和keytab就可以完成认证。


##### 3.2、cloudera改良过的UserGroupInformation验证:


当然,可以调用原生的`loginUserFromKeytab`也可以。


改良内容就是通过配置环境变量的方法,`隐性`完成kerberos用户认证。无需UserGroupInformation认证,在调用`getLoginUser`可以自动完成认证。  
 具体过程如下:  
 `org.apache.hadoop.security.UserGroupInformation#getLoginUser`方法获取用户



public static UserGroupInformation getLoginUser() throws IOException {

if (loginUser == null) {
UserGroupInformation newLoginUser = createLoginUser(null);

}
}


实际是调用了`doSubjectLogin(null, null)`



UserGroupInformation createLoginUser(Subject subject) throws IOException {
UserGroupInformation realUser = doSubjectLogin(subject, null);

}


如下代码`subject == null && params == null`判断true



private static UserGroupInformation doSubjectLogin(
Subject subject, LoginParams params) throws IOException {
ensureInitialized();
// initial default login.
if (subject == null && params == null) {
params = LoginParams.getDefaults();
}
HadoopConfiguration loginConf = new HadoopConfiguration(params);
try {
HadoopLoginContext login = newLoginContext(
authenticationMethod.getLoginAppName(), subject, loginConf);
login.login();

}


获取环境变量:`KRB5PRINCIPAL`、`KRB5KEYTAB`、`KRB5CCNAME`



private static class LoginParams extends EnumMap<LoginParam,String>
implements Parameters {

static LoginParams getDefaults() {
LoginParams params = new LoginParams();
params.put(LoginParam.PRINCIPAL, System.getenv(“KRB5PRINCIPAL”));
params.put(LoginParam.KEYTAB, System.getenv(“KRB5KEYTAB”));
params.put(LoginParam.CCACHE, System.getenv(“KRB5CCNAME”));
return params;
}
}


结果是利用环境变量设置的pricipal+keytab或者cache认证。  
 环境变量配置:  
 (1)每个程序单独配置:  
 在`-DKRB5PRINCIPAL=xxx -DKRB5KEYTAB=xxx` 或者 `-DKRB5CCNAME=xxx`


(2)系统环境默认配置:  
 win环境如下:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/3c44a1ff436444c9a78675b001eaf921.png)


linux环境下/etc/profile添加:  
 `export KRB5PRINCIPAL=xxx -DKRB5KEYTAB=xxx`或者`export KRB5CCNAME=xxx`


![img](https://img-blog.csdnimg.cn/img_convert/2ea211b2f2b48427680333e448312348.png)
![img](https://img-blog.csdnimg.cn/img_convert/a8afb0c6b612e2bbc5e8056e66b873bb.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**



**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值