2014-10-17 3 views
1

나는 같은 도메인에있는 원격 서버에 PowerShell 명령 아래 사용하여 폴더에 할당 된 그룹 목록 얻기 위해 노력하고 있어요 :GET-ACL 반복 그룹 - PowerShell은

는 무엇 일이
get-acl '\\Testserver\test' | % {$_.access} | ft IdentityReference -HideTableHeaders 

는 그룹입니다 3 번 반복됩니다. NTFS 사용 권한을 확인한 결과이 그룹은 한 번만 할당되었습니다. 아래는 출력입니다. 이것에 대한 도움이 필요하십니까? :(

testdiomin\testgroup 
testdiomin\testgroup 
testdiomin\testgroup 
BUILTIN\Administrators 

그냥 폴더에 고급 보안을 확인하고이 그룹이 한 번 할당, 추가 할 수 있습니다. 내가 명령 떨어져 피트를 취할 경우 모든 속성이 반복 그룹에 대해 동일 봐!

+0

'ft' cmdlet을 사용하여 답변을 필터링하는 것으로 추측됩니다. 이 명령을 실행하고 출력을보십시오 :'et-acl '\\ Testserver \ test'| % {$ _. access}'그들에 대해 뭔가 다른 점이 있습니다. – Matt

답변

2

I을 내가 둘 다 허용 및 거부 권한을 사용자에게 준 테스트 폴더가 있습니다 .Windows에서 보안 탭을 보면 폴더가 한 번 표시됩니다. 그러나 해당 특정에 대해 Get-Acl을 사용하면 권한이 무너지는 것을 볼 수 있습니다. 예, 사용자가 여러 번 표시되지만 FileSystemRightsAccessControlType은 달라집니다. Format-Table없이 get-acl '\\Testserver\test' | % {$_.access}을 실행하기 만하면됩니다. ee는 내가 말하고있는 것을 말한다.

위에서 설명한 내 자신의 폴더에서 일부 잘린 샘플 출력.

get-acl 'c:\temp\new folder' | Select-Object -ExpandProperty access 

FileSystemRights : ReadExtendedAttributes, ReadAttributes 
AccessControlType : Deny 
IdentityReference : BA\sslvpn 
IsInherited  : False 
InheritanceFlags : ContainerInherit, ObjectInherit 
PropagationFlags : None 

.......... 

FileSystemRights : ReadData, ExecuteFile, Synchronize 
AccessControlType : Allow 
IdentityReference : BA\sslvpn 
IsInherited  : False 
InheritanceFlags : ContainerInherit, ObjectInherit 
PropagationFlags : None 

하나의 사용자가 두 번 나열되어 있습니다. 이것은 Windows 탐색기의 파일/폴더 속성 (보안> 고급)에도 설명되어 있습니다.

당신은 얼마나 [System.Security.AccessControl.FileSystemAccessRule 내려 오는 이름을 찾고 매트가 이미 다루었함에 따라 스스로 그냥 -Unique

get-acl 'c:\temp\new folder' | Select-Object -ExpandProperty access | Select IdentityReference -Unique | Ft -HideTableHeaders 
1

를 사용할 수있는 권한에 대해주의를 해달라고하는 경우 ]가 건설되었습니다. 액세스 제어 규칙을 만들 때 5 가지를 지정해야합니다. 사람들은 다음과 같습니다

  • 사용자 : Security.Principal.NTAccount 오브젝트이 '도메인 \ TMTech'
  • 권리 같은 것입니다 : Security.AccessControl.FileSystemRights 개체, 당신이 알고, 읽기, 쓰기가, DeleteSubdirectoriesAndFiles ... [enum] :: GetNames ([Security.AccessControl.FileSystemRights])를 사용하여 옵션이 무엇인지 확인할 수 있습니다.
  • 는 상속 : Security.AccessControl.InheritanceFlags는, 오브젝트가에 미치는 영향이 상속이 규칙
  • Propegation 내에서 파일 및 폴더이는 적용 제외 System.Security.AccessControl.PropagationFlags이 Inhertence 매우 유사, 객체 컨테이너 내부의 객체가 아니라 컨테이너 자체.
  • 유형 : Security.AccessControl.AccessControlType의 목적이 단순히 허용 또는 액세스 규칙은이 잘 가능으로 설정 한 수 많은 일들이 있기 때문에, 말했다 모두와 함께

을 거부한다 동일한 사용자에 대해 두 개 이상의 항목이 표시됩니다 (특히 허용 및 거부 규칙이 별도이고 상속 및 전파 규칙이 서로 다름).사용자가 폴더의 속성을 읽을 수 있도록 허용하고 그 안에있는 모든 객체는 속성이지만 사용자가 그 안에있는 객체의 속성 만 변경할 수 있도록 허용합니다. 그것은 상속을 사용하는 하나의 규칙이고, Propegation 설정을 사용하는 규칙입니다. 그런 다음 아무것도 삭제할 수 없도록 거부 규칙을 설정하면 세 번째 규칙이 표시됩니다.

ACL은 매우 복잡해질 수 있습니다. 실제로 코드 스 니펫을 손에 쥐기 만하면 하나의 오브젝트에서 다른 오브젝트로 복사하는 것 이상의 ACL에서 작업해야하거나 모든 것을 규칙에서 간단히 제거해야 할 때 모든 것을 기억할 수 있습니다. 여기에 내가 나 자신을 위해 계속 작업은 다음과 같습니다 받기-의 ACL 반환는 Windows ACL보다 더 필터링되지 않은 방법으로 임의 ACL (액세스를 제어하는) 및 (감사를 제어) 시스템 ACL을 포함

$colRights = [System.Security.AccessControl.FileSystemRights]"Read, Write, Modify, DeleteSubdirectoriesAndFiles" 

$InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::None 
$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None 

$objType =[System.Security.AccessControl.AccessControlType]::Allow 

$objUser = New-Object System.Security.Principal.NTAccount("DigitalGhost\$strOwnerName") 

$objACE = New-Object System.Security.AccessControl.FileSystemAccessRule ` 
    ($objUser, $colRights, $InheritanceFlag, $PropagationFlag, $objType) 

$objACL = Get-ACL "Z:\ACLSource" 
$objACL.AddAccessRule($objACE) 

#If the output path doesn't exist, make it quietly. 
If(!(Test-Path "z:\$strOwnerName")){$null = New-Item "Z:\$strOwnerName" -ItemType directory} 


Set-ACL "Z:\$strOwnerName" $objACL 
1

보안 설명자 편집기 (폴더의 속성에 대한 보안 탭에서 가져온보기). 즉, ACL 편집기는 사용자를 도와주고 작업하기 쉬운 형식으로 정보를 표시하려고합니다. 모든 Windows 시스템에서 작동합니다 간단한 예는 실제 Windows 폴더를 확인한다 (당신이 볼 수 실제로 여러 폴더와 레지스트리 키가) : 당신이 그 출력에 그 결과를 비교하면

PS> Get-Acl C:\Windows | select -exp access | Format-Table 

      FileSystemRights AccessControlType IdentityReference          IsInherited    InheritanceFlags Propagation 
                                         Flags 
      ---------------- ----------------- -----------------          -----------    ---------------- ----------- 
        268435456    Allow CREATOR OWNER            False ContainerInherit, ObjectInherit InheritOnly 
        268435456    Allow NT AUTHORITY\SYSTEM           False ContainerInherit, ObjectInherit InheritOnly 
     Modify, Synchronize    Allow NT AUTHORITY\SYSTEM           False       None  None 
        268435456    Allow BUILTIN\Administrators          False ContainerInherit, ObjectInherit InheritOnly 
     Modify, Synchronize    Allow BUILTIN\Administrators          False       None  None 
       -1610612736    Allow BUILTIN\Users            False ContainerInherit, ObjectInherit InheritOnly 
ReadAndExecute, Synchronize    Allow BUILTIN\Users            False       None  None 
        268435456    Allow NT SERVICE\TrustedInstaller         False    ContainerInherit InheritOnly 
       FullControl    Allow NT SERVICE\TrustedInstaller         False       None  None 
ReadAndExecute, Synchronize    Allow APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES  False       None  None 
       -1610612736    Allow APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES  False ContainerInherit, ObjectInherit InheritOnly 

은 ACL Editor는 ACE의 수가 일치하지 않음을 알 수 있습니다. 예를 들어, Get-Acl의 출력이 보여주는 두 개의 항목 대신 'Users'에 대한 항목이 하나 있어야합니다. 친숙한 텍스트 권한과 함께 일부 숫자 권한이있는 위의 방법에 유의하십시오. 이를 일반 권한이라고하며, 읽기, 실행, 쓰기, 모두의 네 가지 권한 집합을 정의하는 바로 가기입니다. 그것들은 ACE가 속한 객체의 유형, 즉 파일/폴더, 레지스트리 키, 서비스, 프린터, AD 객체 등에 따라 다르게 번역되기 때문에 지름길이지만이 네 가지 비트를 사용하여 기본적으로 설명 할 수 있습니다 각 유형의 객체에 대해 동일한 작업을 수행합니다.

어쨌든 ACL 편집기는 일반 권한을 개체 별 권한으로 변환하고 논리적으로 함께 그룹화 할 수있는 ACE가 있는지 확인합니다. 예를 들어 봅시다.

FileSystemRights에 일반적인 권리 번역
IdentityReference    FileSystemRights     InheritanceFlags  PropagationFlags 
-----------------    ----------------     ----------------  ---------------- 
BUILTIN\Users      -1610612736 ContainerInherit, ObjectInherit   InheritOnly 
BUILTIN\Users  ReadAndExecute, Synchronize        None     None 

에서, -1610612736 값이 ReadAndExecute, Synchronize을 의미한다 : 위의 출력에서 ​​'사용자'에 대한 두 개의 에이스 있었다. 변환이 완료되면 Type (Allow), IdentityReference (BUILTIN \ Users) 및 FileSystemRights (ReadAndExecute, Synchronize)에서 두 ACE가 일치하는 것을 확인하십시오. 일치하지 않는 유일한 것은 InheritanceFlags 및 PropagationFlags입니다. 첫 번째 파일에는 ContainerInherit, ObjectInherit 상속 플래그가 있습니다. ACE는 하위 폴더 및 파일에 적용되고 InheritOnly 전파 플래그는 ACE가 폴더 자체에 적용되지 않음을 의미합니다. 두 번째 ACE에는 상속 또는 전파 플래그가 없으므로 폴더 자체에만 적용됩니다. 즉, 폴더, 하위 폴더 및 파일에 적용 할 ReadAndExecute에서 Users까지 부여하는 단일 ACE로 논리적으로 결합 할 수 있습니다.

그럼 정상 일 것입니다. Access 속성에서 원시 출력을 확인해야합니다.

here 모듈을 사용하면 ACL 편집기의 방식대로 정보를 표시하려고합니다. 여기에 출력 C에 대한 생겼는지 : \ WINDOWS :

PS> Get-AccessControlEntry C:\Windows 


    DisplayName  : C:\Windows 
    Owner   : NT SERVICE\TrustedInstaller 
    DACL Inheritance : Disabled 


AceType    Principal      AccessMask      InheritedFrom  AppliesTo      
-------    ---------      ----------      -------------  ---------      
AccessAllowed  CREATOR OWNER     FullControl     <not inherited>  CC CO      
AccessAllowed  SYSTEM       FullControl     <not inherited>  CC CO      
AccessAllowed  SYSTEM       Modify, Synchronize   <not inherited>  O        
AccessAllowed  Administrators     FullControl     <not inherited>  CC CO      
AccessAllowed  Administrators     Modify, Synchronize   <not inherited>  O        
AccessAllowed  Users       ReadAndExecute, Synchronize <not inherited>  O CC CO      
AccessAllowed  NT SERVICE\TrustedInstaller FullControl     <not inherited>  O CC       
AccessAllowed  APPLICATION PACKAGE   ReadAndExecute, Synchronize <not inherited>  O CC CO      
        AUTHORITY\ALL APPLICATION                         
        PACKAGES                             

을 다운로드 할 수있어 현재 버전하지 않습니다 항상 논리적으로 그룹의 ACE 그들은 (그룹화 할 수 있습니다 때됩니다에 동일하지 그룹의 ACE 'AppliesTo'영역에 권한이 결합 될 수 있음). 미래 버전에서 찾아보십시오.