Linux 的新 run0 命令会在外运行 sudo 吗?
要点
- run0 是一个新的 systemd 命令,旨在取代 sudo,为命令提供提升的权限。
- run0 使用 systemd-run 作为后端,将进程作为瞬态、短期服务启动。
- run0 的安全优势非常引人注目,但在很长一段时间内它不会完全取代 sudo。
2024 年 4 月 24 日,Lennart Poettering 发布了一个名为 run0 的新 systemd 命令的描述。它是 sudo 的替代品。以下是您需要了解的有关最新 systemd 争议的信息。
须藤出了什么问题?
sudo 命令似乎一直存在。它实际上可以追溯到 20 世纪 80 年代。它允许您运行命令或程序,就像您是命令的所有者或命令组的成员一样。重要的是,如果命令的实际所有者具有提升的权限和能力,则该命令将以这些提升的权限运行。就好像他们的崇高特权是暂时授予你的。
默认情况下,您模拟的用户是超级用户 root。最初,sudo 代表“超级用户,执行”。当后来的开发允许您使用 sudo 来模拟任何用户时,情况发生了变化。它的名字现在的意思是“替换用户,做”,但它几乎总是用来模拟root。
为了使命令或应用程序能够由普通用户以提升的权限运行,需要在命令上设置 SUID 或 GUID 位或两者。当然,必须允许相关用户使用 sudo 命令。
提升或特权代码在调用用户的执行上下文中运行,因此它在旨在运行非特权代码的环境中运行。这本身就是一个安全问题。此外,如果编写的命令没有正确尊重其提升的权限,或者它没有彻底、正确地自行清理,则可能会出现其他漏洞。一种众所周知的攻击媒介利用编写不当或配置不当的 SUID 二进制文件来获取 root shell。
run0 有什么不同之处
run0 命令本身并不是一个新命令,它是调用现有命令的新方法。它是一个指向长期存在的 systemd 组件(称为 systemd-run)的符号链接。顾名思义,它运行或启动其他进程。 run0 是该命令的前端。
run0 启动的进程作为暂时的、短期的服务运行。当您的命令返回到终端时,您就回到了普通用户的身份。没有像 sudo 那样的身份验证“宽限期”。如果您使用 sudo 并输入密码,则后续在同一终端中且在 sudo 超时时间内使用 sudo 不需要身份验证。超时时间因发行版而异,但常见值为 5 到 15 分钟。使用 run0,您每次都进行身份验证。
另一个区别是身份验证由 polkit(systemd 应用程序级策略工具包)处理。如果可能,此身份验证与运行目标命令的会话无关。提升的命令在分叉的伪终端中运行,因此它是封装和隔离的。除了 $TERM 环境变量之外,实际上用户的执行上下文中的任何内容都不可用于启动的命令。同样,身份验证凭据不会传递到已启动命令的执行上下文中。
以这种方式提升和执行的命令不需要设置其 SUID 或 GUID 位,也不需要对其内部清理进行合规和彻底的处理。这一切都由 run0 处理。
使用 sudo,您可以将普通用户变成不受限制的超级用户,也可以通过指定他们可以使用 sudo 的命令来授予他们有限的超级用户权限。您也可以使用 polkit 实现这种类型的粒度。
使用run0
要使用 run0,您需要运行 systemd 版本 256,或者更好的是,已修复错误的版本 256.1。在撰写本文时,版本 256.1 正在作为更新推出,某些 Linux 发行版的全新安装将 256.1 作为标准版本。您可以使用此命令检查您的版本。
systemctl --version
使用 run0 与使用 sudo 几乎相同。您可以在要启动的命令前加上“run0”,并提供您的密码。
run0 ls
如果您使用的是图形桌面环境,则会出现一个对话框,提示您输入密码。
终端文本背景会改变颜色,以强制显示您正在使用升级权限的消息。请注意,命令完成后,它会返回到通常的背景颜色。
您可以使用 --background 选项关闭背景颜色,或将其更改为您选择的 ANSI 颜色组合。
要在蓝色背景上查看白色文本,请使用此 ANSI 序列。
run0 --background=“44;1” ls
要运行相同的命令而不使用颜色突出显示,请省略 ANSI 序列,但请确保保留“=”符号。
run0 --background= ls
键入不带命令参数的 run0 可以有效地以 root 身份登录。
run0
请注意命令提示符中的更改。您可以通过键入 exit 并按 Enter,或按 Ctrl+D 返回到常规用户状态。
如果您在没有桌面环境的 Linux 计算机上使用 run0,终端窗口中会提示您输入密码。
run0 会取代 sudo 吗?
随着时间的推移,命令确实会被取代。事实上,sudo 取代了它更古老的前身 su,后者自 1971 年以来一直是类 Unix 操作系统的一部分。但没有人期望 run0 突然出现并取代 sudo。 sudo 根深蒂固,无法快速消失。
乍一看,安全优势非常引人注目,但是,如果不从计算机中删除 sudo 和 SUID 二进制文件,仅采用 run0 不会对您的安全状况产生太大影响。这就像在你现有的有缺陷的门旁边安装一扇更好的门。
“每次、始终进行身份验证”的要求可能会受到用户群的一些抵制,即使这是一种更安全的工作方式。讽刺的是,polkit(身份验证模块)使用 SUID 二进制文件,并且有其自身的安全问题。
这似乎正是对双向事物的定义。这对 polkit 来说是一个挑衅,对 SUID 二进制文件来说则是一记耳光。
即便如此,我仍然可以看到将来 run0 成为新标准,而 sudo 尚未被完全取代。但也许会被降级到较低的位置。
run0 可以说是进行权限升级的更好方法,但 sudo 已融入其用户的 Linux 心理中。即使当我想到 run0 时,我也会发现自己在输入 sudo。
也许我们应该全部使用别名 sudo 来指向 run0?