Umask是权限屏蔽位而非设置权限,通过减法逻辑(默认权限 & ~umask)决定新文件(666)和目录(777)的实际权限;推荐安全值为027、077,需写入shell初始化文件持久化,并注意程序覆盖和上下文差异。

Linux中Umask不是用来“设置权限”,而是定义权限的屏蔽位,它决定新创建文件或目录时,系统自动从默认最大权限中“去掉哪些位”。理解这一点,是制定安全策略的基础。
Umask的本质:减法逻辑,不是赋值
文件默认最大权限是666(即 rw-rw-rw-),目录是777(rwxrwxrwx)。Umask值以八进制表示,每一位对应一类用户(属主、属组、其他)的“禁止位”。系统实际赋予的权限 = 默认最大权限 & (~Umask)。
- 例如 umask 022 → 二进制为 000 010 010,取反后为 111 101 101 → 文件得 644(rw-r--r--),目录得 755(rwxr-xr-x)
- umask 077 → 屏蔽属组和其他所有权限 → 文件 600,目录 700,仅属主可读写执行
- 注意:文件默认无执行位,所以即使 umask 为 000,新建普通文件仍是 666,不会变成 777
生产环境推荐的Umask安全取值
安全策略需平衡可用性与最小权限原则。常见合理配置:
- 027:适合协作组环境。属主全权,属组可读写(无执行),其他人无任何权限 → 文件640,目录750
- 077:高敏感环境(如金融、审计账户)。彻底隔离其他用户 → 文件600,目录700
- 007:极少数需组内完全共享且信任的场景(如开发沙箱),但不建议用于生产服务器登录账户
避免使用 000、002 等宽松值,尤其在多用户服务器上,易导致配置文件、密钥等意外暴露。
持久化Umask策略的正确方式
临时设置(如 umask 077)只影响当前shell会话。要落实策略,需写入用户或系统级初始化文件:
- 单个用户:在 ~/.bashrc 或 ~/.profile 末尾添加
umask 077 - 全部用户(含root):修改 /etc/bash.bashrc(Debian/Ubuntu)或 /etc/profile(RHEL/CentOS)
- 注意:SSH登录时,/etc/login.defs 中的
UMASK设置仅影响通过 login 程序启动的会话(如控制台),对 SSH 的非交互式命令无效;真正通用的是 shell 初始化文件
验证与排查常见误区
设置后务必验证是否生效,并注意上下文差异:
- 运行
umask(无参数)查看当前值;用umask -S查看符号表示(如 u=rwx,g=,o=) - 新建测试文件和目录:
touch testfile && mkdir testdir && ls -l,确认权限符合预期 - 注意:某些程序(如编辑器、FTP服务、Web应用)可能自行调用 chmod 或覆盖 umask 行为,不能仅依赖 umask 保证最终权限
- systemd 服务、cron 任务默认不读取用户 shell 配置,需在 service unit 或 crontab 中显式设置 umask










