2

我正在尝试允许通过 winrs 远程访问服务器。在互联网的某个地方,我发现这需要为 winrm 服务修改 RootSDDL,它的值可以这样获取:

(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 时,我如何添加到这个 SDDL ACE (A;;GA;;;S-1-5-21-The-rest-of-my-user-SID)

是否有任何代码片段可以将 SDDL 解析为 ACE 数组、修改它并解析回来?

4

2 回答 2

1

这段代码没有完全工作,但如果你修复了对象的构造函数参数(在$ArgumentList变量中)ObjectAce,你应该能够让它工作。稍后我会尝试回到这个并完成它。

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

# 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);
于 2014-04-17T12:16:13.623 回答
1

使用 Trewor Sullivan 的回答中的信息,我设法用以下代码添加了这个:

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。

于 2014-04-17T13:16:39.217 回答