如何在脚本中模仿“sudo su - user”?

如何在脚本中模仿“sudo su - user”?

我需要将我的应用程序部署到lovelyplace织物脚本。不幸的是,服务器的设置很糟糕,但我对此无能为力 - 我必须忍受它。

我可以使用一个非 root 用户来处理普通的事情,我们将她命名为alice。然后还有一个用户,我们就叫他吧bobbob具有root权限。准备服务器的管理员将所有东西安装到只能以 root 身份操作的地方,因此bob几乎我所做的一切都需要它。

alice我只有的帐户密码。我没有 的密码bob,但我被告知我可以通过打字sudo su - bob然后做一些事情来使用他的力量。确实如此 - 在 shell 中我可以执行此操作(没有密码提示!),然后我登录bob并可以执行任何操作。但是,我需要在脚本中以非交互方式执行此操作。就像是sudo su - bob && whoami

但我想不出任何其他方法来获得bob的力量:

例如sudo su -c whoami bob结果[sudo] password for alice:然后Sorry, user alice is not allowed to execute '/bin/bash' as bob on lovelyplace.

我尝试了许多组合susudo等等,但结果总是相同的 - 密码提示,然后拒绝。

我需要想出办法以编程方式以身份登录服务器alice,然后以身份执行内容bob。我需要一个类似于 的非交互式衬里sudo whoami,它将打印出来bob。否则我无法通过脚本部署我的应用程序。

有什么建议如何sudo su - bob在脚本中模仿这种奇怪的现象吗?

更新: bob不具有与 root 相同的权限。他无法读取 sudoers 等,因此他拥有比 更高的权限alice,但显然没有那么多权限来调整 root 设置。

答案1

您应该能够将要运行的命令传递到命令的标准输入sudo su - bob(从而传递到它创建的 shell):

sudo su - bob <<ENDCOMMANDS
echo "Running as:"
whoami
echo "done now...
ENDCOMMANDS

答案2

看起来你的服务器上的特权功夫是一件非常有趣的工作。有两件事你可以尝试,但我们只能猜测爱丽丝和鲍勃可能会做什么,可能不会做什么,YMMV。

为什么它必须是一个以 alice 身份运行的脚本?因为它是一些自动访问?好吧,如果有一些 cron 守护进程,您可以为 bob 提供一个 cron 作业,它定期执行一些 bash 脚本。如果 alice 可以写入该 bash 脚本,那么您是否找到了一种以 bob 身份执行脚本而不需要 su(do) 的方法?巫毒。但它确实稍微软化了安全性......

我从未尝试过的另一种方法是沿着后台 shell 的路线,将 stdin 和 out 绑定到管道。应该可以发送sudo su - bob\n到标准输入管道,并且应该使后台 shell 执行该命令。发送到后台 shell 的每个后续命令都应作为 bob 执行。粗略的草图是这样的:

mkdir -p /tmp/backshell
mkfifo /tmp/backshell/stdin
mkfifo /tmp/backshell/stdout
mkfifo /tmp/backshell/stderr

bash -l >/tmp/backshell/stdout 2>/tmp/backshell/stderr </tmp/backshell/stdin &

cat /tmp/backshell/stdout &
cat /tmp/backshell/stderr >&2 &

echo "sudo su - bob" >> /tmp/backshell/stdin
echo "whoami" >> /tmp/backshell/stdin

然而,它有一个缺陷,即在第一个之后,echo标准输入管道被关闭,因此后壳也被关闭。因此,您必须找到一种方法来防止标准输入管道被关闭,或者使用更复杂的东西来实现它。我认为 python 是一个非常好的子 shell 模块并与它们交互。

相关内容