2016-10-14 90 views
0

目前我正在开发一个项目来增强Hadoop集群的安全性。最终,我将使用Kerberos和Sentry进行身份验证和授权。用户名和组映射将来自AD/LDAP(?),我想是的。Hadoop从linux shell用户名和组映射获取用户名和组映射?

但现在我只是在学习和尝试。我有一个问题,我还没有弄清楚是

哪里的用户名/组映射信息来自?

据我所知Hadoop没有用户名和组名,用户名和组名来自本地客户机或Kerberos领域的客户端。但是对我来说有点模糊,我能在这里得到实现细节吗?

该信息来自HDFS客户机所在的计算机,还是来自linux shell命名节点上的用户名和组?或者它取决于上下文 - 甚至与数据节点有关?如果数据节点和名称节点在本地框中具有不同的用户或用户组映射会怎么样?

回答

1

Hadoop从名为HADOOP_USER_NAME的全局变量中获取该信息。

如果你想通过另一个USER_NAME,您可以编写如下:

HADOOP_USER_NAME=yourname hadoop dfs -put ... 

所以命令必须开始与HADOOP_USER_NAME=VALUE

+0

我认为这是正确的。但是,这是Hadoop获取用户名的唯一方式吗? – cdhit

1

客户端和NameNode和所有Hadoop的服务,这是在Linux机器上检查组成员和用户名默认使用id命令。 (但是我不确定Windows客户端上的详细信息,但最近它是通过JNI完成的,因此必须在该端也有解决方案。)

这也意味着结果将取决于本地框的用户组映射。如果您使用Kerberos作为后端,或者通过sssd或其他任何方式为此设置了中央后端,则可以在其nsswitch.conf中设置该框,以便在id命令后面使用该后端。

侧注:有一个名为hadoop.security.group.mapping的属性定义了用于执行映射的策略。即使您有LDAP后端,我也不建议使用LDAPGroupMapping,但JNIBasedGroupMappingWithFallback似乎更可靠并且运行良好。