简介
在 Linux 中,root 用户对系统拥有无限权限。但日常工作时直接以 root 身份登录并不安全。通常应使用 sudo,让普通用户以提升后的权限运行特定命令。
控制哪些用户可以使用 sudo 以及他们可以执行哪些操作的文件是 /etc/sudoers。这是 Linux 系统中最敏感的策略文件之一,因为它定义了被委派的管理权限。
管理该文件时必须格外谨慎。哪怕只有一个语法错误,也可能导致所有人(包括管理员)都无法访问系统。因此,绝不能使用普通文本编辑器直接编辑该文件,而应使用名为 visudo 的专用工具。
这是一个权限策略文件,而不仅仅是便利性配置。它定义了哪些用户可以借用管理权限、在什么条件下借用,以及可以执行哪些命令。
在本实验中,你将学习如何:
- 使用
visudo安全地检查 sudoers 配置。 - 为用户授予管理权限。
- 验证这些权限是否正常生效。
检查当前权限
在修改配置之前,先确认当前状态。本实验已经创建了一个名为 alex 的普通用户。默认情况下,新用户没有管理权限。
检查 Sudoers 文件
使用 visudo 查看配置。该工具会锁定文件,并在保存前验证语法,从而避免因误操作导致系统无法访问。
这项验证功能正是 visudo 存在的原因。使用普通文本编辑器时,一个小小的拼写错误可能要等到文件保存后才会被发现,而此时 sudo 访问可能已经失效。
查看当前配置:
sudo visudo
你将看到用于定义权限的规则。例如:
root ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
在当前环境中,visudo 会使用 nano 编辑器打开文件。按 Ctrl+X 退出,不要修改任何内容。
验证当前用户没有访问权限
现在切换到用户 alex,尝试执行一项管理操作。
先切换到用户 alex:
su - alex
出现提示时输入 password。
然后尝试列出受限目录 /root 的内容:
sudo ls /root
出现提示时输入 password。
观察错误信息:
alex is not in the sudoers file. This incident will be reported.
这表明 alex 是普通用户,无法执行管理操作。
这就是安全的默认设置。在 Linux 安全管理中,先授予较少权限,再根据需要授予权限,是最小权限原则的一部分。
最后返回原始用户(labex):
exit
配置用户权限
要让 alex 能够以 root 身份运行命令,需要向 /etc/sudoers 文件添加一条规则。
先安全地打开该文件:
sudo visudo
滚动到文件末尾,或找到「User privilege specification」部分,然后添加以下行:
alex ALL=(ALL:ALL) ALL
规则说明:
alex:要授予权限的用户名。- 第一个
ALL:规则适用于来自任何 Host 的连接。 (ALL:ALL):该用户可以以任意 User(例如root)和任意 Group` 身份运行命令。- 最后的
ALL:该用户可以运行任何命令。
出于教学目的,这条规则的权限范围比较宽泛。在实际系统中,管理员通常会使用范围更小的 sudo 规则,只允许执行特定命令,而不是授予完全不受限制的访问权限。
最后保存并退出:
- 按
Ctrl+O,然后按Enter保存。 - 按
Ctrl+X退出。
如果输入了错误内容,visudo 会发出警告,从而避免保存损坏的配置。
验证更新后的权限
现在配置已经更新,alex 应该拥有完整的管理权限。下面验证这一点。
先切换到用户 alex:
su - alex
然后再次尝试执行特权命令:
sudo ls /root
如果出现提示,请输入 password。
观察结果。现在应该可以看到 /root 目录的内容(该目录可能为空,也可能包含少量实现文件),并且不会出现拒绝访问的错误。
snap
这表明你已经成功为用户 alex 提升了权限。
此时,alex 仍然不是默认的 root 用户。相反,alex 被授予了通过 sudo 请求提升后执行权限的能力。这种方式比直接以 root 身份登录更安全,也更便于审计。
最后退出 alex 会话:
exit
总结
在本实验中,你学习了如何安全地管理用户权限。
要点:
- 安全第一:始终使用
visudo编辑/etc/sudoers,绝不要直接编辑该文件。 - 权限委派:无需共享 root 密码,也可以为指定用户授予 root 访问权限。
- 验证权限:添加新权限后,始终进行测试,确保权限按预期生效。
掌握 sudoers 配置后,你就能构建更安全的系统,让用户恰好拥有完成工作所需的权限——不多,也不少。



