跳转至内容

umask

来自 ArchWiki

umask 命令用于控制文件创建模式掩码,该掩码决定了新创建文件的初始文件权限位。该命令的行为由 POSIX 标准化,并在 POSIX Programmer's Manual 中进行了描述。由于 umask 会影响当前的 shell 执行环境,因此它通常实现为 shell 的内置命令。

模式掩码的含义

模式掩码包含不应在新创建文件中设置的权限位,因此它是新创建文件上设置的权限位的 逻辑补码。如果掩码中的某个位被设置为 1,则新创建文件的相应权限将被禁用。因此,掩码充当过滤器,剥离权限位,并有助于设置文件的默认访问权限。

用于新创建文件的权限位的最终值是通过位wise 材料非蕴含(也称为析取)计算得出的,这可以用逻辑符号表示:

R: (D & (~M))

也就是说,最终权限 R 是默认权限 D 与文件创建模式掩码 M位wise非位wise合取 的结果。

  • 目录的默认创建权限是 777
  • 由于 Linux 不允许文件以执行权限创建,因此文件的默认创建权限仅为 666
  • 在 Linux 下,只使用掩码的文件权限位 - 请参阅 umask(2)。掩码的 suidsgidsticky 位将被忽略。

例如,假设文件创建模式掩码为 027。这里每个数字的位wise表示代表:

  • 0 代表新创建文件中不应设置的 *用户* 权限位
  • 2 代表新创建文件中不应设置的 *组* 权限位
  • 7 代表新创建文件中不应设置的 *其他* 权限位

根据下表提供的信息,这意味着对于一个新创建的文件,例如由 User1 用户和 Group1 组拥有,User1 对新创建的文件拥有所有可能的权限(八进制值 7),Group1 组中的其他用户没有写入权限(八进制值 5),而其他任何用户对新创建的文件没有任何权限(八进制值 0)。因此,在此示例中采用 027 掩码,文件将以 750 权限创建。

八进制 二进制 含义
0 000 无权限
1 001 仅执行
2 010 仅写入
3 011 写入和执行
4 100 仅读取
5 101 读取和执行
6 110 读取和写入
7 111 读取、写入和执行

显示当前掩码值

要显示当前掩码,只需调用 umask 而不指定任何参数。默认输出样式取决于实现,但通常是八进制。

$ umask
0027

当使用 POSIX 标准化的 -S 选项时,掩码将使用符号表示法显示。但是,*符号表示法的值始终是八进制值的逻辑补码*,即要设置在新创建文件上的权限位。

$ umask -S
u=rwx,g=rx,o=

设置掩码值

本文或本章节已过时。

原因: Arch 不使用 /etc/profile 来设置默认 umask,请参阅 新闻。此部分需要相应更新。(在 Talk:Umask 中讨论)
注意 Umask 值可以逐个设置。例如,桌面用户可能会觉得他们家目录的受限权限(useradd -m 默认创建目录时权限为 700)足够了,因为它们使得目录内的所有文件对其他用户都不可访问。如果这不实用(例如在使用 Apache HTTP Server 时),并且公共文件存储在私人文件之中,那么可以考虑限制 umask。

您可以通过 umask 命令设置 umask 值。指定模式掩码的字符串遵循与 chmod 的模式参数相同的语法规则(有关详细信息,请参阅 POSIX Programmer's Manual)。

系统范围的 umask 值可以在 /etc/profile(例如 /etc/profile.d/umask.sh)或默认 shell 配置文件(例如 /etc/bash.bashrc)中设置。大多数 Linux 发行版,包括 Arch,在 /etc/login.defs 中将 umask 默认值设置为 022。也可以使用 pam_umask.so 设置 umask,但它可能会被 /etc/profile 或类似文件覆盖。

如果需要设置不同的值,您可以直接编辑这些文件,从而影响所有用户,或者从您的 shell 的用户配置文件(例如 ~/.bashrc)中调用 umask,仅更改您的 umask。但是,这些更改仅在下次登录后生效。要仅在当前会话中更改 umask,只需运行 umask 并输入所需值。例如,运行 umask 077 将为新文件提供读取和写入权限,为新文件夹提供读取、写入和执行权限。

正如 pam_umask(8) § DESCRIPTION 中所述,umask=value 也可以在 用户和组#用户数据库/etc/passwd 部分使用。请参阅关于 在 GECOS 字段中设置 UMASK 的讨论。

为 KDE / Plasma 设置 umask 值

通过 /etc/profile 设置 umask 值不再适用于 KDE / Plasma 会话,因为这些会话是以 systemd 用户单元 的形式启动的。

可以通过 pam_umask.so 或 systemd 下拉文件 设置 umask 值。

/etc/systemd/system/user@.service.d/override.conf
[Service]
UMask=0002

使用 pam_umask.so 可以在一个地方为文本控制台和图形 KDE 会话设置系统范围的 umask 值。可以省略 /etc/profile 或 systemd 配置中的任何更改。因此,pam_umask.so 需要在 /etc/pam.d/login/etc/pam.d/systemd-user 都包含的配置文件中启用。

将以下行添加到 /etc/pam.d/system-login

# session    optional   pam_umask.so         umask=022

站点特定

编辑 /etc/login.defs 并更新 UMASK 值。例如:

/etc/login.defs
UMASK 077

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.