Linux中的Umask命令

时间:2020-03-05 15:29:58  来源:igfitidea点击:

在Linux和Unix操作系统上,所有新文件都是使用默认权限集创建的。
“ umask”实用程序允许我们查看或者设置文件模式创建掩码,该掩码确定新创建的文件或者目录的权限位。

mkdir,touch,tee和其他创建新文件和目录的命令使用它。

Linux权限

在进一步介绍之前,让我们简短地解释一下Linux权限模型。

在Linux中,每个文件都与一个所有者和一个组相关联,并为三种不同类别的用户分配了权限访问权限:

  • 文件所有者。
  • 小组成员。
  • 其他人。

有三种权限类型适用于每个类:

  • 读取权限。
  • 写入权限。
  • 执行权限。

此概念使我们可以指定允许哪些用户读取文件,写入文件或者执行文件。

要查看文件许可权,请使用“ ls”命令:

ls -l dirname
drwxr-xr-x 12 theitroad users 4.0K Apr  8 20:51 dirname
|[-][-][-]    [------] [---]
| |  |  |        |       |       
| |  |  |        |       +-----------> Group
| |  |  |        +-------------------> Owner
| |  |  +----------------------------> Others Permissions
| |  +-------------------------------> Group Permissions
| +----------------------------------> Owner Permissions
+------------------------------------> File Type

第一个字符代表文件类型,可以是常规文件('-'),目录('d'),符号链接('l')或者任何其他特殊类型的文件。

接下来的9个字符代表权限,每组3个字符,共3组。
第一组显示所有者权限,第二组显示所有者权限,最后一组显示其他所有人权限。

八进制值为'4'的字符'r'表示读取,八进制值为'2'的字符'w'表示写入,八进制值为'1'的'x'表示执行许可,而('-')八进制值为“ 0”表示没有权限。

还有其他三种特殊的文件权限类型:'setuid','setgid'和'Sticky Bit'。

在上面的示例中('rwxr-xr-x')表示所有者拥有读取,写入和执行权限('rwx'),该组和其他用户具有读取和执行权限。

如果我们使用数字符号表示文件权限,我们将得出数字'755':

  • 所有者:'rwx'='4 + 2 + 1 = 7'
  • 组:'r-x'='4 + 0 + 1 = 5'
  • 其他:'r-x'='4 + 0 + 1 = 5'

当以数字符号表示时,权限可以具有三个或者四个八进制数字(0-7)。
第一位数字表示特殊权限,如果省略,则意味着在文件上未设置特殊权限。
在我们的情况下,'755'与'0755'相同。
第一个数字可以是“ setuid”的“ 4”,“ setgid”的“ 2”和“ Sticky Bit”的“ 1”的组合。

可以使用“ chmod”命令更改文件许可权,并使用“ chown”命令更改所有权。

了解umask

默认情况下,在Linux系统上,文件的默认创建权限为“ 666”,它向用户,组和其他用户授予读和写权限,而目录的默认创建许可为“ 777”,这意味着对用户具有读和写权限。
,小组和其他人。

Linux不允许创建具有执行权限的文件。

可以使用“ umask”实用程序来修改默认的创建权限。

'umask'仅影响当前的shell环境。
在大多数Linux发行版中,默认的系统范围umask值在'pam_umask.so'或者'/etc/profile'文件中设置。

如果要基于每个用户指定其他值,请编辑用户的shell程序配置文件,例如“~/.bashrc”或者“~/.zshrc”。
我们还可以通过运行“ umask”后跟所需的值来更改当前会话的“ umask”值。

要查看当前的掩码值,只需键入不带任何参数的'umask':

umask

输出将包括

022

“ umask”值包含不会在新创建的文件和目录上设置的权限位。

如前所述,文件的默认创建权限为'666',目录的默认创建权限为'777'。
要计算新文件的权限位,请从默认值中减去umask值。

例如,要计算“ umask 022”将如何影响新创建的文件和目录,请使用:

  • 文件:“ 666-022 = 644”。所有者可以读取和修改文件。群组和其他人只能读取文件。
  • 目录:'777-022 = 755'。所有者可以cd进入目录并列出读取,修改,创建或者删除目录中的文件。

组和其他人可以“ cd”进入目录并列出并读取文件。

我们还可以使用'-S'选项以符号符号显示掩码值:

umask -S
u=rwx,g=rx,o=rx

与数字符号不同,符号符号值包含将在新创建的文件和目录上设置的权限位。

设定遮罩值

可以使用八进制或者符号表示法设置文件创建掩码。
要使更改永久生效,请在全局配置文件(如“/etc/profile”文件)中设置新的“ umask”值,这将影响所有用户或者在用户的shell程序配置文件(如“~/.profile”,“~/”)中。
bashrc”或者“~/.zshrc”,这只会影响用户。
用户文件的优先级高于全局文件。

在更改“ umask”值之前,请确保新值不会造成潜在的安全风险。
限制值小于“ 022”的值应格外小心。
例如,“ umask 000”意味着任何人都将具有对所有新创建文件的读取,写入和执行权限。

假设我们要为新创建的文件和目录设置更多的限制性权限,这样其他人将无法“ cd”到目录和读取文件。
我们想要的目录权限为“ 750”,文件权限为“ 640”。

要计算“ umask”值,只需从默认值中减去所需的权限:

Umask值:“ 777-750 = 027”

以数字符号表示的所需“ umask”值是“ 027”。

要在系统范围内永久设置新值,请使用文本编辑器打开“/etc/profile”文件:

sudo nano /etc/profile

并在文件开头更改或者添加以下行:

/etc/profile

umask 027

为了使更改生效,请运行以下“源”命令或者注销并登录:

source /etc/profile

为了验证新设置,我们将使用'mkdir'和'touch'创建一个新文件和目录:

mkdir newdirtouch newfile

如果使用“ ls”命令检查权限,则会注意到新文件具有“ 640”权限,而新目录具有“ 750”权限,如我们所愿:

drwxr-x--- 2 theitroad users 4096 May  4 18:14  newdir
-rw-r----- 1 theitroad users    0 May  4 18:14  newfile

设置文件创建掩码的另一种方法是使用符号表示法。
例如,'umask u = rwx,g = rx,o ='与'umask 027'相同。