Linux新建文件和目录的默认权限由umask掩码与最大权限按位运算得出:文件起点666(无x)、目录起点777(需x),实际权限=666 & ~umask(文件)或777 & ~umask(目录),如umask 002时文件为664、目录为775。

Linux 新建文件和目录的权限不是随意定的,而是由 umask(用户文件创建掩码)统一控制的。它不直接“赋予权限”,而是从系统预设的“最大允许权限”中屏蔽掉某些位,从而得到实际权限。理解这一点,是避免权限混乱、保障协作与安全的关键。
umask 是怎么算出默认权限的
计算逻辑不是简单相减,而是按位取反后与运算:
实际权限 = 最大权限 & (~umask)
- 普通文件最大权限固定为 666(
-rw-rw-rw-),内核禁止新建文件自动带执行位(x),这是基础安全设计 - 目录最大权限固定为 777(
drwxrwxrwx),因为执行位对目录表示“可进入”,必须保留 - 例如 umask=002:文件 → 666 & ~002 = 664(
-rw-rw-r--);目录 → 777 & ~002 = 775(drwxrwxr-x) - 再如 umask=077:文件 → 666 & ~077 = 600(
-rw-------);目录 → 777 & ~077 = 700(drwx------)
常见 umask 值及其适用场景
不同值对应不同协作与安全需求,选错容易引发访问失败或信息泄露:
- 002:普通用户常用(尤其团队开发环境),文件 664、目录 775,组内成员可读写,其他人只读
- 022:多数发行版默认(包括 root 和普通用户),文件 644、目录 755,平衡安全与共享
- 077:高敏感环境(如数据库用户、密钥管理),仅属主可读写,彻底隔离组和其他人
- 007:适合组内强协作但对外完全封闭的项目,文件 660、目录 770,组有完整权限,其他人无任何权限
如何查看和设置 umask
操作分临时与永久两类,注意生效范围:
- 查看当前值:
umask(显示八进制,如0002)或umask -S(显示符号形式,如u=rwx,g=rwx,o=rx) - 临时修改(仅当前终端有效):
umask 002 - 永久修改(推荐用户级):在
~/.bashrc末尾添加umask 002,然后运行source ~/.bashrc - 全局修改(需 root):编辑
/etc/profile或/etc/bash.bashrc,适用于所有用户,但要谨慎评估影响
权限计算中容易忽略的细节
几个关键点常被误解,直接影响判断准确性:
- umask 的第一位(如
0022中的首0)是特殊权限位(SetUID/SetGID/Sticky),日常配置通常不用管,关注后三位即可 - 文件永远不会有默认执行权限,即使 umask=000,新建文件仍是 666,不是 777
- umask 不改变已有文件权限,只作用于后续新创建的文件和目录
- 某些程序(如编辑器、FTP 服务、Web 应用)可能自行覆盖 umask,需单独检查其配置


















