当进程(process)创建文件时,文件有默认的权限,如rw-r--r--,这个初始的默认值是由 文件权限掩码 (file mode creation mask/file permission mask/umask)决定的。
umask 可以用二进制、八进制、或符号记法显示。如八进制的 0137 ,符号记法 u=rw-,g=r--,o=--- 。符号记法和八进制记法相反,八进制记法禁止权限,符号记法代表允许权限。
umask的结构:
-
0 = 没有意义,总是为零,umask 对特殊权限没有作用。
-
1 = owner user 执行权限掩码。
-
3 = owner group 写、执行权限掩码。
-
7 = others 读、写、执行权限掩码。
umask的用法:
-
当一个位在umask中指定,文件中不会指定这个位指定的权限。
-
当位不在umask中指定,文件的位所在的权限可以被指定,具体取决于其他因素。
下图解释了umask0137对文件的作用:
重要:
为了系统安全的原因,普通文件默认没有执行权限。因此,即使 umask 设置为0000,没有禁止任何权限,当文件被创建时,文件还是不会有执行权限。当然,创建文件夹时,文件夹有执行权限。
管理umask:
在一些普遍流行的 shell 下,如bash 、 ksh 、zsh 和 tcsh,umask内置于shell。shell 下的进程继承这个内置 umask 。
查看当前 umask:
查看当前八进制 umask :
# umask 0022
查看当前符号记法 umask :
# umask -S
u=rwx,g=rx,o=rx
设置 umask(通过 umask 命令):
通过八进制记法设置 umask :
# umask 0027# umask 0027
通过符号记法设置 umask :
# umask -S u=rwx,g=rx,o=rx u=rwx,g=rx,o=rx # umask -S u=rwx,g=rx,o=rx # umask 0022
注意:
1.使用 umask 命令设置 umask 值,设置只对当前 shell 有效:
[root@localhost ~]# umask 0027 [root@localhost ~]# umask 0027 [root@localhost ~]# su - Last login: Tue May 12 12:32:38 CST 2020 on pts/0 [root@localhost ~]# umask 0022 [root@localhost ~]#
2.当 umask不完整时,填充0左补足:
[root@localhost ~]# umask 7 [root@localhost ~]# umask 0007
设置 umask(通过文件):
为所有用户设置默认 umask,通过脚本中的 umask 命令, 或设置 UMASK 变量实现:
[root@localhost ~]# grep -i umask -B 1 /etc/bashrc # By default, we want umask to get set. This sets it for non-login shell. -- if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022 [root@localhost ~]# vim /etc/bashrc [root@localhost ~]# grep -i umask -B 1 /etc/bashrc # By default, we want umask to get set. This sets it for non-login shell. -- if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 027 [root@localhost ~]#