【问题标题】:Tomcat9 File Permissions ChangeTomcat9 文件权限更改
【发布时间】:2018-06-18 22:34:13
【问题描述】:

我发现文件权限在 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--。由于它正在写入的这些文件可以通过 Internet 访问,因此需要全局读取标志。

但在 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的环境以某种方式使目录仍然获得了受限的权限。

这里有什么想法吗?

【问题讨论】:

    标签: java permissions tomcat9


    【解决方案1】:

    我在 Ubuntu 20 中使用 tomcat 9

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

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

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

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

    【讨论】:

    • 嗨@Jimru,欢迎来到 Stack Overflow。接受的答案已经说明了 UMASK 更改,但是您列出的其他信息将在接受的答案中有用 - 请更新它以包括安全操作方法和 022 的结果是文件中的 644。
    【解决方案2】:

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

    UMASK=0022
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • setenv.sh 在开箱即用的安装中从不存在,您需要创建它(在CATALINA_HOME/binCATALINA_BASE/bin 中)。修改catalina.sh 是个坏主意,因为没有人会期望这个文件会被修改。
      【解决方案4】:

      使用

      导出 UMASK=0022 在setenv.sh

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

      【讨论】:

      • 相反@phisch,gardanflyer 在这里几乎重新创建了他所指的文档所说的所有内容。它对我有用!谢谢!我不确定为什么在我的新贵配置文件中设置 UMASK 不起作用,但我现在使用的是 systemd,所以甚至不打算探索它。 setenv.sh 需要添加到您的 $CATALINA_HOME/bin 目录中(修改为可执行文件)。那里的这一行有效。
      猜你喜欢
      • 2012-02-16
      • 2013-06-27
      • 2010-09-18
      • 1970-01-01
      • 2012-04-03
      • 2020-08-07
      • 2012-04-27
      • 2020-08-12
      • 2012-08-03
      相关资源
      最近更新 更多