Red Hat Training

A Red Hat training course is available for RHEL 8

13.3. 管理 umask

您可以使用 umask 工具显示、设置或更改 umask 的当前或默认值。

13.3.1. 显示 umask 的当前值

您可以使用 umask 工具以符号或数值模式显示 umask 的当前值。

流程

  • 要在符号模式下显示 umask 的当前值,请使用:

    $ umask -S
  • 要在八进制模式下显示 umask 的当前值,请使用:

    $ umask
    注意

    以八进制模式显示 umask 时,您可以注意到它显示了四位数字(00020022)。umask 的第一个数字代表一个特殊的位(spicky 位、SGID 位或 SUID 位)。如果第一个数字设定为 0,则代表没有设置特殊位。

13.3.2. 显示默认 bash umask

您可以使用不同的 shell,如 bashkshzshtcsh。这些 shell 可以是登录或非登录 shell。您可以通过打开一个原生或 GUI 终端来调用登录 shell。

要判断您是在登录 shell 还是非登录 shell 中执行某个命令,请使用 echo $0 命令。

例 13.10. 确定您在登录或非登录 bash shell 下工作

  • 如果 echo $0 命令的输出返回 bash,则您在非登录 shell 下执行命令。

    $ echo $0
    bash

    非登录 shell 的默认 umask/etc/bashrc 配置文件中设置。

  • 如果 echo $0 命令的输出返回 -bash,则您在登录 shell 下执行命令。

    # echo $0
    -bash

    登录 shell 的默认 umask/etc/profile 配置文件中设置。

流程

  • 要显示非登录 shell 的默认 bash umask,请使用:

    $ grep umask /etc/bashrc

    输出会返回:

    # By default, we want umask to get set. This sets it for non-login shell.
           umask 002
           umask 022
  • 要显示登录 shell 的默认 bash umask,请使用:

    $ grep umask /etc/profile

    输出会返回:

    # By default, we want umask to get set. This sets it for login shell
           umask 002
           umask 022

13.3.3. 使用符号值设置 umask

您可以使用 umask 工具及符号值(字母和符号组合)来为当前的 shell 会话设置 umask

您可以分配以下 权限

  • (r)
  • (w)
  • 执行(x)

权限可分配给以下 所有权级别

  • 用户所有者 (u)
  • 组所有者(g)
  • 其他 (o)
  • 所有 (a)

要添加或删除权限,您可以使用以下 符号

  • + 在现有权限之上添加权限
  • - 从现有权限中删除权限
  • = 删除现有权限,并明确定义新权限

    注意

    任何在等号(=)后未指定的权限都将被自动禁止。

流程

  • 要为当前的 shell 会话设置 umask,请使用:

    $ umask -S <level><operation><permission>

    <level> 替换为您要为其设置 umask 的 所有权级别。将 <operation> 替换为其中一个 符号。将 <permission> 替换为您要分配的 权限。例如,要将 umask 设为 u=rwx,g=rwx,o=rwx,使用 umask -S a=rwx

    如需了解更多详细信息,请参阅 用户文件创建模式

    注意

    umask 仅对当前 shell 会话有效。

13.3.4. 使用数值设置 umask

您可以使用 umask 工具和八进制值(数字)来为当前 shell 会话设置 umask

流程

  • 要为当前的 shell 会话设置 umask,请使用:

    $ umask octal_value

    使用数值替换 octal_value。如需了解更多详细信息,请参阅 用户文件创建模式掩码

    注意

    umask 仅对当前 shell 会话有效。

13.3.5. 更改非登录 shell 的默认 umask

您可以通过修改 /etc/bashrc 文件来更改标准用户的默认 bash umask

先决条件

  • root 访问权限

流程

  1. root 用户身份,在编辑器中打开 /etc/bashrc 文件。
  2. 修改以下部分以设置新的默认 bash umask

        if [ $UID -gt 199 ] && [ “id -gn” = “id -un” ]; then
           umask 002
        else
           umask 022
        fi

    umask 的默认值(002)替换为另一个数值。如需了解更多详细信息,请参阅 用户文件创建模式掩码

  3. 保存更改并退出编辑器。

13.3.6. 更改登录 shell 的默认 umask

您可以通过修改 /etc/profile 文件来更改 root 用户的默认 bash umask

先决条件

  • root 访问权限

流程

  1. root 用户身份,在编辑器中打开 /etc/profile 文件。
  2. 修改以下部分以设置新的默认 bash umask

    if [ $UID -gt 199 ] && [ “/usr/bin/id -gn” = “/usr/bin/id -un” ]; then
        umask 002
    else
        umask 022
    fi

    umask 的数值(022)替换为另一个数值。如需了解更多详细信息,请参阅 用户文件创建模式掩码

  3. 保存更改并退出编辑器。

13.3.7. 更改特定用户的默认 umask

您可以通过修改用户的 .bashrc 来更改特定用户的默认 umask

流程

  • 将指定 umask 的八进制值的行追加到特定用户的 .bashrc 文件中。

    $ echo 'umask octal_value' >> /home/username/.bashrc

    使用数值替换 octal_value,并使用用户名替换 username。如需了解更多详细信息,请参阅 用户文件创建模式掩码

13.3.8. 为新创建的主目录设置默认权限

您可以通过修改 /etc/login.defs 文件来更改新创建的用户的主目录的权限模式。

流程

  1. root 用户身份,在编辑器中打开 /etc/login.defs 文件。
  2. 修改以下部分来设置新的默认 HOME_MODE

    # HOME_MODE is used by useradd(8) and newusers(8) to set the mode for new
    # home directories.
    # If HOME_MODE is not set, the value of UMASK is used to create the mode.
    HOME_MODE       0700

    将默认的八进制值(0700)替换为另一个八进制值。所选模式将用于为主目录创建权限。

  3. 如果设置了 HOME_MODE,请保存更改并退出编辑器。
  4. 如果没有设置 HOME_MODE,请修改 UMASK 来为新创建的主目录设置模式:

    # Default initial "umask" value used by login(1) on non-PAM enabled systems.
    # Default "umask" value for pam_umask(8) on PAM enabled systems.
    # UMASK is also used by useradd(8) and newusers(8) to set the mode for new
    # home directories if HOME_MODE is not set.
    # 022 is the default value, but 027, or even 077, could be considered
    # for increased privacy. There is no One True Answer here: each sysadmin
    # must make up their mind.
    
    UMASK           022

    将默认的八进制值(022)替换为另一个八进制值。如需了解更多详细信息,请参阅 用户文件创建模式掩码

  5. 保存更改并退出编辑器。