存储脚本使用的密码的最不安全的方法是什么?
我有一个Bash脚本,可以使用我的用户名和密码自动对服务进行身份validation。 凭证当前以纯文本forms存储在脚本中。
在允许脚本访问的同时,我应该采取哪些预防措施来最安全地存储这些凭据?
澄清要点:
- 据我所知,如果可以的话,应该使用其他身份validation方法。 我仍然想知道在密码validation是唯一选项的情况下该怎么做。
- 完全没有存储密码在这里是不可接受的答案。 我问的是脚本必须无人值守访问密码的情况。
什么样的服务? 某些服务还有其他方法可以进行身份validation,例如SSH密钥和SSH代理。
我将密码与脚本分开存储,并确保所有路径组件都具有正确的权限集。 例如,确保路径/path/to/file
, /
, /path
和/path/to
由您信任的用户( root
)拥有,并且这些不被不允许查看您的文件的人写入。 最后, file
的建议权限是600或400。
该file
可能如下所示:
PASSWORD='something that you cannot remember'
在您的脚本中,使用以下代码导入变量:
. /path/to/file
至于你的脚本,请确保它不包含可能允许攻击者在脚本上下文中执行代码的漏洞(例如,可能具有任意$PATH
变量集的无法控制的环境或无效使用其他文件(例如,采购世界可写的文件)。
至于密码的实际保护,你不能。 它必须以某种方式提供给其他服务。 作为替代方案,您可以使用openssl
或gpg
加密包含密码的文件/脚本,因此您需要在解锁凭据之前输入密码。 如果您的服务密码难以记住,这将特别有用。
不是在文件中对密码进行硬编码,而是将密码存储在单独的文件中并保护文件( chmod 700
或chmod 500
),以便只有授权用户才能访问它。
使用cat /dir/to/file/with/.password
检索密码,而不是读取文件并将其内容存储到变量中。