Java无法访问NFS共享中的文件

标签 java file servlets jboss

Java 应用程序 JBOSS 中的一些奇怪行为(技术不相关......)

应用程序可以访问仅由运行进程的用户拥有的文件。未使用组。

-rwxrwxrwx. 1 root 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 Permissive From first view looks like Java does not care about file level permissions. Only ownership.

ls -la -rw------- 1 MySuperUser GroupUnix1 308 Jun 3 14:15 output_new.txt <-access ok

有什么想法如何在Java中访问由组而不是用户拥有的文件吗?我在多用户环境中运行。

----rw---- 1 MySuperUser GroupUnix1 308 Jun 3 14:15 output_new.txt access ok ? WHY?

---------- 1 MySuperUser GroupUnix1 308 Jun 3 14:15 output_new.txt access ok ? WHY?

----rw---- 1 root GroupUnix1 364 Jun 3 14:16 output_new.txt no access ? WHY?

来自 JBOSS 的错误。但基本上我的访问受到限制。

Error: java.nio.file.FileSystemException: /mnt/SuperFolder/share1/outbound/output_new.txt: Operation not permitted 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 之外,这会按预期运行。但内部共享 - 崩溃。

最佳答案

您的问题与 Java 无关,而是与 UNIX 相关。

首先,文件由用户而不是组拥有。

其次,你必须了解unix文件权限优先级。系统首先检查用户权限,然后检查组权限,最后检查其他权限。

例如,给定此文件:

----rwx--- bob wailers test.txt
  1. 如果您是用户“bob”,则无法读取、写入或执行它
  2. ELSE IF 如果您在“wailers”组中,则可以读取、写入或执行它
  3. 否则你无法读取、写入或执行它

因此,如果您是用户“bob”,即使您在“wailers”组中:

  1. 第一个条件为真(您是 Bob)并且适用权限:您无法访问该文件。

但是如果您是用户“peter”并且您在组“wailers”中:

  1. 第一个条件为 false(您不是 Bob)-> 权限不适用,
  2. 第二个条件成立(您在哀嚎中)-> 权限适用:您可以访问该文件。

关于Java无法访问NFS共享中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30638623/

相关文章:

java - 如何为相同的用户标识选择相同的颜色

java - 更改打开 jar 时首先运行哪个 java 文件

Java 多线程——更多的线程做的更少,还是更少的线程做的更多?

php - 如何获取文件名?

java - 使用 try-with-resources 包围扫描仪

java - 没有字符串打印到文件中

java - httpURL连接 : how long can a post argument be?

java - 从 servlet 应用程序的 java 主类调用

javascript setInterval 与 getJson

java - 如何在tomcat的catalina.out中使用Spring MVC获取错误消息