创建只能由Windows服务打开的文件

时间:2013-02-01 14:07:22

标签: c++ security winapi windows-services dacl

是否可以使用DACL字符串选择此类安全描述符,以便该文件只能由Windows服务打开,而不能由普通进程打开,即使该进程是由本地管理员帐户?

为了澄清,我只需要让非技术用户相当难以在NotePad中打开它并篡改它。它不需要与愿意花费一个月的时间来改造工程并破解它的程序员一起工作。

我更喜欢使用DACL而不是锁定文件来实现这一点,因为我的Windows服务不需要一直运行来保护文件。

2 个答案:

答案 0 :(得分:3)

本地管理员帐号=上帝(至少在盒子上)。没有办法做到这一点。

您可以为要在其下运行的服务定义特殊的特权帐户,并使受保护文件上的ACL仅允许该用户(以及所有计算机管理员)访问。您可以禁止使用该服务帐户进行交互式登录。

如果主要关注的是交互式用户的篡改,则可能需要一个策略,默认情况下本地用户不会使用本地管理员权限运行。不幸的是,你不能允许“部分”本地管理员权限 - 它是全部或全部。

答案 1 :(得分:1)

我对DACL的了解不足以说明你是否能够以及如何通过这些来完成你想要的东西。除了将其限制在本地管理员帐户之外,我可以想到一些事情可以让某人更难以篡改文件:

  1. 让您的服务自动启动,并立即打开文件而不使用共享选项。只要您的服务打开,另一个进程将无法打开它。
  2. 计算文件内容的哈希值以及硬编码到服务中的盐,并将其存储在其他位置,例如,存储在另一个文件中,注册表中,甚至是在线。下次打开文件时,请验证哈希值,该哈希值将告诉您自上次打开文件以来是否有人篡改了该文件。
  3. 这些并非万无一失,但听起来你的目标只是让它变得更难。停止具有管理员权限的用户没有万无一失的方法。