ConfX created HDFS-17104:
----------------------------
Summary: permission deprivation in HDFS without proper check or
restoration
Key: HDFS-17104
URL: https://issues.apache.org/jira/browse/HDFS-17104
Project: Hadoop HDFS
Issue Type: Bug
Reporter: ConfX
Attachments: reproduce.sh
h2. What happened?
After setting {{dfs.namenode.storage.dir.perm}} to {{{}325{}}}, running
{{org.apache.hadoop.hdfs.server.namenode.snapshot.TestOpenFilesWithSnapshot#testParentDirWithUCFileDeleteWithSnapShot}}
creates a folder that cannot be deleted by the current user unless using
{{{}sudo{}}}.
h2. Where's the bug?
Many of the storage systems in HDFS, e.g., {{NNStorage}} and {{{}JNStorage{}}},
uses {{Storage.clearDirectory}} as a way to create a fresh folder for the
storage. In this method after creating the directory the storage attempts to
changes the permission
{noformat}
if (permission != null) {
try {
Set<PosixFilePermission> permissions =
PosixFilePermissions.fromString(permission.toString());
Files.setPosixFilePermissions(curDir.toPath(), permissions);
} catch (UnsupportedOperationException uoe) {
// Default to FileUtil for non posix file systems
FileUtil.setPermission(curDir, permission);
}
}{noformat}
However, if the {{permission}} is set such that the current user does not have
certain permissions, the newly created folder would because very trick to deal
with since both the Hadoop and the current user cannot modify and/or read it.
h2. How to reproduce?
(1) Set {{dfs.namenode.storage.dir.perm}} to {{325}}
(2) Run
{{org.apache.hadoop.hdfs.server.namenode.snapshot.TestOpenFilesWithSnapshot#testParentDirWithUCFileDeleteWithSnapShot}}
(3) Checks
{{/Users/tonywang/confuzz-project/fuzz-hadoop/hadoop-hdfs-project/hadoop-hdfs/target/test/data/dfs}}
One could also run
{{org.apache.hadoop.hdfs.server.namenode.snapshot.TestOpenFilesWithSnapshot}}
to observe that the exception being thrown changes from
{{FileNotFoundException}} to {{{}IOException{}}}.
h2. Stacktrace
The first stacktrace:
{noformat}
java.io.FileNotFoundException: No valid image files found
at
org.apache.hadoop.hdfs.server.namenode.FSImageTransactionalStorageInspector.getLatestImages(FSImageTransactionalStorageInspector.java:158)
at
org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:688)
at
org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:339)
at
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1201)
at
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:779)
at
org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:681)
at
org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:768)
at
org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:1020)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:995)
at
org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1769)
at
org.apache.hadoop.hdfs.MiniDFSCluster.createNameNode(MiniDFSCluster.java:1374)
at
org.apache.hadoop.hdfs.MiniDFSCluster.configureNameService(MiniDFSCluster.java:1143)
at
org.apache.hadoop.hdfs.MiniDFSCluster.createNameNodesAndSetConf(MiniDFSCluster.java:1016)
at
org.apache.hadoop.hdfs.MiniDFSCluster.initMiniDFSCluster(MiniDFSCluster.java:948)
at org.apache.hadoop.hdfs.MiniDFSCluster.<init>(MiniDFSCluster.java:576)
at
org.apache.hadoop.hdfs.MiniDFSCluster$Builder.build(MiniDFSCluster.java:518)
at
org.apache.hadoop.hdfs.server.namenode.snapshot.TestOpenFilesWithSnapshot.setup(TestOpenFilesWithSnapshot.java:70){noformat}
The second stacktrace:
{noformat}
java.io.IOException: Could not fully delete
/Users/tonywang/confuzz-project/fuzz-hadoop/hadoop-hdfs-project/hadoop-hdfs/target/test/data/dfs/name-0-1
at
org.apache.hadoop.hdfs.MiniDFSCluster.configureNameService(MiniDFSCluster.java:1097)
at
org.apache.hadoop.hdfs.MiniDFSCluster.createNameNodesAndSetConf(MiniDFSCluster.java:1016)
at
org.apache.hadoop.hdfs.MiniDFSCluster.initMiniDFSCluster(MiniDFSCluster.java:948)
at org.apache.hadoop.hdfs.MiniDFSCluster.<init>(MiniDFSCluster.java:576)
at
org.apache.hadoop.hdfs.MiniDFSCluster$Builder.build(MiniDFSCluster.java:518)
at
org.apache.hadoop.hdfs.server.namenode.snapshot.TestOpenFilesWithSnapshot.setup(TestOpenFilesWithSnapshot.java:70){noformat}
For an easy reproduction, run the reproduce.sh in the attachment. We are happy
to provide a patch if this issue is confirmed.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]