如何使用 umask 设置 Linux 进程创建文件的默认权限

小浩大大_6550

小浩大大_6550

2026-07-08

575人浏览

原创

umask不是设置默认权限,而是定义创建文件或目录时自动屏蔽的权限位;实际权限由“文件0666 & (~umask)、目录0777 & (~umask)”计算,且普通文件永远无执行位。

如何使用 umask 设置 linux 进程创建文件的默认权限

umask 不是“设置默认权限”,而是定义进程创建文件或目录时自动屏蔽哪些权限位。它作用于 open()、mkdir() 等系统调用传入的初始权限,影响的是新对象的起点权限,而不是事后 chmod。

实际权限由公式决定:
文件:0666 & (~umask)
目录:0777 & (~umask)
注意:普通文件永远不带执行位(x),这是内核强制行为,umask 无法绕过。


查看当前 umask 值

umask        # 显示八进制值,如 0022
umask -S     # 显示符号形式,如 u=rwx,g=rx,o=rx

输出 0022 表示:用户(u)不限制、组(g)屏蔽写(w)、其他(o)屏蔽写(w)。


临时设置(仅当前 shell 有效)

适合测试或单次任务:

  • umask 002 → 文件 664(-rw-rw-r--),目录 775(drwxrwxr-x)
  • umask 027 → 文件 640(-rw-r-----),目录 750(drwxr-x---)
  • umask 077 → 文件 600(-rw-------),目录 700(drwx------)

⚠️ 错误写法:umask 22(无前导零)会被解释为十进制 22 → 八进制 026,结果不可控。

验证是否生效:

touch testfile && mkdir testdir
ls -ld testfile testdir

永久设置(按场景选对位置)

单用户生效(推荐开发机/个人环境)

编辑对应 shell 的初始化文件(先查 echo $SHELL):

  • Bash 用户:~/.bashrc 或 ~/.profile(GUI 终端更可能读 ~/.profile)
  • Zsh 用户:~/.zshrc
  • Fish 用户:~/.config/fish/config.fish

添加一行:

umask 002

然后运行:

Linux Distros
Linux Distros

Linux发行版游乐场,适用于需要临时Linux沙箱、基于浏览器的Linux虚拟机、一次性终端环境、桌面Linux会话等场景

下载
source ~/.bashrc  # 或对应文件

所有新用户生效(服务器部署首选)

修改 /etc/login.defs:

sudo nano /etc/login.defs

确保有未注释行:

UMASK 027

该设置只影响 useradd 创建的新用户首次登录。

覆盖 su/sudo/cron/systemd 等非标准登录(生产必须配)

PAM 是唯一可靠方式:

  • Debian/Ubuntu:在 /etc/pam.d/common-session 末尾加
    session optional pam_umask.so umask=0027

  • RHEL/CentOS:在 /etc/pam.d/system-auth 的 session 段加同上行

若提示 pam_umask.so 不存在,先安装:

sudo apt install libpam-umask   # Ubuntu/Debian
sudo yum install pam-devel      # RHEL/CentOS(旧版需编译或找包)

特殊场景补救(配置写了却没用?)

  • IDE、VS Code、Git、npm 创建的文件不受 umask 控制
    因为它们不走 shell 初始化流程,而是直接解压或复制预设权限(如 git blob 固定为 100644)。
    补救:

    • Git 仓库设 git config core.sharedRepository group
    • CI 脚本开头显式写 umask 002
    • 共享目录用 setfacl -d -m g:groupname:rwx /path 配合 ACL(需 ext4/xfs)
  • Cron 任务、systemd service、Docker 容器
    默认不加载任何 shell 配置。必须在脚本或 entrypoint 第一行写:

    #!/bin/bash
    umask 002
    ...

常见误区澄清

  • umask 000 ≠ 文件带 x 权限 → 内核强制过滤,新建普通文件永远无 x
  • umask 022 计算不是 666 - 022 = 644,而是 666 & (~022),但结果一致;减法可作速算,但本质是位运算
  • 只改 ~/.bashrc,但终端启动的是非登录 shell(如 GNOME Terminal 默认)→ 改 ~/.profile 更稳妥
  • 修改后只 umask 命令显示正确 ≠ 实际创建有效 → 务必 touch && ls -l 实测

不复杂但容易忽略。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3970

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3393

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2573

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6230

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5862

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3433

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2925

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3159

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习