先前的答案似乎并未直接解决这些问题,因此我想我会补充一下。
- 我的计划是让服务作为默认的“本地服务”帐户运行。我将在要读写的文件夹上为“本地服务”帐户显式设置“完全控制”权限。我相信以上是一个好的计划。
就个人而言,我认为该计划没有什么大问题。使用BUILTIN,您可以选择:
- 以LOCALSYSTEM的身份运行-因此,如果该服务受到威胁,攻击者将立即拥有Everything。
- 以LOCALSERVICE的身份运行-因此,如果该服务或使用该帐户运行的许多其他服务中的任何一个遭到破坏,攻击者都可以访问一个额外的目录。*
可以说,最好添加一些额外的ACL以便能够使用第二个选项。是的,低特权但高度安全敏感的服务的最安全选择是在定制的低特权服务帐户下运行。但是,除非您要为部署的每个服务创建新的帐户/管理密码,否则将LocalService用于次要的非敏感任务并不是一件可怕的事情。您只需要根据这些注意事项做出负责任的决定,例如该目录或该数据库中的内容,是否被破坏等会产生影响。
再次强调至少特权原则,您应该仅Full Control
在Modify
确实不够的情况下进行设置。
2.我的问题是,对于我正在读取和写入的文件夹,我是否需要设置具有完全控制访问权限的“网络服务”角色?我想知道既然我的服务使用数据库连接到另一台服务器,是否需要设置“网络服务”帐户。
如果您的数据库需要Windows Integrated / SSPI登录,那么可以,那么您将需要在所有地方使用NetworkService(或域服务帐户),即RunAs和目录权限。假设您还授予了computername $或域帐户对此数据库的访问权限。我怀疑您是否正在这样做,因此,如果它使用常规的用户名/密码验证,则应该可以使用LocalService进行所有操作。您只需要授予该目录一个帐户权限(无论您在RunAs中使用的是哪个帐户),而不必两个都授予。
3.我可能会误解“网络服务”帐户的功能。
LocalService / NetworkService在本地计算机上几乎是相同的帐户。区别主要在于他们可以在网络上做什么。NS可以访问某些网络资源,因为它在网络上显示为真实(计算机)帐户。但是LS会显示为ANONYMOUS,因此大部分网络上的所有内容都将被拒绝。
顺便说一句,您应该为此使用计划任务,而不是服务。
* 从Vista开始,由于服务隔离,一个受损的LocalService进程无法轻易地攻击另一个。与Windows 2003不同,每个LocalService / NetworkService服务进程/实例都有其自己的唯一登录会话SID(唯一所有者)。但是我不确定这是否完美,并完全缓解了文件和资源上的DACL漏洞。在此上下文中提到了受限制的SID和受 写限制的令牌。