4.3. 使用命令行工具


除了 第 4.2 节 “在图形环境中管理用户” 中描述的 用户设置工具(用于基本管理用户 )外,您还可以使用命令行工具管理 表 4.1 “管理用户和组的命令行工具” 中列出的用户和组。

Expand
表 4.1. 管理用户和组的命令行工具
工具描述

id

显示用户和组 ID.

useradd, usermod, userdel

用于添加、修改和删除用户帐户的标准实用程序.

groupaddgroupmodgroupdel

用于添加、修改和删除组的标准实用程序.

gpasswd

实用程序主要用于修改由 newgrp 命令使用的 /etc/g shadow 文件中的组密码。

pwck,grpck

可用于验证密码、组和相关影子文件的实用程序.

pwconv, pwunconv

实用程序,可用于将密码转换为影子密码,或者从影子密码转换回标准密码。

grpconv, grpunconv

与前面的 类似,这些实用程序可用于转换组帐户的影子信息。

4.3.1. 添加新用户

要在系统中添加新用户,以 root 用户身份在 shell 提示符后输入以下内容:

useradd options username
Copy to Clipboard Toggle word wrap

…其中选项是命令行选项,如 表 4.2 “常用 useradd 命令行选项” 所述。

默认情况下,user add 命令会创建一个锁定的用户帐户。要解锁帐户,以 root 用户身份运行以下命令来分配密码:

passwd username
Copy to Clipboard Toggle word wrap

(可选)您可以设置密码过期策略。请参阅 Red Hat Enterprise Linux 7 安全指南中 的密码安全部分

Expand
表 4.2. 常用 useradd 命令行选项
选项 

-c '评论'

注释可以被替换为任何字符串。此选项通常用于指定用户的全名。

-d home_directory

要使用的主目录,而不是默认的 /home/username/

-e date

以 YYYY-MM-DD 格式禁用的帐户的日期。

-f days

密码到期之后的天数,直到禁用帐户为止.如果指定了 0,则帐户会在密码过期后立即禁用。如果指定了 -1,则在密码过期后不会禁用帐户。

-g group_name

用户默认(主要)组的组名或组号。组必须在此处指定之前存在。

-G group_list

以逗号分开的额外(补充,非默认)组名或组号列表,用户是其中的成员。组必须在此处指定之前存在。

-m

如果主目录不存在,则创建该目录。

-M

不要创建主目录。

-N

不要为用户创建用户专用组。

-p password

通过 crypt 加密的密码

-r

创建 UID 小于 1000 且没有主目录的系统帐户。

-s

用户的登录 shell,默认为 /bin/bash

- UUID

用户的用户 ID,它必须唯一且大于 999。

重要

在 Red Hat Enterprise Linux 7 中,系统和普通用户的默认 ID 范围已从早期版本中更改。在以前的版本中,UID 1-499 用于系统用户和以上正常用户的值。系统用户的默认范围现在是 1-999。因为这个变化,当迁移到 Red Hat Enterprise Linux 7 时,如果有用户的 UID 和 GID 在 500 到 999 之间,则可能会造成问题。UID 和 GID 的默认范围可以在 /etc/login.defs 文件中更改。

解释进程

