什么是 umask 以及如何永久更改默认值?

umask 是确定掩码设置的命令,该掩码控制在创建文件和目录时为其设置哪些文件权限。

  • 八进制
  • 象征性的

八进制法

使用此方法为文件和目录提供相对权限,范围为 0 到 7,如下表所示

Octal Values允许
0没有权限
1仅执行
2只写
3写下和执行
4只读
5阅读和执行
6读和写
7读取,写和执行

如果不带任何参数调用 umask 命令,它将显示当前掩码。
根据所使用的操作系统,输出将采用八进制或者符号表示法。

[root@test ~]# umask
0022

4个值代表如下图
0 特殊权限(Sticky Bit、SUID 或者 SGID)
0 用户所有者权限
2 组主权限
2 其他用户的许可

按照下表了解应用于目录的默认 umask 值

权限用户所有者组所有者所有其他人
全部权限NA.7.7.7.
Umask0.0.22
目录权限0.7.5.5.

下表是应用于所有文件的默认 umask 值

特许用户所有者集团所有者所有其他人
全权限NA.6.6.6.
Umask0.0.22
文件权限0.6.4.4.

如何使用八进制方法更改 umask 值?

让我用几个例子来解释一下
问:我希望创建的所有目录的默认权限为 755,所有文件的默认权限为 644,例如:用户具有完全权限,组和所有其他人具有读取和执行权限

A:使用 umask 值作为 0022

计算
0777 0022 = 0755(目录)
0666 0022 = 0644(文件)

在终端上运行以下命令

# umask 0022

问:我希望创建的所有目录的默认权限为 733,所有文件的默认权限为 622,例如:用户具有完全权限,组和所有其他人具有写入和执行权限

A:使用 umask 值作为 0044
计算
0777 0044 = 0733(目录)
0666 0044 = 0622(文件)

在终端上运行以下命令

# umask 0044

问:我希望创建的所有目录的默认权限为 700,所有文件的默认权限为 600 例如:用户具有完全权限,组和所有其他人都没有权限
A:使用 umask 值作为 0077
计算
0777 0077 = 0700(目录)
0666 0066 = 0600(文件)

在终端上运行以下命令

# umask 0077

<注意:如果输入的数字少于 4 位,则假定为前导零。
如果参数不是有效的八进制数或者超过 4 位,则会导致错误。

符号方法

在此模式下,权限使用字母分配,如下表所示

Symbolic Values允许解释
r阅读文件或者列出目录的内容
w写入(或者删除)文件或者目录
x执行执行文件或者重复目录树
ssetuid/gid.有关详细信息,请参阅Suid和Sgid。
t粘滞位有关详细信息,请参阅粘性位。
# umask -S
u=rwx,g=rx,o=rx

文件的权限适用于三类不同的用户:用户(文件的所有者)、组和其他人。

Letter描述
u用户文件的所有者
g是文件组成员的用户
o其他不是文件或者本集团成员的所有者的用户
a全部所有三个以上,它与UgO相同。 (如果在umask命令中没有指定类,则这是默认值。)

如何使用符号方法更改 umask 值?

让我用几个例子来解释一下

# umask a+rx

上述命令允许为所有用户类启用读取或者执行权限;其余的掩码位不变

# umask u=rw,go=

上述命令允许为owner开启读写权限,同时禁止为owner开启execute权限;阻止为组和其他人启用任何权限

# umask u+w,go-w

上述命令允许为所有者启用写入权限;阻止为组和其他人启用写权限

如何永久设置 umask 值?

以上用于设置 umask 值的方法都是临时的和基于终端的。
一旦我们切换终端,umask 值将返回到 /etc/profile 中设置的默认值。

我们可以通过对以下文件进行主更改来更改默认 umask 值

# vi /etc/profile
# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 022
else
    umask 022

如我们所见,所有小于/大于 200 的 uid/gid 的默认 umask 值为 0022.
如果我们想更改相同的值,请更改两个值,如下所示

if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 077
else
    umask 077
fi

保存并退出文件

现在,下次我们登录终端或者其他会话时,将应用新的 umask 值,我们可以使用以下命令进行验证

# umask
0077

我们还可以在 ~/.bash_profile 或者 ~/.bashrc 文件中设置命令,以便每次机器启动或者打开新终端时都会更新新的 umask 值。

日期:2020-06-02 22:17:21 来源:oir作者:oir