Linux umask 详解:创建文件权限错乱的真正原因
一、什么是 umask?
umask(User Mask / File Mode Creation Mask)是文件默认权限的屏蔽值。
当你在 Linux 中新建文件或目录时:
系统会先给它一个“最大默认权限”;然后再用 umask 去掉一些权限;得到最终权限。文件最大默认权限:666 (rw-rw-rw-)目录最大默认权限:777 (rwxrwxrwx)最终权限计算公式:
👉 举个例子:
umask = 022a.文件:666 - 022 = 644 (rw-r--r--)
b.目录:777 - 022 = 755 (rwxr-xr-x)
umask = 002a.文件:664 (rw-rw-r--)
b.目录:775 (rwxrwxr-x)
这就是为什么不同环境下创建的文件权限不同。
下面是一个可视化的流程图👇
最终结果就是你创建文件/目录时看到的默认权限。
二、如何查看 umask?
1. 当前环境
直接输出当前 shell 的 umask,比如:0022。
2. 模拟完整登录环境
这会切换到 root或者test用户,并加载 对应用户的完整登录环境,得到 用户真实使用的 umask。
3. 脚本检测
写一个小脚本,一次性检查多处配置:
👉 或者直接搜:
📌 对比总结
方法
说明
适用场景
umask
查看当前用户/当前 shell 环境
日常使用
su -l -c "umask" 用户
查看目标用户真实登录环境
系统排查 / 安全审计
✅ 推荐:做安全基线检查时,一定要用 第二种方式,结果才准确。
三、如何修改 umask?
1. 临时修改(仅当前会话有效)
退出 shell 后失效。
2. 永久修改(写入配置文件)
全局生效a./etc/profile
b./etc/bashrc 或 /etc/bash.bashrc
单个用户生效a. ~/.bashrc
b.~/.bash_profile
示例:
四、为什么 umask 会不一样?
常见现象:同一个环境采用2种方式检查,结果不同
通过ansilbe创建文件夹,发现文件权限为750,而不是755,证明su -l -c umask root方式检测的才是准的。
原因:
su -l root(带 -l)会模拟完整登录环境,加载 root 的配置文件(如 /etc/profile, ~/.bashrc),因此得到更严格的 0027。直接 umask 继承的是当前 shell 的环境,常见是 0022。五、总结
umask 决定新建文件/目录的默认权限。文件最大 666,目录最大 777,减去 umask 就是最终权限。查看 umask 有两种方式:a.umask → 当前环境
b.su -l -c "umask" 用户 → 模拟完整登录环境,ansible或者shell远程执行用这种方式做环境检查比较准确。
修改 umask 需要写配置文件才能永久生效。推荐配置:生产环境 027,既保证可用性,又兼顾安全性。