简介
在 Linux 系统中,管理用户权限和访问控制是系统管理与安全的基础。sudo 是「superuser do」(以超级用户身份执行)的缩写。授权用户可以通过 sudo 以更高权限执行命令,通常使用超级用户或 root 账户的权限。
本实验将带你了解如何在 Linux 环境中为用户授予和限制权限。你将学习如何将用户添加到 sudo 组,使他们能够执行管理任务;还将学习如何将他们的权限限制在特定命令上。妥善控制敏感操作的访问权限,是维护系统安全的重要技能。
用户管理与 sudo 基础
在本步骤中,你将了解 Linux 用户管理和 sudo 命令的基础知识。你将创建一个新用户,并学习如何为该用户授予管理权限。
什么是 sudo?
sudo 命令允许授权用户以另一个用户的安全权限执行命令,通常是超级用户(root)的权限。这样,你无需登录 root 用户账户也能执行管理任务。这是公认的安全最佳实践。
创建新用户
先创建一个新用户账户。打开终端并执行以下命令:
sudo adduser trusted_advisor
系统会提示你为新用户设置密码,并填写一些可选信息。在本实验中,你可以设置一个简单的密码,例如 password123,其他字段留空,直接按 Enter 键即可。
输出应类似于:
Adding user `trusted_advisor' ...
Adding new group `trusted_advisor' (1001) ...
Adding new user `trusted_advisor' (1001) with group `trusted_advisor' ...
Creating home directory `/home/trusted_advisor' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for trusted_advisor
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
检查用户信息
检查 /etc/passwd 文件中的内容,确认用户是否创建成功:
grep trusted_advisor /etc/passwd
输出中应包含一行该用户的信息。
授予 sudo 权限
要授予用户 sudo 权限,需要将该用户添加到 sudo 组。在 Ubuntu 中,sudo 组的成员可以使用 sudo 命令。执行以下命令:
sudo usermod -aG sudo trusted_advisor
此命令会将用户 trusted_advisor 添加到 sudo 组中:-a 表示追加,-G sudo 指定用户组。之后,该用户就可以使用管理权限执行命令。
验证 sudo 访问权限
要验证新用户是否拥有 sudo 访问权限,可以切换到该用户账户,并尝试列出 /root 目录的内容。该目录通常只有 root 用户才能访问:
su - trusted_advisor
出现提示时,输入你为该用户设置的密码。然后执行:
sudo ls /root
首次使用 sudo 时,系统会再次提示你输入密码。输入密码后,你应该能看到 /root 目录的内容,这表示该用户拥有 sudo 权限。
最后,退出 trusted_advisor 用户会话,返回原来的用户账户:
exit
使用 sudoers 文件限制 sudo 访问权限
在本步骤中,你将学习如何使用 sudoers 文件,将用户的 sudo 权限限制为特定命令。这体现了最小权限原则:用户只应拥有完成任务所需的最低权限。
了解 sudoers 文件
/etc/sudoers 文件用于控制哪些用户可以使用 sudo 命令,以及他们可以运行哪些命令。不要使用普通文本编辑器直接编辑此文件,因为语法错误可能会导致你无法访问系统。应始终使用 visudo 命令;它会在保存前检查语法错误。
移除宽泛的组权限
匹配到的 sudo 规则会合并生效。添加针对特定命令的规则,不会取消 sudo 组已经授予的全部权限。请在原来的 labex 会话中先移除这项宽泛权限:
sudo deluser trusted_advisor sudo
测试时,请使用新的 su - trusted_advisor 会话,以便应用更新后的组成员身份。
编辑 sudoers 文件
使用 visudo 命令安全地编辑 sudoers 文件:
sudo EDITOR=vim visudo
此命令会明确使用 Vim 打开文件,因此下面的编辑和保存按键操作适用于该编辑器。按 G 跳到文件末尾,再按 o 新建一行并进入插入模式。
了解 sudoers 语法
sudoers 文件中 sudo 条目的基本语法如下:
user_or_group host=(run_as_user:run_as_group) NOPASSWD: commands
其中:
user_or_group:此规则适用的用户或组host:此规则适用的主机名(通常为 ALL)run_as_user:命令将以哪个用户身份执行(仅允许以 root 身份执行时使用root,允许以任意用户身份执行时使用ALL)run_as_group:命令将以哪个组身份执行(可以省略)NOPASSWD:可选标签,允许执行命令时不输入密码commands:允许使用 sudo 执行的特定命令
添加受限的 sudo 访问权限
滚动到文件末尾,添加以下行,允许 trusted_advisor 不输入密码,只运行 cp 和 mv 命令:
trusted_advisor ALL=(ALL) NOPASSWD: /bin/cp, /bin/mv
此外,还要单独添加以下行,以便在此容器中启用专用的 sudo 日志。此容器不提供 /var/log/auth.log:
Defaults logfile="/var/log/sudo.log"
按 Esc,输入 :wq,再按 Enter 保存并退出 Vim。如果 visudo 报告语法错误,按 e 重新编辑并修正。若要放弃在 Vim 中所做的更改,按 Esc,输入 :q!,再按 Enter。
这只是命令匹配练习:允许 cp 或 mv 以 root 权限不受限制地运行,可能会覆盖敏感文件,因此不适合作为生产环境中的安全限制。
测试受限的 sudo 访问权限
现在测试 sudo 访问限制是否按预期生效。先返回实验工作目录并创建一个测试文件:
cd /home/labex/project
echo "This is a test file" > important_file.txt
然后切换到 trusted_advisor 用户:
su - trusted_advisor
出现提示时输入密码。
尝试将文件复制到 root 目录。此操作应该允许执行:
sudo cp /home/labex/project/important_file.txt /root/
此命令应该成功执行,且不会要求输入密码。
接下来,尝试运行不在允许列表中的命令,例如 cat:
sudo -n cat /root/important_file.txt
由于 cat 不在允许列表中,此命令必须失败。-n 选项会阻止系统提示输入密码;拒绝信息可能会提示需要密码,也可能会提示不允许执行该命令。命令不得输出文件内容。
检查复制结果前,先退出受限用户会话,因为 ls 也不在允许执行的命令列表中:
exit
以 labex 用户身份验证文件是否已复制:
sudo ls /root/
输出中应显示 important_file.txt。
删除测试文件
清理时,删除测试文件:
sudo rm /home/labex/project/important_file.txt /root/important_file.txt
了解 sudo 日志和安全注意事项
在本步骤中,你将了解 sudo 日志记录和安全最佳实践。监控 sudo 使用情况有助于维护安全和进行审计。
sudo 日志记录
用户使用 sudo 执行命令时,相关操作会记录到日志中。这些记录可用于安全监控和故障排查。
启用了系统日志服务的 Ubuntu 安装通常使用 /var/log/auth.log。此容器使用第 2 步配置的专用日志文件。以 labex 用户身份检查近期的 sudo 活动:
sudo tail -n 10 /var/log/sudo.log
此命令会显示最近 10 条与 sudo 相关的日志记录。输出中应包含时间戳、用户名以及通过 sudo 执行的命令。
sudo 安全最佳实践
管理 sudo 权限时,可遵循以下最佳实践:
最小权限原则:用户只应拥有完成任务所需的最低权限。
指定具体命令:不要授予完整的 sudo 访问权限,而应明确指定用户可以运行哪些命令。
要求输入密码:对于敏感操作,应确保用户使用 sudo 时必须输入密码。
定期审计:定期检查 sudo 日志和 sudoers 文件,确认配置正确。
移除不再需要的权限:用户不再需要提升权限时,应及时将其从 sudo 组中移除。
移除 sudo 访问权限
在第 2 步中,你已经将 trusted_advisor 从 sudo 组中移除。要撤销剩余的特定命令访问权限,还需删除对应规则:
sudo EDITOR=vim visudo
按 Esc,输入 /^trusted_advisor,再按 Enter 查找该规则。按 dd 删除整行:
trusted_advisor ALL=(ALL) NOPASSWD: /bin/cp, /bin/mv
保留 Defaults logfile 这一行。输入 :wq,再按 Enter 保存并退出。检查用户的组成员身份:
groups trusted_advisor
输出中不应包含 sudo。
测试撤销后的 sudo 访问权限
验证该用户是否已无法使用 sudo 执行命令:
su - trusted_advisor
出现提示时输入密码。
尝试使用 sudo 运行命令:
sudo -n ls /root
此时应看到 trusted_advisor is not in the sudoers file。该命令必须执行失败。
退出 trusted_advisor 用户会话:
exit
恢复 sudo 访问权限
在本实验中,将该用户重新添加到 sudo 组:
sudo usermod -aG sudo trusted_advisor
验证该用户是否已重新加入 sudo 组:
groups trusted_advisor
输出的组列表中现在应包含「sudo」。
总结
在本实验中,你学习了 Linux 用户管理和权限控制的基本方法,并亲自练习了以下概念和操作:
创建用户:学习使用
adduser命令创建新用户账户。授予 sudo 权限:学习将用户添加到 sudo 组,以赋予他们管理权限。
限制 sudo 访问权限:练习使用 sudoers 文件将用户的 sudo 访问权限限制在特定命令上,从而落实最小权限原则。
sudo 日志记录与监控:了解 sudo 活动如何记录到日志中,以及监控日志对安全的重要性。
管理 sudo 访问权限:学习根据需要为用户添加或移除 sudo 权限。
这些技能是 Linux 系统管理和安全的基础。妥善管理用户权限,可以让用户访问完成工作所需的资源,同时维护系统的完整性和安全性。



