目录
🚀前言

大家好!我是 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
:自动创建用户邮箱文件,用于存储邮件。