Windows-使用Windows服务的本地服务和/或网络服务帐户


18

我创建了一个窗口服务,该服务监视Windows操作系统上特定目录下的文件。检测到文件后,该服务将执行一些文件I / O,读取文件,创建子目录等。此服务还使用数据库连接来连接到另一台服务器。我的计划是让服务作为默认的“本地服务”帐户运行。由于我需要允许写/读权限,而默认情况下“本地服务”帐户显然不执行此操作,因此,我将在我所在的文件夹中为“本地服务”帐户显式设置“完全控制”权限。读/写。

相信以上是好的。我的问题是,对于我正在读取和写入的文件夹,我是否需要设置具有完全控制访问权限的“网络服务”角色?我想知道既然我的服务使用数据库连接到另一台服务器,是否需要设置“网络服务”帐户。

我可能会误解“网络服务”帐户的作用。

Answers:


18

仅当您在与需要计算机凭据进行访问控制的域中的其他计算机通信时才需要该NT AUTHORITY\NetworkService帐户。简单的Internet /网络访问不需要它。仅在Active Directory域中出于特定目的才需要。

此外,NT AUTHORITY\LocalService帐户的全部要点是它在系统上具有最低权限。为它提供更高的特权会降低您的系统上许多服务的安全性,这些服务旨在以所提供的低特权级别运行。如果您的服务需要特权之外的其他特权,则应使用必要的特权为其创建一个新帐户,然后在服务属性的“ 登录”选项卡中设置该帐户。(这也可以通过编程方式完成。)

您也可以使用该NT AUTORITY\LocalSystem帐户运行该帐户,该帐户具有对系统的无限访问权限,但是我想您想使用该LocalService帐户来提高其安全性。


1
在一个文件夹(和子文件夹)上赋予LocalService帐户完全控制权将如何降低其他服务的安全性?
contactmatt

1
@ user19185 本身并不会降低其安全性,但是会提高攻击性能。如果某服务按照原样运行,LocalService它将有权访问您打开的所有内容LocalService,而通常情况下,它将无权访问。自70年代以来,这已成为标准的计算机安全操作程序
补丁

1
只是要指出,它LocalSystem具有比普通管理员帐户更多的权利和特权。
斯坦·奥斯姆(SteinÅsmul)'18

@SteinÅsmul:感谢您的指正!我更新了答案以反映这一点。
修补

2

先前的答案似乎并未直接解决这些问题,因此我想我会补充一下。

  1. 我的计划是让服务作为默认的“本地服务”帐户运行。我将在要读写的文件夹上为“本地服务”帐户显式设置“完全控制”权限。我相信以上是一个好的计划。

就个人而言,我认为该计划没有什么大问题。使用BUILTIN,您可以选择:

  1. 以LOCALSYSTEM的身份运行-因此,如果该服务受到威胁,攻击者将立即拥有Everything
  2. 以LOCALSERVICE的身份运行-因此,如果该服务或使用该帐户运行的许多其他服务中的任何一个遭到破坏,攻击者都可以访问一个额外的目录。*

可以说,最好添加一些额外的ACL以便能够使用第二个选项。是的,低特权但高度安全敏感的服务的最安全选择是在定制的低特权服务帐户下运行。但是,除非您要为部署的每个服务创建新的帐户/管理密码,否则将LocalService用于次要的非敏感任务并不是一件可怕的事情。您只需要根据这些注意事项做出负责任的决定,例如该目录或该数据库中的内容,是否被破坏等会产生影响。

再次强调至少特权原则,您应该仅Full ControlModify确实不够的情况下进行设置。

2.我的问题是,对于我正在读取和写入的文件夹,我是否需要设置具有完全控制访问权限的“网络服务”角色?我想知道既然我的服务使用数据库连接到另一台服务器,是否需要设置“网络服务”帐户。

如果您的数据库需要Windows Integrated / SSPI登录,那么可以,那么您将需要在所有地方使用NetworkService(或域服务帐户),即RunAs和目录权限。假设您还授予了computername $或域帐户对此数据库的访问权限。我怀疑您是否正在这样做,因此,如果它使用常规的用户名/密码验证,则应该可以使用LocalService进行所有操作。您只需要授予该目录一个帐户权限(无论您在RunAs中使用的是哪个帐户),而不必两个都授予。

3.我可能会误解“网络服务”帐户的功能。

LocalService / NetworkService在本地计算机上几乎是相同的帐户。区别主要在于他们可以在网络上做什么。NS可以访问某些网络资源,因为它在网络上显示为真实(计算机)帐户。但是LS会显示为ANONYMOUS,因此大部分网络上的所有内容都将被拒绝。

顺便说一句,您应该为此使用计划任务,而不是服务。

* 从Vista开始,由于服务隔离,一个受损的LocalService进程无法轻易地攻击另一个。与Windows 2003不同,每个LocalService / NetworkService服务进程/实例都有其自己的唯一登录会话SID(唯一所有者)。但是我不确定这是否完美,并完全缓解了文件和资源上的DACL漏洞。在此上下文中提到了受限制的SID和受 写限制的令牌


2

其他答案可以确认您对使用本地服务的看法。总之,除非您需要网络服务的其他Active Directory SSPI功能,否则建议将本地服务与服务一起使用。

为了限制对特定文件夹的读/写访问,您可以做得比仅授予对通用本地服务帐户的访问要好。正如其他人所指出的那样,问题在于这还将赋予对作为本地服务运行的所有其他服务的读/写访问权限,如果所有服务都这样做,则本地服务将逐渐获得对越来越重要的资源的访问权限。

解决方案是改为使用您的特定服务SID对文件夹进行ACL。只有您自己的服务进程才将您的服务SID与之关联,因此这进一步锁定了您的资源。您可以使用查看服务SID sc showsid <service name>。服务SID是根据服务名称生成的,因此在所有计算机上都是相同的。

要启用您的服务使用服务SID的功能,请ChangeServiceConfig2SERVICE_SID_INFOset一起使用SERVICE_SID_TYPE_UNRESTRICTED。您还可以设置SERVICE_SID_TYPE_RESTRICTED为获得更严格的SID,该SID仅允许对服务SID明确允许的资源进行写访问。

此链接具有服务SID和受限服务SID的高级描述:https : //docs.microsoft.com/zh-cn/previous-versions/windows/it-pro/windows-server-2008-R2-and- 2008 / hh125927(v = ws.10)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.