Tomcat9 文件权限变更
Tomcat9 File Permissions Change
我发现文件权限在 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 中执行这段代码后,目录和文件将具有与用户 (0022) 的 umask 相匹配的权限。也就是说,目录将具有 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 的环境以某种方式使目录仍然获得受限权限。
有什么想法吗?
使用
export UMASK=0022
in setenv.sh
.
如果你没有 setenv.sh 文件,可以在 catalina.sh 文件中直接将 umask 值从 0027 更改为 0022。
在基于 Debian 的系统上,您可以添加
UMASK=0022
到/etc/default/tomcat9
。然后重新启动 Tomcat 以使更改生效。
我在 Ubuntu 20.
中使用 tomcat 9
根据https://ci.apache.org/projects/tomcat/tomcat9/docs/security-howto.html
我在 /usr/share/tomcat9/bin/
中创建了一个 setenv.sh
文件(称为 $CATALINA_HOME
),
然后我在setenv.sh
中添加了UMASK=0022
结果tomcat创建的文件权限为644,其他组用户可以读取
我发现文件权限在 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 中执行这段代码后,目录和文件将具有与用户 (0022) 的 umask 相匹配的权限。也就是说,目录将具有 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 的环境以某种方式使目录仍然获得受限权限。
有什么想法吗?
使用
export UMASK=0022 in
setenv.sh
.
如果你没有 setenv.sh 文件,可以在 catalina.sh 文件中直接将 umask 值从 0027 更改为 0022。
在基于 Debian 的系统上,您可以添加
UMASK=0022
到/etc/default/tomcat9
。然后重新启动 Tomcat 以使更改生效。
我在 Ubuntu 20.
中使用 tomcat 9根据https://ci.apache.org/projects/tomcat/tomcat9/docs/security-howto.html
我在 /usr/share/tomcat9/bin/
中创建了一个 setenv.sh
文件(称为 $CATALINA_HOME
),
然后我在setenv.sh
UMASK=0022
结果tomcat创建的文件权限为644,其他组用户可以读取