在Linux和Unix操作系统上,所有新文件都是使用默认权限创建的。umask允许您查看或设置创建文件时使用的掩码模式,该掩码确定新创建的文件或目录的权限。mkdir,touch,tee和其他创建文件和目录的命令都使用它。
在本教程中,我们解释了Linux权限模型读取权限,写入权限,执行权限以及使用umask
命令为新创建的文件或目录设置权限位。权限的符号与数字表示法,创建文件与目录的默认权限,计算创建文件mask掩码值,通过mask计算创建文件与目录的权限,持久化创建文件mask掩码值。
Linux权限
在继续之前,让我们简短地解释一下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
,组和其他用户具有读取和执行权限r-x
。
如果我们使用数字符号表示文件权限,所有者是rwx
=4+2+1 = 7
,组是r-x
=4+0+1 = 5
,其他人是r-x
=4+0+1 = 5
。我们将得出数字755
。
以数字符号表示时,权限可以具有三个或四个八进制数字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
文件中设置。
如果要基于每个用户指定mask掩码值,请编辑用户的Shell配置文件,例如~/.bashrc
或~/.zshrc
。您还可以通过运行umask
命令更改所需的值来改变当前会话值。要查看当前的mask掩码值,只需不带任何参数运行umask
命令:
umask
输出将如下所示:
022
umask
值会影响在新创建的文件和目录上权限位。正如我们已经提到的,文件的默认创建权限是666
,目录是777
。要计算新文件的权限位,请从默认值中减去umask值。
例如,要计算mask掩码值022
,如何影响新创建的文件和目录权限。文件权限是666 - 022 = 644
,所有者可以读取和修改文件。组和其他人只能读取文件。
目录权限是777 - 022 = 755
,所有者可以进入目录并列出目录,读取,修改,创建或删除文件。组和其他人可以使用cd
命令进入目录列出与读取文件。
您还可以使用-S
选项以符号形式显示mask掩码值:
umask -S
u=rwx,g=rx,o=rx
与数字符号不同,符号展示的值就是新创建目录上要设置的权限。
设置mask掩码值
可以使用八进制或符号表示法设置mask掩码值。要使更改永久生效,请在全局配置文件(如/etc/profile
file)中设置新的mask掩码值,这将影响所有用户,或在用户的shell程序配置文件中~/.profile
,~/.bashrc
或~/.zshrc
仅影响用户。用户文件的优先级高于全局文件。
在更改mask掩码值之前,请确保新值不会造成潜在的安全风险。限制值要比022
应使用的限制要少,应格外小心。例如umask 000
意味着任何人都将具有对所有新创建文件的读取,写入和执行权限。
假设我们要为新创建的文件和目录设置更多的限制性权限,这样其他人将无法使用cd
访问目录和读取文件。我们需要的权限是目录750
和文件640
的权限。
要计算mask掩码值,只需从默认值中减去所需的权限。mask掩码值是 777-750 = 027
。要在系统范围内永久设置mask掩码值,请使用你喜欢的文本编辑器打开文件/etc/profile
。在本教程我们将使用vim打开文件:
sudo vim /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
。如有任何疑问,请在下面发表评论。