【问题标题】:Issues With New-ADGroup, Set-ACL and Network FoldersNew-ADGroup、Set-ACL 和网络文件夹的问题
【发布时间】:2012-03-16 06:39:25
【问题描述】:

我正在使用一些 PowerShell 代码来动态生成 AD 安全组,然后将它们应用到网络共享上的文件夹,但在解析新创建的组时遇到了问题。

考虑一下:

import-module activedirectory

for ($i = 0; $i -lt 10; $i++) {

  $group = New-ADGroup -Path "OU=Groups,OU=Department,DC=Domain,DC=Network" -Name "z-test-group-$i" -GroupScope DomainLocal -GroupCategory Security -PassThru
  $acl = Get-Acl C:\Temp
  $permission = $group.SID,"FullControl","Allow"
  $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
  $acl.SetAccessRule($accessRule)
  $acl | Set-Acl C:\Temp

}

效果很好。

但是,如果我将文件夹更改为网络文件夹,例如 G:\Temp 或 \\domain.network\DFS\GroupShare\Temp,我会收到“方法失败,出现意外错误代码 1337”。

我厌倦了使用 SetACL.exe 并收到类似的错误:

C:\Temp\SetACL.exe -on "\\domani.network\dfs\GroupShare\Temp" -ot file -actn ace -ace "n:$GroupSID;p:full;s:y"

SetACL finished with error(s): 
SetACL error message: The call to SetNamedSecurityInfo () failed
Operating system error message: The security ID structure is invalid.
INFORMATION: Processing ACL of: <\\?\UNC\domain.network\dfs\GroupShare\Temp>

如果我等待 10 到 20 秒,然后再次运行代码的 Set-ACL(或 SetACL.exe)部分,它将成功完成。

起初我认为这与域控制器直接相关(其中 4 个是 2003 和 2008 R2 的混合),但它在本地文件夹上运行良好的事实很有趣(也很烦人)。

在本地文件夹和网络文件夹上执行代码期间,我进行了 Wireshark 跟踪。主要区别在于尝试将 ACL 应用于网络文件夹时,我看到 LDAP 查找和(除其他外)以下 SMB 响应:

NT Trans Response, FID: 0x0040, NT SET SECURITY DESC, Error: STATUS_INVALID_SID

我认为这是导致我的 Set-ACL 命令失败的原因。

底层网络文件系统是 EMC Celerra 6.0.xx。我对这项技术非常陌生,但据我了解,它拥有某种 SID 缓存,可以解释上述错误(尽管 AD 知道,但它还不知道新组)。

所以我猜有两个问题:

  1. 有什么方法可以解决这个问题(PowerShell/C# 等) 涉及睡眠/等待? IE,设置 ACL,即使 SID 是 无效的?
  2. 如果 EMC Celerra 是问题(我认为是),是否有任何问题? 我可以强制它更新其“SID 缓存”或其他任何可能的方式吗?

我有 read various articles 关于这个问题,但似乎没有一个有效的解决方案(或为我工作)。

感谢您的帮助。

里斯。

【问题讨论】:

    标签: powershell active-directory filesystems acl sid


    【解决方案1】:

    如果问题只是等待缓存更新所涉及的延迟阻塞脚本需要执行的其他工作,您可以将其发送到后台作业,让您的主脚本继续执行其他操作。

    【讨论】:

    • 是的,这一直是我们的后备选项。但由于延迟,后台作业必须等待,当您设置权限时,比如说 500,000 个文件夹(和 700 万个文件),那么您可能会遇到冗长的脚本执行时间;)
    【解决方案2】:

    想通了!

    修改了我们 EMC Celerra NAS 上的 acl.mappingErrorAction

    设置为 0,更新为 1。

    server_param server_2 -facility cifs -modify acl.mappingErrorAction -value 1

    现在我们将新创建的安全组设置到网络共享文件夹的 ACL 中没有问题(没有延迟)。


    信息:acl.mappingErrorAction

    为 ACL 设置上的安全、用户和组标识符 (SID/UID/GID) 之间的未知映射定义规则。

    可能会出现两种错误: ACL 中设置的 SID 对正在使用的域控制器是未知的。 用户名尚未映射到 UID/GID。

    位列表由四个二进制位(位 0 到 3,从右到左)组成。设置时每个位为 1;否则为 0。

    Bit 0 (0001 or +1): Store unknown SID.
    Bit 1 (0010 or +2): Store SID with no UNIX mapping.
    Bit 2 (0100 or +4): Enable debug traces.
    Bit 3 (1000 or +8): Do lookup only in cache (secmap or global SID cache or per connection SID cache).
    

    值:0 – 15 默认值:0


    现在看来已经足够明显了,因为我对 NAS 上的底层 CIFS/ACL 设置有了更多的了解,然后才想知道。

    里斯。

    【讨论】:

      猜你喜欢
      • 2020-05-23
      • 1970-01-01
      • 2013-08-17
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      相关资源
      最近更新 更多