跳转到内容
搜索 RunEntLinux 文档

仅搜索 RunEntLinux 通用文档,各发行版文档使用各自的搜索入口。

    浏览当前文档目录

    用户和组管理

    适用于 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 权限的用户账户
    查看当前用户的 UID、GID 和所属组
    $ id
    uid=1000(admin) gid=1000(admin) groups=1000(admin),10(wheel)
    查看指定用户的信息
    $ id username
    查看当前登录的用户名
    $ whoami
    admin
    创建一个新用户
    $ sudo useradd webuser

    这会自动完成以下操作:

    • 在 /etc/passwd 中添加用户记录
    • 在 /etc/shadow 中添加密码记录
    • 创建同名用户组
    • 创建主目录 /home/webuser
    • 从 /etc/skel 复制默认配置文件到主目录
    为新用户设置密码
    $ sudo passwd webuser
    Changing password for user webuser.
    New password:
    Retype new password:
    passwd: all authentication tokens updated successfully.
    创建用户并指定主目录
    $ sudo useradd -d /opt/appuser appuser
    创建用户并指定默认 Shell
    $ sudo useradd -s /bin/zsh devuser
    创建用户并指定 UID
    $ sudo useradd -u 1500 customuser
    创建用户并添加到附加组
    $ sudo useradd -G wheel,docker deploy
    创建系统用户(无主目录、无登录 Shell)
    $ sudo useradd -r -s /sbin/nologin appservice

    常用选项汇总:

    选项说明
    -d <目录>指定主目录
    -s <Shell>指定登录 Shell
    -u <UID>指定 UID
    -g <主组>指定主组
    -G <附加组>指定附加组(逗号分隔多个)
    -m强制创建主目录(默认行为)
    -M不创建主目录
    -r创建系统用户
    -e <日期>设置账户过期日期(YYYY-MM-DD)
    -c <注释>设置用户注释(全名等)
    修改用户的登录 Shell
    $ 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
    查看当前用户所属的所有组
    $ groups
    admin wheel
    查看指定用户所属的组
    $ groups webuser
    查看某个组的成员
    $ getent group wheel
    wheel:x:10:admin,deploy
    创建新组
    $ sudo groupadd developers
    创建指定 GID 的组
    $ sudo groupadd -g 2000 dbadmin
    将用户添加到组
    $ sudo usermod -aG developers webuser
    使用 gpasswd 添加用户到组
    $ sudo gpasswd -a webuser developers
    使用 gpasswd 从组中移除用户
    $ sudo gpasswd -d webuser developers
    修改组名
    $ sudo groupmod -n newname oldname
    删除组
    $ sudo groupdel developers

    存储用户账户基本信息,每行一个用户,共 7 个字段:

    用户名:密码占位:UID:GID:注释:主目录:Shell
    查看 /etc/passwd 中的用户记录
    $ grep webuser /etc/passwd
    webuser:x:1001:1001::/home/webuser:/bin/bash

    各字段说明:

    字段示例说明
    1webuser用户名
    2x密码占位符(实际密码存于 /etc/shadow)
    31001UID(用户 ID)
    41001GID(主组 ID)
    5(空)GECOS 注释字段(通常放全名)
    6/home/webuser主目录路径
    7/bin/bash登录 Shell

    存储用户的加密密码和密码策略信息。只有 root 可以读取。

    查看 shadow 文件中的记录(需要 root 权限)
    $ sudo grep webuser /etc/shadow
    webuser:$6$xxxx...hash...:19807:0:99999:7:::

    共 9 个字段,以冒号分隔:

    字段说明
    1用户名
    2加密后的密码(! 或 !! 表示账户被锁定/无密码)
    3最后一次修改密码的日期(从 1970-01-01 算起的天数)
    4密码最小使用天数(0 表示不限制)
    5密码最大使用天数(99999 表示永不过期)
    6密码到期前的警告天数
    7密码过期后账户被禁用的天数
    8账户过期日期
    9保留字段

    存储组信息,每行一个组,共 4 个字段:

    组名:密码:GID:成员列表
    查看 wheel 组的信息
    $ grep wheel /etc/group
    wheel:x:10:admin,deploy
    字段示例说明
    1wheel组名
    2x组密码(几乎不使用)
    310GID
    4admin,deploy组成员(逗号分隔)
    查看用户的密码过期详情
    $ sudo chage -l webuser

    输出示例:

    Last password change : Mar 24, 2026
    Password expires : never
    Password inactive : never
    Account expires : never
    Minimum number of days between password change : 0
    Maximum number of days between password change : 99999
    Number of days of warning before password expires : 7
    设置密码最大有效天数为 90 天
    $ sudo chage -M 90 webuser
    设置密码最小修改间隔为 7 天
    $ sudo chage -m 7 webuser
    设置过期前 14 天开始警告
    $ sudo chage -W 14 webuser
    设置账户过期日期
    $ sudo chage -E 2026-12-31 tempuser
    强制用户下次登录时修改密码
    $ sudo chage -d 0 webuser

    全局默认值存储在 /etc/login.defs 中:

    查看默认密码策略配置
    $ grep -E "^PASS_" /etc/login.defs
    PASS_MAX_DAYS 99999
    PASS_MIN_DAYS 0
    PASS_MIN_LEN 5
    PASS_WARN_AGE 7

    以下是一个完整的示例,演示如何为一个项目团队创建用户和组。

    1. 创建项目组

      创建 project 组
      $ sudo groupadd project
    2. 创建团队成员

      创建用户并加入 project 组
      $ sudo useradd -G project -c "Zhang San" zhangsan
      $ sudo useradd -G project -c "Li Si" lisi
    3. 为用户设置密码

      设置密码
      $ sudo passwd zhangsan
      $ sudo passwd lisi
    4. 配置密码策略

      设置 90 天密码过期
      $ sudo chage -M 90 zhangsan
      $ sudo chage -M 90 lisi
    5. 验证配置

      确认用户和组配置正确
      $ id zhangsan
      uid=1002(zhangsan) gid=1002(zhangsan) groups=1002(zhangsan),2001(project)
      $ getent group project
      project:x:2001:zhangsan,lisi

    在 EL 系统上,adduser 是 useradd 的符号链接,两者完全一致:

    验证 adduser 指向 useradd
    $ ls -la /usr/sbin/adduser
    lrwxrwxrwx 1 root root 7 ... /usr/sbin/adduser -> useradd

    检查以下几点:

    确认账户未被锁定
    $ sudo passwd -S webuser
    webuser PS 2026-03-24 0 99999 7 -1 (Password set, SHA512 crypt.)

    状态字段含义:PS = 密码已设置,LK = 已锁定,NP = 无密码。

    确认 Shell 是否允许登录
    $ grep webuser /etc/passwd | cut -d: -f7
    /bin/bash

    如果 Shell 是 /sbin/nologin 或 /bin/false,用户无法交互式登录。

    列出 UID >= 1000 的普通用户
    $ awk -F: '$3 >= 1000 && $3 < 65534 {print $1}' /etc/passwd