2014-04-17 1 views
2

서버에 대한 원격 액세스를 허용하려고합니다. 어딘가에 internets에, 나는 이것이 WinRM 서비스에 대한 RootSDDL의 수정이 필요합니다 것을 발견하고 그것의 가치는 다음과 같이 가져올 수 있었다 : 나는의 SID를 알고있는 경우 :Powershell SDDL 수정

(Get-Item WSMAN:\localhost\Service\RootSDDL).Value 
O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;S-1-5-21-3231263931-1371906242-1889625497-1141)S:P(AU;FA;GA;;;WD)(AU;SA;GWGX;;;WD) 

이제 질문은 다음과 같다 원격 액세스를 허용하려는 사용자, (A;;GA;;;S-1-5-21-The-rest-of-my-user-SID)처럼이 SDDL ACE에 어떻게 추가합니까?

SDDL을 ACE의 배열로 구문 분석하고 수정 한 다음 다시 구문 분석 할 코드 스 니펫이 있습니까?

답변

1

이 코드는 완전히 작동하지 않지만 ObjectAce 개체의 생성자 매개 변수 ($ArgumentList 변수)를 수정하면 제대로 작동 할 수 있습니다. 나는 조금 후에 이것으로 돌아와서 끝내려고 노력할 것이다.

이 예에서는 RawSecurityDescriptor 클래스를 사용하여 SDDL을 가져 오는 방법을 보여주고 GetSDDLForm() 메서드를 호출하여 SDDL로 되돌려 보낼 수 있습니다. 우리가 알아야 할 것은 ObjectAce 개체를 올바르게 작성하는 방법이며 InsertAce()으로 전화하여 RawSecurityDescriptor 개체에 추가 한 다음 SDDL로 내 보냅니다. Trewor 설리반의 대답에서

# Create a Security Descriptor from SDDL 
$SD = New-Object -TypeName System.Security.AccessControl.RawSecurityDescriptor -ArgumentList 'O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;S-1-5-21-3231263931-1371906242-1889625497-1141)S:P(AU;FA;GA;;;WD)(AU;SA;GWGX;;;WD)'; 

# Add a new Access Control Entry 
# ObjectACE constructor docs: http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.objectace.objectace(v=vs.110).aspx 
$ArgumentList = @(
    [System.Security.AccessControl.AceFlags]::None, 
    [System.Security.AccessControl.AceQualifier]::AccessAllowed, 
    1, 
    [System.Security.AccessControl.ObjectAceFlags]::None, 
    ) 
$ObjectACE = New-Object -TypeName System.Security.AccessControl.ObjectAce -ArgumentList $ArgumentList; 
$SD.DiscretionaryAcl.InsertAce($ObjectACE); 

# Convert the Security Descriptor back into SDDL 
$SD.GetSddlForm([System.Security.AccessControl.AccessControlSections]::All); 
+0

이것은 적절한 액세스 마스크가 없다는 것을 의미합니까? funtion Get-AccessMaskFromPermission을 찾았습니다. http://blogs.msdn.com/b/wmi/archive/2009/07/27/scripting-wmi-namespace-security-part-3-of-3.aspx – Bunyk

+0

좋은 찾기 - 죄송 합니다만, 생각을 채우기 전에 약속을 지어야했습니다. –

+1

당신의 대답은 도움이되었으므로 나중에 사용할 수 있도록 끝낼 수있었습니다. ;) – Bunyk

1

사용 정보는 내가 다음 코드를 사용하여이 추가 관리 :

function add_sid_with_A_GA($sddl, $sid) { 
    $security_descriptor = New-Object -TypeName System.Security.AccessControl.CommonSecurityDescriptor -ArgumentList @($false, $false, $sddl); 

    $security_descriptor.DiscretionaryAcl.AddAccess("Allow", $sid, 268435456,"None","None") 

    # Convert the Security Descriptor back into SDDL 
    $security_descriptor.GetSddlForm([System.Security.AccessControl.AccessControlSections]::All); 
} 

268435456는 GA의 권리를위한 AccessMask입니다.

관련 문제