umask通过按位取反与运算从最大权限屏蔽权限位:文件基础权限666、目录777,如umask 007时文件为660、目录为770;临时用umask命令,永久设置需写入~/.bashrc、/etc/profile或PAM配置,并验证新建文件权限。

Linux 中新建文件和目录的默认权限不是随意决定的,而是由 umask(用户文件创建掩码)控制的。它不直接赋予权限,而是从“最大允许权限”中屏蔽掉某些位,从而得到实际权限。理解 umask 的作用机制和设置方式,是保障系统安全与协作合理性的基础。
umask 是怎么算出文件和目录权限的
umask 值是一个三位(或四位)八进制数,例如 022 或 007。它的核心逻辑是“屏蔽”,不是数学减法。
- 新建文件的最大默认权限是 666(
-rw-rw-rw-),但内核强制禁止自动赋予执行位,所以永远不会有 x - 新建目录的最大默认权限是 777(
drwxrwxrwx),执行位(x)对目录表示“可进入”,因此保留 - 实际权限 = 最大权限 & (~umask),即按位取反后做与运算
- 举例:umask 为 007 时
→ 文件:666 & ~007 = 660(-rw-rw----)
→ 目录:777 & ~007 = 770(drwxrwx---)
常见 umask 值及其适用场景
不同数值对应不同的安全与协作平衡,选哪个取决于你的环境需求:
- 022:最常用,默认值(尤其 root)。文件 644,目录 755 —— 所有人都可读,组和其他用户不可写
- 002:适合开发团队共享目录。文件 664,目录 775 —— 同组用户可写,便于协作
- 007:强化组内隔离。文件 660,目录 770 —— 其他用户完全无访问权
- 077:严格私有。文件 600,目录 700 —— 只有属主可读写执行,常用于敏感账号或合规环境
如何永久设置系统或用户级 umask
临时设置(仅当前终端有效)用 umask 007 即可,但要长期生效,需写入配置文件,并注意优先级:
-
PAM 全局控制(推荐):编辑
/etc/pam.d/common-session(Debian/Ubuntu)或/etc/pam.d/system-auth(RHEL/CentOS),添加一行:session umask=0027
该方式覆盖 SSH、su、图形登录等所有 PAM 会话,最可靠 -
Shell 级全局设置:在
/etc/profile或/etc/bash.bashrc中追加umask 0027,影响所有交互式 shell 登录 -
单用户设置:在个人
~/.bashrc或~/.zshrc中写入umask 077,只对该用户生效 -
新用户初始 umask:修改
/etc/login.defs中的UMASK行(如UMASK 077),仅影响useradd创建的新账号,不影响已登录会话
设置后必须做的验证与加固动作
umask 只管“新建”,已有文件和目录不受影响,必须主动清理才能达成真正的权限基线:
- 新开终端执行
umask,确认输出为你设定的值(如0027) - 运行
touch testf && mkdir testd && ls -ld testf testd,检查权限是否符合预期(如文件-rw-r-----,目录drwxr-x---) - 修复家目录权限:
chmod 700 /home/*(防其他用户遍历) - 重置敏感文件权限:
chmod 600 ~/.bash_history ~/.ssh/authorized_keys;chmod 700 ~/.ssh - 确保关键系统文件权限正确:
/etc/shadow必须为600,/etc/passwd通常为644


















