是否可以使某个文件仅对 Linux 上的特定可执行文件可读?

是否可以使某个文件仅对 Linux 上的特定可执行文件可读?

我有一个 https 服务器,它使用 json 来保存登录信息(注册用户和哈希密码),但我担心有人可能会闯入机器并窃取这个 json 文件。我想过下面的解决方案,但我认为它们都不能解决问题:

  • 如果我将其设置为不可读,我将必须以 root 身份执行该网站,这意味着如果有人设法闯入,他们已经拥有 root 访问权限;
  • 如果我创建另一个用户,则该用户也必须能够读取它,因此如果有人设法闯入,他们就已经是该用户并能够访问它。

那么,对此有最佳解决方案吗?

答案1

你的问题是,无论谁闯入服务器通过您的网站始终具有与网站本身相同的访问权限。“特定可执行文件”在这里没有帮助,因为针对网站的最常见攻击涉及诱骗正确的可执行文件执行错误操作,例如让您的 webapp include() 将秘密文件放入 HTML 输出中。

避免这种情况的唯一方法是让网站不需要完整的用户名和密码列表。将帐户存储代码拆分为以不同 UID 运行的单独应用程序,以便您的 Web 应用程序只能向“帐户管理”应用程序询问给定的用户名和密码是否有效。(这可以使用通过 localhost 的普通 HTTP 请求、JSON-RPC 或 gRPC,或当今“微服务”流行的任何方式。)

这个术语是特权分离


(“平面文件”与“数据库”在安全性方面没有任何区别。数据库——即使是基于文件的数据库,如 SQLite——也只有更好的搜索和更新比平面文件具有更强的功能,例如,如果系统在更新过程中崩溃,它就不会被损坏......但这些都不会对数据安全产生任何影响,因为清晰的密码可以存储在任何类型的文件中,加密的密码可以存储在任何类型的文件中,密码哈希也可以存储在任何类型的文件中。

话虽这么说...如果你的 webapp 对文件执行任何类型的更新,那么切换到 SQLite 而不是 JSON。完成上述拆分为两个服务后,所有与帐户相关的代码都将集中在一个地方,因此这应该相当容易。)

相关内容