Linux 用户和组管理

一、用户和组概述

1.1 用户帐户的作用

用户帐户是系统安全的基础:

  • 系统上的每个进程(运行程序)都以特定用户身份运行
  • 每个文件都有一个特定用户作为其所有者
  • 文件所有权帮助系统对用户实施访问控制
  • 正在运行的进程关联的用户,决定了该进程可访问的文件和目录

💡 用户使用 username(用户名)标识,便于人类记忆;系统内部使用 UID(用户ID,唯一编号)来区分用户帐户。

1.2 用户帐户的三种主要类型

类型 说明 UID范围(CentOS 7+) 特点
超级用户 (superuser) 用户名 root,UID 固定为 0 0 对系统具有完全访问权限,可执行任何操作
系统用户 (system users) 由系统服务和守护进程使用 1-999 非特权帐户,通常不用于交互式登录,Shell 为 /sbin/nologin
普通用户 (regular users) 供日常工作和交互式登录使用 1000+ 权限受限,只能访问自己有权限的资源

bash

# 查看系统用户示例
[laoma@centos7 ~]$ grep postfix /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

二、用户和组配置文件详解

2.1 /etc/passwd —— 用户帐户信息文件

保存系统上所有登录用户的信息,每行代表一个用户,以冒号 : 分隔 7 个字段

格式:

text

name:password:UID:GID:GECOS:directory:shell
示例:

bash