以下步骤演示了在启用了影子密码的系统上发出 useradd juan 命令时会发生什么情况:

  1. /etc/passwd 中为 juan 创建一个新行:

    juan:x:1001:1001::/home/juan:/bin/bash
    Copy to Clipboard Toggle word wrap

    该行具有以下特征:

    • 它以用户名 juan 开始。
    • 密码字段有一个 x 表示系统正在使用 shadow 密码。
    • 创建大于 999 的 UID。在 Red Hat Enterprise Linux 7 下,1000 以下的 UID 保留给系统使用,不应分配给用户。
    • 创建大于 999 的 GID。在 Red Hat Enterprise Linux 7 下,1000 以下的 GID 保留给系统使用,不应分配给用户。
    • 可选的 GECOS 信息留空。GECOS 字段可用于提供有关用户的其他信息,如用户的全名或电话号码。
    • juan 的主目录设为 /home/juan/
    • 默认 shell 设置为 /bin/bash
  2. /etc/shadow 中为 juan 创建一个新行:

    juan:!!:14798:0:99999:7:::
    Copy to Clipboard Toggle word wrap

    该行具有以下特征:

    • 它以用户名 juan 开始。
    • 两个感叹号(!!)显示在 /etc/shadow 文件的密码字段中,该字段将锁定帐户。

      注意

      如果使用 -p 标志传递加密的密码,则会将其放置在用户新行中的 /etc/shadow 文件中。

    • 密码设置为永不过期。
  3. /etc/group 中为名为 juan 的组创建一个新行:

    juan:x:1001:
    Copy to Clipboard Toggle word wrap

    与用户同名的组称为用户专用组。有关用户私人组群的详情请参考 第 4.1.1 节 “用户专用组”

    /etc/group 中创建的行具有以下特征:

    • 它以组名 juan 开头。
    • 在密码字段中会出现 x,表示系统正在使用 shadow 组密码。
    • GID 与 /etc/passwd 中为 juan 的主组列出的匹配。
  4. /etc/gshadow 中为名为 juan 的组创建一个新行:

    juan:!::
    Copy to Clipboard Toggle word wrap

    该行具有以下特征:

    • 它以组名 juan 开头。
    • 感叹号(!)显示在 /etc/gshadow 文件的密码字段中,该文件将锁定组。
    • 所有其他字段均为空。
  5. /home 目录中为用户 juan 创建一个目录:

    ~]# ls -ld /home/juan
    drwx------. 4 juan juan 4096 Mar 3 18:23 /home/juan
    Copy to Clipboard Toggle word wrap

    该目录归用户 juan 和组 juan 所有。它 仅对 用户 juan 具有 读取写入 和执行 特权。所有其他权限都将被拒绝。

  6. /etc/skel/ 目录中的文件(包含默认用户设置)复制到新的 /home/juan/ 目录中:

    ~]# ls -la /home/juan
    total 28
    drwx------. 4 juan juan 4096 Mar 3 18:23 .
    drwxr-xr-x. 5 root root 4096 Mar 3 18:23 ..
    -rw-r--r--. 1 juan juan  18 Jun 22 2010 .bash_logout
    -rw-r--r--. 1 juan juan 176 Jun 22 2010 .bash_profile
    -rw-r--r--. 1 juan juan 124 Jun 22 2010 .bashrc
    drwxr-xr-x. 4 juan juan 4096 Nov 23 15:09 .mozilla
    Copy to Clipboard Toggle word wrap

此时系统上存在名为 juan 的锁定帐户。要激活它,管理员接下来必须使用 passwd 命令为帐户分配密码,也可以设置密码过期指南(详情请参阅 Red Hat Enterprise Linux 7 安全指南中 的密码安全部分 )。

4.3.2. 添加新组

要在系统中添加新组,以 root 用户身份在 shell 提示符后输入以下内容:

groupadd options group_name
Copy to Clipboard Toggle word wrap

…其中选项是命令行选项,如 表 4.3 “常用 groupadd 命令行选项” 所述。

Expand
表 4.3. 常用 groupadd 命令行选项
选项描述

-f,--force

-g gidgid 搭配使用 时,groupadd 将为 选择另一个唯一。

-g gid

组的组 ID,它必须唯一且大于 999。

-k,--key key=value

覆盖 /etc/login.defs defaults。

-o,--non-unique

允许使用重复的 GID 创建组.

-p,--password password

将此加密密码用于新组。

-r

创建 GID 小于 1000 的系统组。

4.3.3. 将现有用户添加到现有组中

使用 usermod 实用程序将现有用户添加到现有的组中。

