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

Linux Shell脚本获得超级用户权限而不作为sudo运行,linux,bash,shell,permissions,sudo,Linux,Bash,Shell,Permissions,Sudo,这是我的剧本: script.sh: sudo cat /etc/passwd- 如果我在sudo会话中(例如几分钟前我用sudo运行了另一个命令),现在运行 script.sh 脚本将获得sudo访问权限。但是,如果我运行cat/etc/passwd-/,我将得到一个权限拒绝错误 作为一名用户,我不希望script.sh能够如此简单地获得超级用户权限(例如,如果我不通过sudo script.sh)授予超级用户权限) 这是预期的行为吗? 它是可配置的吗 我认为这种行为完全类似于sudo s

这是我的剧本:

script.sh

sudo cat /etc/passwd-
如果我在
sudo
会话中(例如几分钟前我用
sudo
运行了另一个命令),现在运行

script.sh
脚本将获得
sudo
访问权限。但是,如果我运行
cat/etc/passwd-/
,我将得到一个权限拒绝错误

作为一名用户,我不希望script.sh能够如此简单地获得超级用户权限(例如,如果我不通过
sudo script.sh
)授予超级用户权限)

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

我认为这种行为完全类似于sudo su,例如,潜在地允许超级用户访问您在该会话中运行的任何脚本,但更糟糕的是,因为您甚至可能不知道它,也不知道它何时结束(至少不需要手动检查)

这是预期的行为吗

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

它是可配置的吗

是的,它是可配置的

我认为你的安全顾虑是正确的。如果脚本是使用显式
sudo
命令编写的,则在之前运行
sudo
命令的终端中运行
script.sh
将授予脚本超级用户权限

您可以通过以下方式运行脚本,避免在以sudo身份运行时任何脚本不提示输入密码:

sudo -k script.sh
无论之前的sudo命令或会话如何,它都会要求输入密码

在不使用sudo的情况下运行script.sh,即仅使用
script.sh
并仍然提示 有关sudo命令的密码:

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

sudo -k first-command-with-sudo
sudo second-command
sudo third
and so on
运行
sudo-visudo

然后更改行:

Defaults        env_reset

保存并退出(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命令,它肯定会提示输入密码。

您的会话缓存了凭据。当您自己运行脚本时,它们仍然被缓存。在单独的会话中运行脚本以避免出现这种情况,您也可以调整缓存长度(还可以限制您可以使用
sudo
而不是“一切”)。如果所有脚本都可以请求凭据,那么在安全性方面,使用sudo与超级用户会话相比有什么意义?您是否会创建一个特殊用户,以便在缓存凭据时运行非sudo脚本?
sudo
比简单地允许用户成为超级用户更具可配置性;将用户限制为仅使用某些特权命令,无论是否使用密码。将您运行的
sudo
会话视为
su
会话,这样会更安全(不要从那里做其他事情,限制访问范围等)。您可以强制使缓存过期,等等。请查看
sudo
配置。您可以使用它做很多事情。您可以更改日志缓存凭据的方式。