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

时间:2015-05-29 14:24:05

标签: 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 su完全相似,可能会让超级用户访问您在该会话中运行的任何脚本,但更糟糕的是,因为您可能根本不知道它,并且不要不知道它什么时候结束(至少没有手动检查)

1 个答案:

答案 0 :(得分:3)

  

这是预期的行为吗?

是的,确实是预期的行为。用户对sudo的缓存凭据负责。

  

可以配置吗?

是的,它是可配置的。

我认为您的安全问题是有效的。如果脚本是使用显式SELECT alias FROM Articls WHERE (title LIKE '%key%' OR content LIKE '%key%' OR sections LIKE '%key%' OR description LIKE '%key%' OR category LIKE '%key%' OR subcategory LIKE '%key%') ORDER BY alias DESC LIMIT 500 命令编写的,则在之前运行script.sh命令的终端中运行sudo(在某个超时时间内)将为脚本提供超级用户权限。

通过运行以下命令运行sudo,可以避免任何不提示输入密码的脚本:

sudo

无论以前的sudo命令或会话如何,它都会要求输入密码。

  

运行没有sudo的script.sh,只有sudo -k script.sh 并仍然提示   对于sudo命令的密码:

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

运行script.sh

然后更改行:

sudo visudo

Defaults        env_reset

保存并退出(按Ctrl + X然后按Y)

这将确保sudo每次运行时都会要求输入密码。

或者如果您不想永久更改它并希望您的脚本至少提示一次密码(同时维护会话),那么您可以更改脚本:

Defaults        env_reset,timestamp_timeout=0

无论以前的sudo命令或会话如何,此脚本都会至少提示输入一次密码。

如果您不知道(或无法访问)脚本script.sh的内容(它内部可以包含sudo命令)

并且您希望确保任何sudo命令肯定会提示输入密码至少一次,然后在运行脚本之前运行sudo -k first-command-with-sudo sudo second-command sudo third and so on (大写K)。

现在如果你运行sudo -K并且它包含一个sudo命令,它肯定会提示输入密码。