用户管理¶
在本章中您将学到如何管理用户。
目标: 在本章中,未来的 Linux 管理员将学习如何:
添加、删除或修改 用户组;
添加、删除或修改 用户;
了解与用户和用户组相关的文件并学习如何管理它们;
变更文件的 所有者 或 所属组
保护用户账号的 安全;
变更身份。
用户
知识性:
复杂度:
阅读时间: 30 分钟
常规信息¶
每个用户必须有一个组,该用户组称为用户的主组(primary group)。
多个用户可以属于同一个用户组。
主组以外的组称为用户的 附加组(supplementary groups) 。
说明
每个用户有一个主组,并且可以被添加到一个或多个附加用户组中。
用户组和用户由其唯一的数字标识符 UID 和 GID来管理。
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_MIN 和 SYS_GID_MAX 之间。 这两个变量在 /etc/login.defs 中有定义。 |
用户组命名规则:
- 没有音标或特殊字符;
- 与现有用户或系统文件的名称不同。
说明
在 Debian 下,除非是针对所有 Linux 发行版的可移植脚本,管理员应该使用 man 中指定的 addgroup 和 delgroup 命令:
$ 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