存储脚本使用的密码的最不安全的方法是什么?

存储脚本使用的密码的最不安全的方法是什么?

我有一个 Bash 脚本,可以使用我的用户名和密码自动对服务进行身份验证。凭据当前以纯文本形式存储在脚本中。

我应该采取哪些预防措施来最安全地存储这些凭据,同时仍允许脚本访问?

澄清要点:

  • 我理解,如果可用,应该使用其他身份验证方法。但我仍然想知道如果密码身份验证是唯一的选择,该怎么办。
  • 完全不存储密码在这里不是一个可接受的答案。我问的是脚本必须无人值守访问密码的情况。

答案1

不要将密码硬编码在文件中,而是将密码存储在单独的文件中并保护该文件(chmod 700chmod 500),以便只有授权用户才能访问它。

cat /dir/to/file/with/.password用而不是读取文件并将其内容存储到变量中来检索密码。

答案2

什么样的服务?某些服务有其他身份验证方法,例如与 SSH 代理结合使用的 SSH 密钥。

我会将密码与脚本分开存储,并确保所有路径组件都设置了正确的权限。例如,确保路径中的、和/path/to/file/您信任的用户拥有(),并且不允许无权查看您的文件的人写入这些文件。最后,建议的权限为600 或 400。/path/path/torootfile

看起来可能file是这样的:

PASSWORD='something that you cannot remember'

在您的脚本中,使用以下代码导入变量:

. /path/to/file

至于您的脚本,请确保它不包含可能允许攻击者在脚本上下文中执行代码的漏洞(例如,不受控制的环境可能具有任意$PATH变量集或无效使用其他文件(例如,获取全球可写文件))。

至于密码的实际保护,您不能。它必须以某种方式提供给其他服务。作为替代方案,您可以使用openssl或加密包含密码的文件/脚本gpg,因此您需要在解锁凭据之前输入密码。如果您的服务密码很难记住,这尤其有用。

答案3

我知道这是一个老问题,但我遇到了类似的问题,我使用 Ubuntu 的密钥环解决了它。这是 ubuntu 18.04LTS 上的解决方案打开终端写下keyring set {{service}} {{username}} 例如如果你用它来记录学校密码:

keyring set school mohamed

它会记录你的密码并输入密码。现在你输入的密码存储在 Ubuntu 密钥环中。

要获取此密码,请在终端中写入:

keyring get school mohamed

在脚本上下文中使用它:

password=$(keyring get school mohamed)

现在密码包含您之前输入的密码。

相关内容