在 /etc/profile 中设置 umask 0027 能对 bash 登录 shell 生效,但不推荐为主方案,因其被 pam 的 pam_umask.so 覆盖,且对 su、图形界面、systemd 等无效;可靠方案是配置 pam 和 /etc/login.defs。

直接在 /etc/profile 里加 umask 命令,能生效,但不推荐作为主方案——它只对读取了该文件的登录 shell(如 bash 登录会话)起作用,而 SSH、su、图形界面登录等多数场景实际走的是 PAM 认证流程,PAM 的 pam_umask.so 会覆盖 /etc/profile 的设置。
不过,如果你确实需要通过 /etc/profile 实现全局初始掩码调整(例如做兜底或调试),操作如下:
修改 /etc/profile 设置全局 umask
确保该文件被所有交互式登录 shell 加载,并且不与其他配置冲突:
- 用 root 权限编辑:
sudo nano /etc/profile
- 在文件末尾(或合适位置,避开已有 umask 行)添加一行:
umask 0027
-
不要写成
umask=0027或export umask=0027——umask是 shell 内建命令,直接调用即可。
注意事项与常见陷阱
- ✅ 该设置对
bash登录 shell(如 SSH 登录后启动的 bash)有效,前提是/etc/profile被执行(不是所有 shell 都加载它,比如非登录 shell 或 zsh 默认不读/etc/profile)。 - ❌ 对
su -、sudo -i、GNOME/KDE 图形会话、systemd 用户服务、cron 脚本等基本无效——它们绕过/etc/profile,依赖 PAM。 - ⚠️ 如果系统已启用
pam_umask.so(如 Debian/Ubuntu 默认启用了/etc/pam.d/common-session中的session optional pam_umask.so),那么/etc/profile里的umask会被忽略或覆盖。 - ? 检查是否已有重复设置:
grep -r "umask" /etc/profile* /etc/bash.bashrc 2>/dev/null
删除重复或冲突行(尤其避免
~/.bashrc和/etc/profile同时设不同值)。
更可靠的替代路径(建议同步配置)
为确保真正全局生效,应优先配置 PAM:
-
Debian/Ubuntu:编辑
/etc/pam.d/common-session,添加:session umask=0027
-
RHEL/CentOS:编辑
/etc/pam.d/system-auth,在session段添加同上行;确认已安装pam_umask模块(RHEL 默认有,Ubuntu 需sudo apt install libpam-umask)。
再辅以 /etc/login.defs 中的:
UMASK 027
(三位数,不带前导零,影响 useradd 创建的新用户家目录权限)
这样三层覆盖,才能让 umask 0027 在 SSH、su、图形登录、新用户初始化等全部场景稳定生效。











