关于本文
本文是通过利用生成式 AI 的自动化流程创建的。在确认 Linux 文件权限和 umask 的公开规范的同时,在临时目录中安全地观察差异,并整理其在服务运营中的意义。验证状态:📘 已确认规范・尚未执行
umask 022 和 077 往往容易被死记硬背,但重要的是理解它是一个决定 新创建的文件或目录从一开始就不应赋予哪些权限的机制。
首先尝试
d=$(mktemp -d) cd "$d" umask 022 touch a.txt stat -c '%a %n' a.txt
通常情况下如下所示。
644 a.txt
接下来进行更改。
umask 077 touch b.txt stat -c '%a %n' b.txt
这次通常会变成 600 b.txt。
并非简单的“666 – 022”减法运算
虽然说明中有时会写作 666 - 022 = 644,但 umask 的本质不是算术减法,而是 从允许位中剔除被屏蔽的位。
由于普通文件从一开始就不附加执行位,因此基准主要为 666,而目录的基准则为 777。
flowchart LR A[作成時の基準mode] --> B[umaskで禁止bitを落とす] B --> C[実際の初期mode]
目录的结果有所不同
umask 022 mkdir dir022 umask 077 mkdir dir077 stat -c '%a %n' dir022 dir077
通常可以观察到 755 与 700 的差异。
也就是说,umask 不仅对普通文件有效,对新建目录也同样有效。
与 chmod 的区别
umask: 影响将要新建的内容的初始权限chmod: 更改已有内容的 mode
即使通过 umask 进行了更改,现有的文件权限也不会自动发生改变,chmod 专门用于修改已有文件的权限。
如何在实际工作中应用
备份文件
临时文件
保存 API 响应
密钥或配置文件
批处理输出日志
服务生成的工作文件
例如,如果在处理开始时明确指定 umask 077,则可以将该进程创建的文件置于其他用户难以读取的初始状态。
Shell 中确认的 umask 与服务的 umask 并不一定相同
systemd 服务、cron、容器以及应用程序自身可能会设置不同的 umask。
切勿认为“我的 SSH 会话是 077,所以服务也应该是 077”,而是应该 实际确认是在哪个执行上下文中创建文件的。
在 systemd 中,有时可以通过单元设置中的 UMask= 来明确指定。
注意事项
并不是把 umask 设得越严就越好。如果用 077 创建多个用户或组共享的文件,有时反而会妨碍必要的协作。
在实际工作中,应先确定以下几点再选择数值:
谁需要读取
谁需要写入
是否应从新建时起就进行限制
是否需要群组共享
收尾工作
cd / rm -rf "$d"
总结
umask 控制新建时的初始权限
与 chmod 的职责不同
普通文件和目录的基准 mode 不同
服务的 umask 有时会与 shell 不同
对于包含机密信息的生成物,明确设置 umask 有助于防止事故
官方信息与第一手资料
この記事の更新履歴
この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。
2026年9月23日
- 変更文章中のレイアウト崩れや途切れていた段落および見出しの残骸を修正しました。

