如何在 java 中设置 umask?

Posted

技术标签:

【中文标题】如何在 java 中设置 umask?【英文标题】:How can I set the umask from within java? 【发布时间】:2011-03-11 15:47:33 【问题描述】:

我是 Java 新手。 umask在api中暴露在哪里?

【问题讨论】:

【参考方案1】:

您不能直接使用 umask,因为 Java 是一种抽象,而 umask 是特定于 POSIX 实现的。但是您有以下 API:

File f;
f.setExecutable(true);
f.setReadable(false);
f.setWritable(true);

还有更多可用的 API,check the docs。

如果您必须直接访问 umask,要么通过 JNI 和 chmod() 系统调用来实现,要么使用 exec("chmod") 生成一个新进程。

【讨论】:

嗯,很有趣,谢谢。我想我可以使用 JNI 调用 umask(2),然后呢? @eeee 当然,但是你必须将你的 JNI 模块部署到你想要支持的所有平台上,因为它几乎根据定义依赖于平台。 @extraneon 是的,当然。老实说,我很惊讶没有人为 Java 制作一个暴露所有 posix 接口的模块。我的意思是,这不可能——对吧?没有这种东西,人们如何在java中执行系统活动? @eeee 新的 API 将在 Java 7 中出现(尚未发布),在包 java.nio.file 中。 准确地说:在包中java.nio.file.attribute【参考方案2】:

java.nio.file.attribute.PosixFileAttributes 在 Java SE 7 中。

【讨论】:

我没有找到任何专门设置umask的函数,只有文件权限。【参考方案3】:

另一种方法是使用公开 POSIX 系统调用的第 3 方 Java 库;例如

Jtux "Posix for Java" 库, 等等(Google 为“java posix library”)。

这种方法的问题在于它本质上是不可移植的(不能在不符合 POSIX 的平台上工作),并且需要特定于平台的本机库......以及所有这些。

【讨论】:

【参考方案4】:
import java.nio.file.Files
import java.nio.file.attribute.PosixFilePermission

File file = new File("/some/path") 
Files.setPosixFilePermissions(file.toPath(), [
                PosixFilePermission.OWNER_READ,
                PosixFilePermission.OWNER_WRITE
            ].toSet())

【讨论】:

不,那是设置文件的权限,而不是设置掩码。

以上是关于如何在 java 中设置 umask?的主要内容,如果未能解决你的问题,请参考以下文章

Linux安全加固

linux那个umask值是啥?

如何在 Java 中设置 SourceDataLine 的音量

如何在java中设置最高位?

如何在 Java 中设置标签(彩色文本)的颜色?

如何在 JAVA 中设置主机名?