Appearance
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 协议传输文件。
- 使用 SecureCRT 通过 SSH2 协议(端口 2222,参考第 6 章)以
- 权限要求:以
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 属于 wheel 和 devteam 组。
8.3.3 删除用户
删除用户及其家目录使用 userdel 命令。
bash
userdel -r testuser # 删除 testuser 及其家目录检查点 🔍:运行 ls /home 确认 testuser 家目录已删除,检查 /etc/passwd 确保用户条目已移除。
8.3.4 管理组
组管理用于组织用户权限,常用 groupadd 和 usermod 命令。
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 验证 🔧
完成用户和权限配置后,需验证操作是否生效。以下步骤以 testuser 或 root 用户执行:
检查用户信息:
bash
id testuser # 查看 testuser 的用户和组信息预期输出:显示 uid、gid 以及 groups(包含 wheel 和 devteam)。
验证 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 用户执行):
- 使用 SecureCRT 以
root用户登录 ZSLinux,创建用户testuser并设置密码。 - 将
testuser添加到wheel和devteam组,配置 sudo 权限(允许无密码运行dnf命令)。 - 创建
/tmp/testfile.txt,设置权限为rw-r--r--,并更改拥有者为testuser:devteam。 - 为
/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/dnf8.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 useradd、man chmod、man sudoers)。
