New-ADGroup,Set-ACL和Network Folders的问题

时间:2012-03-15 00:19:13

标签: powershell active-directory filesystems acl sid

我正在使用一些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,即使SID是,也设置ACL 无效?
  2. 如果EMC Celerra是问题(我认为是),有没有 我可以强制它更新它的'SID缓存'或者它可能是什么?
  3. 关于这个问题我有read various articles,但似乎没有一个有效的解决方案(或者对我有用)。

    感谢您的帮助。

    里斯。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

想出来了!

修改了我们的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设置了解得更多,然后我就想知道。

里斯。