usermod 的各种选项对用户的主组以及他/她的补充组有不同影响。

要覆盖用户的主组群,以 root 用户身份运行以下命令:

~]# usermod -g group_name user_name
Copy to Clipboard Toggle word wrap

要覆盖用户的补充组,以 root 用户身份运行以下命令:

~]# usermod -G group_name1,group_name2,... user_name
Copy to Clipboard Toggle word wrap

请注意,在这种情况下,用户的所有前一个补充组都会被新组或多个新组替代。

要在用户的附加组中添加一个或多个组,以 root 用户身份运行以下命令之一:

~]# usermod -aG group_name1,group_name2,... user_name
Copy to Clipboard Toggle word wrap
~]# usermod --append -G group_name1,group_name2,... user_name
Copy to Clipboard Toggle word wrap

请注意,在这种情况下,新组会添加到用户的当前补充组中。

4.3.4. 创建组目录

系统管理员通常喜欢为每个主要项目创建组,并在需要访问该项目的文件时将人员分配给组。采用这种传统方案时,文件管理比较困难;当有人创建文件时,它与其所属的主要组相关联。当单个人处理多个项目时,将正确的文件与正确的组关联变得困难。但是,使用 UPG 方案时,组会自动分配到设置了 setgid 位的目录中创建的文件。setgid 位使得管理共享一个通用目录的组项目非常简单,因为用户在该目录中创建的任何文件都归拥有该目录的组所有。

例如,一组人需要处理 /opt/myproject/ 目录中的文件。些人信任修改此目录的内容,但不是每个人。

  1. root 用户身份,在 shell 提示符下键入以下内容来创建 /opt/myproject/ 目录:

    mkdir /opt/myproject
    Copy to Clipboard Toggle word wrap
  2. 在系统中添加 myproject 组:

    groupadd myproject
    Copy to Clipboard Toggle word wrap
  3. /opt/myproject/ 目录的内容与 myproject 组关联:

    chown root:myproject /opt/myproject
    Copy to Clipboard Toggle word wrap
  4. 允许组中的用户在目录中创建文件并设置 setgid 位

    chmod 2775 /opt/myproject
    Copy to Clipboard Toggle word wrap

    此时,myproject 的所有成员都可以在 /opt/myproject/ 目录中创建和编辑文件,无需管理员每次用户写入新文件时更改文件权限。要验证权限是否已正确设置,请运行以下命令:

    ~]# ls -ld /opt/myproject
    drwxrwsr-x. 3 root myproject 4096 Mar 3 18:31 /opt/myproject
    Copy to Clipboard Toggle word wrap
  5. 将用户添加到 myproject 组:

    usermod -aG myproject usernameusermod -aG myproject username
    Copy to Clipboard Toggle word wrap

4.3.5. 使用 umask为新文件设置默认权限

当进程创建文件时,该文件具有特定的默认权限,例如 -rw-rw-r--这些初始权限部分由文件模式创建掩码定义 ,也称为文件权限掩码或 umask。每个进程都有自己的 umask,例如,默认情况下 bash 具有 umask 0022。可以更改进程 umask

umask 包括什么

umask 由与标准文件权限对应的位组成。例如,对于 umask 0137,数字表示:

  • 0 = 无含义,它始终为 0 (umask 不影响特殊位)
  • 1 = 对于所有者权限,将设置执行位
  • 3 = 对于组权限,会设置执行位和写入位
  • 7 = 对于其他权限,将设置执行、写入和读取位

Umasks 可以用二进制、八进制或符号表示法表示。例如,八进制表示 0137 等于符号表示 u=rw-,g=r--,o=---。符号表示规格与八进制表示规范相反:它显示允许的权限,而不是禁止的权限。

umask 的工作原理

umask 禁止为文件设置权限

  • umask 中设置了一个位时,该文件中将取消设置。
  • umask 中未设置位时,可以在 文件中设置它,具体取决于其他因素。

