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
.
所以你的愿望已经实现了。