root
100%

用户管理 · 第 2 课

root

学习 su、sudo 和 sudoers 策略如何提供对特权身份的受控访问。

传统上名为 root 的账户拥有 UID 0,并在其安全上下文中拥有广泛权限。日常工作应使用非特权账户,只有为了自己理解的特定管理目的才提升权限。

使用 su 以另一用户身份启动 shell

su 表示 substitute user,它会以另一个账户的身份启动 shell 或命令。不指定用户名时,默认目标是 root:

$ su

认证由 PAM 和本地策略控制。系统可能要求目标账户的密码、限制哪些人可以使用 su,也可能锁定 root 密码。不要假设知道密码就是唯一条件。

普通 su 会更改身份,同时更多地保留当前环境。su - USER(也写作 su --login USER)会启动登录式 shell,并初始化更接近目标账户全新登录的环境:

$ su - operator

完成目标用户特定的工作后,应退出这个子 shell。

哪个命令会请求以用户 operator 身份启动登录式 shell?

使用 sudo 运行特定命令

sudo COMMAND 会请求策略授权,以目标用户身份运行一个命令,默认目标通常是 root。使用 -u USER 可请求其他目标:

$ sudo -u postgres id

这并不表示请求一定会获准。Sudo 策略控制调用用户、主机、目标身份、命令和其他条件。根据配置,认证可能使用调用用户的密码、其他机制,或者不显示提示。

在可行时,优先提升一个范围明确的管理命令,而不是开启长期存在的特权 shell。较小的范围能降低意外命令在提升权限下运行的可能性。

sudo -u postgres id 请求什么?

避免持续存在的特权 Shell

策略允许时,su -sudo -ssudo -i 等命令可以创建特权 shell。在退出前,该 shell 中之后的每个命令都可能具有提升后的影响。路径错误、未经审查的脚本和 shell 展开都会变得更加危险。

审计行为取决于配置。sudo 通常记录调用,但一次已记录的 shell 启动不会自动提供在该 shell 中输入的每个命令的完整记录。Shell 历史、系统审计和 sudo I/O 日志是各自拥有独立策略的不同机制。

为什么长期存在的 root shell 比一次提升一个已理解命令的风险更高?

审查 sudo 授权

运行 sudo -l,列出当前账户在活动策略下可以请求的操作:

$ sudo -l

请审查命令路径、获准的目标用户和参数限制。看起来范围较广的规则,也不应被视为执行无关工作的许可。

哪个命令会列出当前调用用户可用的 sudo 权限?

安全编辑 sudoers 策略

默认 sudo 策略通常读取 /etc/sudoers,也可能包含 /etc/sudoers.d/ 下的文件。还可能存在其他策略来源。其语法控制的内容远不只是简单的用户和组列表。

请使用 visudo 修改策略,因为它会锁定文件,并在安装前验证语法:

$ sudo visudo

对于 drop-in 文件,请指定其确切路径:

$ sudo visudo -f /etc/sudoers.d/application-admins

不要使用普通重定向或未经验证的编辑器流程编辑 sudoers。语法或权限错误可能导致管理访问失效。远程更改授权时,应保留另一条经过验证的恢复路径。

应使用哪个工具编辑并检查主要 sudoers 策略的语法?

要在受控环境中练习委派管理,可以尝试以下动手实验:

  1. 在 Linux 中配置用户账户和 Sudo 权限 - 练习实施密码策略、锁定和解锁用户账户、保护 root 账户及授予管理权限,这些都直接关系到超级用户访问管理。

课程已完成

你已完成 root

现在,你可以区分身份切换和受策略控制的命令委派。

  • 只有确实需要目标登录 shell 时才使用 su - USER

  • 使用 -u USER 请求特定 sudo 目标。

  • 尽量缩短停留在特权 shell 中的时间。

  • 使用 sudo -l 审查有效 sudo 规则。

  • 只通过 visudo 编辑 sudoers 策略。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
下一节
返回 用户管理