理解 Sudoers 配置

LinuxBeginner
立即练习

简介

在 Linux 中,root 用户对系统拥有无限权限。但日常工作时直接以 root 身份登录并不安全。通常应使用 sudo,让普通用户以提升后的权限运行特定命令。

控制哪些用户可以使用 sudo 以及他们可以执行哪些操作的文件是 /etc/sudoers。这是 Linux 系统中最敏感的策略文件之一,因为它定义了被委派的管理权限。

管理该文件时必须格外谨慎。哪怕只有一个语法错误,也可能导致所有人(包括管理员)都无法访问系统。因此,绝不能使用普通文本编辑器直接编辑该文件,而应使用名为 visudo 的专用工具。

这是一个权限策略文件,而不仅仅是便利性配置。它定义了哪些用户可以借用管理权限、在什么条件下借用,以及可以执行哪些命令。

在本实验中,你将学习如何:

  1. 使用 visudo 安全地检查 sudoers 配置。
  2. 为用户授予管理权限。
  3. 验证这些权限是否正常生效。

检查当前权限

在修改配置之前,先确认当前状态。本实验已经创建了一个名为 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

总结

在本实验中,你学习了如何安全地管理用户权限。

要点:

  1. 安全第一:始终使用 visudo 编辑 /etc/sudoers,绝不要直接编辑该文件。
  2. 权限委派:无需共享 root 密码,也可以为指定用户授予 root 访问权限。
  3. 验证权限:添加新权限后,始终进行测试,确保权限按预期生效。

掌握 sudoers 配置后,你就能构建更安全的系统,让用户恰好拥有完成工作所需的权限——不多,也不少。