我试图允许远程访问服务器。在互联网上的某个地方,我发现这将需要对RootSDDL进行修改以用于Winrm服务,并且其值(value)可以这样获取:

(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)

现在,问题如下:当我知道要允许远程访问的用户的SID时,如何像(A;;GA;;;S-1-5-21-The-rest-of-my-user-SID)一样添加到此SDDL ACE?

是否有任何代码片段可将SDDL解析为ACE数组,对其进行修改然后解析回去?

最佳答案

该代码无法完全正常工作,但是,如果您为$ArgumentList对象修复了构造函数参数(在ObjectAce变量中),则应该能够使它工作。我将稍后再尝试解决此问题。

此示例确实显示了如何使用RawSecurityDescriptor类“导入” SDDL,然后调用GetSDDLForm()方法将其“导出”回到SDDL。我们需要弄清楚的是如何正确构造ObjectAce对象,并在将其导出到SDDL之前调用InsertAce()将其添加到RawSecurityDescriptor对象。

# 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);

关于security - Powershell SDDL修改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23132170/

10-11 09:15