分享

hadoop代理用户 -超级用户代理其它用户

pig2 2015-12-9 17:52:25 发表于 连载型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 2 30824
本帖最后由 pig2 于 2015-12-9 18:02 编辑
问题导读
1.你认为什么情况下使用代理用户?
2.代理用户与普通用户的区别是什么?
3.如何配置超级用户代理其它用户?







说明
这个文档描述怎么使用超级用户提交job和代理其它用户访问hdfs


用例
下一节中描述的代码示例适用于以下用例。
超级用户‘super’ 代理用户joe提交job和访问hdfs,超级用户有kerberos认证,用户joe没有。任务需要运行用户joe和任何文件访问NameNode需要用户joe。它需要用户joe连接namenode或则job tracker使用super的kerberos凭据的连接认证,换句话说,超级用户模拟【冒充】用户joe

代码示例
在这个例子中超级的凭证用于登录和创建一个代理用户ugi对象为joe。这个操作实现了代理用户ugi对象的doAs方法

[mw_shl_code=bash,true]  ...
    //Create ugi for joe. The login user is 'super'.
    UserGroupInformation ugi =
            UserGroupInformation.createProxyUser("joe", UserGroupInformation.getLoginUser());
    ugi.doAs(new PrivilegedExceptionAction<Void>() {
      public Void run() throws Exception {
        //Submit a job
        JobClient jc = new JobClient(conf);
        jc.submitJob(conf);
        //OR access hdfs
        FileSystem fs = FileSystem.get(conf);
        fs.mkdir(someFilePath);
      }
    }[/mw_shl_code]


配置

你可以配置代理用户使用属性 hadoop.proxyuser.$superuser.hosts  或则使用 hadoop.proxyuser.$superuser.groupsadoop.proxyuser.$superuser.users.通过指定如下 core-site.xml,超级用户super冒充用户属于group1 和 group2,仅能连接 host1 和 host2
[mw_shl_code=bash,true]<property>
     <name>hadoop.proxyuser.super.hosts</name>
     <value>host1,host2</value>
   </property>
   <property>
     <name>hadoop.proxyuser.super.groups</name>
     <value>group1,group2</value>
   </property>[/mw_shl_code]
如果没有配置这些,冒充不被允许,连接失败。更宽松的不严格的安全性,通配符的值*允许代理任何用户,任何host。比如通过以下core-site.xml,用户oozie访问任何host,可以代理任何用户所属的任何组
[mw_shl_code=bash,true]  <property>
    <name>hadoop.proxyuser.oozie.hosts</name>
    <value>*</value>
  </property>
  <property>
    <name>hadoop.proxyuser.oozie.groups</name>
    <value>*</value>
  </property>[/mw_shl_code]

hadoop.proxyuser.$superuser.hosts访问 ip 地址列表,CIDR格式和/或主机名IP地址范围。比如以下,用户super 访问主机ip地址范围 10.222.0.0-15 到 10.113.221.221,可以代理 user1 和 user2.
[mw_shl_code=bash,true]  <property>
     <name>hadoop.proxyuser.super.hosts</name>
     <value>10.222.0.0/16,10.113.221.221</value>
   </property>
   <property>
     <name>hadoop.proxyuser.super.users</name>
     <value>user1,user2</value>
   </property>[/mw_shl_code]


注意事项

如果集群运行在安全模式下,超级用户必须有kerberos凭据才能代理另一个用户。它不能使用委托tokens功能,如果超级用户添加自己的委托token到代理用户ugi这是错误的,它允许代理用户连接到具有超级用户的特权服务。尽管如此,如果超级用户确实想委托token给joe用户,它必须首先代理joe,得到joe的委托token,同样的方法如上面代码示例,添加它到joe的ugi,以这样的方式委托token属于joe.





已有(2)人评论

跳转到指定楼层
hello1993 发表于 2015-12-10 11:04:50
你好,我有两个问题:
1.代理用户与普通用户的区别是什么,你还是没有说明
2.超级用户不是具有任何权限吗,为何要用超级用户代理其他用户
感谢博主无私的分享知识
回复

使用道具 举报

langke93 发表于 2015-12-10 13:16:28
hello1993 发表于 2015-12-10 11:04
你好,我有两个问题:
1.代理用户与普通用户的区别是什么,你还是没有说明
2.超级用户不是具有任何权限吗 ...

这个没有绝对的界限吧,你想用谁代理就用谁代理。一般代理用户具有kerberos认证。
超级用户代理方便啊,如果在安全模式下,你的每一个用户都需要配置,如果使用代理就免去麻烦了

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条