【发布时间】:2015-06-04 08:22:55
【问题描述】:
Java 应用 JBOSS 中的一些奇怪行为(与技术无关..)
应用程序可以访问文件,只有用户拥有,运行进程。未使用组。
-rwxrwxrwx。 1 根 GroupUnix1 448 Jun 4 06:26 output_new.txt
id uid=401322(MySuperUser) gid=401322(MySuperGroup) >groups=401322(MySuperGroup),7013595(GroupUnix1) >context=unconfined_u:system_r:openshift_t:s0:c528,c834
getenforce 许可 从第一个角度来看,Java 并不关心文件级权限。只有所有权。
ls -la -rw------- 1 MySuperUser GroupUnix1 308 Jun 3 14:15 output_new.txt
任何想法如何访问属于组而不是用户的 Java 文件?我在 MultiUser 环境中运行。
----rw---- 1 MySuperUser GroupUnix1 308 Jun 3 14:15 output_new.txt 访问好吗?为什么?
--------- 1 MySuperUser GroupUnix1 308 Jun 3 14:15 output_new.txt 访问好吗?为什么?
----rw---- 1 root GroupUnix1 364 Jun 3 14:16 output_new.txt 无法访问?为什么?
来自 JBOSS 的错误。但基本上我的访问受到限制。
错误:java.nio.file.FileSystemException:/mnt/SuperFolder/share1/outbound/output_new.txt:不允许操作 sun.nio.fs.UnixException.translateToIOException(UnixException.java:91) sun.nio.fs .UnixException.rethrowAsIOException(UnixException.java:102) sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) sun.nio.fs.UnixFileAttributeViews$Posix.setMode(UnixFileAttributeViews.java:228) sun.nio.fs .UnixFileAttributeViews$Posix.setPermissions(UnixFileAttributeViews.java:250) java.nio.file.Files.setPosixFilePermissions(Files.java:1992) com.company.soft.eap.test.nfs.ReadFile.doGet(ReadFile.java:85 ) javax.servlet.http.HttpServlet.service(HttpServlet.java:734) javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
我尝试的代码:
String path = "/mnt/SuperFolder/share1/outbound/output_new.txt";
// (use relative path for Unix systems)
File f = new File(path);
// (works for both Windows and Linux)
f.getParentFile().mkdirs();
f.createNewFile();
FileWriter fstream = new FileWriter(path, true);
BufferedWriter outt = new BufferedWriter(fstream);
outt.write(" something \n ");
outt.newLine();
// close buffer writer
outt.close();
所以如果文件有 070 它不能写入,请作为一个组编辑。
更新:写入发生在 NFS 共享上。在 NFS 之外,它的行为符合预期。但内部共享 - 崩溃。
【问题讨论】:
-
我在
FileUtils.copy()遇到了这个问题,这让我发疯了。我认为这是因为另一个进程正在锁定源文件夹,或者驱动器有一些逻辑错误。 -
你有没有找到任何根本原因?