保护RPC服务

时间:2011-03-15 07:41:14

标签: c++ windows winapi rpc

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

我正在考虑保护此服务的选项,以便未经授权的程序无法读取/写入数据。

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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


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

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

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

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