linux中umask通过掩码机制控制文件(默认666)和目录(默认777)的初始权限,实际权限为默认值与umask取反后的按位与;支持临时设置、用户级~/.bashrc、系统级/etc/login.defs及符号模式等多种配置方式。

如果您在Linux系统中创建新文件或目录时,发现其初始权限不符合安全或协作需求,则可能是由于当前umask值未按预期配置。以下是设置文件或目录默认权限的多种方法:
一、理解umask对默认权限的影响机制
umask是一个权限掩码,它不直接设定权限,而是从文件和目录的“最大默认权限”中屏蔽(即禁止)特定权限位。文件最大默认权限为666 (rw-rw-rw-),目录为777 (rwxrwxrwx);新建文件**永远不会自动获得执行权限**,这是内核级强制行为。实际权限通过公式默认权限 & (~umask)(按位与取反)计算得出,例如umask 002时,新文件权限为664,新目录为775。
二、临时修改当前Shell会话的umask值
该方式仅影响当前终端窗口或当前shell进程,退出后失效,适用于测试或一次性任务。
1、在终端中输入 umask 命令,查看当前生效的umask值。
2、输入 umask 002 将掩码设为002,使同组用户对新文件具备写权限。
3、输入 umask 077 将掩码设为077,确保新文件和目录仅属主可访问。
4、使用 touch testfile && mkdir testdir 创建测试对象,再执行 ls -l testfile testdir 验证权限是否符合预期。
三、永久修改单个用户的默认umask
通过编辑用户专属shell配置文件,使每次登录新shell时自动加载指定umask,不影响其他用户。
1、用文本编辑器打开 ~/.bashrc:执行 nano ~/.bashrc。
2、在文件末尾新增一行:umask 002(或所需数值,如027、077)。
3、保存并退出编辑器(Nano中按Ctrl+O回车确认,再按Ctrl+X退出)。
4、运行 source ~/.bashrc 立即应用更改,无需重新登录。
四、系统级全局设置所有用户的umask
适用于多用户服务器环境,由管理员统一控制安全基线,修改后所有新登录用户均受约束。
1、以root权限编辑 /etc/login.defs:执行 sudo nano /etc/login.defs。
2、查找包含 UMASK 的行,将其修改为所需值,例如 UMASK 027。
3、保存文件并退出编辑器。
4、该设置对后续新建用户及使用PAM认证的新登录会话生效;已有会话需重新登录才更新umask。
五、使用符号模式设置umask(兼容性增强)
符号模式更直观表达权限意图,避免八进制换算错误,且在不同shell中语义一致。
1、查看当前符号化umask:执行 umask -S,输出类似 u=rwx,g=rx,o=rx。
2、设置符号umask:输入 umask u=rwx,g=rx,o=---,等效于umask 077。
3、设置协作型umask:输入 umask u=rwx,g=rwx,o=rx,等效于umask 002。
4、将符号命令写入 ~/.bashrc 或 /etc/profile 可实现永久生效。










