在我的组织中,要访问hadoop群集,我们在网关上执行以下操作:
sudo su -
cd /etc/username/
kinit some_string/instance -k -t some_string.keytab
hadoop fs -ls
这完全正常,但我想了解究竟发生了什么。
当我做'whoami'显然它显示'root'。但是在HDFS上以上述方式创建的任何文件都将所有者设置为“some_string”,将组设置为“hdfs”。我既不能像任何其他用户那样开玩笑也不能访问HDFS。为什么会这样?
这是因为:Hadoop的HDFS守护程序映射到kerberos主体(并且该主体的票证只能作为root用户访问?)并且该主体也映射到操作系统帐户some_string,这是我所看到的所有者HDFS上的文件?如果是这样,链接定义在哪里(hadoop守护进程到主体到os账户)
我尝试使用Google搜索,但无法找到解决问题的明确答案。即使我用自己的用户登录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
答案 0 :(得分:0)
所以当你执行下面的命令
时kinit some_string/instance -k -t some_string.keytab
您正在请求存储在 some_string.keytab 文件中的主体票据,您可以使用以下命令查看该文件
klist -k some_string.keytab
它将显示主要名称和版本的输出。 Keytab文件也包含密码,因此不需要密码。
第二个问题将来自 klist 命令,它会显示像user / _host @ realm这样的主体,所以在你的情况下用户是some_string,当你得到some_string的票时用户你是kerberos的some_string,你的命令将作为some_string用户执行,因此创建的文件的所有者将是some_string。
此外,您可以使用 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 host。