Linux 用户和组管理:核心概念、配置文件与命令全解析
·
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
⚠️ 注意:
- 删除用户前建议先备份家目录中的重要数据。
- 如果用户当前已登录,
userdel会提示错误,使用-f可强制删除但可能导致进程异常。- 正确的做法:先
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 重要提醒
/etc/passwd文件权限为644,所有用户可读,但只有 root 可写/etc/shadow文件权限为000或400,只有 root 可读,保护密码安全- 修改用户配置时,优先使用命令(如
usermod),而非直接编辑配置文件 - 创建用户时,同名组会自动创建作为用户的主要组
root用户的 Shell 不要轻易修改,否则可能导致系统无法管理
更多推荐


所有评论(0)