Skip to content

8. 用户与权限管理 🚀

本章节指导在 RHEL 8.10(主机名 ZSLinux)上以 root 用户使用 SecureCRT 进行用户和文件权限管理,配合 SecureFX 传输配置文件。内容涵盖用户管理(添加、修改、删除用户,组管理)、sudo 配置(包括 sudoers 文件、轮组管理和日志审计)以及文件权限管理(设置权限、更改所有者、特殊权限)。文档适合初学者快速上手和运维人员日常维护,所有操作在 ZSLinux 环境中测试,确保实验一致性。


8.1 前提条件 ✅

在开始用户与权限管理之前,请确保满足以下条件:

  • 系统环境:RHEL 8.10 已正确安装(参考第 1 章),主机名设置为 ZSLinux
  • 远程工具
    • 使用 SecureCRT 通过 SSH2 协议(端口 2222,参考第 6 章)以 root 用户登录系统。
    • 使用 SecureFX 通过 SFTP 协议传输文件。
  • 权限要求:以 root 用户身份操作。
  • 网络配置:确保 SSH 服务 (sshd) 已启用且端口 2222 可访问。

注意 ⚠️:请提前备份重要文件和配置文件(如 /etc/sudoers/etc/passwd),以防操作失误导致系统问题。

提示 💡:虽然本文档以 root 用户操作,生产环境中推荐使用 sudo 提升安全性,具体配置见下节。


8.2 sudo 配置 🛡️

在生产环境中,sudo 是限制 root 权限、提升安全性的关键工具。本节介绍 sudo 配置,包括编辑 sudoers 文件、使用轮组(wheel 组)以及日志审计。以下操作以 root 用户执行。

8.2.1 编辑 sudoers 文件

使用 visudo 编辑 /etc/sudoers 文件,确保语法正确。

bash
visudo  # 打开 /etc/sudoers 文件进行编辑

常用配置示例:

text
# 授予 testuser 所有权限
testuser ALL=(ALL) ALL

# 限制 testuser 仅执行特定命令(如 dnf)
testuser ALL=(ALL) /usr/bin/dnf

# 无需密码执行 sudo(谨慎使用)
testuser ALL=(ALL) NOPASSWD: ALL

注意 ⚠️:编辑 /etc/sudoers 时,必须使用 visudo 检查语法,否则可能导致 sudo 功能失效。

8.2.2 使用轮组(wheel group)

RHEL 默认通过 wheel 组授予 sudo 权限,可添加用户到该组:

bash
usermod -aG wheel testuser  # 将 testuser 添加到 wheel 组

确认 /etc/sudoers 中启用 wheel 组权限(默认存在):

text
%wheel ALL=(ALL) ALL

提示 💡:使用 wheel 组简化 sudo 权限管理,适合团队协作。

8.2.3 日志审计

配置 sudo 日志以监控使用情况:

bash
visudo  # 编辑 /etc/sudoers

添加以下行到 /etc/sudoers 或相应的配置文件:

text
Defaults logfile="/var/log/sudo.log"

查看日志:

bash
tail -f /var/log/sudo.log  # 查看 sudo 操作日志

检查点 🔍:以 testuser 身份运行 sudo -l 检查可用权限,或运行 sudo dnf update -y 测试权限生效。

注意 ⚠️:

  • 避免滥用 NOPASSWD 选项,以免降低安全性。
  • 定期审计 /var/log/sudo.log 检测异常操作。
  • 可将自定义规则存放在 /etc/sudoers.d/testuser 文件中,便于管理。

8.3 用户管理 🧑‍💼

用户管理包括创建、修改、删除用户以及管理用户组。以下操作以 root 用户直接执行。

8.3.1 添加用户

提示 💡:使用 useradd 创建用户时,-m 参数会自动生成用户家目录。

bash
useradd -m testuser  # 创建用户 testuser 并生成家目录
passwd testuser      # 设置 testuser 的密码

检查点 🔍:运行 ls -ld /home/testuser 确认家目录存在,检查 /etc/passwd 中是否包含 testuser 条目。

8.3.2 修改用户

修改用户属性(如添加至组)使用 usermod 命令。

bash
usermod -aG wheel testuser    # 将 testuser 添加到 wheel 组
usermod -aG devteam testuser  # 将 testuser 添加到 devteam 组

注意 ⚠️:-aG 参数确保追加组而非覆盖现有组,否则用户可能丢失其他组成员身份。

检查点 🔍:运行 groups testuser 确认 testuser 属于 wheeldevteam 组。

8.3.3 删除用户

删除用户及其家目录使用 userdel 命令。

bash
userdel -r testuser  # 删除 testuser 及其家目录

检查点 🔍:运行 ls /home 确认 testuser 家目录已删除,检查 /etc/passwd 确保用户条目已移除。

8.3.4 管理组

组管理用于组织用户权限,常用 groupaddusermod 命令。

bash
groupadd devteam            # 创建 devteam 组
usermod -aG devteam testuser  # 将 testuser 添加到 devteam 组

检查点 🔍:运行 groups testuser 确认 testuser 属于 devteam 组。


8.4 文件权限管理 📂

文件权限管理包括设置读写执行权限、更改所有者和组,以及配置特殊权限(如 setuid、setgid 和粘滞位)。以下操作以 root 用户执行。

8.4.1 设置文件权限

使用 chmod 命令设置文件或目录权限,支持数字表示法(如 644)和符号表示法(如 u+x)。

bash
touch /tmp/testfile.txt         # 创建测试文件
chmod 644 /tmp/testfile.txt     # 设置权限为 rw-r--r--
chmod u+x /tmp/testfile.txt     # 为文件拥有者添加执行权限

