与在脚本中存储机密相关的安全问题

与在脚本中存储机密相关的安全问题

假设您有一个程序想要以 root 身份无人值守地运行,该程序需要一个秘密(例如密码;您不想让其他人知道的东西),可以从环境变量中读取。实现此目的的一种方法是创建如下所示的脚本,并从 root 的 crontab 运行它。

#!/bin/bash
export SECRET='my_secret'
/usr/bin/some_program
export SECRET=

好的,所以我想到了这里有两个安全问题。

$SECRET首先,有人可以通过阅读脚本找到的值。使用chmod 700应该可以解决这个问题。

其次,有人可能会使用类似ps aewhile some_programis running 之类的东西。但是,如果脚本以 root 身份运行,则只有 root(或 sudoers)才能看到其环境,对吗?

$SECRET我认为只有 root 或 sudoers 才能找到的值,对吗?还有其他安全问题吗?

为了让这一切不那么抽象,这让我开始思考。

答案1

这个脚本是不是只能在您自己的机器上运行?

现代 Linux 默认环境变量仅对 root 或您自己可见,但这是不可移植的。其他各种操作系统要么无法过滤它们,要么默认不过滤它们。

答案2

我的第一个想法是始终避免导出密码短语。
表里不一似乎有一个选项“ --use-agent”可能在这里有帮助。

如果指定了此选项,则“ --use-agent”将被传递给 GnuPG 加密过程,并且它将关闭与用户有关的有关“ --encrypt-key”或“ --sign-key”的任何密码交互。


更新:这些都是我的偏见。

  • 脚本不应该导致安全信息被导出到环境中
  • 如果你没有使用特殊的应用程序(如duplicity),那么通过转移到基于用户代理的机制(例如有一个,并且我希望有一个 - 它确实有一个)
    可以更容易地避免我之前提到的问题。sshduplicity
  • secret相对而言,使用应用程序私有数据下的 unix-access 属性来保护信息会更好一些(我指的是类似的东西.ssh/id_dsa

相关内容