Linux 用户&用户组管理
[TOC]
#
基本概念
- 用户(User)
- Linux 是一个多用户系统,每个用户有唯一的 用户名 和 UID(User ID)。
- root(超级用户,UID=0):拥有系统最高权限。
- 系统用户:系统运行时需要的用户(如
nobody,daemon),UID 通常小于 1000。 - 普通用户:一般 UID 从 1000 开始(在现代 Linux 系统中),最大 60000。
- 用户组(Group)
- 每个用户都属于至少一个组(即 主组)。
- 一个用户还可以加入多个附加组(即 附属组)。
- 每个组由 组名 和 GID(Group ID) 唯一标识。
- 用户与组的关系
- 每个文件或目录都有 所属用户 和 所属组。
- 权限管理(rwx)基于 所属用户、所属组、其他用户 三类身份来控制。
相关配置文件
Linux 的用户和组信息存储在文本配置文件中:
/etc/passwd
存储用户基本信息(账号、UID、GID、主目录、登录 shell)。cat /etc/passwd查看用户信息,示例:
1 | |
各字段含义:
- 用户名
- 密码占位符(x,实际在
/etc/shadow;早期 Linux 系统中直接存储密码哈希,但为提升安全性,现在此字段仅作为 “占位符”,实际密码哈希已迁移至/etc/shadow,仅 root 可读取。) - UID(系统内部识别用户的数字编号,系统不依赖用户名,而是通过 UID 判断用户身份及权限。)
- 超级用户 UID:固定为
0(仅root用户,拥有系统所有权限,任何 UID 为 0 的用户都会被视为超级用户,即使用户名不是root)。 - 系统用户 UID:通常为
1-999(用于运行系统服务,如bin(UID=1)、daemon(UID=2)、www-data(UID=33,Web 服务用户),这类用户无登录权限,家目录也非普通用户目录)。 - 普通用户 UID:通常从
1000开始(由管理员创建,用于日常登录和操作,权限受限制)。
- 超级用户 UID:固定为
使用id username可以查看用户 UID 以及所属用户组。
- GID(用户初始组(Primary Group) 的数字编号,初始组是用户登录时默认所属的组,其权限会自动应用于用户创建的文件 / 目录,文件的默认组就是用户的初始组。)
- 用户描述(可选,字段名称源于早期 Unix 系统的历史遗留,无实际技术含义,仅作注释。)
- 用户主目录(用户登录系统后默认进入的目录,也是用户存储个人文件、配置的专属目录(普通用户对家目录拥有读写执行权限,其他用户通常无权限。)
- 用户默认登录 Shell(默认启动的命令行解释器,决定用户使用的命令行环境。)
/etc/shadow
存储用户密码和密码策略(加密形式),只有 root 可读。
1 | |
各个字段含义:
- 用户名(moon)
- 密码($6$…,存储用户密码的哈希值, 表示使用 SHA-512 算法加密。)
- 最后一次修改密码的日期(20301,为从1970年1月1日以来的天数,比如在 2025 年 8 月 1 日修改过密码,那么这里就是 20301。)
- 密码有效期最少天数(0,限制用户 上次修改密码后,至少需间隔多少天才能再次修改密码。为 0 或者空表示没有显示,可以随时修改密码,用于防止用户频繁改密码规避安全策略。)
- 密码有效期最多的天数(99999,强制用户 上次修改密码后,最多可使用多少天,超过此天数后密码失效,用户必须重新设置密码才能登录。99999 表示密码永不过期,约等于 273 年,是默认配置)
- 密码修改警告期(7,在 “密码有效期最多天数” 到期前,提前多少天向用户发送 密码即将过期的警告,提醒用户及时修改。)
- 密码禁用期(NULL,也叫 “密码过期宽限期”,指 “密码有效期最多天数” 到期后,用户仍可登录的 宽限天数;超过宽限天数后,账号会被自动锁定。)
- 账号过期日期(NULL,指定账号的 绝对失效日期,无论密码是否过期,超过此日期后账号无法登录,常用于临时账号,如实习员工账号。)
- 保留字段(NULL,预留字段,目前无实际功能,为未来 Linux 系统扩展账号安全策略预留空间。)
以上字段均可以通过命令修改。
/etc/group
存储组信息。
1 | |
各个字段含义:
- 组名
- 组密码(存储用户组的密码哈希值,用于控制 “非组内用户临时加入该组” 的权限,实际场景中极少使用,因组权限通常通过用户归属管理,x 表示组密码已存储,但实际哈希值保存在
/etc/gshadow文件中;x 仅为占位符,而非真实密码。) - 组 ID(系统组 0~999,普通组 1000~)
- 组内成员(存储属于该组的用户列表,这些用户的 “附加组” 包含此组,主组需看
/etc/passwd配置。)可以通过usermod -ag <组名> <用户名>向组内添加成员。(如果该字段为空表示该组无 “附加成员”,但可能有用户的 “主组” 是此组,需查看/etc/passwd确认。)
/etc/gshadow
存储组密码和组管理员信息。
1 | |
- 组名(关联用户组身份,与 /etc/group 组名一致,唯一不重复,符合组名命名规范。)
- 组密码哈希(验证非管理员临时加入组的身份,
!/*表示禁止设密码,空表示无密码。) - 组管理员(授权用户管理组成员(无需 root 权限),空表示无组管理员,多用户用逗号分隔。)
- 组成员(记录组的附加成员列表 空表示无附加成员,多用户用逗号分隔。)
用于&用户组管理
用户管理
- 创建用户
1 | |
1 | |
- 删除用户
1 | |
1 | |
- 修改用户
1 | |
1 | |
- 查看用户信息
1 | |
getent是 Linux 系统中用于查询系统管理数据库的工具,而passwd是其支持的核心数据库之一(对应/etc/passwd文件及系统其他用户数据库)。getent passwd <username>命令的核心作用是:查询指定用户名(**<username>**)的用户账号详细信息,输出格式与/etc/passwd文件的记录格式完全一致。
查询范围:不仅会读取
/etc/passwd静态文件,还会自动查询系统配置的其他用户数据库(如 NIS、LDAP、sssd 等集中式认证数据库),覆盖所有系统可识别的用户。输出格式:返回一条以冒号(
:)分隔的字符串,包含该用户的 7 个核心属性(与/etc/passwd字段完全对应),比直接查看/etc/passwd更高效(无需手动搜索)。
1 | |
用户组管理
- 添加组
1 | |
1 | |
- 删除组
1 | |
1 | |
- 修改组
1 | |
1 | |
- 将用户加入组
gpasswd
1 | |
1 | |
示例:
- 创建一个组并添加成员:
groupadd dev
gpasswd -a alice dev
gpasswd -a bob dev
- 设置组管理员并让其管理成员:
gpasswd -A alice dev 设 alice 为 dev 组管理员,之后 alice 可以执行:
gpasswd -a charlie dev无需 root 权限
- 查看组信息确认修改:
getent group dev
getent gshadow dev
Linux 用户&用户组管理
https://1zqqx.github.io/2025/09/14/Linux-用户-用户组管理/