【Linux运维极简教程】03-用户与用户组管理

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 - 进程与服务管理

相关推荐
素心如月桠2 小时前
windows系统使用https://lnmp.org/的LNMP一键安装包,来打开我的服务器Linux
linux·运维·服务器
AOwhisky2 小时前
Linux(CentOS)系统管理入门笔记:第二期核心知识点自测与详解
linux·笔记·centos
Zhu7582 小时前
在Docker环境部署ApacheGuacamole,对接MySQL数据库
运维·docker·容器
Bruce_Liuxiaowei2 小时前
一次内网横向移动实战:从一个 5900 端口到穿越防火墙
运维·网络·安全
云计算-Security2 小时前
同(异)主机 Linux NAT 最佳实践
linux·服务器·网络
章老师说4 小时前
BFE v1.8.3 正式发布:AI网关能力再升级,企业级七层负载均衡持续进化
运维·人工智能·负载均衡
星释11 小时前
鸿蒙智能体开发实战:23.常见问题
服务器·华为·ai·harmonyos·鸿蒙·智能体
天空'之城11 小时前
Linux 系统编程 22:五种 IO 模型全解
linux
小张成长计划..13 小时前
【Linux】10:冯·诺依曼体系结构和操作系统
linux·运维·服务器