下图显示了 umask 0137 如何影响新文件的创建。

图 4.3. 在创建文件时应用 umask

重要

出于安全原因,在默认情况下,常规文件将不能拥有执行权限。因此,即使 umask 为0000 (不禁止任何权限),新的常规文件仍不具有执行权限。但是,可以创建具有执行权限的目录:

[john@server tmp]$ umask 0000
[john@server tmp]$ touch file
[john@server tmp]$ mkdir directory
[john@server tmp]$ ls -lh .
total 0
drwxrwxrwx. 2 john john 40 Nov 2 13:17 directory
-rw-rw-rw-. 1 john john 0 Nov 2 13:17 file
Copy to Clipboard Toggle word wrap

4.3.5.1. 在 Shell 中管理 umask

对于常用的 shell,如 bashkshzshtcshumask 使用 umask shell 内置 进行管理。从 shell 启动的进程继承其 umask。

显示当前掩码

使用数值表示法显示当前的 umask:

~]$ umask
0022
Copy to Clipboard Toggle word wrap

使用符号表示法显示当前的 umask:

~]$ umask -S
u=rwx,g=rx,o=rx
Copy to Clipboard Toggle word wrap
使用 umask 在 shell 中设置掩码

使用数值表示法运行为当前 shell 会话设置 umask:

~]$ umask octal_mask
Copy to Clipboard Toggle word wrap

用从 07 的四位或更少数字替换 octal_mask。提供三个或更少的数字时,权限会像命令包含前导零一样设置。例如,umask 7 转换为 0007

例 4.1. 使用 Octal 表示设置 umask

要禁止新文件拥有所有者和组的写入和执行权限,并且不允许其他人拥有任何权限:

~]$ umask 0337
Copy to Clipboard Toggle word wrap

或只需:

~]$ umask 337
Copy to Clipboard Toggle word wrap

使用符号表示法为当前 shell 会话设置 umask

~]$ umask -S symbolic_mask
Copy to Clipboard Toggle word wrap

例 4.2. 使用符号链接表示设置 umask

使用符号表示法设置 umask 0337

~]$ umask -S u=r,g=r,o=
Copy to Clipboard Toggle word wrap
使用默认的 shell umask

Shell 通常有一个配置文件,其中设置了其默认 umask。对于 bash,它是 /etc/bashrc。显示默认 bash umask:

~]$ grep -i -B 1 umask /etc/bashrc
Copy to Clipboard Toggle word wrap

输出显示是否设置了 umask,可使用 umask 命令或 UMASK 变量。在以下示例中,使用 umask 命令将 umask 设置为 022

~]$ grep -i -B 1 umask /etc/bashrc
  # By default, we want umask to get set. This sets it for non-login shell.
--
  if [ $UID -gt 199 ] && [ “id -gn” = “id -un” ]; then
    umask 002
  else
    umask 022
Copy to Clipboard Toggle word wrap

要更改 bash 的默认 umask,请在 /etc/bashrc 中更改 umask 命令调用或 UMASK 变量分配。本例将默认 umask 更改为 0227

  if [ $UID -gt 199 ] && [ “id -gn” = “id -un” ]; then
    umask 002
  else
    umask 227
Copy to Clipboard Toggle word wrap
使用特定用户的默认 shell umask

默认情况下,新用户的 bash umask 默认为 /etc/bashrc 中定义的 umask。

要为 特定用户更改 bash umask,请在用户的 $HOME/.bashrc 文件中添加对 umask 命令的调用。例如,将用户 john bash umask 更改为 0227

john@server ~]$ echo 'umask 227' >> /home/john/.bashrc
Copy to Clipboard Toggle word wrap
为新创建的主目录设置默认权限

要更改创建用户主目录的权限,请在 /etc/login.defs 文件中更改 UMASK 变量:

# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK 077
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat