我创建了一个hdfs用户 externUser
,谁拥有该文件夹 /user/externUser
在hdfs中。权限设置为 drwx------
,请参见下面的屏幕截图:
我正在使用hdp2.4.2和ambari2.2.2
现在,我编写了一个java应用程序,使用以下代码打开并读取此用户文件夹中的csv文件:
System.setProperty("HADOOP_USER_NAME", "externUser");
Configuration conf = new Configuration();
Path path = new Path(hdfs://namenode_url:8020/user/externUser/test.csv);
FileSystem fs = path.getFileSystem(conf);
FSDataInputStream input = fs.open(path);
BufferedReader br = new BufferedReader(new InputStreamReader(input));
String headerRow = br.readLine();
String[] headers = headerRow.split(";");
br.close();
我正在从远程主机运行java应用程序。令人惊讶的是,我可以用这个代码片段访问这个文件,而不必指定用户的密码!有人能解释一下这种行为以及如何使文件更安全吗?
如果不以“正确”用户身份登录,就无法通过ambari hdfs视图(上面的屏幕截图)进行访问。。。
1条答案
按热度按时间fv2wmkja1#
你安装了一个不安全的群集。默认的身份验证模式很简单。请参阅core-default.xml。在这种模式下,每个用户都可以按照自己的意愿伪装成另一个用户。在你的代码中,你的名字是“externuser”。
你应该设置安全模式。唯一支持的安全模式hadoop是kerberos。我不熟悉ambari,但是有很多关于hot在ambari中启用kerberos的文档。
更多信息:
设置kerberos以便与ambari一起使用