Hadoop从linux shell用户名和组映射中获取用户名和组映射?

时间:2016-10-14 02:45:25

标签: hadoop hdfs hadoop2

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

如果要传递另一个user_name,可以写如下:

HADOOP_USER_NAME=yourname hadoop dfs -put ...

因此命令必须以HADOOP_USER_NAME=VALUE

开头

答案 1 :(得分:1)

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

这也意味着结果将取决于本地方框的用户组映射。如果您使用Kerberos与任何后端,或者如果您通过sssd或其他任何方式拥有集中后端,那么您可以在其nsswitch.conf中设置该框以在id命令后面使用它。

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