【问题标题】:How to set default file permissions for Java如何为 Java 设置默认文件权限
【发布时间】:2018-03-15 23:30:38
【问题描述】:

问题:我正在寻找一种方法来配置 Java 以默认创建具有特定权限集的新文件。

问题:我有一个使用以下内容的 Spring Boot 应用程序:

  • Lo​​g4J2 用于日志记录
  • H2 用于平面文件数据库
  • 用于缓存实体的 Ehcache

所有这些库都在本地文件系统上创建新文件,当它们这样做时,它们会生成全局可写文件(666 用于文件,777 用于目录)。我在 macOS 10.13(用户拥有“umask 0022”)和 Amazon Linux(用户拥有“umask 0002”)上看到了这一点。

如果我直接管理文件的创建,我可以使用PosixFilePermission 做我需要的事情,但是由于文件创建被委托给库,我没有这个机会。我可能会设置一个计时器来发现新文件并直接设置权限,但我并不喜欢这种方法。

Log4J2 v2.9 向RollingFileAppender 添加了一个 filePermissions 字段,因此我希望解决我的问题之一,但我无法为 H2 或 Ehcache 找到类似的东西。理想情况下,为了简单和面向未来,我希望在 JVM/Boot 级别执行此操作。

【问题讨论】:

  • 对于否决票,如果您对此问题有任何反馈,我将不胜感激。

标签: java yajsw


【解决方案1】:

这里是 tomcat 和 umask 的 a topic。似乎tomcat有自己的行为来处理umask。

那么也许有一种方法可以配置嵌入在 Spring Boot 中的 tomcat 的“umask 行为”?比如属性什么的。

我不能假装这是一个答案。但遗憾的是,我没有足够的声誉来评论您的问题。希望对您有所帮助。

【讨论】:

  • 感谢您的想法。下载了 tomcat 的源代码,看看他们对 UMASK 环境变量做了什么。 catalina.sh 将值传递给 umask OS 命令,然后可选择将其作为系统属性传递给 org.apache.catalina.security.SecurityListener。 SecurityListener.java 只是在启动时检查该值是否大于某个最小值。 java中的任何内容似乎都不会对信息“采取行动”。似乎我也应该能够依赖操作系统 umask,但是我创建的所有文件都与 umask 的要求相矛盾。
【解决方案2】:

原来这是一条红鲱鱼。问题不在于 java,而在于启动 java 进程的 YAJSW 服务包装器。 YAJSW has several parameters 用于设置 umask,包括在子进程上,但尚未实现。在 YAJSW 之外启动应用程序会生成遵循用户 umask 的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 2019-07-19
    • 2013-09-09
    • 2018-02-12
    • 1970-01-01
    相关资源
    最近更新 更多