什么是 Umask 以及如何有效使用它

什么是Umask?

Umask 或用户文件创建模式是一个 Linux 命令,用于为新创建的文件夹和文件分配默认文件权限集。 术语掩码引用权限位的分组,每个位都定义了如何为新创建的文件设置相应的权限。 可以通过调用 umask 命令更改掩码中的位。

当使用术语 Umask 时,我们指的是以下两种含义之一:

  • 用户文件创建模式掩码,用于为新创建的文件和目录配置默认权限
  • 用于设置 umask 值的命令“umask”

您可能已经知道,所有基于 Unix 的操作系统都有一组属性,用于定义允许谁读取、写入或执行特定文件或目录。 这些权限适用于三个称为“权限类”的类别,它们的说明如下。

  • 用户:默认情况下,用户是文件或文件夹的所有者或创建者。 新文件的所有权默认归该用户所有。
  • 组:组是一组用户,它们对文件或文件夹具有相同的访问级别或权限。
  • 其他:其他组定义为不包括在前两个类别中的任何用户。 这些用户没有创建文件或文件夹,也不属于特定的用户组。 该组包括未被标识为用户或属于用户组的每个人。 当我们将文件或文件夹的权限级别设置为“其他”时,它会授予访问该文件或文件夹的任何人的权限级别访问权限。

那么,当用户创建新文件和目录时会发生什么? 如果使用 touch 命令,系统会自动为文件分配以下权限。

[root@host ~]# touch test.txt
[root@host ~]# stat test.txt
  File: test.txt
  Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd03h/64771d Inode: 654750 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-04-21 12:53:25.612051178 -0400
Modify: 2020-04-21 12:53:25.612051178 -0400
Change: 2020-04-21 12:53:25.612051178 -0400
 Birth: -

如果我们创建一个目录,它会为其分配以下权限集,

[root@host ~]# mkdir test
[root@host ~]# stat test
  File: test
  Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd03h/64771d Inode: 654751 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-04-21 12:54:25.172601585 -0400
Modify: 2020-04-21 12:54:25.172601585 -0400
Change: 2020-04-21 12:54:25.172601585 -0400
 Birth: -
[root@host ~]#

Umask 命令语法

umask 的完整联机帮助页条目如下。

umask [-p] [-S] [mode]
The user file-creation mask is set to mode.  

If mode begins with a digit, it is interpreted as an octal number; otherwise it is interpreted as a symbolic mode mask similar to that accepted by  chmod(1). If mode is omitted, the current value of the mask is printed.  

The -S option causes the mask to be printed in symbolic form; the default output is an octal number. 

If the -p option is supplied, and mode is omitted, the output is in a form that may be reused as input. The return status is 0 if the mode was successfully changed or if no mode argument was supplied, and false otherwise.

要查看当前的 umask 值,我们使用 umask 命令。 单独运行 umask 命令会提供在创建文件或文件夹时分配的默认权限。

[root@host ~]# umask
0022
[root@host ~]#

要更改这些值,我们将使用以下命令。

[root@host ~]# umask ###
[root@host ~]# umask 022

第一个命令中的### 符号用于代替实际的八进制数。

下面,我们可以看到八进制的翻译值以及它们之间的关系。

数字允许
4
2
1执行
执行总价值符号等价物:
0000
0011X
0202w
0213wx
4004r
4015接收
4206读写
4217rwx

因此,当我们运行 ls 命令时,八进制或符号权限值会显示在输出的开头。

[root@host ~]# ls
drwxr-xr-x 2 root root 4096 Apr 21 12:54 test/
-rw-r--r-- 1 root root    0 Apr 21 12:53 test.txt

为测试目录设置的权限是 755 或 ‘rwx’ ‘rx’ ‘r-x’。
test.txt 文件的权限设置为 644 或 ‘rw -‘ ‘r – -‘ ‘r – -‘。
破折号表示 0 值。

符号标题

--- no permission
--x execute
-w- write
-wx write and execute
r-- read
r-x read and execute
rw- read and write
rwx read, write and execute

数字标题

0 --- no permission
1 --x execute
2 -w- write
3 -wx write and execute
4 r-- read
5 r-x read and execute
6 rw- read and write
7 rwx read, write and execute

Umask 的工作原理

掩码 命令通过使用特定值限定权限级别来掩盖权限级别。 为了进一步解释如何应用 umask 值,我们将用一个 example. 假设我们要将所有新文件或文件夹的默认权限设置为 644 和 755。然后我们将使用以下命令。

[root@host ~]# umask 022

数字“2”权限(写入权限)将从系统默认权限 666 和 777(因此得名“掩码”)中“过滤”出来。从现在开始,系统现在将分配默认权限 644 和 755新文件和目录。 简单地说,要计算新文件或目录的权限位,我们只需从默认值中减去 umask 值,就像这样。

  • 666 – 022 = 644
  • 777 – 022 = 755

八进制值 : 允许

  • 0 : 读、写和执行
  • 1 : 读和写
  • 2 : 读取并执行
  • 3 : 只读
  • 4 : 写入并执行
  • 5 : 只写
  • 6 : 只执行
  • 7 : 没有权限

我们可以使用上述信息来计算我们的文件权限。 为了 example,如果我们的umask设置为077,那么权限可以计算如下:

少量针对文件权限
0所有者读、写和执行
7团体没有权限
7世界没有权限

0 : 读、写和执行
7 : 没有权限
7 : 没有权限

umask 为 000 将使新创建的目录对每个人都可读、可写和可执行(权限为 777)。

Umask 配置位置

在大多数 Linux 发行版中,可以在以下位置找到和配置 umask 值:

  • /etc/profile – 这是存储系统范围默认变量的地方
  • /ETC/bash.bashrc – 这是存储默认 shell 配置文件的地方

掩码符号

如上面的 umask 手册页所述,我们可以使用特定的符号来指定我们想要设置的权限值。 要预览符号中当前设置的 umask 值,我们使用以下命令:

umask -S

要更改它,我们可以使用字母“u”、“g”和“o”代表用户、组和其他或世界的命令,如下所示。

umask u=$, g=$, o=$

当以这种方式设置权限时,我们会为每个“$”占位符补充所需的权限符号。 平等的“=” 在使用符号值设置 umask 时,符号并不是我们唯一可以使用的运算符。 我们可以使用加号“+” 和减号 “” 运营商也是如此。

  • = 符号允许启用权限,禁止未指定的权限
  • + 符号允许启用权限,忽略未指定的权限
  • – 符号禁止启用权限,忽略未指定的权限

注意:逗号后使用空格无效,并且 bash 将显示“无效的符号模式运算符”错误消息。

当我们想同时为所有权限类(用户、组和其他)设置相同的权限时,可以使用一个附加符号,即:

umask a=

结论

现在我们更好地了解了用户文件模式创建掩码的功能,我们可以好好利用它。 不仅为我们节省了宝贵的时间,提高了安全性,还为我们提供了更好的权限管理能力。

今天就开始吧!

对如何使用 umask 仍有疑问? 给我们打电话 800.580.4985,或打开 聊天 或与我们联系,立即与我们知识渊博的解决方案团队或经验丰富的托管顾问交谈!