umask通过位运算(默认权限 & ~umask)从文件默认666、目录默认777中屏蔽权限,内核强制文件无x位;常见值如022得文件644/目录755,002得664/775,077得600/700;可临时设置或写入~/.bashrc、/etc/login.defs等持久生效。

Linux 中新建文件的权限不是直接指定的,而是由 umask 掩码“过滤”出来的。它不加权限,只去权限——从系统预设的最大值里拿掉你不希望开放的部分。
umask 怎么影响文件和目录
文件和目录的起点不同,所以 umask 对它们的作用方式也不同:
- 普通文件默认最大权限是 666(即
-rw-rw-rw-),内核强制不带执行位(x),哪怕 umask 是 000,也不会出现 777 - 目录默认最大权限是 777(即
drwxrwxrwx),必须保留执行位(x),否则无法进入 - 实际权限 = 默认权限 & (~umask),这是位运算,不是简单减法。例如 umask 0022:~0022 → 0755,666 & 0755 = 644,777 & 0755 = 755
常见 umask 值对应的实际效果
不同数值直接影响协作安全边界:
-
022:文件 644(
-rw-r--r--),目录 755(drwxr-xr-x)——适合服务部署,组和其他用户只读 -
002:文件 664(
-rw-rw-r--),目录 775(drwxrwxr-x)——适合团队开发,同组可写 -
077:文件 600(
-rw-------),目录 700(drwx------)——完全私有,仅属主访问 -
007:文件 660(
-rw-rw----),目录 770(drwxrwx---)——组内共享,其他人无权访问
如何设置 umask 生效范围
umask 设置后只对新创建的文件/目录起作用,已有文件不受影响:
- 临时生效:运行
umask 002,仅当前终端会话有效 - 用户级永久:在
~/.bashrc或~/.profile中添加umask 002,再执行source ~/.bashrc - 系统级统一:修改
/etc/login.defs中的UMASK行,或通过 PAM 模块pam_umask.so控制登录行为
验证 umask 是否生效
最直接的方式是动手测试:
- 运行
umask查看当前值 - 用
touch testfile创建空文件,再ls -l testfile看权限 - 用
mkdir testdir创建目录,再ls -ld testdir看权限 - 注意图形界面、cron 或 systemd 服务可能绕过 shell 配置,需单独确认


















