阻止脚本化 sudo

阻止脚本化 sudo

我不喜欢输入密码须藤所以我禁用它

%sudo ALL=(ALL) NOPASSWD: ALL

现在我有一个不好的副作用,我运行的任何 shell 脚本都可以静默执行须藤代表我。

最典型的用例是打算将实验性的东西安装到 ${HOME}/local 并忘记配置字首

问题- sudo 是否有一种开箱即用的方式来阻止非交互式调用(来自脚本)?在架构Linux, 再具体一点。

答案1

你不能做你想做的事,因为“脚本化 sudo”和“交互式 sudo”并不矛盾。脚本可以在终端中运行 sudo。可以在终端中以完全自动化的方式运行命令的一些工具示例包括script、、、、等expectscreentmux

即使 sudo 可以以某种方式检测到您“直接”运行它(情况并非如此,因为您是与键盘和鼠标等外围设备交互,而不是与进程交互),它也无法保护您免受流氓脚本的侵害。例如,流氓脚本可能会在您的帐户上植入虚假命令,以便您下次运行时sudo它会调用一些包装器,该包装器会离散地利用您的访问权限。

无论如何,您所保护的威胁并不是特别相关。

授权“在你说什么之前,不,我知道不要让我的电脑保持登录我所有帐户的状态。我已经将它设置为在几分钟不活动后它会自动切换到我兄弟的。”

如果您不相信某些软件不会做有问题的事情,例如窃取您的社交媒体帐户,请不要在您的帐户上运行它。至少在不同的帐户上运行它(当然,这不是 sudoer),没有 GUI 访问权限。为了更好地隔离,请在虚拟机中运行它。 (这仍然不完美,它可以安全地防御普通恶意软件,但如果政府针对您则不一定。)

答案2

此外吉尔斯的回答Can I block non-interactive sudo invocation?根据您的问题的方面,我建议针对您的情况的这一特定要素采取解决方法:

我不喜欢输入 sudo 密码,所以我禁用了它

现在我有一个不好的副作用,我运行的任何 shell 脚本都可以代表我静默执行 sudo。

如果您的情况是,您通常会执行sudo一堆不同的命令,但随后您发现自己正在执行脚本,这些脚本会默默地执行 sudo ,而不会提示您输入密码,从而意识到根级别的事情正在发生,您可以:

  1. 取消 NOPASSWD 选项
  2. 将时间戳超时时间延长到库存 5 分钟以上
  3. 在运行不受信任的脚本之前杀死 sudo 时间戳

您已经知道如何编辑该NOPASSWD选项的 sudoers。

为了延长timestamp_timeout在 sudoers 文件中,将其设置为非常高的值或负值。该参数的手册页中的相关片段:

时间戳超时

sudo 再次请求密码之前可以经过的分钟数。

默认值为 5。

如果设置为小于 0 的值,则用户的时间戳在系统重新启动之前不会过期。

当您发现自己要执行一个不确定的脚本时,只需运行sudo -k“杀死”时间戳:

-k

当不使用命令使用时,会使用户的缓存凭据无效。换句话说,下次运行 sudo 时将需要密码。

如果您运行脚本并发现 sudo 提示您输入密码,您就会知道它sudo已被调用,并且可以根据需要中断该脚本。

顺便说一句,我建议设置pass提示参数将文本包含sudo在其中,例如:

Defaults passprompt="[sudo] password for %u:"

...因此,如果/何时 sudo 提示您输入密码(相对于任何其他工具),这是显而易见的。

相关内容