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

  |   0 评论   |   0 浏览

大家好,欢迎回到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
3UID(用户ID,0代表root)
4GID(主要组的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
3GID
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 查看用户信息 – idwhoami

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恢复:

  1. 重启系统,在GRUB菜单按 e 编辑启动项。

  2. 在以 linux 开头的行末尾添加 rd.break,按 Ctrl+x 启动。

  3. 进入紧急救援模式,重新挂载根文件系统为读写:
    bash

    mount -o remount,rw /sysroot
    chroot /sysroot
    
  4. 修改root密码:
    bash

    passwd root
    
  5. 创建重置SELinux上下文的文件:
    bash

    touch /.autorelabel
    
  6. 退出并重启:
    bash

    exit
    exit
    

注意 :RHEL 9 中单用户模式可能被保护,需在GRUB中添加 singlesystemd.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 修改所有者和所属组 – chownchgrp

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(小写表示有执行权限,大写表示无执行权限)。

  • 设置
    bash

    chmod u+s /path/to/file   # 符号方式
    chmod 4755 /path/to/file  # 数字方式(4代表SUID)
    

7.2 SGID(Set Group ID)

  • 作用于文件 :执行时获得文件所属组 的权限(类似SUID,但作用于组)。

  • 作用于目录 :在该目录下创建的文件/子目录,自动继承该目录的所属组

  • 表示 :组权限中的 x 变为 s

  • 设置
    bash

    chmod g+s /path/to/dir     # 符号方式
    chmod 2755 /path/to/dir    # 数字方式(2代表SGID)
    

7.3 SBIT(Sticky Bit)

  • 作用 :对有写权限的目录设置后,只有文件所有者root 才能删除该目录下的文件(即使其他用户对该目录有写权限)。

  • 典型应用/tmp 目录。

  • 表示 :其他用户权限中的 x 变为 t

  • 设置
    bash

    chmod 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规则按顺序匹配,一旦匹配即停止:

  1. 如果用户是所有者,使用所有者权限。
  2. 否则,如果用户有具体的ACL条目,使用该条目。
  3. 否则,如果用户属于某个有ACL条目的组,使用该条目。
  4. 否则,使用其他用户权限。

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用户管理与权限控制的方方面面:

  1. 用户管理useraddusermoduserdel,以及密码策略 chage
  2. 组管理groupaddgroupmodgroupdel,主要组与附加组的区别。
  3. 文件权限 :rwx对文件与目录的不同意义,chmodchown 的用法。
  4. 特殊权限 :SUID、SGID、SBIT 的应用场景与设置。
  5. 默认权限umask 控制新建文件/目录的初始权限。
  6. ACL :为特定用户或组设置额外权限。
  7. 权限委派 :通过 sudo 赋予普通用户管理权限。

掌握这些知识,你就能在Linux系统中灵活控制用户访问,保障数据安全,并为团队协作提供坚实的安全基础。

下一篇,我们将进入进程管理服务控制 ,学习如何管理系统中的运行程序和服务。敬请期待!


练习建议

  1. 创建两个用户,分别测试文件权限和ACL的效果。
  2. /tmp 下创建一个目录,设置SGID位,验证新创建文件的所属组。
  3. 配置 sudo,让一个普通用户可以重启网络服务(systemctl restart network)而无需密码。
  4. 尝试用 chage 设置一个用户密码策略:最小使用3天,最大使用60天,提前7天警告。

标题:RHCE认证考试学习笔记(四):用户管理与权限控制
作者:shuaiqijun
地址:https://www.shuaiqijun.com/articles/2026/03/23/1774229074081.html