run0是sudo的安全替代品,集成到systemd中,它允许以其他用户的身份运行进程,并具有独立的上下文和允许属性的白名单。
著名的systemd开发者和创建者Lennart Pottering最近推出了run0,这是一种新的实用程序,允许用户在其他用户的标识符下运行进程。作为流行的sudo程序的更安全的替代品,run0被实现为systemd run命令的附加组件,并包含在systemd 256的候选版本中。
run0的一个主要优点是,它消除了对带有SUID标志的可执行文件的需要,SUID标志是sudo常用的。在sudo中使用SUID标志会带来额外的风险,因为SUID进程继承的执行上下文包括许多由无特权用户控制的属性,如环境变量、文件描述符、调度程序选项和cgroup绑定。这些属性可能会被攻击者利用,而且在sudo等复杂的SUID程序中仍会定期发现漏洞。
run0不使用SUID,而是要求系统管理器使用指定的用户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中提供。
经由Mastodon