这是我的剧本:
script.sh:
sudo cat /etc/passwd-
[如果我处于sudo
会话中(例如,几分钟前我用sudo
运行了另一个命令),现在运行
script.sh
该脚本将获得sudo
访问权限。但是,如果我运行cat /etc/passwd-/
,则会出现权限被拒绝的错误。
作为用户,我不希望script.sh能够如此简单地获得超级用户特权(例如,没有我用sudo script.sh
授予超级用户特权的访问权。]
这是预期的行为吗?它是可配置的吗?
[我认为该行为与sudo su
完全相似,例如,可能为超级用户提供对该会话中运行的任何脚本的访问权限,但更糟糕的是,因为您甚至可能不知道并且也不知道它何时结束(至少不是没有手动检查)
这是预期的行为吗?
是的,的确是预期的行为。用户为sudo缓存的凭据对此负责。
它是否可配置?
是,它是可配置的。
而且我认为您的安全隐患是有效的。如果脚本是使用显式的script.sh
命令编写的,则在之前运行过sudo
命令的终端(在一定的超时时间内)运行sudo
将赋予脚本超级用户特权。
通过使用以下命令运行它,可以避免任何脚本在以sudo运行时不提示输入密码:
sudo -k script.sh
无论先前的任何sudo命令或会话如何,它都会要求输入密码。
并且在不使用sudo的情况下运行script.sh,即仅使用
script.sh
并仍然提示 输入sudo命令的密码:您可以永久更改超时值(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命令或会话,此脚本都会提示输入密码至少一次。
如果您不知道(或无法访问)脚本script.sh的内容(它里面可能有sudo命令)]] >> 并且您要确保任何sudo命令都一定会提示您至少输入一次密码,然后在运行脚本之前运行 现在,如果您运行sudo -K
(大写K)。script.sh
并且包含sudo命令,则肯定会提示输入密码。