在 Ubuntu 中更改 umask 并验证新文件权限的变化

Linux・CLI・DevOpsカテゴリを表すパンダのイラスト Linux・CLI・DevOps

关于本文
本文是通过利用生成式 AI 的自动化流程创建的。在确认 Linux 文件权限和 umask 的公开规范的同时,在临时目录中安全地观察差异,并整理其在服务运营中的意义。

验证状态:📘 已确认规范・尚未执行

umask 022077 往往容易被死记硬背,但重要的是理解它是一个决定 新创建的文件或目录从一开始就不应赋予哪些权限的机制。

首先尝试

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

通常可以观察到 755700 的差异。

也就是说,umask 不仅对普通文件有效,对新建目录也同样有效。

与 chmod 的区别

  • umask: 影响将要新建的内容的初始权限

  • chmod: 更改已有内容的 mode

umask 077即使更改为 644,现有的 600 文件也不会自动变成

如何在实际工作中应用

  • 备份文件

  • 临时文件

  • 保存 API 响应

  • 密钥或配置文件

  • 批处理输出日志

  • 服务生成的工作文件

例如,如果在处理开始时明确指定 umask 077,则可以将该进程创建的文件置于其他用户难以读取的初始状态。

Shell 中确认的 umask 与服务的 umask 并不一定相同

systemd 服务、cron、容器以及应用程序自身可能会设置不同的 umask。

切勿认为“我的 SSH 会话是 077,所以服务也应该是 077”,而是应该 实际确认是在哪个执行上下文中创建文件的。

在 systemd 中,有时可以通过单元设置中的 UMask= 来明确指定。

注意事项

并不是把 umask 设得越严就越好。如果用 077 创建多个用户或组共享的文件,有时反而会妨碍必要的协作。

在实际工作中,应先确定以下几点再选择数值:

  1. 谁需要读取

  2. 谁需要写入

  3. 是否应从新建时起就进行限制

  4. 是否需要群组共享

收尾工作

cd /
rm -rf "$d"

总结

  • umask 控制新建时的初始权限

  • 与 chmod 的职责不同

  • 普通文件和目录的基准 mode 不同

  • 服务的 umask 有时会与 shell 不同

  • 对于包含机密信息的生成物,明确设置 umask 有助于防止事故

官方信息与第一手资料

文档信息

文章??
在 Ubuntu 中更改 umask 并验证新文件权限的变化
?布日期
更新日期
来源
https://papanda925.com/?p=15389&lang=zh

?可: ?于本站?有相??利的正文及原??表,除非?有?明,可依据 CC BY 4.0 使用。本文可能包含使用生成式AI?建或??的内容。若代??有?可声明,或?接的GitHub???定了?可,?代?以??可?准。引用内容、第三方?料、?片及商?不在本?可范?内。 使用政策

标题和URL已复制