laoma:x:1000:1000:software admin:/home/laoma:/bin/bash
字段详解:
字段 字段名 说明
1 name 用户登录名(用户名)
2 password 密码占位符,x 表示密码存储在 /etc/shadow 中(更安全)
3 UID 用户ID(User ID),系统唯一标识用户
4 GID 用户主组ID(Group ID),指向 /etc/group 中的组
5 GECOS 用户描述信息,通常为真实姓名、联系方式等
6 directory 用户主目录,登录后的默认工作目录,通常为 /home/username
7 shell 用户登录后执行的程序,通常是 Shell(如 /bin/bash

2.2 /etc/group —— 组信息文件

保存系统上所有组的信息,每行代表一个组,以冒号 : 分隔 4 个字段

格式:

text

group_name:password:GID:user_list
示例:

bash

wheel:x:10:laoma
字段详解:
字段 字段名 说明
1 group_name 组名称
2 password 组密码占位符,x 表示密码存储在 /etc/gshadow
3 GID 组ID(Group ID),系统唯一标识组
4 user_list 该组的补充成员列表(逗号分隔),主组成员不在此列出

2.3 组的类型

类型 说明 存储位置
主要组 (Primary Group) 每个用户只有一个主要组。用户新建文件的所属组默认为其主要组。创建用户时,默认会创建一个同名专用组作为主要组。 /etc/passwd 的 GID 字段
补充组 (Supplementary Group) 用户可以属于多个补充组。权限检查时,会检查用户所属的所有组(主要组 + 补充组)。 /etc/group 的 user_list 字段

2.4 查看用户信息

bash

# 查看当前用户的完整信息
[laoma@centos7 ~]$ id
uid=1000(laoma) gid=1000(laoma) groups=1000(laoma),10(wheel)

# 查看指定用户的 UID
[laoma@centos7 ~]$ id -u laoma
1000

# 查看指定用户的 GID(主要组)
[laoma@centos7 ~]$ id -g laoma
1000

# 查看指定用户的所有组 ID
[laoma@centos7 ~]$ id -G laoma
1000 10

三、查看登录用户信息

3.1 命令对比

命令 作用 示例输出
whoami 查看当前终端的登录用户名 root
who 查看所有终端上登录的用户及登录时间、来源IP root pts/0 2024-12-22 08:43 (10.1.8.1)
w 查看登录用户及系统负载、运行进程等详细信息 显示 USER、TTY、FROM、LOGIN@、IDLE、JCPU、PCPU、WHAT
users 仅显示当前登录的所有用户名(可重复) laoma laoma root

3.2 示例

bash

# who 示例
[laoma@centos7 ~]$ who
root     pts/0        Dec 22 08:43 (10.1.8.1)
laoma    pts/1        Dec 22 09:23 (10.1.8.1)
laoma    pts/2        Dec 22 09:07 (10.1.8.1)

# w 示例(信息更丰富)
[laoma@centos7 ~]$ w
 09:23:19 up  1:10,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.1.8.1         08:43   39:27   0.06s  0.06s -bash
laoma    pts/1    10.1.8.1         09:23    2.00s  0.05s  0.01s w
laoma    pts/2    10.1.8.1         09:07    7.00s  0.05s  0.05s -bash

# users 示例
[root@centos7 ~]$ users
laoma laoma root

# whoami 示例
[root@centos7 ~]$ whoami
root

四、用户管理命令

4.1 useradd —— 创建用户

基本语法:

bash

useradd [选项] 用户名
常用选项:
选项 说明 示例
-u UID 指定用户 ID -u 8888
-d 目录 指定家目录路径 -d /opt/user02
-c 描述 设置 GECOS 描述信息 -c "software admin"
-g 组名 指定主要组(GID) -g wheel
-s Shell 指定登录 Shell -s /sbin/nologin
-p 密码 设置密码(明文,不安全,仅用于测试) -p '123456'
-G 组列表 指定补充组(逗号分隔) -G wheel,users
-r 创建系统用户(UID < 1000) -r
示例:

bash

# 示例1:创建默认用户(自动分配 UID、GID,创建同名组和家目录)
[root@centos7 ~]# useradd user01
[root@centos7 ~]# grep user01 /etc/passwd
user01:x:1003:1003::/home/user01:/bin/bash

# 示例2:指定各项属性创建用户
[root@centos7 ~]# useradd -u 8888 -d /opt/user02 -c "user for software manage" -g wheel -s /sbin/nologin user02
[root@centos7 ~]# grep user02 /etc/passwd
user02:x:8888:10:user for software manager:/opt/user02:/sbin/nologin
[root@centos7 ~]# ls -d /opt/user02/
/opt/user02/

# 示例3:创建无密码用户(图形界面可直接登录)
[root@centos7 ~]# useradd -p '' tom

4.2 /etc/skel/ —— 用户家目录模板

创建新用户时,系统会将 /etc/skel/ 目录下的所有文件复制到用户的新家目录中。

bash

[root@centos7 ~]# ls -a /etc/skel/
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla

[root@centos7 ~]# ls -a ~tom
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla

📌 用途:系统管理员可以在此目录放置全局配置文件(如 .bashrc、自定义环境变量、欢迎信息等),使每个新用户都能继承这些配置。

4.3 usermod —— 修改用户属性

基本语法:

bash

usermod [选项] 用户名
常用选项:
选项 说明 示例
-u UID 修改用户 ID -u 1008
-d 目录 修改家目录路径 -d /home/user02
-m 将原家目录内容移动到新家目录(常与 -d 联用) -md /home/user02
-c 描述 修改 GECOS 描述信息 -c "new desc"
-g 组名 修改主要组(GID) -g users
-s Shell 修改登录 Shell -s /bin/bash
-G 组列表 设置补充组列表(覆盖原有补充组) -G wheel,users
-aG 组列表 追加补充组(保留原有补充组) -aG docker
-L 锁定用户(禁止登录) -L
-U 解锁用户 -U

⚠️ 重要-G覆盖原有的补充组列表,如果要追加,必须同时使用 -aG

示例:

bash

# 示例1:修改 UID、家目录和 Shell
[root@centos7 ~]# usermod user02 -u 1008 -md /home/user02 -s /bin/bash
# -u 1008: UID 改为 1008
# -md /home/user02: 家目录改为 /home/user02,并迁移原有内容
# -s /bin/bash: Shell 改为 /bin/bash

[root@centos7 ~]# grep user02 /etc/passwd
user02:x:1008:10:user for software manager:/home/user02:/bin/bash
[root@centos7 ~]# ls -d /home/user02/
/home/user02/

[root@centos7 ~]# su - user02    # 验证可登录
Last login: Mon Nov  7 17:08:58 CST 2022 on pts/2
[user02@centos7 ~]$ 

# 示例2:添加补充组(追加)
[root@centos7 ~]# usermod -aG user01 user02
[root@centos7 ~]# id user02
uid=1008(user02) gid=10(wheel) groups=10(wheel),1003(user01)
# 原有补充组 wheel 保留,新增 user01

# 示例3:覆盖补充组(危险)
[root@centos7 ~]# usermod -G user01 user02   # 会覆盖原有补充组

4.4 userdel —— 删除用户

选项 说明
无选项 删除用户,但保留家目录和邮件池
-r 删除用户,同时删除家目录和邮件池
-f 强制删除(即使用户当前已登录)

bash

# 正常删除
[root@centos7 ~]# useradd user03
[root@centos7 ~]# userdel user03

# 强制删除(谨慎使用)
[root@centos7 ~]# userdel -f user02
userdel: user user02 is currently used by process 9071
[root@centos7 ~]# id user02
id: user02: no such user

⚠️ 注意

  1. 删除用户前建议先备份家目录中的重要数据。
  2. 如果用户当前已登录,userdel 会提示错误,使用 -f 可强制删除但可能导致进程异常。
  3. 正确的做法:先 kill 掉该用户的所有进程,再执行 userdel -r

五、组管理命令

5.1 groupadd —— 创建组

选项 说明
-g GID 指定组 ID
-r 创建系统组(GID < 1000)

bash

# 创建普通组
[root@centos7 ~]# groupadd admin

# 创建指定 GID 的组
[root@centos7 ~]# groupadd sysadmin -g 2000

# 验证
[root@centos7 ~]# grep admin /etc/group
admin:x:1002:
sysadmin:x:2000:

5.2 groupmod —— 修改组属性

选项 说明
-n 新名称 修改组名称
-g 新GID 修改组 ID

bash

# 修改组名
[root@centos7 ~]# groupmod --new-name admins admin

# 修改 GID
[root@centos7 ~]# groupmod -g 2002 admins

# 验证
[root@centos7 ~]# grep admins /etc/group
admins:x:2002:

5.3 groupdel —— 删除组

bash

[root@centos7 ~]# groupdel sysadmin
[root@centos7 ~]# grep sysadmin /etc/group   # 无输出,已删除

⚠️ 如果组是某用户的主要组,则不能删除,需先删除用户或修改用户的主要组。

5.4 groupmems —— 管理组成员

选项 说明
-g 组名 指定要操作的组(默认为当前用户的主要组)
-a 用户名 将用户添加到组中
-d 用户名 从组中移除用户
-l 列出组中所有成员
-p 清空组中所有成员

bash

# 添加成员
[root@centos7 ~]# groupmems -g admins -a laoma
[root@centos7 ~]# groupmems -g admins -l
laoma

# 验证
[root@centos7 ~]# id laoma
uid=1000(laoma) gid=1000(laoma) groups=1000(laoma),10(wheel),2002(admins)

# 删除成员
[root@centos7 ~]# groupmems -g admins -d laoma
[root@centos7 ~]# groupmems -g admins -l

# 清空组中所有成员
[root@centos7 ~]# groupmems -g admins -a laoma
[root@centos7 ~]# groupmems -g admins -p

六、默认配置文件

6.1 /etc/login.defs —— 用户创建默认参数

bash

[root@centos7 ~]# vim /etc/login.defs
配置项 默认值 说明
MAIL_DIR /var/spool/mail 用户邮件存储目录
UMASK 022 新文件默认权限掩码(目录755,文件644)
HOME_MODE 0700 家目录权限(仅所有者可读写执行)
PASS_MAX_DAYS 99999 密码最大有效期(天)
PASS_MIN_DAYS 0 密码最小修改间隔(天)
PASS_MIN_LEN 5 密码最小长度
PASS_WARN_AGE 7 密码过期前警告天数
UID_MIN 1000 普通用户 UID 最小值
UID_MAX 60000 普通用户 UID 最大值
SYS_UID_MIN 201 系统用户 UID 最小值
SYS_UID_MAX 999 系统用户 UID 最大值
CREATE_HOME yes 是否自动创建家目录
USERGROUPS_ENAB yes 删除用户时,如果其同名组无成员则自动删除

6.2 /etc/default/useradd —— useradd 额外默认值

bash

[root@centos7 ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
配置项 默认值 说明
GROUP=100 100 新用户的主要组(100 = users),但 CentOS 默认创建同名组
HOME=/home /home 家目录父路径
INACTIVE=-1 -1 密码过期后账户停用天数(-1 表示永不停用)
EXPIRE= 账户过期日期(空表示永不过期)
SHELL=/bin/bash /bin/bash 默认登录 Shell
SKEL=/etc/skel /etc/skel 模板目录路径
CREATE_MAIL_SPOOL=yes yes 是否创建邮箱文件

七、课后练习与作业

7.1 课后选择题

题目 答案
1. 哪一项表示在最基本的层面上标识用户的编号? A. 主要用户 B. UID C. GID D. 用户名 B. UID
2. 哪一项表示提供用户命令行提示符的程序? A. 主 shell B. 主目录 C. 登录 shell D. 命令名称 C. 登录 shell
3. 哪一项目或文件表示本地组信息的位置? A. 主目录 B. /etc/passwd C. /etc/GID D. /etc/group D. /etc/group
4. 哪一项目或文件表示用户个人文件的位置? A. 主目录 B. 登录 shell C. /etc/passwd D. /etc/group A. 主目录
5. 哪一项表示在最基本的层面上标识组的编号? A. 主要组 B. UID C. GID D. groupid C. GID
6. 哪一项目或文件表示本地用户帐户信息的位置? A. 主目录 B. /etc/passwd C. /etc/UID D. /etc/group B. /etc/passwd
7. /etc/passwd 文件的第四个字段是什么? A. 主目录 B. UID C. 登录 shell D. 主要组 D. 主要组(第4字段为 GID)

7.2 课后作业

bash

# 1. 创建 operator1 用户
[root@centos7 ~]# useradd operator1

# 2. 使用 id 验证 operator1 用户信息
[root@centos7 ~]# id operator1

# 3. 查看 /etc/passwd 中对应条目
[root@centos7 ~]# grep operator1 /etc/passwd

# 4. 密码设置为 redhat
[root@centos7 ~]# echo "redhat" | passwd --stdin operator1

# 5. 修改 operator1 用户 uid 为 1088
[root@centos7 ~]# usermod -u 1088 operator1

# 6. 修改 operator1 用户描述信息为 "Operator One"
[root@centos7 ~]# usermod -c "Operator One" operator1

# 7. 将 wheel 组作为补充组添加给 operator1 用户
[root@centos7 ~]# usermod -aG wheel operator1

# 8. 查看 /etc/group 中对应条目
[root@centos7 ~]# grep wheel /etc/group

# 9. 删除 operator1 用户
[root@centos7 ~]# userdel -r operator1

八、命令速查表

用户管理命令速查

命令 用途 常用选项
useradd 创建用户 -u, -d, -c, -g, -G, -s, -r
usermod 修改用户 -u, -d, -m, -c, -g, -G, -aG, -s, -L, -U
userdel 删除用户 -r(删除家目录)
id 查看用户信息 -u, -g, -G
whoami 查看当前用户名
who / w 查看登录用户
users 查看登录用户名

组管理命令速查

命令 用途 常用选项
groupadd 创建组 -g, -r
groupmod 修改组 -n, -g
groupdel 删除组
groupmems 管理组成员 -g, -a, -d, -l, -p

九、补充说明

9.1 密码管理命令补充

命令 用途 常用选项
passwd 管理用户密码 --stdin, -l, -u, -d, -e, -S
chage 密码过期策略 -l, -m, -M, -W, -E, -d

9.2 重要提醒

  1. /etc/passwd 文件权限为 644,所有用户可读,但只有 root 可写
  2. /etc/shadow 文件权限为 000400,只有 root 可读,保护密码安全
  3. 修改用户配置时,优先使用命令(如 usermod),而非直接编辑配置文件
  4. 创建用户时,同名组会自动创建作为用户的主要组
  5. root 用户的 Shell 不要轻易修改,否则可能导致系统无法管理
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