在Linux和Unix操作系统上,所有新文件都是使用默认权限集创建的。umask允许您查看或设置文件创建模式掩码,该掩码确定新创建的文件或目录的权限位。
mkdir,touch,tee和其他创建新文件和目录的命令使用它。
Linux权限
在继续之前,让我们简短地解释一下Linux权限模型。
在Linux中,每个文件都与一个所有者和一个组相关联,并为三种不同类别的用户分配了访问权限:
- 文件所有者。
- 组成员。
- 其他人。
有三种权限类型:
- 读取权限。
- 写入权限。
- 执行权限。
此概念使您可以指定允许哪些用户读取文件,写入文件或执行文件。
要查看文件权限,请使用以下ls
命令:
ls -l dirname
drwxr-xr-x 12 myfreax users 4.0K Apr 8 20:51 dirname
|[-][-][-] [------] [---]
| | | | | |
| | | | | +-----------> Group
| | | | +-------------------> Owner
| | | +----------------------------> Others Permissions
| | +-------------------------------> Group Permissions
| +----------------------------------> Owner Permissions
+------------------------------------> File Type
第一个字符代表文件类型,可以是常规文件(-
),目录(d
),符号链接(l
)或任何其他特殊类型的文件。
接下来的9个字符代表权限,每三个字符为一组。第一组显示所有者权限,第二组显示组权限,最后一组显示其他人权限。
r
与一个八进制值4
代表读,w
与一个八进制值2
代表写,x
用一个八进制值1
(执行权限和-
)与八进制值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
相同。第一位可以是4
代表 setuid
,2
代表 setgid
和1
代表Sticky Bit
。
可以使用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值。
例如,要计算uname 022
将如何影响新创建的文件和目录,请使用:
- 档案:
666 - 022 = 644
。所有者可以读取和修改文件。群组和其他人只能读取文件。 - 目录:
777 - 022 = 755
所有者可以进入目录并列出目录,以读取,修改,创建或删除文件。组和其他人可以cd
进入目录并列出并读取文件。
您还可以使用以下-S
选项以符号形式显示umask值:
umask -S
u=rwx,g=rx,o=rx
与数字符号不同,符号符号值包含将在新创建的文件和目录上设置的权限位。
设定umask值
可以使用八进制或符号表示法设置文件创建umask。要使更改永久生效,请在全局配置文件(如/etc/profile
file)中设置新的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
命令或注销并登录:
source /etc/profile
为了验证新设置,我们将使用mkdir
和创建一个新文件和目录touch
:
mkdir newdir
touch newfile
如果使用ls
命令检查权限,您将注意到新文件具有640
新目录750
权限,如我们所愿:
drwxr-x--- 2 myfreax users 4096 Jul 4 18:14 newdir
-rw-r----- 1 myfreax users 0 Jul 4 18:14 newfile
设置文件创建掩码的另一种方法是使用符号表示法。例如umask u=rwx,g=rx,o=
与umask 027
相同。
结论
在本指南中,我们解释了Linux权限以及如何使用该umask
命令为新创建的文件或目录设置权限位。
有关更多信息man umask
,请在终端中输入。
如有任何疑问,请在下面发表评论。