umask是Linux中控制新文件和目录默认权限的掩码,通过从默认权限(文件666、目录777)中减去umask值来确定实际权限;常见值如022得文件644/目录755,077得文件600/目录700。

Linux系统中,umask(权限掩码)决定了新创建文件和目录的默认权限。它不是直接设置权限,而是通过“屏蔽”某些权限位来实现。修改umask可提升新文件的安全性,但需注意用户级与系统级影响范围。
umask的作用原理与常见值
umask是一个三位八进制数(如022、002),表示要从默认权限中“去掉”的权限位:
- 文件默认权限是666(即 rw-rw-rw-),但系统会自动清除执行位,所以实际新建普通文件最大为666;
- 目录默认权限是777(即 rwxrwxrwx);
- umask=022 时:文件得 666−022=644(rw-r--r--),目录得 777−022=755(rwxr-xr-x);
- umask=002 时:文件为 664(rw-rw-r--),适合组协作;
- umask=077 时:文件为 600(rw-------),最严格,仅属主可读写。
临时与永久修改umask的方法
临时修改只对当前shell会话生效,永久修改需写入配置文件:
-
临时设置:直接运行
umask 077或umask -S u=rwx,g=,o=(符号模式); -
用户级永久生效:在
~/.bashrc、~/.profile或~/.bash_profile中添加umask 077,然后执行source ~/.bashrc; -
系统级全局生效:编辑
/etc/bash.bashrc(Debian/Ubuntu)或/etc/profile(RHEL/CentOS),谨慎操作,避免影响系统服务账户; -
PAM方式(更底层):修改
/etc/pam.d/common-session(Debian系)或/etc/pam.d/system-auth(RHEL系),加入session umask=077,适用于所有登录方式(包括GUI、SSH、su等)。
验证新文件权限是否按预期生成
修改umask后,必须实际测试新建文件和目录的权限是否符合预期:
- 运行
umask查看当前值; - 用
touch testfile && mkdir testdir创建对象; - 用
ls -l检查权限:
– 若 umask=077,testfile 应为-rw-------,testdir 应为drwx------; - 注意:某些程序(如编辑器、编译器、包管理器)可能自行调用
open()并显式指定权限(如 0644),此时不受umask影响; - 脚本中可通过
umask命令临时覆盖,例如备份脚本开头加umask 077确保生成的tar.gz不被他人读取。
安全建议与注意事项
调整umask应兼顾安全性与可用性:
- 普通用户建议设为
077或027(组可读但不可写),避免敏感文件意外暴露; - 共享开发环境可设为
002,配合设置setgid目录保证新建文件继承组; - 不要盲目将 root 的 umask 改为 077——部分系统服务依赖默认 022 创建可访问的运行时文件;
- 容器环境(如Docker)中,应用进程通常以非root运行,应在入口脚本中显式设置 umask;
- 配合
getfacl/setfacl和chown使用,能更精细控制多用户协作场景下的访问控制。










