2012-03-15 3 views
0

일부 PowerShell 코드를 사용하여 동적으로 AD 보안 그룹을 생성 한 다음 네트워크 공유의 폴더에 적용하지만 새로 만든 그룹을 확인하는 데 문제가 있습니다. 잘 작동New-ADGroup, Set-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 초 정도 말을 기다린 다음 다시 설정 - ACL (또는 SetACL.exe) 코드의 일부를 실행하는 경우, 성공적으로 완료됩니다.

처음에는 도메인 컨트롤러 (이 중 4 가지는 2003 년과 2008 R2의 혼합)와 직접 관련이 있다고 생각했지만 로컬 폴더에서 제대로 작동한다는 사실은 흥미롭고 성가 셨습니다.

로컬 폴더와 네트워크 폴더에서 코드를 실행하는 동안 Wireshark 추적을 수행했습니다. 나는 가정

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

내 설정-ACL 명령에 실패 할 것입니다 : 내가 (다른 것들 사이) LDAP 조회 및 참조 네트워크 폴더에 ACL을 적용하려면 다음 SMB 응답을 시도 할 때 가장 큰 차이점입니다.

기본 네트워크 파일 시스템은 EMC Celerra 6.0.xx입니다. 나는이 기술에 매우 익숙하지 않지만 위의 오류를 설명 할 수있는 일종의 SID 캐시를 보유하고 있음을 이해합니다. (AD가 있지만 새 그룹에 대해서는 아직 알지 못합니다.)

그래서 나는 두 가지 질문이 있습니다 같아요

  1. 이 주위에 어떤 방법이 (PowerShell을/C# 요법)자는 포함되지 않는/대기? IE는 SID가 이라도 ACL을 설정합니까?
  2. EMC Celerra가 문제라면 (필자는 가정합니다) 방법으로 'SID 캐시'를 업데이트하거나 강제로 업데이트 할 수 있습니까?

나는이 문제에 대한 readvariousarticles을 가지고 있지만 아무도 효과적인 해상도가 (또는 나를 위해 작동)을 보이지 않는다.

도움 주셔서 감사합니다.

Rhys.

답변

0

알아 냈어!

EMC Celerra NAS에서 acl.mappingErrorAction을 수정했습니다.

1

이제 우리는 대한 ACL에 새로 만든 보안 그룹을 설정에는 문제가 없습니다 acl.mappingErrorAction - 값 -modify 1.

server_param의 server_2의 -facility의 CIFS를 0으로 설정을 업데이트 한 네트워크 공유에있는 폴더 (지연 없음). 정보


: acl.mappingErrorAction

보안, 사용자 및 ACL 설정에 대한 그룹 식별자 (SID/UID/GID) 사이에 알 수없는 매핑 규칙을 정의합니다.

두 가지 종류의 오류가 발생할 수 있습니다. ACL에 설정된 SID를 사용중인 도메인 컨트롤러에서 알 수 없습니다. 사용자 이름이 아직 UID/GID에 매핑되지 않았습니다.

비트 목록은 4 개의 2 진 비트 (비트 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 설정은 내가 지금까지 알고 싶어 .

Rhys.

0

캐시가 업데이트되기를 기다리는 데 지연이 발생하면 스크립트가 수행해야하는 작업을 차단하여 백그라운드 작업으로 처리하고 기본 스크립트가 다른 작업으로 넘어갈 수 있습니다.

+0

그래, 항상 우리의 대체 옵션이었습니다. 지연으로 인해 백그라운드 작업이 대기해야하고 500,000 개의 폴더 (및 700 만 개의 파일)에 대한 사용 권한을 설정하면 길이가 긴 스크립트 실행 시간으로 실행할 수 있습니다. –