繁体   English   中英

Shell脚本无需以sudo身份运行即可获得超级用户权限

[英]Shell script getting superuser privilege without being run as sudo

这是我的脚本:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM