有“反向 sudo”吗?

有“反向 sudo”吗?

假设我有一个脚本,它将在具有 root 权限的各种计算机上执行,但我想在没有 root 的情况下执行该脚本中的某些命令。

那可能吗?

答案1

两个都susudo可以做到这一点。他们以另一个用户的身份运行命令;默认情况下,“另一个用户”是 root,但它可以是任何用户。例如,

sudo -u www-data ls

ls将以用户身份运行www-data


然而...

通常的方法是以调用用户身份运行脚本并用于sudo需要它的命令。sudo缓存凭据,因此它最多应该提示一次。

答案2

sudo导出环境变量SUDO_COMMANDSUDO_GIDSUDO_UIDSUDO_USER

您可以使用SUDO_USERSUDO_UID返回调用用户:

sudo -u "$SUDO_USER" an_unprivileged_command

答案3

sudosu是具有更好访问控制的增强版本。如果您已经以 身份运行rootsu则可以毫不费力地执行此操作:

#!/bin/sh -e
echo -n "Script User:          " && id -un
echo -n "Other user:           " && su blrfl -c "id -un"
echo -n "Back to script user:  " && id -un

运行时,你会得到这个:

Script User:          root
Other user:           blrfl
Back to script user:  root

答案4

我同意亚历克斯·P的回答您通常应该以非 root 身份运行,并且仅对需要它的命令调用 sudo。白名单总是比黑名单更安全。

除了 AlexP 的回答之外:您可能希望sudo在脚本的最顶部调用,以确保在意识到用户不允许运行之前不会执行大量操作sudo,并创建一个损坏的状态。因此,我建议将以下内容放在sudo有时需要的脚本顶部:

#!/bin/bash

sudo true || exit 1

# … other code …

这将立即要求输入密码(如果需要)并在失败时中止执行脚本sudo

相关内容