umask是权限遮罩,非直接设权,而是从文件默认666、目录默认777中按位屏蔽(非减法):如umask 022得文件644、目录755;临时用umask命令,永久配~/.bashrc等。

Linux 通过 umask(用户文件创建掩码)控制新建文件和目录的默认权限。它不是直接设置权限,而是“屏蔽”掉某些权限位,从系统预设的最大权限中按位清除。
umask 的计算逻辑很关键
- 普通文件默认最大权限是 666(即
rw-rw-rw-),因为刚创建的文件通常不该有执行权限; - 目录默认最大权限是 777(即
rwxrwxrwx),因为目录必须有执行(x)权限才能被进入和访问; -
umask值会按位与取反后相与(不是简单减法),即:- 文件实际权限 =
666 & (~umask) - 目录实际权限 =
777 & (~umask)
- 文件实际权限 =
比如 umask 022:
-
~022(八进制)→ 对应二进制是111101101,等效于屏蔽掉组和其他人的写权限; - 文件:
666 & (~022)=644→-rw-r--r-- - 目录:
777 & (~022)=755→drwxr-xr-x
⚠️ 注意:
umask 022不等于 “666 − 022 = 644”,那是巧合;真正是位运算。用umask 077试试:666 & ~077 = 600,不是 589。
常见 umask 值及其适用场景
-
022:最常用,适合单人环境或安全要求较高的服务器(文件 644,目录 755) -
002:适合组内协作(文件 664,目录 775),组成员可互相修改同组文件 -
007:严格组共享(文件 660,目录 770),其他人完全无权访问 -
077:完全私有(文件 600,目录 700),仅所有者可读写执行
如何设置 umask
-
临时设置(当前终端有效):
umask 002
-
永久设置(对用户生效):
编辑~/.bashrc或~/.zshrc,添加:umask 002
然后运行
source ~/.bashrc生效。
Linux Security Scanner下载Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
系统级设置(所有用户):
推荐使用 PAM 模块,在/etc/pam.d/common-session中添加:session optional pam_umask.so umask=002
或修改
/etc/login.defs中的UMASK行(部分发行版支持)。
验证是否生效
开一个新终端,执行:
umask # 查看当前值(八进制) umask -S # 查看符号表示,如 u=rwx,g=rx,o=rx touch testfile && mkdir testdir && ls -l test*
观察新建文件和目录的权限是否符合预期。
不复杂但容易忽略细节。










