run0是一个安全的替代sudo的工具,集成到systemd中,允许以其他用户的身份运行进程,并在一个隔离的上下文中进行,并包含一组允许的属性白名单。
知名开发者和systemd的创建者Lennart Pottering最近推出了run0,这是一个新的实用程序,允许用户以其他用户的标识运行进程。run0定位为sudo程序的更安全替代品,它作为systemd 256的候选发布版中的一个附加功能,集成到systemd-run命令中。
run0的主要优势之一是,它消除了使用SUID标志的可执行文件的需要,而sudo通常使用该标志。在sudo中使用SUID标志会带来额外的风险,因为SUID进程继承了许多由非特权用户控制的执行上下文属性,比如环境变量、文件描述符、调度器选项和cgroup绑定。这些属性可能会被攻击者利用,而在诸如sudo等复杂SUID程序中仍然经常发现漏洞。
与使用SUID不同,run0要求系统管理器使用指定的用户ID启动一个shell或进程,并创建一个新的伪终端(PTY),并在当前终端(TTY)和它之间传输数据。这种行为更类似于使用ssh而不是传统的sudo运行。特权进程在一个由进程PID 1生成而不是由用户进程生成的隔离上下文中运行,即不继承用户环境的属性,除了转发$TERM环境变量。转发是通过一个明确允许的属性列表进行的,而不是试图禁止危险属性(即白名单的概念,而不是黑名单)。
Polkit用于授权和确定run0中的用户能力,并且不支持sudo使用的经典规则语言(/etc/sudoers)。运行具有其他权限的程序的功能内置在systemd-run中,并且run0命令被创建为指向systemd-run的符号链接,当使用时,提供类似于sudo的命令行界面。
run0的附加功能之一是通过在终端中设置红色背景并在窗口标题中添加红点来指示使用提升的权限。在使用其他权限终止执行后,点消失,背景恢复正常。此外,run0支持所有“systemd-run”选项,例如,“–property”参数,通过该参数可以为systemd服务设置任意设置(例如,“CPUWeight=200 MemoryMax=2G IPAccounting=yes”)。
这将在即将发布的Systemd 256版本中可用,计划于今年晚些时候发布。
有关详细信息,请参阅 Poettering 的帖子。