在运行时在kerberos安全的hadoop集群中模拟用户

xqkwcwgp  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(431)

我有一个web应用程序,它可以从linux命令行接收来自不同用户的其他几个应用程序的请求。对于这些请求中的每一个,我都必须从hdfs中读取数据,以便调用只有调用应用程序linux用户才能访问的应用程序文件夹。有没有一种方法可以设置配置,使其在运行时可以重写,以模拟调用方应用程序用户进行hadoop kerberos身份验证。我使用下面的代码创建了一个usergroupinformation来从kerberos keytab登录。这个ugi将充当真实用户并将其传递给usergroupinformation类来创建代理用户,如下所示。

UserGroupInformation realUgi = UserGroupInformation.loginUserFromKeytabAndReturnUGI("KerberosUser ", "pathToKeytabFile") ;
UserGroupInformation ugi = UserGroupInformation.createProxyUser("NewProxyUser", realUgi ); 
ugi.doAs(new PrivilegedExceptionAction() { 
public Void run() throws Exception { 
  Configuration jobconf = new Configuration(); 
  jobconf.set("fs.default.name", "hdfs://server:hdfsport"); 
  jobconf.set("hadoop.job.ugi", "NewroxyUser"); 
  jobconf.set("mapred.job.tracker", "server:jobtracker port"); 
  String[] args = new String[] { "data/input", "data/output" }; 
  ToolRunner.run(jobconf, WordCount.class.newInstance(), args); 
  return null; 
} });

在本例中,我使用的是kerberos安全hadoop实现,下面给出了一个错误。

ERROR UserGroupInformation:1125 - PriviledgedActionException as:NewProxyUser
via KerberosUser cause:org.apache.hadoop.ipc.RemoteException: User: KerberosUser is not allowed to impersonate NewProxyUser
Caused by: org.apache.hadoop.ipc.RemoteException: User: KerberosUser is not allowed to impersonate NewProxyUser

你能建议我用kerberos用户模拟代理用户的其他方法吗。
提前谢谢

cxfofazt

cxfofazt1#

我认为你需要设置安全的模拟。有关更多信息,请参阅下面的链接http://hadoop.apache.org/docs/r1.2.1/secure_impersonation.html

f45qwnt8

f45qwnt82#

要模拟呼叫者,必须具有特定的模拟权限。我相信默认情况下只有root有这个权利。我不知道这是否可以在linux中配置(在windows上是这样的 SeImpersonatePrivilege ).
否则,用户可以在kerberos域上随机运行非特权服务。 http://MYLAPTOP:64990/ 并将它们配置为kerberos登录,然后可以作为该用户在网络上执行任何操作。

相关问题