保护 RPC 服务

Posted

技术标签:

【中文标题】保护 RPC 服务【英文标题】:Securing a RPC service 【发布时间】:2011-03-15 07:41:13 【问题描述】:

我正在编写一个小型服务,它将文件存储在磁盘上,然后根据请求将它们返回给客户端。

在保护此服务方面,我正在考虑我的选择,因此没有未经授权的程序可以读取/写入数据。

最简单的解决方案是使用模拟,以便处理调用的服务线程模拟客户端,并让文件系统整理出可以做什么或不可以做什么。

这里的问题是服务本身必须能够在没有模拟的情况下读取文件(在后台运行的定期函数)。

我确实阅读了 MSDN 上的以下章节,我正在寻找您或其他人过去用来保护此类服务的实用技巧。

http://msdn.microsoft.com/en-us/library/aa373582(v=vs.85).aspx

【问题讨论】:

【参考方案1】:

您通常只在处理客户请求时进行模拟。其余时间,服务被配置为使用系统帐户(通常是系统帐户),该系统帐户拥有(或被配置为拥有)完整权限来执行其必要任务。

需要注意的安全问题当然是确保用户无法将自己提升到该帐户。


安装服务时,您需要考虑的一件事是选择服务帐户。使用其中一个内置帐户,或为您的服务创建一个特殊用途的帐户。 “LocalService”、“NetworkService”、“LocalSystem”iirc 有内置帐户,否则您可以选择现有或新的用户或管理帐户(不推荐)。

当您创建文件时(假设您没有传递任何明确的 ACL 信息),它们会继承所属文件夹的可继承访问权限。 这些您设置为“用户(包括您的模拟用户的组)”具有创建权限。 “所有者”具有读/写权限。并且“您的默认服务帐户”具有完全控制权。

这意味着您的服务在不冒充任何人的情况下可以完全访问这些文件。冒充某人时,只能读/写该特定用户文件。

任何登录到服务器的普通用户也将无法访问这些文件(除非他们碰巧是模拟用户)。但是,管理员可以取得所有权,然后为自己分配读/写访问权限。本地管理员没有(也不应该有)防御。

【讨论】:

所以要走的路是对所有入站呼叫进行模拟,让文件系统处理安全性(在实践中)并让服务在本地系统帐户下自行运行,以便处理写入的文件其他用户? 很大程度上取决于您试图保护文件的对象。在本地登录的情况下:可以拒绝 PC 上的普通用户访问文件。管理员始终有权获得所有权并为自己重新分配访问权限。默认情况下,服务在 SYSTEM 帐户的上下文中运行 iirc(但我确信可以将 SCM 配置为在其他帐户下运行它们),如果还没有的话,可以将其显式添加到对象 ACL 中。 我想确保没有人连接到接口并尝试执行存储或查询操作,除非他们是经过身份验证的用户,并确保他们只能读取他们能够通过使用读取的内容Windows 资源管理器。 在这种情况下,是的:让文件系统通过确保在模拟相关用户时执行所有 RPC 调用来处理安全性。其余时间服务帐户应具有必要的访问权限(只要您正确设置了默认 ACL)。

以上是关于保护 RPC 服务的主要内容,如果未能解决你的问题,请参考以下文章

通过Nginx用密码保护以太坊JSON-RPC API

RPC的实现方式

从RPC预热转发看服务端性能调优

高并发服务优化篇:从RPC预热转发看服务端性能调优

高并发服务优化篇:从RPC预热转发看服务端性能调优

Spring Boot中使用断路器