Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NT AUTHORITY\本地服务未列在目录的访问控制列表中_C#_Active Directory_Acl - Fatal编程技术网

C# NT AUTHORITY\本地服务未列在目录的访问控制列表中

C# NT AUTHORITY\本地服务未列在目录的访问控制列表中,c#,active-directory,acl,C#,Active Directory,Acl,我遇到这个问题,我试图检查NT\Authority本地服务是否对目录(文件夹)具有读取\执行权限。我使用的产品要求用户安装到的文件夹具有本地服务的读取\执行权限 问题是,当我递归地(组中的组)获取访问控制列表(ACL)时,本地服务未列出,因此我无法检查他是否具有该文件夹的权限 默认情况下,本地服务对用户配置文件(我的文档、桌面等)没有读取/执行权限,但我不知道本地服务是否可以访问用户选择安装到的其他目录 注意:本地服务确实可以访问程序文件,即使它未列在ACL中。它藏在别的地方了吗 这是一个关于如

我遇到这个问题,我试图检查NT\Authority本地服务是否对目录(文件夹)具有读取\执行权限。我使用的产品要求用户安装到的文件夹具有本地服务的读取\执行权限

问题是,当我递归地(组中的组)获取访问控制列表(ACL)时,本地服务未列出,因此我无法检查他是否具有该文件夹的权限

默认情况下,本地服务对用户配置文件(我的文档、桌面等)没有读取/执行权限,但我不知道本地服务是否可以访问用户选择安装到的其他目录

注意:本地服务确实可以访问程序文件,即使它未列在ACL中。它藏在别的地方了吗

这是一个关于如何提取ACL的简短片段:

GroupPrincipal groupPrincipal = 
GroupPrincipal.FindByIdentity(principalContext, identityReferenceValue);

// GetMembers(true) is recursive (groups-within-groups)
foreach (var member in groupPrincipal.GetMembers(true)) {
     if (member.SamAccountName.Equals("LOCAL SERVICE")) {
          foundLocalService = true;
           break;
     }
}
我还有别的办法吗?(除了为该目录上的本地服务添加访问规则) 本地服务只是没有列在目录ACL中吗


任何帮助都将不胜感激。

计算帐户的“有效权限”是出了名的困难。但您的问题的简单答案是,您可能希望在以下两种情况中选择一种:

  • 本地用户组,有时显示为BUILTIN\Users或COMPUTERNAME\Users,或
  • 已验证用户,有时显示为NT AUTHORITY\Authenticated Users
  • 经过身份验证的用户是其中之一。它是“一个组,包括登录时身份已验证的所有用户。”。只要你能证明你是谁,你就被包括在认证用户中。在每台Windows计算机上,此操作的SID总是
    S-1-5-11

    然而,这并不是一个真正的群体。要在向文件夹添加权限时找到它,必须在“选择此对象类型”下选择“内置安全主体”:

    默认情况下,本地用户组包含经过身份验证的用户。在我的计算机上,我实际上在文件系统的默认权限中看到了用户和经过身份验证的用户

    这是你最有可能看到的,这可能是最重要的

    但这不是唯一的办法。您可以看到每个人(
    S-1-1-0
    ),其中包括每个用户,无论是否经过身份验证

    或者,它可以是以本地服务帐户为所有者的文件或文件夹

    或者,可能存在手动创建的本地组,并将本地服务添加到其中

    获取您可以查找的内容的更权威列表的一种方法是在本地服务帐户下运行:

    这将告诉您身份验证令牌中的每个组,即出于身份验证目的您被视为其成员的每个组

    但您不能仅仅以本地服务的形式打开命令提示符。因此,一种方法是打开任务计划程序并创建在本地服务下运行的任务,操作如下:

    • 节目:cmd
    • 参数:/c“whoami/groups>c:\temp\localservice.txt”

    然后运行任务,完成后,查看C:\temp\localservice.txt。它将有一个组名及其SID表,您可以查找。

    我在运行的本地服务帐户下运行了whoami\groups,并删除了许多组,包括经过身份验证的用户。我发现GroupPrincipal.FindByIdentity()没有将NT AUTHORITY\Authenticated用户检测为一个组,这可以解释问题,因为我的方法只尝试递归地遍历组。想知道为什么它认为经过身份验证的用户是用户而不是组?它不是用户或组。这是一个“著名的SID”,对Windows有着特殊的意义。例如,向文件夹添加权限时,必须在“选择此对象类型”下选择“内置安全主体”(如果仅选择了用户或组,则不会显示)。我在回答中添加了一个截图。
    whoami /groups