我有一个小的 bash 脚本,它可以下载一个关键文件、打开一个 SFPT 连接、放置文件并关闭连接。
您可以想象,我的脚本包含一些用户名和密码信息。
我计划将这些敏感信息设为环境变量,以便在我们遭受黑客攻击时,这些信息不会被泄露。
然而,我想知道:
- 环境变量方法是最好的解决方案
- 这些变量将是永久的,即使服务器重置、崩溃等也不会改变
- 我的环境变量是否对其他终端非 root 用户可见
提前感谢您的意见...新年快乐。
答案1
没有环境变量:ps 可以显示它们的值
使用私钥/公钥对(没有密码),确保私钥只能由相关人员读取(即启动将值复制到另一台计算机的脚本的人员),并将公钥放在目标计算机的authorised_keys文件中(在相关用户目标帐户上,即文件复制到的那个帐户)。然后,该本地用户使用其本地的只能读取的私钥来
scp sensitivefile destinationuser@destinationhost:/destination/path/
此外:
- 将 localuser 和 destinationuser 设置为 2 个受严格限制的用户:他们只能在本地访问此区域,远程访问该区域,等等。这样,如果受到攻击,他们就无法远程授予 root 访问权限,等等。并在本地和远程使用脚本将文件复制到最终目的地(本地用户可读区域和远程最终目的地)。当然,如果可能的话,这些脚本也不能是 root……(想象一下您受到攻击:文件将脚本复制到某个位置,因此最终为 /local/area/somefile……但有人恶意地在那里放置了一个链接,使用相同的本地文件名,该链接指向某个敏感文件:/local/area/somefile -> /etc/sensitivefile)该敏感文件可能会被覆盖!在某些情况下,这可能会打开安全漏洞或拒绝服务。还要小心远程,因为一旦受到攻击,localuser 的密钥可用于 ssh/scp 到 destinationuser@destinationhost。
也就是说,还有很多检查要做,以确保它很难(而且并非不可能……)被用来攻击本地或目标主机!与我们分享您的最终解决方案。
答案2
环境变量不是永久的。但它们是私有的。要使它们永久化,需要将它们记录在脚本中。
更好的解决方案是使用 ssh authorized_keys 机制;如果发起连接的机器受到威胁,密钥仍会被盗,但在另一端取消授权会更容易。