wok*_*ati 16 ssh password password-management
所以首先,我知道,我应该在 SSH 中使用密钥身份验证。不需要向我解释。
这里的问题是我有一堆(大)服务器,我需要一个脚本来连接每一个。
我尽可能使用密钥身份验证,但不可能在每台服务器上都使用(我无法控制)。所以SSH登录,或者有时telnet。
因此,对于某些人,我只是将密码存储在 db 中,我的脚本会在需要时使用它。问题是这样做看起来并不安全。有没有办法让它更安全一点?
喜欢一些特定的存储方式?
loo*_*bee 24
如果您的脚本可以连接到这些服务器中的任何一个,那么任何有权访问该脚本(或对运行脚本的机器的特权访问权限)的人都可以连接到这些服务器中的任何一个。
如果脚本需要自主运行,则所有赌注都将关闭。这里的答案是否定的,在这样的环境中没有一种绝对安全的方式来存储密码。做任何事情都没有绝对安全和实用的方法。
你应该专注于纵深防御,而不是试图避免不可避免的事情。
首先,当然,您应该充分保护密码。这通常意味着将它们保存在与脚本分开的文件中并配置限制性文件系统权限。从安全的角度来看,这就是您在这方面所能做的。
其他措施肯定会增加过程的模糊性。加密密码将使攻击者需要搜索解密密钥。使用某种操作系统保护的存储通常可以防止其他用户访问您的密钥(因此它没有提供优于文件系统权限的优势,除了攻击和使用复杂之外)。这些措施会延迟攻击,但肯定不会阻止攻击者对攻击者进行攻击。
现在,让我们暂时将密码视为公开的。你能做些什么来减轻伤害?
一个旧的和经过测试的解决方案是限制这些凭据可以做什么。在 UNIX 系统上,这样做的一个好方法是为您的脚本设置一个单独的用户,并限制该用户在访问服务器和被访问服务器上的能力。您可以在 SSH 级别、外壳级别或可能使用强制访问控制机制(如 SELinux)限制用户功能。
您可能还需要考虑的是将脚本逻辑移动到服务器中。这样,您将获得更易于控制的更小界面,尤其是...
监控。始终监控对服务器的访问。最好将日志身份验证和命令执行到仅附加日志。例如,不要忘记使用 监视脚本文件的更改auditd。
当然,如果您无法控制服务器,那么这些机制中的许多都没有用,正如您的问题所暗示的那样。如果是这种情况,我建议您与管理服务器的人员取得联系,让他们了解您的脚本和潜在的安全隐患。
Jen*_*y D 14
最简洁的答案是不。
长答案是:不,没有完全安全的方法。(这包括环境变量,服务器上的其他人可以访问这些变量。)最接近的是将它们以某种加密格式存储 - keepass、GPG 加密文件或其他类似内容。但在某些时候,您需要解密密码,以便您的脚本可以使用它,此时您将很容易受到攻击。
换句话说,您需要对运行脚本的服务器、网络和目标服务器上的深入安全性进行长时间的深入研究。