umask决定新文件目录默认权限,非简单相减而是位运算:文件0666&~umask、目录0777&~umask;推荐个人用0027(640/750)、开发用0002(664/775)、高敏用0077(600/700),需写入~/.bash_profile并source生效。

Linux系统账户的umask掩码直接决定新创建文件和目录的默认权限,合理配置能有效防止敏感数据被意外暴露。关键不是“设得越严越好”,而是匹配实际使用场景——既要限制非必要访问,又不能影响协作或程序运行。
理解umask对安全的实际影响
umask不是直接赋予权限,而是从最大默认值中“屏蔽”掉某些位:
- 新建文件默认是 0666(即 rw-rw-rw-),但内核强制过滤执行位,所以即使 umask 是 000,文件也永远不会带 x 权限
- 新建目录默认是 0777(即 rwxrwxrwx),x 位必须保留才能进入,所以目录权限始终含 x
- 真实计算逻辑是位运算:实际权限 = 默认权限 & (~umask),不是简单相减(虽然多数情况下结果一致)
- 例如 umask 0027:文件 → 0666 & ~0027 = 0640(rw-r-----);目录 → 0777 & ~0027 = 0750(rwxr-x---)
按安全等级选择常用umask值
不同场景适用不同策略,不建议全局统一用 0077(过于严格,易导致脚本失败或服务异常):
- 个人办公环境(推荐 0027):同组用户可读不可写,其他用户完全无权访问。文件为 640,目录为 750,兼顾协作与隐私
- 多用户共享开发环境(推荐 0002):组内可读写,适合 Git 仓库、协作目录。文件为 664,目录为 775
- 高敏感系统(如数据库服务器、审计主机):可用 0077,确保只有属主可读写执行。文件为 600,目录为 700
- 避免使用 0000 或 0022:前者让所有用户可读写,后者让其他用户可读(644/755),在非隔离网络中存在泄露风险
正确设置账户级umask(永久生效)
仅修改 ~/.bashrc 往往无效,需确认 shell 启动加载顺序:
- 先查当前 shell 类型:echo $SHELL;若为 /bin/zsh,应改 ~/.zshrc
- 登录 shell(如 SSH 登录)优先读取 ~/.bash_profile 或 ~/.profile,而非 ~/.bashrc
- 稳妥做法:将 umask 0027 写入 ~/.bash_profile,并确保该文件末尾有 source ~/.bashrc(如有)
- 立即生效:运行 source ~/.bash_profile,不要只靠新开终端——新开终端可能仍缓存旧配置
验证是否真正生效
临时修改后未看到权限变化?常见原因不是命令错,而是作用域问题:
- 在同一终端、同一 shell 进程中连续执行:umask 0027 && touch testf && mkdir testd && ls -l testf testd
- 检查输出:testf 应为 -rw-r-----(640),testd 应为 drwxr-x---(750)
- 若仍为 644/755,请运行 ps -p $$ 确认当前是交互式 login shell;非登录 shell(如 GNOME 终端新标签页)可能未加载 ~/.bash_profile
- 注意:umask 不影响已有文件,只控制后续新建项


















