Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在运行时模拟Kerberos安全Hadoop集群中的用户_Hadoop_Impersonation_Kerberos - Fatal编程技术网

在运行时模拟Kerberos安全Hadoop集群中的用户

在运行时模拟Kerberos安全Hadoop集群中的用户,hadoop,impersonation,kerberos,Hadoop,Impersonation,Kerberos,我有一个web应用程序,它可以从linux命令行接收来自不同用户的其他几个应用程序的请求。对于这些请求中的每一个,我都必须从hdfs中读取数据,以便调用只有调用应用程序linux用户才能访问的应用程序文件夹。是否有一种方法可以设置配置,使其在运行时被覆盖,以模拟调用方应用程序用户进行hadoop kerberos身份验证。 我使用下面的代码创建了一个UserGroupInformation,以便从kerberos密钥表登录。此UGI将充当真实用户,并将其传递给UserGroupInformati

我有一个web应用程序,它可以从linux命令行接收来自不同用户的其他几个应用程序的请求。对于这些请求中的每一个,我都必须从hdfs中读取数据,以便调用只有调用应用程序linux用户才能访问的应用程序文件夹。是否有一种方法可以设置配置,使其在运行时被覆盖,以模拟调用方应用程序用户进行hadoop kerberos身份验证。 我使用下面的代码创建了一个UserGroupInformation,以便从kerberos密钥表登录。此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; 
} });
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安全hadoop实现,下面给出了一个错误

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; 
} });
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用户模拟代理用户的其他方式


提前感谢

要模拟来电者,您必须具有模拟的特定权限。我相信默认情况下只有root有这个权利。我不知道这是否可以在Linux中配置。(在windows上是
SeImpersonatePrivilege


否则,用户可以在Kerberos域上运行随机的非特权服务,例如
http://MYLAPTOP:64990/
并将其配置为Kerberos登录,然后能够作为该用户在网络上执行任何操作。

我认为您需要设置安全模拟。有关更多信息,请参阅下面的链接