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 命令,它肯定会提示输入密码。
这是我的脚本:
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 命令,它肯定会提示输入密码。