HDFS守护进程与Kerberos主体和Unix帐户之间的映射

HDFS守护进程与Kerberos主体和Unix帐户之间的映射,unix,hadoop,hdfs,kerberos,account,Unix,Hadoop,Hdfs,Kerberos,Account,在我的组织中,要访问hadoop群集,我们在网关上执行以下操作: sudo su - cd /etc/username/ kinit some_string/instance -k -t some_string.keytab hadoop fs -ls 这很好,但我正在努力理解到底发生了什么 当我做“whoami”时,很明显它显示“root”。但在HDFS上以上述方式创建的任何文件的所有者为“some_string”,组为“HDFS”。我既不能像任何其他用户一样kinit也不能访问HDF

在我的组织中,要访问hadoop群集,我们在网关上执行以下操作:

sudo su -

cd /etc/username/

kinit some_string/instance -k -t some_string.keytab

hadoop fs -ls
这很好,但我正在努力理解到底发生了什么

当我做“whoami”时,很明显它显示“root”。但在HDFS上以上述方式创建的任何文件的所有者为“some_string”,组为“HDFS”。我既不能像任何其他用户一样kinit也不能访问HDFS。为什么会这样

这是因为:Hadoop的HDFS守护进程被映射到kerberos主体(该主体的票证只能作为根用户访问?),并且该主体也被映射到OS帐户某个字符串,这是我认为HDFS上文件的所有者?如果是,链接定义在哪里(hadoop守护进程到主体到操作系统帐户)

我在谷歌上搜索了很多次,但都没有找到一个明确的答案来解决我的困惑。即使我用自己的用户登录到HUE,我也没有对这些文件的写入权限,这也是我想了解如何解决的问题

谢谢

编辑:

$ klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal:     some_string/instance@CLOUDERA.xxxx.CORP

Valid starting     Expires            Service principal
03/02/16 21:06:19  03/03/16 21:06:19      krbtgt/CLOUDERA.xxxx.CORP@CLOUDERA.xxxx.CORP
renew until 03/02/16 21:06:19

所以当你执行下面的命令时

kinit some_string/instance -k -t some_string.keytab
klist -k some_string.keytab
您正在请求主体的票证,该票证存储在some_string.keytab文件中,您可以使用下面的命令查看该文件

kinit some_string/instance -k -t some_string.keytab
klist -k some_string.keytab
它将显示主体名称和版本的输出。Keytab文件也包含密码,所以它不需要密码

第二个问题是klist命令的答案,它将向您显示与用户类似的主体/_host@realm所以在你的例子中,用户是一些字符串,当您获得某个字符串用户的票证时,您就是kerberos的某个字符串,您的命令将作为某个字符串用户执行,因此创建的文件的所有者将是某个字符串

此外,您还可以使用klist命令列出您已经拥有的票据,请参见下面的输出:

[root@myhostname ~]# klist -k some_Name.keytab
Keytab name: FILE:some_Name.keytab
KVNO Principal
---- --------------------------------------------------------------------------
1 myuser/myhostname@MYREAL.COM

这里,我的keytab是myuser用户的,host是myhostname主机。

我在问题中添加了klist,您说“…在您的情况下,用户是hdfs…”,但看起来不是。在主体中,用户是“some_string”。@Gadam让我知道klist-k some_string.keytab的输出对于响应延迟表示抱歉。这里是:17:20:20$klist-k some_string.keytab keytab name:FILE:some_string.keytab KVNO Principal-------------------------------------------------------------------2 some_string/devgtway01.northamerica.xxxxx。net@CLOUDERA.xxxxx.CORP(最后一行重复6次)@Gadam没错,我没听说过你说过你的文件是用所有者作为某个字符串创建的,所以当你得到某个字符串的票证时,你就不再是kerberos的根用户,你不是他的某个字符串用户,文件权限就是你的证明。所以,以同样的方式,您可以获得任何其他用户的票证,在那里,它的行为将是相同的。