从历史上看,为什么 umask 是这样的?

从历史上看,为什么 umask 是这样的?

umask 总是让我绊倒。从逻辑上讲,我更喜欢有一个“setmask”,而不是采用 chmod 风格的参数。有人知道为什么会这样吗?

答案1

我相信这源于两个想法,尽管我可能是错的。

  • 最初在 UNIX 中开发权限是完全开放的。在安全时代之前,让文件只能由某些人可读/可写/可执行的想法是没有必要的。因此,从这个角度来看,自然的进展是采用权限的概念,并限制它们。而不是取 0 值的权限并添加到其中。

  • 另一个原因是,在大多数情况下,特定的拒绝会比指定的允许产生更准确的结果。不同的情况有不同的需求。例如,默认目录权限是:755默认文件权限是644

如果你特别允许例如执行,然后必须转换为目录和文件。然后,您将面临选择,要么目录不启用执行,要么文件启用。然而目录需要执行启用才能发挥作用。因此,您可以选择删除额外的权限,而不是专门添加权限。

使用 umask 0000,您最终仍然没有对普通文件的执行权限,如果您做相反的事情,那么以这种方式设计它会更困难。

答案2

umask不指定 creat(2) 和 open(2) 创建的文件的权限。它只指定哪些位应该被强制关掉,以阻止忽视安全的程序产生漏洞。

通常的 IT 约定是指带有数字的“默认”和“不更改”选项0。这里,umask = 0 表明 creat(2) 之后的模式根本不应该改变,并且程序将生成具有与 creat(name, 模式)。当 umask 已设置位时,它清除创建的文件的相应权限位(即对程序逻辑进行一些更改)。这就是为什么这个负逻辑。

答案3

setmask是 UNOS 中可用的命令(自 1980 年起)。

长期以来,该umask命令为您提供了类似的功能。

称呼:

umask -S 获得反转掩码作为类似 chmod 的符号模式。

umask u=rwx,g=rx,o=rx得到相当于uask 022.

所以你的愿望已经实现了。

相关内容