如何在数据库中安全地存储密码

How to store password securely in database

目前我正在做 php 项目。该项目的主题是通过 ssh 登录到我本地网络中的某个 cisco 交换机,获取详细信息并将其填充给用户。 为此,我在 MySQL 中创建了包含切换登录凭据的数据库。我的 PHP 代码将从数据库中获取登录凭据并在切换时进行计算。

我的问题是如何将交换机凭证安全地存储在我的 MySQL 数据库中以使其免受任何安全漏洞的影响。

您希望以某种形式将您的 cisco 交换机密码存储在您的数据库中,您可以在其中恢复密码纯文本以将其用于 ssh 连接。

即使您对数据库中的密码进行加密,访问数据库的程序也必须能够解密它们才能使用它们。因此,解密密钥必然可供您的程序使用。那和password-hashing mechanism available in php那种完全不一样。密码散列不允许您从散列中恢复密码,只能将 user-presented 密码与散列密码进行比较以查看它们是否匹配。

存储可解密密码不安全,并且永远不安全。如果有人破解了你的服务器,他们就可以访问你的整个基础设施。 (可以访问交换机和路由器的 Cyber​​creeps 真的可以弄得一团糟。)这就是 https://KrebsOnSecurity.com 中出现的那种东西。 不要这样做。请

如果您希望 more-or-less 通过 ssh 自动访问您的交换机,最好的办法是使用 ssh 的密钥管理功能。您访问交换机的机器将有一个私钥,每个交换机都有一个与私钥对应的 public 密钥。如果正确配置 public 键,您可以限制提供相应 public 键的用户可用的操作。这是一个很大的话题,对于 Stack Overflow 的回答来说太大了。

像往常一样,Digital Ocean 对这个话题的评论很有用。 https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server

通常,安全存储交换机(和路由器)凭据是使用 TACACS+ 完成的,这消除了主机登录交换机的需要,无需存储超出访问 TACACS+ 服务器所需的凭据。