Shell脚本无需以sudo身份获得超级用户特权

问题描述 投票:4回答:1

这是我的剧本:

script.sh

sudo cat /etc/passwd-

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

script.sh

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

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

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

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

linux bash shell permissions sudo
1个回答
4
投票

这是预期的行为吗?

是的,的确是预期的行为。用户为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命令,则肯定会提示输入密码。

© www.soinside.com 2019 - 2024. All rights reserved.