hadoop.security.auth_to_local参数用于将kerberos的principal映射为比较短的本地用户名称,并且hadoop复用了kerberos语法规则。
参数中包含一组映射规则,将principal由上至下逐一匹配RULE,当找到匹配的映射规则后,会输出一个用户名称,同时忽略未进行匹配的规则。 具体的配置格式:
hadoop.security.auth_to_local
RULE:[]()
RULE:[]()
DEFAULT
对于其中某一条具体的映射规则:
RULE:[]()
主要由三部分组成:principal解析(principal translation), 接收过滤器(acceptance filter),名称替换(short name substitution)。
principal translation
基本语法如下:
[:]
首先,在kerberos中,principal是多个component组成的,以‘/’为分隔符。如pig/[email protected],其由两个component组成,"pig"和"zoo", github.com是realm,不考虑在内。principal解析以":"分割,包括两个部分,左边指定principal中的component个数,只能取1或2。右边是一个特殊的格式化串,可以提取出principal中的部分component,组成一个短名称,供后面的接收过滤器(acceptance filter)使用。在格式化串中,$0 表示realm,$1表示第一个component,$2表示第二个component。举几个例子:
匹配串 | pig/[email protected] | [email protected] |
---|---|---|
1: $1 | 不匹配,principal有两个component | city |
2: $1@$0 | [email protected] | 不匹配,仅有一个principal |
注:city,[email protected]代表输出的短名称
当不匹配时,则跳过该rule,进行下一条rule的匹配,否则进行下一步。
acceptance filter
接收过滤器是一个标准的正则表达式,用于匹配第一部分——principal translation,输出的短名称,只有当成功匹配时,才会将该短名称传递到第三部分——short name substitution。当不匹配时,则跳过该rule,进行下一条rule的匹配,否则进行下一步。
short name substitution
第三部分可以理解为linux中sed替换命令 (s/.../.../g) ,其输入是principal translation提取出的短名称。这部分是可选的。
DEFAULT
DEFAULT是默认规则,默认将principal的第一个component作为短名称输出。
参考
cloudera
hortonworks