使用java API的hdfs问题



我使用以下代码删除了hdfs文件系统上的一个文件

    conf = new org.apache.hadoop.conf.Configuration();
    // TODO: Change IP
    conf.set("fs.defaultFS", "hdfs://aaa.bbb.com:1234/user/hdfs");
    conf.set("hadoop.job.ugi", "hdfs");
    conf.set("fs.hdfs.impl", 
        org.apache.hadoop.hdfs.DistributedFileSystem.class.getName()
    );
    conf.set("fs.file.impl",
        org.apache.hadoop.fs.LocalFileSystem.class.getName()
    );
fs = FileSystem.get(conf);
fs.delete(new Path("/user/hdfs/file.copy"), true);

我在本地机器中创建了一个名为"xyz"的用户,令我惊讶的是,我能够删除hdfs文件系统中具有给定名称节点的文件(file.copy),该文件的所有者为xyz。这意味着有权访问namenodeurl的人可以通过创建hdfs或root用户来删除任何文件?

我知道Java API有一种使用Kerberos对用户进行身份验证的方法,我认为hadoop系统的配置有一个错误。有人能帮我正确设置安全吗?我认为远程用户应该提供一些密钥或密钥文件来验证自己。同样的用户名不行!

PS:我使用的是Cloudera 5.3.1

是的,如果您的集群上没有启用Kerberos身份验证,那么您实际上根本没有身份验证。如果您关心您的数据,那么您绝对应该启用Kerberos身份验证。

最新更新