Linux 用户和组管理

一、用户和组概述

1.1 用户帐户的作用

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

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

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

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

类型说明UID范围(CentOS 7+)特点
超级用户 (superuser)用户名 root,UID 固定为 00对系统具有完全访问权限,可执行任何操作
系统用户 (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
字段详解:
字段字段名说明
1name用户登录名(用户名)
2password密码占位符,x 表示密码存储在 /etc/shadow 中(更安全)
3UID用户ID(User ID),系统唯一标识用户
4GID用户主组ID(Group ID),指向 /etc/group 中的组
5GECOS用户描述信息,通常为真实姓名、联系方式等
6directory用户主目录,登录后的默认工作目录,通常为 /home/username
7shell用户登录后执行的程序,通常是 Shell(如 /bin/bash)

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

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

格式:

text

group_name:password:GID:user_list
示例:

bash

wheel:x:10:laoma
字段详解:
字段字段名说明
1group_name组名称
2password组密码占位符,x 表示密码存储在 /etc/gshadow 中
3GID组ID(Group ID),系统唯一标识组
4user_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查看所有终端上登录的用户及登录时间、来源IProot 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用户邮件存储目录
UMASK022新文件默认权限掩码(目录755,文件644)
HOME_MODE0700家目录权限(仅所有者可读写执行)
PASS_MAX_DAYS99999密码最大有效期(天)
PASS_MIN_DAYS0密码最小修改间隔(天)
PASS_MIN_LEN5密码最小长度
PASS_WARN_AGE7密码过期前警告天数
UID_MIN1000普通用户 UID 最小值
UID_MAX60000普通用户 UID 最大值
SYS_UID_MIN201系统用户 UID 最小值
SYS_UID_MAX999系统用户 UID 最大值
CREATE_HOMEyes是否自动创建家目录
USERGROUPS_ENAByes删除用户时,如果其同名组无成员则自动删除

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=100100新用户的主要组(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=yesyes是否创建邮箱文件

七、课后练习与作业

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/groupD. /etc/group
4. 哪一项目或文件表示用户个人文件的位置? A. 主目录 B. 登录 shell C. /etc/passwd D. /etc/groupA. 主目录
5. 哪一项表示在最基本的层面上标识组的编号? A. 主要组 B. UID C. GID D. groupidC. GID
6. 哪一项目或文件表示本地用户帐户信息的位置? A. 主目录 B. /etc/passwd C. /etc/UID D. /etc/groupB. /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 文件权限为 000 或 400,只有 root 可读,保护密码安全
  3. 修改用户配置时,优先使用命令(如 usermod),而非直接编辑配置文件
  4. 创建用户时,同名组会自动创建作为用户的主要组
  5. root 用户的 Shell 不要轻易修改,否则可能导致系统无法管理
Logo

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

更多推荐