5

我发现文件权限在 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-----,因此对 Internet 不可见。我尝试了两件事。我在我的 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

4 回答 4

12

利用

导出 UMASK=0022 在setenv.sh.

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

于 2018-04-11T09:24:03.507 回答
1

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

UMASK=0022

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

于 2021-03-25T10:17:59.523 回答
1

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

于 2020-02-17T12:07:24.637 回答
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=0022setenv.sh

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

于 2021-03-29T10:45:12.710 回答