我有一个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用户模拟代理用户的任何其他方式。
提前致谢
答案 0 :(得分:3)
我认为您需要设置安全模拟。有关详细信息,请参阅以下链接http://hadoop.apache.org/docs/r1.2.1/Secure_Impersonation.html
答案 1 :(得分:0)
要冒充来电者,您必须拥有模仿的特定权限。我相信默认只有root才有这个权利。我不知道这是否可以在Linux中配置。 (在Windows上,它是SeImpersonatePrivilege
)。
否则用户可以在Kerberos域上运行随机非特权服务,例如http://MYLAPTOP:64990/
并为Kerberos登录配置它们,然后能够以该用户身份在网络上执行任何操作。