03 - 用户与用户组管理
一、用户与组的概念
Linux 是多用户操作系统,通过用户和组来管理访问控制:
- 用户(User):系统中的每个使用者,有唯一的 UID
- 组(Group):用户的集合,有唯一的 GID,方便批量授权
用户分类
| 类型 | UID 范围 | 说明 |
|---|---|---|
| 超级用户 | 0 | root,拥有最高权限 |
| 系统用户 | 1~999 | 服务运行专用,如 nginx、mysql |
| 普通用户 | 1000+ | 日常使用用户 |
相关配置文件
| 文件 | 作用 |
|---|---|
/etc/passwd |
用户基本信息 |
/etc/shadow |
用户密码(加密存储) |
/etc/group |
组基本信息 |
/etc/gshadow |
组密码 |
bash
# /etc/passwd 格式(冒号分隔,7 个字段)
# 用户名:密码占位:UID:GID:描述:家目录:登录Shell
root:x:0:0:root:/root:/bin/bash
nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
# /etc/shadow 格式
# 用户名:加密密码:最后修改天数:最小间隔:最大天数:警告期:禁用期:过期日期
root:$6$xxx...:19000:0:99999:7:::
二、用户管理
2.1 创建用户 - useradd
bash
# 基本创建
useradd alice
# 常用选项
useradd -m -s /bin/bash -c "Alice Wang" alice
# -m 创建家目录
# -s 指定登录 Shell
# -c 添加描述信息
# 指定 UID 和所属组
useradd -u 2000 -g developers -G docker,wheel bob
# -u 指定 UID
# -g 指定主组
# -G 指定附加组(多个用逗号分隔)
# 创建系统用户(不创建家目录,不可登录)
useradd -r -s /sbin/nologin appuser
CentOS vs Ubuntu 差异:
- CentOS 的
useradd默认不创建家目录,需加-m- Ubuntu 的
adduser命令是交互式的,更友好
2.2 设置密码 - passwd
bash
# 设置自己的密码
passwd
# root 给其他用户设置密码
passwd alice
# 锁定/解锁用户密码
passwd -l alice # 锁定
passwd -u alice # 解锁
# 强制用户下次登录时修改密码
passwd -e alice
2.3 修改用户属性 - usermod
bash
# 修改用户名
usermod -l newname oldname
# 修改家目录
usermod -d /home/newhome -m alice # -m 迁移原家目录内容
# 修改登录 Shell
usermod -s /bin/zsh alice
# 添加到附加组(保留原有组)
usermod -aG docker alice
# 注意:必须加 -a(append),否则会覆盖原有附加组!
# 修改主组
usermod -g developers alice
重要 :
usermod -aG中的-a不可省略,否则用户将从其他附加组中移除。
2.4 删除用户 - userdel
bash
# 仅删除用户(保留家目录)
userdel alice
# 连同家目录一起删除
userdel -r alice
2.5 查看用户信息
bash
# 查看当前用户
whoami
# 查看用户 UID、GID 及所属组
id alice
# 查看用户的组信息
groups alice
# 查看当前登录的用户
who
w # 更详细,显示用户在做什么
三、用户组管理
3.1 创建组 - groupadd
bash
# 创建组
groupadd developers
# 指定 GID
groupadd -g 1500 testers
3.2 修改组 - groupmod
bash
# 修改组名
groupmod -n devteam developers
# 修改 GID
groupmod -g 1600 devteam
3.3 删除组 - groupdel
bash
groupdel devteam
如果组是某个用户的主组,则无法删除。需先移除该用户或修改其主组。
3.4 管理组成员 - gpasswd
bash
# 添加用户到组
gpasswd -a alice developers
# 从组中移除用户
gpasswd -d alice developers
# 设置组管理员
gpasswd -A alice developers
# 批量添加多个用户到组
gpasswd -M alice,bob,charlie developers
四、sudo 权限管理
sudo 允许普通用户以 root 身份执行特定命令,是生产环境推荐的做法(优于直接使用 root)。
4.1 基本使用
bash
# 以 root 身份执行命令
sudo systemctl restart nginx
# 切换到 root 的 Shell
sudo -i # 完整登录 Shell
sudo su - # 效果类似
# 查看当前用户的 sudo 权限
sudo -l
4.2 配置 sudo 权限
bash
# 使用 visudo 编辑(推荐,有语法检查)
visudo
配置文件格式:
# 用户 主机=(以谁的身份) 可执行的命令
alice ALL=(ALL) ALL # alice 可以执行所有命令
bob ALL=(ALL) /usr/bin/systemctl restart nginx # bob 只能重启 nginx
%wheel ALL=(ALL) ALL # wheel 组的所有成员
常用 sudo 配置示例
bash
# 免密码执行 sudo(开发环境常用)
alice ALL=(ALL) NOPASSWD: ALL
# 免密码执行特定命令
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl, /usr/bin/journalctl
# 允许运维组管理服务
%ops ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart *, /usr/bin/systemctl status *
4.3 sudo 日志审计
bash
# sudo 操作会记录到日志中
# CentOS/RHEL
grep sudo /var/log/secure
# Ubuntu/Debian
grep sudo /var/log/auth.log
五、PAM 认证简介
PAM(Pluggable Authentication Modules)是 Linux 的可插拔认证框架,控制用户登录、密码策略等。
常见配置文件
bash
/etc/pam.d/ # PAM 配置目录
/etc/pam.d/sshd # SSH 登录认证
/etc/pam.d/login # 本地登录认证
/etc/security/limits.conf # 资源限制
密码策略配置
bash
# /etc/login.defs - 全局密码策略
PASS_MAX_DAYS 90 # 密码最大使用天数
PASS_MIN_DAYS 2 # 密码修改最小间隔天数
PASS_MIN_LEN 12 # 密码最小长度
PASS_WARN_AGE 7 # 密码过期前警告天数
六、实战场景
场景一:创建应用专用用户
部署 Nginx 服务时,创建专用用户:
bash
# 创建系统用户,不可登录
useradd -r -s /sbin/nologin -d /var/lib/nginx -M nginx
# 验证
id nginx
# uid=997(nginx) gid=995(nginx) groups=997(nginx)
场景二:创建运维团队并分配权限
bash
# 1. 创建运维组
groupadd -g 2000 ops
# 2. 创建运维用户并加入组
useradd -m -s /bin/bash -G ops -u 2001 alice
useradd -m -s /bin/bash -G ops -u 2002 bob
# 3. 设置初始密码
echo "alice:InitPass2024!" | chpasswd
echo "bob:InitPass2024!" | chpasswd
# 4. 强制首次登录修改密码
passwd -e alice
passwd -e bob
# 5. 配置 sudo 权限
visudo
# 添加:
# %ops ALL=(ALL) NOPASSWD: /usr/bin/systemctl, /usr/bin/journalctl, /usr/bin/yum
场景三:批量创建用户
bash
#!/bin/bash
# batch_create_users.sh
USER_LIST="alice bob charlie diana"
for user in $USER_LIST; do
useradd -m -s /bin/bash "$user"
echo "${user}:TempPass123!" | chpasswd
passwd -e "$user"
echo "用户 $user 创建成功,需首次登录修改密码"
done
七、常见问题
Q1:用户登录提示 "This account is currently not available"
用户的 Shell 被设为了 /sbin/nologin 或 /bin/false。如需恢复登录:
bash
usermod -s /bin/bash username
Q2:usermod -aG 后用户组没变?
用户需要重新登录才能生效。或者使用 newgrp 临时切换:
bash
newgrp docker
Q3:如何禁止某个用户登录但保留其服务运行?
bash
# 方法一:修改 Shell
usermod -s /sbin/nologin username
# 方法二:锁定密码(SSH 密钥仍可登录)
passwd -l username
# 方法三:通过 SSH 配置
echo "DenyUsers username" >> /etc/ssh/sshd_config
systemctl restart sshd
八、小结
本篇介绍了 Linux 用户和组的完整管理流程,包括创建、修改、删除、sudo 权限配置以及 PAM 认证基础。在生产环境中,遵循"最小权限原则"------只给用户必要的权限,避免直接使用 root。
上一篇 :02 - 文件系统与权限管理
下一篇 :04 - 进程与服务管理