RHCE认证考试学习笔记(四):用户管理与权限控制

大家好,欢迎回到RHCE9学习笔记系列。在前三篇文章中,我们学习了Linux基础命令、文件操作以及重定向与正则表达式。今天,我们将进入Linux安全体系的核心:用户管理与权限控制 。理解用户和权限是如何工作的,是保障系统安全、实现多人协作运维的基础。
1. Linux用户管理概述
Linux是一个多用户、多任务的操作系统。用户管理主要包括三个方面:用户账号管理 、用户组管理 、密码管理 。所有用户相关信息都存储在几个关键文件中:
| 文件 | 说明 |
|---|---|
/etc/passwd | 用户基本信息(不含密码) |
/etc/shadow | 用户密码及过期信息(仅root可读) |
/etc/group | 用户组基本信息 |
/etc/gshadow | 用户组密码信息 |
1.1 /etc/passwd 文件结构
每一行代表一个用户,由7个字段组成,以冒号分隔:
bash
root:x:0:0:root:/root:/bin/bash
| 字段 | 含义 |
|---|---|
| 1 | 用户名 |
| 2 | 密码占位符(实际密码在/etc/shadow) |
| 3 | UID(用户ID,0代表root) |
| 4 | GID(主要组的ID) |
| 5 | 用户描述信息 |
| 6 | 用户家目录 |
| 7 | 登录Shell |
1.2 /etc/shadow 文件结构
密码信息更详细,用于密码管理:
bash
root:$6$...:19680:0:99999:7:::
| 字段 | 含义 |
|---|---|
| 1 | 用户名 |
| 2 | 加密后的密码(!或*表示禁用) |
| 3 | 上次修改密码的天数(从1970-01-01起) |
| 4 | 密码最小使用天数(0表示无限制) |
| 5 | 密码最大使用天数(默认99999) |
| 6 | 密码过期前警告天数 |
| 7 | 密码过期后宽限天数 |
| 8 | 账号失效日期 |
| 9 | 保留字段 |
1.3 /etc/group 文件结构
bash
root:x:0:
| 字段 | 含义 |
|---|---|
| 1 | 组名 |
| 2 | 组密码占位符(实际在/etc/gshadow) |
| 3 | GID |
| 4 | 组成员(逗号分隔) |
2. 用户管理命令
2.1 创建用户 – useradd
bash
# 创建用户(系统会自动创建同名私有组、家目录、邮箱)
useradd zhangsan
# 查看用户信息
grep zhangsan /etc/passwd
# 输出:zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
常用选项:
| 选项 | 说明 |
|---|---|
-u UID | 指定UID |
-d 家目录 | 指定家目录路径 |
-s shell | 指定登录Shell |
-g 主要组 | 指定主要组(默认创建同名私有组) |
-G 附加组 | 指定附加组(多个用逗号分隔) |
-c 描述 | 添加描述信息 |
bash
# 指定UID、家目录和Shell创建用户
useradd lisi -u 2000 -d /home/some -s /bin/sh
# 创建用户并指定附加组
useradd wangwu -G root,wheel
2.2 修改用户 – usermod
bash
# 修改用户的UID
usermod zhangsan -u 1500
# 修改用户的家目录
usermod zhangsan -d /home/newhome
# 添加附加组(-a 表示追加,否则会覆盖原有附加组)
usermod zhangsan -aG wheel
2.3 删除用户 – userdel
bash
# 仅删除用户,保留家目录和邮箱
userdel zhangsan
# 连同家目录和邮箱一起删除
userdel -r zhangsan
2.4 查看用户信息 – id 和 whoami
bash
id zhangsan # 查看用户的UID、GID和所属组
whoami # 显示当前用户名
3. 用户组管理
3.1 组的概念
- 私有组(Private Group) :创建用户时,系统自动创建的同名组,该用户是唯一成员。
- 主要组(Primary Group) :用户登录后默认所属的组,记录在
/etc/passwd的GID字段。 - 附加组(Attached Group) :用户额外所属的组,记录在
/etc/group的成员列表中。
3.2 组管理命令
bash
# 创建组
groupadd developers
# 指定GID创建组
groupadd -g 3000 admins
# 修改组GID
groupmod admins -g 3500
# 删除组(组内不能有用户作为主要组)
groupdel developers
3.3 临时切换主要组 – newgrp
bash
# 临时切换到其他组(需要密码或成员身份)
newgrp wheel
# 此时创建的文件所属组变为 wheel
touch test
exit # 退出新Shell,回到原主要组
4. 密码管理
4.1 设置密码 – passwd
bash
# root用户为他人设置密码
passwd zhangsan
# 普通用户修改自己的密码
passwd
# 删除用户密码(禁用密码登录)
passwd -d zhangsan
# 强制用户下次登录修改密码
passwd -e zhangsan
小技巧 :使用 --stdin 可以从标准输入设置密码(常用于脚本):
bash
echo "MyPassword123" | passwd --stdin zhangsan
4.2 密码策略 – chage
chage 用于精细管理密码过期策略:
bash
# 设置用户密码策略
chage -d 0 -m 2 -M 30 -W 7 -I 5 -E 2025-12-31 zhangsan
| 选项 | 说明 |
|---|---|
-d 天数 | 上次密码修改时间(0表示强制下次修改) |
-m 天数 | 密码最小使用天数 |
-M 天数 | 密码最大使用天数 |
-W 天数 | 密码过期前警告天数 |
-I 天数 | 密码过期后宽限天数(锁定账号) |
-E 日期 | 账号失效日期 |
bash
# 查看用户密码信息
chage -l zhangsan
5. Root密码破解(应急)
忘记root密码时,可以通过单用户模式或rd.break恢复:
-
重启系统,在GRUB菜单按
e编辑启动项。 -
在以
linux开头的行末尾添加rd.break,按Ctrl+x启动。 -
进入紧急救援模式,重新挂载根文件系统为读写:
bashmount -o remount,rw /sysroot chroot /sysroot -
修改root密码:
bashpasswd root -
创建重置SELinux上下文的文件:
bashtouch /.autorelabel -
退出并重启:
bashexit exit
注意 :RHEL 9 中单用户模式可能被保护,需在GRUB中添加 single 或 systemd.unit=rescue.target。
6. 文件权限详解
6.1 查看权限 – ls -l
bash
-rw-r--r--. 1 root root 1234 Mar 20 10:00 file.txt
第一列共10个字符:
| 位置 | 含义 |
|---|---|
| 1 | 文件类型(-普通文件,d目录,l软链接,b块设备,c字符设备) |
| 2-4 | 所有者(Owner)权限 |
| 5-7 | 所属组(Group)权限 |
| 8-10 | 其他人(Other)权限 |
权限字符含义:
| 字符 | 含义 | 数字值 |
|---|---|---|
r | 读(read) | 4 |
w | 写(write) | 2 |
x | 执行(execute) | 1 |
- | 无权限 | 0 |
6.2 权限对文件与目录的不同影响
| 权限 | 对普通文件的影响 | 对目录的影响 |
|---|---|---|
r | 可读取文件内容 | 可列出目录内容(ls) |
w | 可修改文件内容 | 可在目录内创建/删除/重命名文件 |
x | 可执行文件(脚本或程序) | 可进入目录(cd) |
重要结论 :
- 对目录没有
x权限,即使有r也无法进入,ls会报错。 - 对文件的操作是否成功,取决于文件本身 的权限,与所在目录的权限无关(但目录的
x是进入的前提)。
6.3 修改权限 – chmod
符号模式
bash
# 为所有者添加执行权限
chmod u+x file.sh
# 移除所属组的写权限
chmod g-w file.txt
# 设置所有者为读写执行,组为读写,其他人为只读
chmod u=rwx,g=rw,o=r file.txt
# 为所有用户添加执行权限
chmod a+x script.sh
数字模式(八进制)
每个权限组合对应一个数字:
bash
rwx = 4+2+1 = 7
rw- = 4+2+0 = 6
r-- = 4+0+0 = 4
三个权限位组合成三位数字:
bash
# 设置权限为 rwxr-xr-- (755)
chmod 755 file.sh
# 设置权限为 rw-r--r-- (644)
chmod 644 file.txt
6.4 修改所有者和所属组 – chown 和 chgrp
bash
# 修改文件所有者
chown zhangsan file.txt
# 同时修改所有者和所属组
chown zhangsan:wheel file.txt
# 仅修改所属组
chgrp developers file.txt
# 递归修改目录下所有文件
chown -R zhangsan:users /data
7. 特殊权限
Linux有三种特殊权限,用于突破普通权限限制。
7.1 SUID(Set User ID)
-
作用 :当可执行文件设置了SUID位,任何用户执行该文件时,进程将获得文件所有者 的权限。
-
典型应用 :
/usr/bin/passwd(所有者为root,普通用户可修改自己的密码)。 -
表示 :所有者权限中的
x变为s(小写表示有执行权限,大写表示无执行权限)。 -
设置 :
bashchmod u+s /path/to/file # 符号方式 chmod 4755 /path/to/file # 数字方式(4代表SUID)
7.2 SGID(Set Group ID)
-
作用于文件 :执行时获得文件所属组 的权限(类似SUID,但作用于组)。
-
作用于目录 :在该目录下创建的文件/子目录,自动继承该目录的所属组 。
-
表示 :组权限中的
x变为s。 -
设置 :
bashchmod g+s /path/to/dir # 符号方式 chmod 2755 /path/to/dir # 数字方式(2代表SGID)
7.3 SBIT(Sticky Bit)
-
作用 :对有写权限的目录设置后,只有文件所有者 和root 才能删除该目录下的文件(即使其他用户对该目录有写权限)。
-
典型应用 :
/tmp目录。 -
表示 :其他用户权限中的
x变为t。 -
设置 :
bashchmod o+t /tmp/testdir # 符号方式 chmod 1755 /tmp/testdir # 数字方式(1代表SBIT)
7.4 查看特殊权限示例
bash
ls -l /usr/bin/passwd
# 输出:-rwsr-xr-x. 1 root root 32648 ...
ls -ld /tmp
# 输出:drwxrwxrwt. 11 root root 4096 ...
8. 默认权限掩码 – umask
umask 决定了新建文件和目录的默认权限。它实际上是权限的减法 。
bash
# 查看当前 umask
umask
# 输出:0022 (通常只关注后三位)
默认规则:
- 文件:
666减去 umask - 目录:
777减去 umask
示例 :
- umask = 022:
- 文件默认:666 - 022 = 644(rw-r--r--)
- 目录默认:777 - 022 = 755(rwxr-xr-x)
- umask = 002:
- 文件:666 - 002 = 664(rw-rw-r--)
- 目录:777 - 002 = 775(rwxrwxr-x)
修改 umask (临时):
bash
umask 027 # 设置文件默认640,目录750
永久修改:编辑 /etc/profile 或 /etc/bashrc,找到 umask 设置并修改。
9. 访问控制列表 – ACL
当传统权限(所有者、组、其他人)无法满足复杂权限需求时,可以使用ACL为特定用户或组设置权限。
9.1 查看ACL
bash
getfacl file.txt
输出示例:
text
# file: file.txt
# owner: root
# group: root
user::rw-
user:zhangsan:rw-
group::r--
mask::rw-
other::r--
9.2 设置ACL
bash
# 为特定用户添加权限
setfacl -m u:zhangsan:rw file.txt
# 为特定组添加权限
setfacl -m g:developers:r-x /data
# 删除某个用户的ACL
setfacl -x u:zhangsan file.txt
# 删除所有ACL
setfacl -b file.txt
9.3 默认ACL(针对目录)
设置默认ACL后,在目录下新创建的文件会自动继承权限。
bash
# 设置目录默认ACL
setfacl -m d:u:zhangsan:rwx /shared
# 查看默认ACL
getfacl /shared
注意 :默认ACL会与mask权限进行与运算,实际生效权限不会超过mask。
9.4 ACL与权限优先级
ACL规则按顺序匹配,一旦匹配即停止:
- 如果用户是所有者,使用所有者权限。
- 否则,如果用户有具体的ACL条目,使用该条目。
- 否则,如果用户属于某个有ACL条目的组,使用该条目。
- 否则,使用其他用户权限。
10. 权限委派 – sudo
sudo 允许普通用户以其他用户(通常是root)的身份执行命令,而无需知道root密码。
10.1 配置 /etc/sudoers
使用 visudo 命令编辑(自动检查语法):
bash
visudo
常见配置格式:
text
# 允许用户zhangsan在任何地方执行任何命令
zhangsan ALL=(ALL) ALL
# 允许用户lisi执行特定命令,且无需密码
lisi ALL=(ALL) NOPASSWD: /bin/systemctl, /usr/bin/reboot
# 允许组wheel的所有成员执行任何命令
%wheel ALL=(ALL) ALL
语法说明 :
用户名或%组名主机名(通常为ALL)(用户):以哪个用户身份执行(默认ALL表示所有)命令:绝对路径,多个命令用逗号分隔,NOPASSWD:表示无需密码
10.2 使用 sudo
bash
sudo useradd newuser # 输入当前用户密码(根据配置)
sudo -l # 列出当前用户可执行的sudo命令
生产实践 :建议为所有运维人员创建普通用户,并赋予 sudo 权限,避免直接使用root。
总结
本篇系统学习了Linux用户管理与权限控制的方方面面:
- 用户管理 :
useradd、usermod、userdel,以及密码策略chage。 - 组管理 :
groupadd、groupmod、groupdel,主要组与附加组的区别。 - 文件权限 :rwx对文件与目录的不同意义,
chmod、chown的用法。 - 特殊权限 :SUID、SGID、SBIT 的应用场景与设置。
- 默认权限 :
umask控制新建文件/目录的初始权限。 - ACL :为特定用户或组设置额外权限。
- 权限委派 :通过
sudo赋予普通用户管理权限。
掌握这些知识,你就能在Linux系统中灵活控制用户访问,保障数据安全,并为团队协作提供坚实的安全基础。
下一篇,我们将进入进程管理 与服务控制 ,学习如何管理系统中的运行程序和服务。敬请期待!
练习建议 :
- 创建两个用户,分别测试文件权限和ACL的效果。
- 在
/tmp下创建一个目录,设置SGID位,验证新创建文件的所属组。 - 配置
sudo,让一个普通用户可以重启网络服务(systemctl restart network)而无需密码。 - 尝试用
chage设置一个用户密码策略:最小使用3天,最大使用60天,提前7天警告。
标题:RHCE认证考试学习笔记(四):用户管理与权限控制
作者:shuaiqijun
地址:https://shuaiqijun.com/articles/2026/03/23/1774229074081.html