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


13

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

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

澄清要点:

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

2
可能不存储凭据的密码部分?
托马斯·沃德

不能访问GNOME密钥环或类似的东西?
Firefeather 2011年

也许如果您可以将其存储为加密哈希(例如SHA-1),那将很好。
匿名

ROT13会掩盖它,但是不会以任何方式保护它。
匿名

@Anonymous如果密码存储为加密哈希,您如何建议检索它?
ændrük

Answers:


8

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

我将密码与脚本分开存储,并确保所有路径组件都设置了正确的权限。例如,确保在路径/path/to/file//path/path/to自己信任的(用户所拥有root),而这些都不是人谁是不允许看到你的文件写。最后,建议的权限为file600或400。

file看起来是这样的:

PASSWORD='something that you cannot remember'

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

. /path/to/file

至于您的脚本,请确保其中没有漏洞,攻击者可以在脚本上下文中执行代码(例如,不受控制的环境,该环境可能设置了任意$PATH变量或对其他文件的使用无效(例如,采购可写世界文件) 。

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


14

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

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


正是由于这个原因,某些工具甚至可以选择直接从文件中读取密码,例如gpg的--passphrase-file选项。

2
...并使其成为.dotfile(/dir/to/file/with/.password)
knb

2
chmod 400用于文件(只读)。当然,您必须保护主要目录(700或500,或者如果偏执狂甚至100)。请注意,400(对于目录而言为500)就足够了,其他模式(100)可以通过模糊处理被视为安全性,就像通过在名称前面加一个点来隐藏文件一样。
Lekensteyn

1

我知道这是一个老问题,但是我遇到了类似的问题,并且我使用Ubuntu的钥匙圈来解决它。这是ubuntu 18.04LTS上的一种解决方案。打开终端keyring set {{service}} {{username}} ,例如,如果您正使用它进​​行学校密码记录,请写下以下内容:

keyring set school mohamed

它将记录您的密码,然后输入密码。现在,您输入的密码存储在Ubuntu密钥环中。

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

keyring get school mohamed

在脚本的上下文中使用它:

password=$(keyring get school mohamed)

现在,密码将包含您先前输入的密码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.