> CWE-260:配置文件http://cwe.mitre.org/data/definitions/260.html中的密码
> CWE-522:证书不足http://cwe.mitre.org/data/definitions/522.html
> CWE-257:以可恢复格式存储密码http://cwe.mitre.org/data/definitions/557.html
但是我们如何在实践中处理这个问题呢?
当然,通过SSH和sudo等工具进行无密码身份验证等技术,可以在重要的地方摆脱存储的登录凭据,这在Linux服务器的自动部署过程中确实很有用.
但是一旦您离开操作系统并安装应用程序,您就会面临安全存储密码的问题.
例如,如果安装数据库服务器,则很可能需要将明文密码保存到Web应用程序的配置文件中.
然后,您应该保护配置文件,以便只有管理员才能查看凭据,您应该限制数据库用户的访问权限,以限制可能的安全影响.
但是如何处理例如主要的管理数据库帐户?至少你的dbas应该知道它(所以你需要明文的某个地方)而作为操作系统管理员,你不应该知道凭证.或者部署由devops完成,他们不应该知道生产服务器上的任何凭据.
可能的解决方案
经过一段时间的思考,我提出了三种可能的解决方案,但他们有自己的弱点:
>在部署期间生成随机凭据,并以一次写入方式将其存储在数据库中.例如,dbas有另一个用户可能只读取数据库凭据.但是如何处理例如配置文件中的明文密码. web应用? root用户可以读取它们.密码数据库的root用户也可能读取所有密码凭据.
>在部署期间接受明文密码和默认凭据,并添加更改任何和所有密码的postscript.甚至可能是交互式的,授权人员必须在脚本运行期间输入凭据.
>使用受信任的第三方的密钥非对称地加密密码.当请求密码时,必须在之后更改密码.
你怎么看?你看到这里有什么最好的做法吗?