kerberos主体的hadoop转换规则

简介

我们知道hdfs支持kerberos认证,但是hdfs如何将kerberos的用户映射到本地unix/liunx用户名呢?
在了解这个之前我们先来介绍下kerberos的组成
例如给出[email protected] 我们可 可以看出这个有2部分组成
第一部分为:realm component:HADOOP.COM
第二部分为:user component :hdfs
有时候 用户部分会有/ 来分割成2个部分 例如:hdfs/[email protected]

为什么要将kerberos用户装换成本地用户?

hdfs 默认使用ShellBasedUnixGroupsMapping,这就意味着它使用linux/unix命令来获取特定用户的组详细信息(例如:id username) ,通过组的信息 进一步用户hdfs文件和文件夹访问控制权限检查。

hdfs如何将principal 转换成本地用户

hdfs 使用core-site.xml中定义的一组正则表达式规则来装换kerberos principal
hadoop.security.auth_to_local

默认的规则是从principal里面剥离 realm name
例如:
[email protected] is 装换 to hdfs.
正则表达式类似于Perl.中的正则表达式
Lets look at one of the translation rule, it has 3 parts base , filter and substitution
让我们看下装换规则,他由三部分组成,Base基础,Filter过滤,Substitution替换

RULE:[1:$1@$0]([email protected])s/.*/hdfs/

Base 基础:

RULE:[1:$1@$0]

base 中使用$0来表示 装换的域名, $1表示 第一个组件 ,$2表示用户名中的第二个组件
例如:

转换 
hdfs/[email protected]

$0 = HADOOP.COM
$1 = admin
$2 = admin

Filter过滤

在下面的例子中我们需要过滤[email protected]

([email protected])s/.*/

Substitution替换

最后使用hdfs代替[email protected]

如何测试?

Use the following command to test your regex translation rules

hadoop org.apache.hadoop.security.HadoopKerberosName [email protected]
Name: [email protected] to hdfs

如果没用定义规则则报错信息如下:

hadoop org.apache.hadoop.security.HadoopKerberosName [email protected]
Exception in thread “main” org.apache.hadoop.security.authentication.util.KerberosName$NoMatchingRule: No rules applied to [email protected]

你可能感兴趣的:(hadoop)