在Linux中如何计算umask?


15

因此,我知道umask可以使用这种格式限制特权用户umask ugo

我知道read = 4,write = 2和exec =1。但是,当我键入时umask,它将返回4位数字,即0022or 0073。我不知道现在如何工作,因为还有一个数字。那多余的数字是什么0022

Answers:


18

假定默认掩码为0666。0022 umask将使新掩码为0644 (0666-0022 = 0644),这意味着该组和其他成员具有读取(无写或执行)权限。

“额外”数字(第一个数字= 0)指定没有特殊模式。

如果mode以数字开头,则它将被解释为八进制,否则将被视为符号。

0是数字,1(对于粘性位)或6(对于SGID)也是数字。诸如此类的命令chmod可以由其他方法调用,例如chmod ug+rw mydir您要在其中向用户和组添加读取和写入权限的位置。请注意,这种情况下的模式(ug + rw)并非以数字开头,因此不会被解释为八进制,而是象征性的。

有关特殊模式的信息,请参见en.wikipedia.org/wiki/Chmod#Symbolic_examples中的符号以及www.lifeaftercoffee.com/2007/03/20/special-permission-modes-in-linux-and-unix/

我不知道您会使用来掩盖第一部分umask,但是从技术上讲您可以。它可以解释为什么您几乎总是将其视为零。

感谢pinkfloydx33

遮罩的第一位数字处理的特殊权限不太适合所有者/组/其他模型。为文件许可权提供四位数字时,第一位引用这些特殊值:

4000 = SUID
2000 = SGID
1000 = sticky bit

SUID位是set-user-ID的缩写,它使可执行程序以所有者的有效用户ID(uid)运行-换句话说,无论由谁执行,该程序都将以所有者的权限执行。这在执行需要root特权但要由普通用户运行的程序中很常见:passwd就是这样的例子。

SGID位是set-group-ID的缩写,非常相似,但是以所有者的有效 ID(gid)运行。

粘性有些复杂,如果您需要更多信息,可以阅读的联机帮助页sticky

这些位也可以与目录一起使用,但是它们的含义会改变。

我不相信您实际上可以将设置umask为允许您默认情况下启用所有这些额外的位,但是您可能永远也不想这样做。

感谢user470379


1
实际上,除了最后3位数字外,您不能提供非零值。根据Posix:“未指定指定文件模式位而不是文件许可位的模式值的解释。” 根据man 2 umask(相应的系统调用)“仅使用的文件许可权mask”。在中bash,umask 1000生成错误:“八进制数超出范围”。那么为什么要多加0呢?我认为这只是为了表明数字是八进制的。
里奇

该pastebin完全没有umask的参考,因此我看不到它的相关性。chmod允许设置前三个位,但是umask不允许将它们屏蔽。(即,您可能已经写过chmod 6777 dropbox。而且,顺便说一下chmod ug+s。)
rici

是的,您是对的,不知道我在想什么。
Braiam

@Braiam:您计算新蒙版的公式是错误的,不是0666-0022,是0666 & ~0022
cuonglm 2014年

1
我认为反对不是数字的写法,而是使用减法运算符(-)而不是按位和(&)。
BowlOfRed 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.