2012-03-15 40 views
0

我打了一些PowerShell代碼動態生成AD安全組,然後將它們應用到文件夾的網絡共享,但與解決新創建的組的問題。問題有了新的廣告羣組,設置ACL和網絡文件夾

考慮一下:

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#ECT)不 涉及睡覺/等待? IE,設置ACL即使SID是 無效?
  2. 如果的EMC Celerra是問題(我假設它是),是否有任何 辦法可以迫使它來更新它的「SID高速緩存」或任何可能?

readvariousarticles了這個問題,但沒有似乎有一個有效的分辨率(或爲我工作)。

感謝您的幫助。

里斯。

回答

0

想通了!

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

設置爲0,其更新爲1

server_param的Server_2·設備CIFS -modify acl.mappingErrorAction - 值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


現在看來相當明顯,我更瞭解底層CIFS/NAS上的ACL設置,然後我曾經想知道。

里斯。

0

如果問題僅僅是參與等待緩存更新阻止其他工作的腳本需要做,你可以出貨是開了一個後臺作業,讓你的主腳本去別的事都耽誤了。

+0

是的,這總是我們的後備選擇。 但是由於延遲,後臺作業將不得不等待,並且當您設置500,000個文件夾(和700萬個文件)的權限時,則可以運行很長的腳本執行時間;) – 2012-03-15 22:39:46