用户和组管理
适用于 CentOS Stream 9 & 10 / AlmaLinux 9.x & 10.x / Rocky Linux 9.x & 10.x
Linux 是一个多用户操作系统。正确管理用户和组是系统安全的基础。本文介绍如何在 EL 系统上创建、修改和删除用户与组,以及相关配置文件的结构。
- 创建、修改和删除用户
- 管理用户组
- 理解
/etc/passwd、/etc/shadow、/etc/group文件结构 - 使用
id命令查看用户信息 - 配置密码过期策略
- 一台已安装 EL 9.x 的系统
- 拥有
sudo权限的用户账户
查看当前用户信息
Section titled “查看当前用户信息”$ iduid=1000(admin) gid=1000(admin) groups=1000(admin),10(wheel)$ id username$ whoamiadmin$ sudo useradd webuser这会自动完成以下操作:
- 在
/etc/passwd中添加用户记录 - 在
/etc/shadow中添加密码记录 - 创建同名用户组
- 创建主目录
/home/webuser - 从
/etc/skel复制默认配置文件到主目录
$ sudo passwd webuserChanging password for user webuser.New password:Retype new password:passwd: all authentication tokens updated successfully.useradd 常用选项
Section titled “useradd 常用选项”$ sudo useradd -d /opt/appuser appuser$ sudo useradd -s /bin/zsh devuser$ sudo useradd -u 1500 customuser$ sudo useradd -G wheel,docker deploy$ sudo useradd -r -s /sbin/nologin appservice常用选项汇总:
| 选项 | 说明 |
|---|---|
-d <目录> | 指定主目录 |
-s <Shell> | 指定登录 Shell |
-u <UID> | 指定 UID |
-g <主组> | 指定主组 |
-G <附加组> | 指定附加组(逗号分隔多个) |
-m | 强制创建主目录(默认行为) |
-M | 不创建主目录 |
-r | 创建系统用户 |
-e <日期> | 设置账户过期日期(YYYY-MM-DD) |
-c <注释> | 设置用户注释(全名等) |
$ sudo usermod -s /bin/zsh webuser$ sudo usermod -aG wheel webuser$ sudo usermod -l newname oldname$ sudo usermod -L webuser$ sudo usermod -U webuser$ sudo usermod -e 2026-12-31 tempuser$ sudo userdel webuser$ sudo userdel -r webuser$ groupsadmin wheel$ groups webuser$ getent group wheelwheel:x:10:admin,deploy$ sudo groupadd developers$ sudo groupadd -g 2000 dbadmin将用户添加到组
Section titled “将用户添加到组”$ sudo usermod -aG developers webuser$ sudo gpasswd -a webuser developers$ sudo gpasswd -d webuser developers修改和删除组
Section titled “修改和删除组”$ sudo groupmod -n newname oldname$ sudo groupdel developers关键配置文件
Section titled “关键配置文件”/etc/passwd
Section titled “/etc/passwd”存储用户账户基本信息,每行一个用户,共 7 个字段:
用户名:密码占位:UID:GID:注释:主目录:Shell$ grep webuser /etc/passwdwebuser:x:1001:1001::/home/webuser:/bin/bash各字段说明:
| 字段 | 示例 | 说明 |
|---|---|---|
| 1 | webuser | 用户名 |
| 2 | x | 密码占位符(实际密码存于 /etc/shadow) |
| 3 | 1001 | UID(用户 ID) |
| 4 | 1001 | GID(主组 ID) |
| 5 | (空) | GECOS 注释字段(通常放全名) |
| 6 | /home/webuser | 主目录路径 |
| 7 | /bin/bash | 登录 Shell |
/etc/shadow
Section titled “/etc/shadow”存储用户的加密密码和密码策略信息。只有 root 可以读取。
$ sudo grep webuser /etc/shadowwebuser:$6$xxxx...hash...:19807:0:99999:7:::共 9 个字段,以冒号分隔:
| 字段 | 说明 |
|---|---|
| 1 | 用户名 |
| 2 | 加密后的密码(! 或 !! 表示账户被锁定/无密码) |
| 3 | 最后一次修改密码的日期(从 1970-01-01 算起的天数) |
| 4 | 密码最小使用天数(0 表示不限制) |
| 5 | 密码最大使用天数(99999 表示永不过期) |
| 6 | 密码到期前的警告天数 |
| 7 | 密码过期后账户被禁用的天数 |
| 8 | 账户过期日期 |
| 9 | 保留字段 |
/etc/group
Section titled “/etc/group”存储组信息,每行一个组,共 4 个字段:
组名:密码:GID:成员列表$ grep wheel /etc/groupwheel:x:10:admin,deploy| 字段 | 示例 | 说明 |
|---|---|---|
| 1 | wheel | 组名 |
| 2 | x | 组密码(几乎不使用) |
| 3 | 10 | GID |
| 4 | admin,deploy | 组成员(逗号分隔) |
密码策略与过期管理
Section titled “密码策略与过期管理”查看密码过期信息
Section titled “查看密码过期信息”$ sudo chage -l webuser输出示例:
Last password change : Mar 24, 2026Password expires : neverPassword inactive : neverAccount expires : neverMinimum number of days between password change : 0Maximum number of days between password change : 99999Number of days of warning before password expires : 7设置密码过期策略
Section titled “设置密码过期策略”$ sudo chage -M 90 webuser$ sudo chage -m 7 webuser$ sudo chage -W 14 webuser$ sudo chage -E 2026-12-31 tempuser$ sudo chage -d 0 webuser配置全局默认密码策略
Section titled “配置全局默认密码策略”全局默认值存储在 /etc/login.defs 中:
$ grep -E "^PASS_" /etc/login.defsPASS_MAX_DAYS 99999PASS_MIN_DAYS 0PASS_MIN_LEN 5PASS_WARN_AGE 7实战:创建项目团队用户
Section titled “实战:创建项目团队用户”以下是一个完整的示例,演示如何为一个项目团队创建用户和组。
-
创建项目组
创建 project 组 $ sudo groupadd project -
创建团队成员
创建用户并加入 project 组 $ sudo useradd -G project -c "Zhang San" zhangsan$ sudo useradd -G project -c "Li Si" lisi -
为用户设置密码
设置密码 $ sudo passwd zhangsan$ sudo passwd lisi -
配置密码策略
设置 90 天密码过期 $ sudo chage -M 90 zhangsan$ sudo chage -M 90 lisi -
验证配置
确认用户和组配置正确 $ id zhangsanuid=1002(zhangsan) gid=1002(zhangsan) groups=1002(zhangsan),2001(project)$ getent group projectproject:x:2001:zhangsan,lisi
useradd 和 adduser 有什么区别
Section titled “useradd 和 adduser 有什么区别”在 EL 系统上,adduser 是 useradd 的符号链接,两者完全一致:
$ ls -la /usr/sbin/adduserlrwxrwxrwx 1 root root 7 ... /usr/sbin/adduser -> useradd用户无法登录
Section titled “用户无法登录”检查以下几点:
$ sudo passwd -S webuserwebuser PS 2026-03-24 0 99999 7 -1 (Password set, SHA512 crypt.)状态字段含义:PS = 密码已设置,LK = 已锁定,NP = 无密码。
$ grep webuser /etc/passwd | cut -d: -f7/bin/bash如果 Shell 是 /sbin/nologin 或 /bin/false,用户无法交互式登录。
如何查看所有普通用户
Section titled “如何查看所有普通用户”$ awk -F: '$3 >= 1000 && $3 < 65534 {print $1}' /etc/passwd