我编写了一个Windows服务,它产生了一个单独的进程。此过程创建一个COM对象。如果服务在“本地系统”帐户下运行,一切正常,但如果服务在“网络服务”帐户下运行,则外部进程启动但无法创建COM对象。从COM对象创建返回的错误不是标准的COM错误(我认为它特定于正在创建的COM对象)。
那么,我如何确定两个帐户“本地系统”和“网络服务”的区别?这些内置帐户看起来非常神秘,似乎没有人了解它们。
答案 0 :(得分:656)
由于标准服务帐户的功能存在很多混淆,我会尝试快速运行。
首先是实际账户:
有限服务帐户,与网络服务非常相似,旨在运行标准的最低权限服务。但是,与网络服务不同,无法访问网络,因为计算机以 Anonymous 用户身份访问网络。
NT AUTHORITY\LocalService
HKEY_USERS\S-1-5-19
)下有自己的个人资料
用于运行标准特权服务的有限服务帐户。此帐户比本地系统(甚至管理员)更受限制,但仍有权作为计算机访问网络(请参阅上面的警告)。
NT AUTHORITY\NetworkService
MANGO$
)提供给远程服务器HKEY_USERS\S-1-5-20
)下有自己的个人资料NETWORK SERVICE
LocalSystem account (危险,请勿使用!)
完全信任的帐户,比管理员帐户更多。这个帐户无法在一个盒子上执行任何操作,并且它有权作为计算机访问网络(这需要Active Directory并授予计算机帐户权限)
.\LocalSystem
(也可以使用LocalSystem
或ComputerName\LocalSystem
)HKCU
代表默认用户)MANGO$
)提供给远程服务器
上面谈到访问网络时,这仅涉及SPNEGO(协商),NTLM和Kerberos,而不涉及任何其他身份验证机制。例如,以LocalService
运行的处理仍然可以访问互联网。
作为标准开箱即用帐户运行的一般问题是,如果您修改任何默认权限,那么您正在扩展所有以该帐户运行的所有内容。因此,如果您将DBO授予数据库,则作为本地服务或网络服务运行的服务不仅可以访问该数据库,还可以访问作为这些帐户运行的所有其他服务。如果每个开发人员都这样做,那么计算机将拥有一个服务帐户,该帐户有权执行任何操作(更具体地说,是授予该帐户的所有不同附加权限的超集)。
从安全角度来看,最好是以您自己的服务帐户运行,该服务帐户具有您执行服务所需的权限,而不是其他任何权限。但是,此方法的成本是设置您的服务帐户和管理密码。这是每个应用程序需要管理的平衡行为。
在您的特定情况下,您可能会看到的问题是DCOM或COM +激活仅限于给定的一组帐户。在Windows XP SP2,Windows Server 2003及更高版本中,激活权限受到显着限制。您应该使用组件服务MMC管理单元检查您的特定COM对象并查看激活权限。如果您不是作为计算机帐户访问网络上的任何内容,则应认真考虑使用本地服务(不是本地系统,基本上是操作系统)。
在Windows Server 2003中you cannot run a scheduled task为
NT_AUTHORITY\LocalService
(又名本地服务帐户)或NT AUTHORITY\NetworkService
(又名网络服务帐户)。 该功能仅在任务Scheduler 2.0中添加,该任务仅存在于Windows Vista / Windows Server 2008及更高版本中。
以NetworkService
运行的服务显示网络上的计算机凭据。这意味着,如果您的计算机被调用mango
,it would present as the machine account MANGO$
: