跳转至

用户管理

在本章中您将学到如何管理用户。


目标: 在本章中,未来的 Linux 管理员将学习如何:

✔ 添加、删除或修改 用户组
✔ 添加、删除或修改 用户
✔ 了解与用户和用户组相关的文件并学习如何管理它们;
✔ 变更文件的 所有者所属组
✔ 保护用户账号的 安全
✔ 变更身份。

🏁 用户

知识性: ⭐ ⭐
复杂度: ⭐ ⭐

阅读时间: 30 分钟


常规信息

每个用户必须有一个组,该用户组称为用户的主组(primary group)。

多个用户可以属于同一个用户组。

主组以外的组称为用户的 附加组(supplementary groups) 。

说明

每个用户有一个主组,并且可以被添加到一个或多个附加用户组中。

用户组和用户由其唯一的数字标识符 UIDGID来管理。

  • UID用户识别符 。 唯一的用户ID。
  • GID用户组标识符。 唯一的用户组ID。

UID 和 GID 都被内核识别,这意味着超级管理员不一定是 root 用户,只要 uid=0 的用户就是超级管理员。

与用户/用户组相关的文件有:

  • /etc/passwd
  • /etc/shadow
  • /etc/group
  • /etc/gshadow
  • /etc/skel/
  • /etc/default/useradd
  • /etc/login.defs

危险

你应该始终使用管理命令,而不是手动编辑文件。

说明

本章中的某些命令需要管理员权限。 按照惯例,当命令以管理员权限运行时,我们将指定命令 sudo 。 为使示例正常工作,请确保您的帐户有权使用 sudo 命令。

用户组管理

修改文件并添加行:

  • /etc/group
  • /etc/gshadow

groupadd 命令

groupadd 命令可以向系统中添加一个用户组。

groupadd [-f] [-g GID] group

示例:

sudo groupadd -g 1012 GroupeB
选项 说明
-g GID 定义要创建组的 GID
-f 如果选项 -g 中提供的 GID 已经存在,系统将指定一个新的 GID
-r 创建一个伪用户组,其 GID 介于 SYS_GID_MINSYS_GID_MAX 之间。 这两个变量在 /etc/login.defs 中有定义。

用户组命名规则:

  • 没有音标或特殊字符;
  • 与现有用户或系统文件的名称不同。

说明

Debian 下,除非是针对所有 Linux 发行版的可移植脚本,管理员应该使用 man 中指定的 addgroupdelgroup 命令:

$ man addgroup
DESCRIPTION
adduser and addgroup add users and groups to the system according to command line options and configuration information
in /etc/adduser.conf. They are friendlier front ends to the low-level tools like useradd, groupadd and usermod programs,
by default, choosing Debian policy conformant UID and GID values, creating a home directory with skeletal configuration,
running a custom script, and other features.

groupmod 命令

groupmod 命令允许您修改系统中已有的用户组。

groupmod [-g GID] [-n nom] group

示例:

sudo groupmod -g 1016 GroupP

sudo groupmod -n GroupC GroupB
选项 说明
-g GID 赋予用户组新的 GID
-n name 变更为新的组名称。

你可以变更用户组名、 GID 或同时更改二者。

修改后,原本属于该用户组的文件将具有未知的 GID 。 这些文件必须重新分配新的 GID

sudo find / -gid 1002 -exec chgrp 1016 {} \;

groupdel 命令

groupdel 命令用于删除系统上已存在的用户组。

groupdel group

示例:

sudo groupdel GroupC

提示

删除用户组时,可能会出现两种情况:

  • 如果用户具有唯一的主组且您在该用户组上发出 groupdel 命令时,系统将提示您该用户组下有特定用户,无法删除该用户组。
  • 如果用户属于附加组(不是该用户的主组),并且该用户组不是系统上另一个用户的主组,则 groupdel 命令将删除该组且无需任何其他提示。

示例:

$ sudo useradd test
$ id test
uid=1000(test) gid=1000(test) group=1000(test)
$ sudo groupdel test
groupdel: cannot remove the primary group of user 'test'

$ sudo usermod -g users -G test test
$ id test
uid=1000(test) gid=100(users) group=100(users),1000(test)
$ sudo groupdel test

提示

使用 userdel -r 命令删除用户时,相应的主组也会被删除。 主组名称通常与用户名相同。

提示

每个组都有一个唯一的 GID 。 一个组可以被多个用户用作附加组。 根据惯例,超级管理员的主组 GID 是 0。 为某些服务或进程保留的主组 GID 为201~999,称为系统组或伪用户组。 用户的 GID 通常大于或等于1000。 这些都与 /etc/login.defs 文件相关,我们将在后面讨论。

# 忽略注释行
shell > cat  /etc/login.defs
MAIL_DIR        /var/spool/mail
UMASK           022
HOME_MODE       0700
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7
UID_MIN                  1000
UID_MAX                 60000
SYS_UID_MIN               201
SYS_UID_MAX               999
GID_MIN                  1000
GID_MAX                 60000
SYS_GID_MIN               201
SYS_GID_MAX               999
CREATE_HOME     yes
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512

提示

由于用户必须是用户组的一部分,因此最好在添加用户之前创建用户组。 也就是说,一个组可能没有任何用户成员。

/etc/group 文件

该文件包含用户组的信息(以 : 分隔)。

$ sudo tail -1 /etc/group
GroupP:x:516:patrick
  (1)  (2)(3)   (4)
  • 1:用户组组名;
  • 2:用户组密码由 x 标识。 用户组密码存储在 /etc/gshadow 中。
  • 3:GID;
  • 4:用户组中的附加用户(排除唯一的主用户);

说明

`/etc/group