Tomcat9文件权限更改

时间:2018-01-09 20:02:41

标签: java permissions tomcat9

我发现Tomcat 8和Tomcat 9之间的文件权限已经发生了变化,我无法弄清楚如何解决它。

我有这样的代码,其中inputStream是我提供此例程的东西,而redirectStream是一个简单地使用BufferedInput和BufferedOutput流从一个流读取到另一个流的函数。

Path path = "/some/example/path/to/a/file"; Files.createDirectories(path.getParent()); redirectStream(inputStream, new FileOutputStream(path.toFile());

在Tomcat8中执行此代码后,目录和文件将具有与用户的umask匹配的权限(0022)。那就是目录会有drwxr-xr-x,文件会有-rw-r--r--。由于互联网可以访问正在编写的这些文件,因此需要使用全局读取标记。

但是在Tomcat9下,相同的代码分别给出drwxr-x----rw-r-----,因此互联网不可见。我尝试了两件事。我已经在我的tomcat启动脚本中明确地将umask设置为0022,以确保它是无效的。第二种是在代码中明确设置权限以尝试强制解决问题。这修复了文件权限,但不是目录权限,下面是更新的代码。

Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>();
perms.add(PosixFilePermission.OWNER_READ);
perms.add(PosixFilePermission.OWNER_WRITE);
perms.add(PosixFilePermission.OWNER_EXECUTE);
perms.add(PosixFilePermission.GROUP_READ);
perms.add(PosixFilePermission.GROUP_WRITE);
perms.add(PosixFilePermission.GROUP_EXECUTE);
perms.add(PosixFilePermission.OTHERS_READ);
perms.add(PosixFilePermission.OTHERS_EXECUTE);
Files.createDirectories(path.getParent(), PosixFilePermissions.asFileAttribute(perms));

redirectStream(inputStream, new FileOutputStream(path.toFile()); 
perms = new HashSet<PosixFilePermission>();
perms.add(PosixFilePermission.OWNER_READ);
perms.add(PosixFilePermission.OWNER_WRITE);
perms.add(PosixFilePermission.GROUP_READ);
perms.add(PosixFilePermission.GROUP_WRITE);
perms.add(PosixFilePermission.OTHERS_READ);
Files.setPosixFilePermissions(fullPath, perms);

实际上修复了文件的文件权限,但没有修复目录的文件权限。我已经测试了Tomcat之外的代码,因此知道它有效。但由于某种原因,Tomcat9的环境以某种方式使得目录仍然获得了受限制的权限。

这里有什么想法吗?

4 个答案:

答案 0 :(得分:3)

使用

  

导出UMASK = 0022   在setenv.sh

请参阅https://tomcat.apache.org/tomcat-9.0-doc/changelog.html

答案 1 :(得分:1)

如果没有setenv.sh文件,则可以在catalina.sh文件本身中将umask值直接从0027更改为0022。

答案 2 :(得分:1)

在基于 Debian 的系统上,您可以添加

UMASK=0022

/etc/default/tomcat9。然后重启Tomcat以使更改生效。

答案 3 :(得分:0)

我在 Ubuntu 20 中使用 tomcat 9

根据https://ci.apache.org/projects/tomcat/tomcat9/docs/security-howto.html

我在 setenv.sh(称为 /usr/share/tomcat9/bin/)中创建了一个 $CATALINA_HOME 文件,

然后我在 UMASK=0022 中添加了 setenv.sh

结果tomcat创建的文件权限为644,其他组用户可以读取