如何绕过 sudo

如何绕过 sudo

我正在尝试编写一个非交互式安装 Meteor (JS 框架) 并且部分脚本提示 sudo 。我似乎无法用我的脚本技能克服它。

安装如下: curl https://install.meteor.com | /bin/sh

在脚本的后面,它会提示输入 Sudo 密码。 我希望这一步失败.然后我就可以编写脚本来解决这个问题。

注意:: 我无法将用户添加到 sudoers 文件中,它在共享环境中运行,不允许我的用户提升访问权限。

答案1

这将用“sudo -n”(不带引号)替换字符串“sudo”(不带引号)的任何实例:

curl https://install.meteor.com | sed 's/sudo/sudo -n/g' | /bin/sh

sudo 手册页

-n' -n(非交互式)选项可防止 sudo 提示用户输入密码。如果运行命令时需要输入密码,sudo 将显示错误消息并退出。

但值得指出的是,这仅起作用如果系统提示您输入密码。换句话说,如果您最近运行过 sudo,并且这些凭据允许您在 15 分钟内(默认)无需输入密码即可运行 sudo,并且您在 15 分钟内运行此命令,则上述命令仍将成功运行 sudo。或者,如果您从未正常提示您输入密码,这也将成功。

要使最近输入 sudo 凭据创建的会话无效,请运行sudo -k。同样,从手册中:

-k [命令]

单独使用时,sudo 的 -k(kill)选项会使用户的缓存凭据无效。下次运行 sudo 时将需要密码。此选项不需要密码,并被添加以允许用户从 .logout 文件中撤销 sudo 权限。并非所有安全策略都支持凭据缓存。

当与可能需要密码的命令或选项结合使用时,-k 选项将导致 sudo 忽略用户的缓存凭据。因此,sudo 将提示输入密码(如果安全策略需要密码),并且不会更新用户的缓存凭据。

如果这对您不起作用(例如,如果您的安全策略不要求输入密码),您可以尝试:

curl https://install.meteor.com | sed 's/sudo/sudo \/bin\/false/g' | /bin/sh

如果 sudo 运行的程序失败,则 sudo 将失败。false 的手册页

退出时显示表示失败的状态代码。

...全是假的。

这意味着,它不会运行尝试使用 sudo 运行的任何命令,而是运行/bin/false,并将要运行的原始程序的名称sudo作为第一个参数传递。

笔记:如果你真的想要整个第一线包含 sudo 调用的命令会失败,这些解决方案不会(必然)导致这种情况发生。sudo 调用本身会失败,但如果其参数是在子 shell 中创建的,或者同一行上有先前的命令,则这些命令将照常运行。因此,如果原始命令是:

sudo exterminate "$(ls /humans)"

那将会变成:

sudo /bin/false exterminate "$(ls /humans)"

并且ls /humans仍会运行。这可能很明显,而且可能无关紧要,但为了以防万一,我想提一下。

答案2

为什么不在使用前修改脚本: curl https://install.meteor.com > /tmp/script,在/tmp/script中修改它,然后运行它/bin/sh /tmp/script

编辑:或者如果要求输入密码,只需输入三次错误的密码,您就会被拒绝。

相关内容