您好,
我是 Discourse 安装的新手,最近我们在 Digital Ocean Droplet 上为其搭建了公司论坛/社区页面。
在安装过程中,我注意到 SMTP 密码输入未受保护,并以明文形式存储在 app.yml 文件中。
这似乎是一个潜在的安全问题。然而,我并非网络或安全专家,因此这可能出于多种原因而设计为如此。但为了让我公司的 IT 经理放心,如果能更好地理解为何采用这种方式,将对我有很大帮助。
我知道 Discourse 被许多公司广泛使用,因此我怀疑该问题可能已被充分讨论过。
任何帮助都将不胜感激。
谢谢!
Jason
pfaffman
(Jay Pfaffman)
2
如果某个你不信任的人能够访问你的 app.yml 文件,那么 SMTP 密码泄露恐怕是你最不必担心的问题了。
Stephen
(Stephen)
3
你会建议如何保护它呢?
哈希是单向的,无法逆向还原为原始数据。
用户密码之所以被哈希,是因为它们不需要可逆。数据库中的密码哈希仅在用户尝试登录时进行校验。系统将用户提供的密码生成的哈希值与该用户记录中存储的密码哈希进行比对。
像 SMTP 密码和 API 密钥这类信息,通常以明文形式存储。因为它们需要以原始形式传输,如果对其进行哈希处理,将导致无法使用。如果第三方服务接受密码的哈希值,那么以哈希作为保护手段也就失去了意义。
正如 Jay 上面所说,如果你的服务器物理安全遭到破坏,并且 app.yml 文件被访问,那么你需要担心的问题将远比重置 SMTP 密码严重得多。
这里有一个重要的注意事项:你不应该在其它任何地方使用同一个 SMTP 密码。但这并非 Discourse 特有的要求,而是所有系统和每个账户都应遵循的良好安全实践。
justin
(Justin DiRose)
4
正如 Jay 所说,如果有人获取了你的 app.yml 文件,那你面临的麻烦可就不止这些了。这意味着他们很可能已经获得了服务器的完整 root 权限,包括你的生产数据库。
在这种情况下,最佳做法是确保你的服务器是安全的。
大家好,感谢大家的回复。
我同意保护服务器是第一道防线。但在这种情况下,这超出了我的控制范围,因为我将 Discourse 安装在了 Digital Ocean 的 Droplet 上。
@Stephen,感谢提供关于 SMTP 密码的背景信息。我之前并不知道在这种情况下将密码以明文存储是常见的做法。正如我所说的,这不在我的专业领域内。我只是注意到这一点,所以想问一下。
谢谢!
Jason
justin
(Justin DiRose)
6
也不完全是这样
你可以将登录限制为仅使用 SSH 密钥,配置运行的防火墙,并确保定期应用安全补丁。这构成了 Droplet 安全加固的很大一部分。
pfaffman
(Jay Pfaffman)
7
没错。除非你对文件系统进行了加密(这很难做到),否则你也必须信任他们。他们拥有对服务器和网络的物理访问权限。
正如所解释的,你只需要拥有密码即可使用它。