在Linux和Unix操作系统上,所有新文件都使用一组默认权限创建。 umask实用程序允许您查看或设置文件模式创建掩码,该掩码确定新创建的文件或目录的权限。
mkdir、touch、tee和其他创建新文件和目录的命令都使用它。
Linux权限
在进一步讨论之前,让我们简要介绍一下Linux权限模式。
在Linux中,每个文件都与一个所有者和一个组相关联,并为三个不同类别的用户分配了访问权限:
文件所有者。
组成员。
其他用户。
有三种权限类型适用于每个类:
读取权限。
写权限。
执行权限。
此概念允许您指定允许哪些用户读取文件,写入文件或执行文件。
要查看文件权限,请使用ls命令:
linuxidc@linuxidc:~/www.linuxidc.com$ ls -l linuxidc.com.py
输出示例:
-rw-r--r-- 1 linuxidc linuxidc 53 Jul 15 03:18 linuxidc.com.py
|[-][-][-] [------] [---]
| | | | | |
| | | | | +-----------> 组
| | | | +-------------------> 所有者
| | | +----------------------------> 其他权限
| | +-------------------------------> 组权限
| +----------------------------------> 所有者权限
+------------------------------------> 文件类型
先详细描述第一行其中每项代表的含义:
-rw-r–r–
1) 第一个字符表示文件类型,可以是常规文件(-)、目录(d)、符号链接(l)或任何其他特殊类型的文件。接下来的9个字符代表权限,每组3个字符。第一组显示所有者权限,第二组显示组权限,最后一组显示所有其他人的权限。
2)rw-表示可读可写,代表所有者u的权限。
3)第一个r–表示可读,代表所属组g的权限(相同权限的人放在一起就是一组);第二个r–表示可读,代表其他人o的权限。
r 读 w 写 x 执行
数字2表示该文件被调用次数
第一个linuxidc表示所有者u
第二个linuxidc表示所属组g,在这里表示和root一个组的其他用户
53是文件大小,单位是字节(byte)
Jul 15 03:18表示文件最后一次修改时间
linuxidc.com.py是文件名
还有另外三种特殊的文件权限类型:setuid、setgid和Sticky Bit。
如果我们使用数字表示法表示文件权限,我们将得到数字644:
所有者: rw- = 4+2+0 = 6
组: r-- = 4+0+0 = 4
其他人: r-- = 4+0+0 = 4
以数字表示法表示时,权限可以有三个或四个八进制数字(0-7)。第一个数字表示特殊权限,如果省略则表示没有为文件设置特殊权限。
可以使用chown命令使用chmod命令和所有权更改文件权限。
了解umask
默认情况下,在Linux系统上,文件的默认创建权限是666,它为用户、组和其他用户提供读和写权限;目录的默认创建权限是777,这意味着对用户、组和其他用户具有读、写和执行权限。Linux不允许创建具有执行权限的文件。
可以使用umask实用程序修改默认的创建权限。
umask只影响当前的shell环境。在大多数Linux发行版上,默认的系统范围umask值是在pam_umask.so 或 /etc/profile 文件中设置的。
如果希望根据每个用户指定不同的值,请编辑用户的shell配置文件,例如~/.bashrc 或 ~/.zshrc。(您还可以通过运行umask后面跟着所需的值来更改当前会话umask值。
要查看当前掩码值,只需输入umask,不带任何参数:
linuxidc@linuxidc:~/www.linuxidc.com$ umask
输出示例:
0022
第一个 0 表示的是特殊权限位,对 umask 来说,有效的设定值只有后三位数。
正如我们已经提到的,文件的默认创建权限是666和目录777。要计算新文件的权限,请从默认值中减去umask值。
例如,要计算unask 022将如何影响新创建的文件和目录,请使用:
文件:666 - 022 = 644。所有者可以读取和修改文件。 组和其他人只能读取文件。
目录:777 - 022 = 755。所有者可以进入目录并列出读取,修改,创建或删除目录中的文件。 组和其他人可以进入目录并列出并读取文件。
您还可以使用-S选项以符号表示法显示掩码值:
linuxidc@linuxidc:~/www.linuxidc.com$ 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
并在文件的开头更改或添加以下行:
umask 027
要使更改生效,请运行以下源命令或注销并登录:
source /etc/profile
要验证新设置,我们将使用mkdir和touch创建一个新文件和目录:
mkdir linuxidc
touch linuxmi
如果使用ll命令检查权限,您将注意到新文件具有640和新目录750权限,如我们所愿:
输出示例:
drwxr-x--- 2 linuxidc linuxidc 4096 Jul 23 22:48 linuxidc/
-rw-r----- 1 linuxidc linuxidc 0 Jul 23 22:49 linuxmi
设置文件创建掩码的另一种方法是使用符号表示法。 例如,umask u=rwx,g=rx,o=与umask 027相同。
总结
在本指南中,我们已经解释了Linux权限以及如何使用umask命令为新创建的文件或目录设置权限。
有关更多信息,请在终端中键入man umask。
如果您有任何疑问,请在下面留言。