目录
🚀前言

大家好!我是 EnigmaCoder。
- 本文将介绍Linux中用户和用户组管理的相关内容,包含用户与用户组的分类、相关文件与命令等。
🤔用户的作用
- 可以通过用户来登陆系统获得操作环境。
- 用户可以来运行软件,所有的软件都需要某个用户来运行。
在
Linux操作系统中,系统并不知道用户名,而只知道用户对应ID号。可以通过命令:id 用户名来查看该用户的信息。
☘️用户的分类
用户大致分成三类:
- 系统超级管理员:
UID(用户的ID)为0的用户就是系统的超级管理员, 一般是root。 - 系统用户:
0<UID<1000的用户,这些用户一般不可以登录到操作系统,而是专门来运行各种软件和程序。 - 普通用户:
UID>=1000的用户,这些用户都是由超级管理员创建。
也可以按两类分,将系统超级管理员归于系统用户一类,分成系统用户与普通用户。
🦜用户组的分类
在 Linux 系统中,用户组是多个用户的集合,用于统一管理用户权限 ------ 如同员工加入企业后需归属特定部门,每个用户必须至少属于一个用户组。根据用户与组的关联关系,用户组主要分为以下两类:
- 私有组(又称 "主组 / 属组")
新用户创建时,系统会自动生成一个与用户名同名的用户组,并将该组设为用户的默认所属组(即私有组)。默认情况下,用户的文件 / 目录权限会优先关联其私有组,私有组的权限仅对该用户及组内成员(若后续添加)生效。 - 附加组(又称 "公共组")
除私有组外,用户可额外加入的其他用户组统称为附加组。用户加入附加组后,可直接继承该组的权限(如访问组所属的文件、执行组授权的命令等),附加组主要用于实现跨用户的权限共享与协作。
示例:使用useradd A创建用户 A 时,系统会自动创建同名的 "用户组 A" 作为 A 的私有组;若后续通过usermod -aG dev A将 A 加入 "dev 组",则 "dev 组" 即为 A 的附加组,A 可获得 "dev 组" 的所有权限。
🐧用户的文件与命令
💯用户信息文件
/etc/passwd是Linux系统中存储用户账户信息的关键文件,包含系统上所有用户的基本信息。它通常是一个纯文本文件,每个用户占一行,每行由7个字段组成,字段间用冒号(:)分隔。
典型的/etc/passwd文件条目格式如下:
bash
username:password:UID:GID:GECOS:homedir:shell
各字段详解如下:
- 用户名 (
username):用户登录名,长度通常不超过32个字符,区分大小写。例如:root。 - 密码 (
password):Linux系统使用密码占位符x代替密码,x表示密码在shadow文件中,没有x表示不需要密码可以直接登录系统。如果为*表示用户被禁用。 - 用户
ID(UID):用户唯一数字标识符。 - 组
ID(GID):用户主要组别的数字标识符,对应/etc/group文件中的组ID。 GECOS字段:用户描述信息,用于标识,无实际的用处。- 主目录 (
homedir):用户登录后的家目录。 - 登录
Shell(shell):用户登录后默认启动的shell程序路径。/bin/bash:常用默认 Shell,支持命令历史、补全,适合日常操作和写脚本。/bin/sh:基础 Shell,主要兼容老脚本,少用作登录 Shell。/sbin/nologin:禁止登录但不影响服务,给服务用户用。/bin/false:完全禁止登录,无任何交互,给伪用户用。
💯用户密码文件
用户密码文件/etc/shadow是Linux系统中存储用户密码信息的重要文件。
典型的/etc/shadow文件条目格式如下:
bash
username:encrypted_password:last_changed:min_age:max_age:warn:inactive:expire:reserved
各字段详解如下:
- 用户名 (
username):与/etc/passwd中的用户名对应。 - 加密密码 (
encrypted_password):采用加密算法存储。MD5:以$1$为前缀,较早的加密方式,安全性较低,易被破解,现在较少使用。SHA-256:以$5$为前缀,采用 SHA-256 哈希算法,安全性高于 MD5,是较常用的加密方式之一。SHA-512:以$6$为前缀,基于 SHA-512 哈希算法,安全性更高(哈希值更长),是目前主流的加密方式,多数现代 Linux 发行版默认采用。Blowfish:以$2a$、$2b$或$2y$为前缀,一种强加密算法,安全性高,但普及度不如 SHA 系列。空或!:账户被锁定*:账户不可登录
- 最后修改日期 (
last_changed):从1970年1月1日起的天数。 - 最小天数 (
min_age):密码修改后必须保持的天数。 - 最大天数 (
max_age):密码有效期。 - 警告天数 (
warn):密码到期前警告天数。 - 不活动天数 (
inactive):密码到期后账户被禁用前的天数。 - 过期日期 (
expire):账户被禁用的绝对日期。 - 保留字段。
💯用户相关的策略文件
/etc/login.defs 是 Linux 系统中用于配置用户账号默认参数的重要配置文件,主要用于控制 useradd、passwd 等用户管理命令的默认行为,定义用户账号的基本规则(如 UID/GID 范围、密码策略等)。
该文件中的配置项多为注释说明与默认参数设置,以下是其中的核心内容及说明:
| 配置项 | 说明 |
|---|---|
MAIL_DIR /var/spool/mail |
定义用户邮件目录,新用户的邮件会存储在此目录下以用户名命名的文件中 |
PASS_MAX_DAYS 99999 |
密码的最大有效期(天),超过此天数需修改密码 |
PASS_MIN_DAYS 0 |
密码修改的最小间隔(天),0 表示可随时修改 |
PASS_MIN_LEN 5 |
密码的最小长度(字符数) |
PASS_WARN_AGE 7 |
密码过期前的警告天数 |
UID_MIN 1000 |
普通用户的最小 UID(默认从 1000 开始) |
UID_MAX 60000 |
普通用户的最大 UID |
GID_MIN 1000 |
普通用户组的最小 GID |
GID_MAX 60000 |
普通用户组的最大 GID |
SYS_UID_MIN 201 |
系统用户的最小 UID(不同系统可能有差异) |
SYS_UID_MAX 999 |
系统用户的最大 UID |
SYS_GID_MIN 201 |
系统用户组的最小 GID |
SYS_GID_MAX 999 |
系统用户组的最大 GID |
CREATE_HOME yes |
控制 useradd 命令是否自动创建用户家目录(yes 为默认创建) |
UMASK 077 |
默认权限掩码,控制新创建文件/目录的初始权限(077 表示仅用户自身有读写执行权限) |
USERGROUPS_ENAB yes |
当删除用户时,若该用户的主组无其他成员,是否自动删除主组(yes 为自动删除) |
修改
/etc/login.defs后无需重启服务,新的配置会直接影响后续执行的用户管理命令(如useradd创建新用户时会遵循新的 UID 范围和家目录设置)。但需注意,该文件的配置仅对新创建的用户生效,对已存在的用户无影响。
💯管理用户的命令
| 命令 | 功能描述 | 常用选项 | 示例 |
|---|---|---|---|
| useradd | 创建新用户 | -m:自动创建家目录 -s:指定默认shell -g:指定主组 -G:指定附加组 -d:指定自定义家目录路径 -u:指定用户UID | useradd -m -s /bin/bash -g users -G sudo newuser |
| userdel | 删除用户 | -r:同时删除用户家目录 -f:强制删除(即使用户已登录) | userdel -r olduser |
| usermod | 修改用户属性 | -g:修改主组 -G:修改附加组(覆盖原有) -aG:追加附加组(不覆盖) -s:修改默认shell -d:修改家目录 -l:修改用户名 -L:锁定用户 -U:解锁用户 | usermod -aG sudo username |
| passwd | 管理用户密码 | -l:锁定用户密码 -u:解锁用户密码 -d:删除用户密码 -e:强制用户下次登录修改密码 --stdin:从标准输入设置密码 | passwd -e username |
| chage | 管理密码过期策略 | -d 0:强制下次登录改密码 -M:设置密码最大有效期(天) -m:设置密码最小修改间隔(天) -W:设置密码过期前警告天数 -I:设置密码过期后宽限天数 | chage -M 90 -W 7 username |
| id | 查看用户ID信息 | -u:仅显示UID -g:仅显示GID -G:仅显示所有所属组ID -n:显示名称而非ID | id -un username |
| su | 切换用户 | -:切换用户并加载环境变量 -c:执行单个命令后返回原用户 | su - root -c "systemctl restart nginx" |
| sudo | 授权执行命令 | -i:切换到目标用户交互模式 -u:指定执行命令的用户 -l:列出当前用户可执行的命令 | sudo -u www-data touch /var/www/file |
| groups | 查看用户所属组 | 无常用选项(直接跟用户名) | groups username |
| chsh | 更改默认shell | -s:指定新的shell程序 | chsh -s /bin/zsh username |
🎋用户组的文件与命令
💯用户组信息文件
/etc/group 文件是 Linux 系统中用于管理用户组信息的配置文件,每个条目代表一个用户组。每个条目由冒号 : 分隔的四个字段组成。
典型的/etc/group文件条目格式如下:
bash
group_name:password:GID:user_list
各字段详解如下:
-
组名 (
group_name): 用户组的名称,必须是唯一的。例如developers、admin等。 -
组密码 (
password): 用户组的加密密码。通常为x或*,表示密码存储在/etc/gshadow文件中。如果为空,表示该组不需要密码。 -
用户组ID (
GID): 用户组的数字标识符(Group ID),必须是唯一的。例如1000、1001等。 -
组成员 (
user_list): 属于该组的用户列表,多个用户名之间用逗号,分隔。例如user1,user2,user3。如果为空,表示该组没有成员。
💯用户组密码文件
/etc/gshadow 是 Linux 系统中存储组密码及相关安全信息的文件,仅对 root 用户可读。
典型的/etc/gshadow文件条目格式如下:
bash
groupname:encryptedpassword:admins:members
各字段详解如下:
- 组名 (
groupname):用户组的名称,与/etc/group文件中的组名一致。 - 加密密码 (
encryptedpassword):组密码的加密哈希值。 - 管理员列表 (
admins):组管理员列表,多个用户用逗号分隔。管理员可通过gpasswd管理组成员。 - 组成员列表 (
members):组内成员列表,多个用户用逗号分隔。成员继承组权限。
💯管理用户组的命令
| 命令 | 功能描述 | 常用选项 | 示例 |
|---|---|---|---|
| groupadd | 创建新组 | -g:指定组GID -r:创建系统组 | groupadd -g 1005 memeda01 |
| groupdel | 删除组 | 无常用选项(直接跟组名) | groupdel memeda01 |
| groupmod | 修改组属性 | -g:修改组GID -n:修改组名称 | groupmod -n newmemeda memeda01 |
| gpasswd | 管理组密码及成员 | -a:添加用户到组 -d:从组中删除用户 -M:批量添加用户到组 -r:删除组的密码 -A:批量设置组管理员 | gpasswd -a user1 memeda01 gpasswd -M user1,user2 memeda01 gpasswd -A user3 memeda01 |
| groupmems | 管理组成员(需超级管理员权限) | -g:指定操作的组 -a:添加用户到组 -d:从组中删除用户 -p:清空组的所有成员 -l:列出组内所有成员 | groupmems -g memeda01 -a user1 groupmems -g memeda01 -l groupmems -g memeda01 -p |
💧总结
思考:创建新用户时,将修改或创建哪些文件或目录?
以创建zhangsan用户为例:
/etc/passwd:新增zhangsan的账号记录,含UID、GID、家目录、默认shell等。/etc/group:若未指定主组,新增与zhangsan同名的主组记录,含组名、GID。/etc/shadow:新增zhangsan的密码安全记录,存加密密码(初始可能空或锁定)、密码过期等信息。/etc/gshadow:同步新增同名主组的记录,管理组密码与管理员权限。/home/zhangsan:若/etc/login.defs设CREATE_HOME yes,自动创建家目录并赋权。/var/spool/mail/zhangsan:自动创建用户邮箱文件,用于存储邮件。