user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr 1 19:15 new-file-name
002
,这样扩展了对所有者组的写入权限。user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-rw-r-- 1 user user 0 Apr 1 19:15 new-file-name
要查看当前的umask设置,请打开终端并运行以下命令:
umask
umask 077
user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr 1 19:14 new-file-name
umask设置会被从同一个shell启动的进程继承。例如,通过在终端执行gedit
来启动文本编辑器GEdit,并使用gedit保存文件。您会注意到新创建的文件受到与终端中相同的umask设置的影响。~/.profile
并添加一行新的内容:umask 007
〜/ .profile
中生效。接下来,您需要通过删除全局的读取、写入和执行权限位来更改主目录中文件的现有权限。打开终端并执行以下命令:chmod -R o-rwx ~
/etc/profile
。777
表示组和其他人可以对其进行写操作,而077
则表示他们不能呢? - HelloGoodbye000
,文件权限将会是777
。所以按照默认掩码022
,文件权限不应该是755
吗?也就是对应-rwxr-xr-x
而不是-rw-r--r--
? - HelloGoodbye000
,那么不会移除任何权限。像touch
和nano
这样的应用程序会使用默认的666
创建文件,所以文件权限将保持为666
,但是umask为022
会移除组和其他用户的写入位,所以666
会被减少为644
,即-rw-r--r--
。考虑到mkdir
命令,默认的创建模式是777
,但是umask为022
会将权限减少为755
。 - Jeff Puckettumask 0077
相当于umask u+rwx,go-rwx
。在这种情况下,umask显示了你“想要”的权限而不是你“不想要”的权限,所以更容易理解和表达。 - Paddy Landau其他人已经很好地解释了umasking的概念以及为什么需要它。让我再补充一下,并给你一个数学例子,说明权限是如何实际计算的。
首先,“mask”并不意味着“减法”,在算术意义上没有借位或进位。
其次,应该逐位理解“掩码”,即独立地对每个位列应用逻辑操作。也就是说,权限位序列的第4位仅与掩码的第4位交互。
第三,掩码关闭权限位。如果它们已经关闭,则umask
不会更改权限。
例如,假设您必须从文件的系统默认值666
和目录的系统默认值777
中取消掩码077
。
您将使用的命令是
umask 077
(以二进制形式显示值,000 111 111
)
这个解码器的作用是关闭前六个最低有效位(LSB),如果它们为1
,如果其中任何一个已经关闭,则不会进行任何更改。
以下是计算最终权限的方法:
file permission 666 = 110 110 110
unmask value 077 = 000 111 111
will result in 600 = 110 000 000
110
值如何变为000
。
同样地,
directory permission 777 = 111 111 111
unmask value 077 = 000 111 111
will result in 700 = 111 000 000
umask 177
(001 111 111),它将关闭前7个最低有效位,如果它们是 1
。 - Kasun Siyambalapitiya结果 = 文件权限 & (!umask)
。 - Eric Hodginsumask
的内容,特别是在12.04及以后版本中如何管理它。
Umask和pam_umask
默认的umask现在位于/etc/login.defs
而不是/etc/profile
,正如/etc/profile
中的官方说明所述:# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.
Pam_umask
的简要解释如下,应该注意的是用户放置自定义umask设置的默认文件仍然是~/.profile
。
Pam_umask
是Ubuntu操作中至关重要的PAM模块之一(运行apropos '^pam_'
以查找其他模块的manpages)。在pam_umask
的manpage中指出:
pam_umask是一个PAM模块,用于设置当前环境的文件模式创建掩码。umask影响分配给新创建文件的默认权限。
关于默认umask的说明
在$HOME
中,可以使用mkdir
创建新文件夹,其默认权限为775,并且可以使用touch
创建新文件,其默认权限为664,即使默认的umask是022也不例外。这一点起初似乎有些矛盾,值得解释一下。/etc/login.defs
中存在一个设置,如果条件满足,非root用户的umask可以设为002(请参见下面的摘录)。在普通的安装中,/etc/login.defs
包含了以下设置:USERGROUPS_ENAB yes
。这就是为什么会出现下面的情况:
因此,当在像我的单用户系统中使用对于非root用户,允许将umask组位设置为与所有者位相同 (例如:022 -> 002,077 -> 007),前提是uid与gid相同,而且用户名与主要组名相同。
mkdir
创建新文件夹时,您会通过stat
命令看到以下情况(uid和gid相同):Access: (0775/drwxrwxr-x) Uid: ( 1000/username) Gid: ( 1000/username)
man pam_umask
和Ubuntu manpages online。/etc/login.defs
中的设置确实是 USERGROUPS_ENAB yes
。该文件的语法稍微有些不寻常。 - user76204Octal value : Permission
0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions
$ umask 077
$ mkdir dir1
$ touch file
$ ls -ld dir1 file
drwx------ 2 amrx amrx 4096 2011-03-04 02:05 dir1
-rw------- 1 amrx amrx 0 2011-03-04 02:05 file
您可以通过从基本权限中减去掩码来确定文件的最终权限,具体如下:
666 – 022 = 644
777 – 022 = 755
077
,那么在这种情况下你如何减去666-077
呢? - Sufiyan Ghori perm mask result
----------------------------
u 1 0 1 (pass through)
1 0 1 (pass through)
0 0 0 (pass through)
----------------------------
g 1 0 1 (pass through)
1 1 0 (disable)
0 0 0 (pass through)
----------------------------
o 1 0 1 (pass through)
1 1 0 (disable)
0 0 0 (pass through)
umask u=rwx,g=rx,o=rx
表示允许用户rwx、组rx和其他人rx通过。这意味着禁用组w和其他人w。如果你运行这个命令然后检查umask,你会得到022。
umask u=rwx,g=,o=
表示允许用户rwx通过。这意味着禁用组和其他人的所有访问权限。如果你运行这个命令然后检查umask,你会得到077。1
表示禁用,0
表示通过。perm mask result
----------------
0 1 0 (mask 1 always disables)
1 1 0 (mask 1 always disables)
0 0 0 (mask 0 passes through)
1 0 1 (mask 0 passes through)
NOT(mask)
来制作表格,现在它只是一个简单的AND
逻辑表格!perm NOT(mask) result
---------------------
0 0 0 (mask 1 always disables)
1 0 0 (mask 1 always disables)
0 1 0 (mask 0 passes through)
1 1 1 (mask 0 passes through)
result = perm AND (NOT mask)
0777 & <进程掩码>
,对于文件来说,它是0666 & <进程掩码>
(在这两种情况下,&
运算符是按位与运算,也就是说,它可以关闭0777中的某些位,但不会打开任何位。它既不是取反也不是减法,而是按位与运算)。注意事项3。要为进程“设置”掩码,请使用umask <proper-value>
命令。要获取进程的掩码,请单独使用umask
命令,不带任何参数,例如,在我的终端中运行时会得到0022。
让我理解umask工作原理的最简单的答案是:
设置的掩码位指定要关闭的权限位。
例如:
umask 007
因此,umask对文件权限644
的影响是:
0
(000b
):保持用户位不变0
(000b
):保持组位不变7
(111b
):关闭所有全局位结果是权限640
。
777
中“减去”,而是对目录从777
中减去,对文件从666
中减去。就是这样。 - phil294