假设您有一个程序想要以 root 身份无人值守地运行,该程序需要一个秘密(例如密码;您不想让其他人知道的东西),可以从环境变量中读取。实现此目的的一种方法是创建如下所示的脚本,并从 root 的 crontab 运行它。
#!/bin/bash
export SECRET='my_secret'
/usr/bin/some_program
export SECRET=
好的,所以我想到了这里有两个安全问题。
$SECRET
首先,有人可以通过阅读脚本找到的值。使用chmod 700
应该可以解决这个问题。
其次,有人可能会使用类似ps ae
while some_program
is running 之类的东西。但是,如果脚本以 root 身份运行,则只有 root(或 sudoers)才能看到其环境,对吗?
$SECRET
我认为只有 root 或 sudoers 才能找到的值,对吗?还有其他安全问题吗?
为了让这一切不那么抽象,这这让我开始思考。
答案1
这个脚本是不是只能在您自己的机器上运行?
现代 Linux 默认环境变量仅对 root 或您自己可见,但这是不可移植的。其他各种操作系统要么无法过滤它们,要么默认不过滤它们。
答案2
我的第一个想法是始终避免导出密码短语。
表里不一似乎有一个选项“ --use-agent
”可能在这里有帮助。
如果指定了此选项,则“
--use-agent
”将被传递给 GnuPG 加密过程,并且它将关闭与用户有关的有关“--encrypt-key
”或“--sign-key
”的任何密码交互。
更新:这些都是我的偏见。
- 脚本不应该导致安全信息被导出到环境中
- 如果你没有使用特殊的应用程序(如
duplicity
),那么通过转移到基于用户代理的机制(例如有一个,并且我希望有一个 - 它确实有一个)
可以更容易地避免我之前提到的问题。ssh
duplicity
secret
相对而言,使用应用程序私有数据下的 unix-access 属性来保护信息会更好一些(我指的是类似的东西.ssh/id_dsa
)