提示 💡:权限数字表示法中,4=读、2=写、1=执行,如 644 表示拥有者读写(6=4+2),其他用户只读(4)。

检查点 🔍:运行 ls -l /tmp/testfile.txt 确认权限为 -rwxr--r--

8.4.2 更改文件所有者

使用 chown 命令更改文件或目录的拥有者和组。

bash
chown testuser /tmp/testfile.txt            # 将文件拥有者改为 testuser
chown testuser:devteam /tmp/testfile.txt    # 将文件拥有者和组改为 testuser:devteam

检查点 🔍:运行 ls -l /tmp/testfile.txt 确认拥有者和组是否正确。

8.4.3 配置特殊权限

特殊权限包括 setuid(以文件拥有者权限运行)、setgid(新文件继承目录组)和粘滞位(限制目录文件删除)。

设置 setuid:

bash
chmod u+s /tmp/testfile.txt  # 为 testfile.txt 设置 setuid

检查点 🔍:运行 ls -l /tmp/testfile.txt 确认权限显示为 -rwsr--r--(s 表示 setuid)。

设置 setgid:

bash
mkdir /tmp/shareddir        # 创建共享目录
chmod g+s /tmp/shareddir    # 为 shareddir 设置 setgid

检查点 🔍:运行 ls -ld /tmp/shareddir 确认权限显示为 drwxr-sr-x(s 表示 setgid)。

设置粘滞位:

bash
chmod o+t /tmp/shareddir  # 为 shareddir 设置粘滞位

检查点 🔍:运行 ls -ld /tmp/shareddir 确认权限显示为 drwxr-xr-t(t 表示粘滞位)。

注意 ⚠️:setuid 和 setgid 仅对可执行文件或目录生效,粘滞位通常用于多人共享目录(如 /tmp)。


8.5 验证 🔧

完成用户和权限配置后,需验证操作是否生效。以下步骤以 testuserroot 用户执行:

检查用户信息:

bash
id testuser  # 查看 testuser 的用户和组信息

预期输出:显示 uid、gid 以及 groups(包含 wheeldevteam)。

验证 sudo 权限:

bash
su - testuser           # 切换到 testuser
sudo dnf update -y      # 测试 sudo 权限

检查点 🔍:确认 sudo 命令执行无报错。

检查文件权限和所有者:

bash
ls -l /tmp/testfile.txt   # 查看文件权限和所有者
ls -ld /tmp/shareddir     # 查看目录权限

预期输出:

  • 文件:-rwxr--r-- testuser devteam
  • 目录:drwxr-sr-t(含 setgid 和粘滞位)

验证特殊权限:

bash
touch /tmp/shareddir/newfile.txt    # 在共享目录中创建文件
ls -l /tmp/shareddir/newfile.txt    # 检查新文件的组

预期输出:新文件应继承 devteam 组。

常见问题及解决 ❓:

  • 用户无法登录:检查密码是否设置(passwd testuser)或 SSH 配置(参考第 6 章)。
  • sudo 失败:确认用户是否在 wheel 组或 /etc/sudoers 配置正确。
  • 权限设置失败:检查是否以 root 用户身份操作。
  • 特殊权限无效:确认文件是否为可执行文件或目录是否正确配置。

8.6 实践任务 🛠️

通过以下任务巩固用户与权限管理技能(以 root 用户执行):

  1. 使用 SecureCRT 以 root 用户登录 ZSLinux,创建用户 testuser 并设置密码。
  2. testuser 添加到 wheeldevteam 组,配置 sudo 权限(允许无密码运行 dnf 命令)。
  3. 创建 /tmp/testfile.txt,设置权限为 rw-r--r--,并更改拥有者为 testuser:devteam
  4. /tmp/shareddir 设置 setgid 和粘滞位,验证新文件是否继承 devteam 组。

提示 💡:按顺序执行任务,并使用验证命令检查每一步结果。


8.7 自测问题 📝

以下问题帮助检验对用户与权限管理的理解:

问题:如何创建用户并设置密码?
答案:

bash
useradd -m testuser  # 创建用户并生成家目录
passwd testuser      # 设置密码

问题:如何设置文件权限为 rw-r--r-- 并更改所有者?
答案:

bash
chmod 644 文件名                # 设置权限
chown testuser:devteam 文件名   # 更改所有者

问题:如何为目录设置粘滞位并验证?
答案:

bash
chmod o+t 目录名  # 设置粘滞位
ls -ld 目录名     # 验证,确认显示 drwxr-xr-t

问题:如何配置 sudo 允许用户无密码运行特定命令?
答案:

bash
visudo  # 编辑 /etc/sudoers
# 添加:
# testuser ALL=(ALL) NOPASSWD: /usr/bin/dnf

8.8 补充说明 📚

  • 配置文件备份:操作前建议备份 /etc/passwd/etc/group/etc/sudoers 文件。
  • 权限安全:避免为普通用户授予过多权限,优先使用 wheel 组管理 sudo 权限。
  • 谨慎使用 NOPASSWD 选项,仅限于必要场景。

日志监控:检查 /var/log/secure/var/log/sudo.log 以排查用户登录或权限问题。
sudo 最佳实践:使用 /etc/sudoers.d 目录存放自定义规则(如 /etc/sudoers.d/testuser)。
定期更新 sudo 软件包:

bash
dnf update sudo -y  # 以 root 执行

提示 💡:如需进一步学习,参考 RHEL 官方文档或 man 手册(如 man useraddman chmodman sudoers)。

采用 CC BY-NC-ND 4.0 许可。欢迎邮件反馈(zslinux@qq.com)