umask
(用户文件创建掩码)是用于控制新创建文件和目录默认权限的机制。它通过屏蔽(关闭)特定的权限位来确保文件或目录不会拥有过于开放的权限,从而提高安全性。
核心概念
-
权限表示
Linux中权限分为读(r,4)、写(w,2)、执行(x,1),用三位八进制数表示(如755
)。-
文件默认最大权限:
666
(即rw-rw-rw-
,无执行权限)。 -
目录默认最大权限:
777
(即rwxrwxrwx
,需执行权限才能进入)。
-
-
umask的作用
umask
是一个掩码值,通过按位取反后与默认权限进行逻辑与操作,得到实际权限。
公式:实际权限 = 默认权限 & (~umask)
示例解析
示例1:umask 022
-
文件权限计算
-
默认权限:
666
→ 二进制110 110 110
-
umask值:
022
→ 二进制000 010 010
-
取反后:
111 101 101
(对应八进制755
) -
实际权限:
666 & 755 = 644
→rw-r--r--
-
-
目录权限计算
-
默认权限:
777
→ 二进制111 111 111
-
实际权限:
777 & 755 = 755
→rwxr-xr-x
-
结果:新文件权限为 644
,目录为 755
。
示例2:umask 002
-
文件权限:
666 & 775 = 664
→rw-rw-r--
-
目录权限:
777 & 775 = 775
→rwxrwxr-x
适用场景:适用于团队协作,允许同组用户读写文件。
示例3:umask 077
-
文件权限:
666 & 700 = 600
→rw-------
-
目录权限:
777 & 700 = 700
→rwx------
适用场景:严格隐私保护,仅所有者有权限。
查看与设置umask
-
查看当前umask:
umask # 输出数字格式(如 0022) umask -S # 输出符号格式(如 u=rwx,g=rx,o=rx)
-
临时设置umask:
umask 027 # 新会话中生效
-
永久设置:
-
将
umask [值]
添加到 Shell 配置文件(如~/.bashrc
或/etc/profile
)。
总结
-
umask值越大,权限越严格。常用值如
022
(默认)、002
(宽松协作)、077
(严格隐私)。 -
文件 vs 目录:目录需要执行权限(
x
),因此相同umask
下目录权限比文件多x
。 -
安全建议:避免使用过于开放的
umask
(如000
),防止意外暴露敏感数据。