9

我正在研究使用Expect通过 telnet 登录到远程机器的 Perl 脚本(不要问,必须使用 telnet)。我还根据需要执行 p4 登录操作,并使用 expect 来输入正确的密码。现在我只是从明文环境变量 ie 中读取密码export PASSWORD=password,我知道这在安全方面并不好。

对于像这样的脚本需要大量密码用于多个系统,存储密码的最佳方法是什么?以某种方式加密在文本文件中?或者是其他东西?

请记住,我无法轻易更改现有系统,例如我无法真正安装 SSH 或类似的东西。

4

6 回答 6

10

可能您最好的方法是将密码放在单独的文件中,并锁定该文件的安全性,以便只有您具有读取权限。不幸的是,如果您在脚本中存储了加密密码,您还必须存储解密方法,以便攻击者可以运行解密并恢复您的密码。

于 2009-03-03T00:28:44.763 回答
7

之前有一个非常相似的问题,请参阅我的回答

简而言之,人类必须启动信任链。其他一切都是混淆。

于 2009-03-03T04:13:20.963 回答
5

如果您使用 telnet,为什么还要担心脚本中的密码?一个假定的攻击者会发现从网络上捕获数据比从远程机器上捕获数据更容易或更容易,而且在任何情况下你都无能为力。

这听起来像是试图在窗户上放上铁栏并让门一直打开的情况。

于 2009-03-03T00:33:22.257 回答
2

由于您已经在使用 expect,您应该考虑能够在包含您的密码的加密文件上重定向 gpg -d。在系统环境变量中存储密码是完全错误的。用于解密 gpg 文件的密码将在启动时输入,然后从文件中加载所有密码并运行您的东西。然后你就完成了,所以密码只在应用程序运行时以明文形式存在。

编辑只是附带说明,将任何密码放在脚本中都是不好的;请记住,该脚本只是一个纯文本文件,它可以让您轻松查看密码。同样,即使您编译的应用程序也可以用“字符串”反转,它可以查找代码中包含的字符串(通常是密码)。

于 2009-03-03T00:28:22.470 回答
2

如果您使用的是 Mac OS X,我发现了这种从您的 Keychain 中获取用户名和密码的好方法

更新:截至 2013 年 7 月 22 日,该链接似乎已断开。以下 bash 代码片段显示了我如何使用该技术(下载 iTunes 销售数据):

domain="itunesconnect.apple.com"
user="user@example.com"
pass=$(security find-internet-password -ws $domain -a $user)
于 2012-03-21T19:39:47.160 回答
0

我喜欢已经提到的将密码放在单独的文件中的解决方案。此外,您可以散列实际密码,就像在 /etc/passwd 中所做的那样。尽管您可能对所有这些都使用相同的哈希键,具体取决于您的应用程序。显然,这样做的缺点是有人必须输入哈希键才能运行您的脚本,而这在批处理环境中不起作用。

一个开始学习散列的地方是从这个stackoverflow问题

于 2009-03-11T04:48:36.210 回答