Tomcat9 文件权限更改

7
我发现在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个回答

15

相反的是@phisch,gardanflyer在这里重新创建了几乎所有他指向的文档所说的。而且它对我有用!谢谢!我不确定为什么在我的upstart配置文件中设置UMASK没有起作用,但现在我正在使用systemd,所以甚至不会探索那个问题。setenv.sh需要添加到$CATALINA_HOME/bin目录中(chmoded可执行)。其中的这一行有效。 - crowmagnumb

1

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


setenv.sh 在开箱即用的安装中从未出现,您需要创建它(可以在 CATALINA_HOME/binCATALINA_BASE/bin 中)。修改 catalina.sh 是一个不好的想法,因为没有人会预期此文件被修改。 - Piotr P. Karwasz

1
在基于 Debian 的系统中,您可以添加以下内容:
UMASK=0022

打开/etc/default/tomcat9文件,然后重新启动Tomcat使更改生效。


0

2
嗨@Jimru,欢迎来到Stack Overflow。已经有一个被接受的答案说明了UMASK更改,但是您列出的其他信息将对被接受的答案有所帮助 - 请更新它以包括安全howto和022在文件上的644结果。 - Mr R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接