使用 USERID 执行 sudo - 恢复旧行为

使用 USERID 执行 sudo - 恢复旧行为

在运行 Ubuntu 18.04 的系统中,我可以以 root 身份运行以下命令:

 sudo -u \#2000 echo hi

这会以 UID 2000 的身份运行命令,即使 uid 2000 不存在在 passwd 文件中。当我在 Ubuntu 20.04 和 22.04 上尝试同样的事情时,我得到了一个错误

 sudo: unknown user: #2000

有人知道我该如何恢复旧的行为吗?我特别希望能够以密码文件中没有的用户权限运行脚本(在这种情况下,使用 wpcli 将与文件属于 uid 2000 的网站相关联的权限)

答案1

根据sudoers(5)runas_allow_unknown_id,此行为现在由选项控制:

 runas_allow_unknown_id
                   If enabled, allow matching of runas user and group IDs that are not
                   present in the password or group databases.  In addition to explicitly
                   matching unknown user or group IDs in a Runas_List, this option also
                   allows the ALL alias to match unknown IDs.  This flag is off by default.

                   This setting is only supported by version 1.8.30 or higher.  Older
                   versions of sudo always allowed matching of unknown user and group IDs.

因此,您可以添加Defaults runas_allow_unknown_id/etc/sudoers用于visudo安全地编辑该文件),然后sudo允许您像在旧版本(20.04 之前)中一样指定任意 UID。

请注意,恢复旧行为可能不安全,因为该设置是为了响应CVE-2019-19232CVE-2019-19234

PS 还请注意,sudo当 UID 指定的用户不存在(例如未在 中列出/etc/passwd)时,无法选择 GID,因此它使用与调用者进程相同的主 GID 和补充 GID 运行命令,这并不总是一个好主意:

# id
uid=0(root) gid=0(root) groups=0(root)
# sudo -u \#2000 id
uid=2000 gid=0(root) groups=0(root)
# 

我猜测sudo以所述方式使用可能也会带来其他安全隐患。

相关内容