Shell 脚本获得超级用户权限而不是 运行 作为 sudo

Shell script getting superuser privilege without being run as sudo

这是我的脚本:

script.sh:

sudo cat /etc/passwd-

如果我在 sudo 会话中(例如我 运行 几分钟前使用 sudo 的另一个命令),现在 运行

script.sh

脚本将获得 sudo 访问权限。但是,如果我 运行 cat /etc/passwd-/,我将收到权限被拒绝的错误。

作为用户,我不希望 script.sh 能够如此简单地获得超级用户权限(例如,没有我使用 sudo script.sh 授予超级用户权限)。

这是预期的行为吗? 它是可配置的吗?

我认为该行为与 sudo su 完全相似,例如,可能会授予超级用户访问您在该会话中 运行 的任何脚本的权限,但更糟糕的是,因为您甚至可能不知道它,但不知道它什么时候结束(至少没有手动检查)

Is this expected behaviour ?

是的,的确,这是预期的行为。用户缓存的 sudo 凭据对此负责。

Is it configurable?

是的,它是可配置的。

而且我认为您的安全问题是有道理的。 运行 script.sh 在终端中 sudo 命令是 运行 之前(在特定超时内),如果脚本是用显式 sudo 命令。

当 运行 作为 sudo 时,您可以避免任何不提示输入密码的脚本,方法是 运行 将其与:

连接
sudo -k script.sh

无论之前的任何 sudo command/s 或会话如何,它都会要求输入密码。

And to run script.sh without sudo i.e with just script.sh and still prompt for a password for the sudo command/s:

您可以永久更改超时值(sudo 保持会话的持续时间):

运行 sudo visudo

然后换行:

Defaults        env_reset

Defaults        env_reset,timestamp_timeout=0

保存并退出(ctrl+X 然后 Y)

这将确保 sudo 每次都要求输入密码 运行。

或者如果您不想永久更改它并希望您的脚本至少提示一次密码(同时保持会话),那么您可以像这样更改您的脚本:

sudo -k first-command-with-sudo
sudo second-command
sudo third
and so on

此脚本将至少提示一次密码,无论之前是否有任何 sudo command/s 或会话。

如果您不知道(或无权访问)脚本的内容script.sh(它可以包含或不包含 sudo 命令)

并且您想确保任何 sudo 命令肯定会提示输入密码至少一次,然后 运行 sudo -K(大写 K)在 运行 脚本之前。

现在如果你 运行 script.sh 如果它包含 sudo 命令,它肯定会提示输入密码。