AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 831330
Accepted
the-wabbit
the-wabbit
Asked: 2017-02-09 05:24:18 +0800 CST2017-02-09 05:24:18 +0800 CST 2017-02-09 05:24:18 +0800 CST

Powershell:为 AD DS 对象设置所有者失败

  • 772

我想在我构造的 ACL 对象中将“域管理员”设置为所有者Set-ACL的 AD DS 对象1上运行。代码看起来基本上像这样2:

Function SetDSAcl {
       Param (
        [Microsoft.ActiveDirectory.Management.ADObject]$targetObject   # target object
    )

    $targetACL = Get-Acl "AD:\$($targetObject.DistinguishedName)"
    # [some voodoo to get the values for my new ACE]
    # Create a new AccessRule using the object constructor
    # $newAce = New-Object System.DirectoryServices.ActiveDirectoryAccessRule([...])

    # Add the generated ACE to target's ACL
    $targetAcl.AddAccessRule($newAce)

    # Persist the changed ACL to the object
    Set-ACL -AclObject $targetAcl "AD:\$($targetObject.DistinguishedName)"
}

但在 Server 2008 R2 DC (Powershell v5) 上执行代码时,Set-ACL 调用会返回此错误:

Set-ACL : This security ID may not be assigned as the owner of this object

或更通用的“拒绝访问”异常,当使用相同的安全主体从 Server 2012 R2 管理站 (Powershell v4) 运行它时:

Set-ACL : Access is denied

在这种特殊情况下,我什至没有更改所有者,但显然 Set-ACL 只是重写了整个安全描述符。

“修改权限”和“修改所有者”已在目标对象上明确设置,我完全能够使用 gpmc.msc GUI 将这个对象的所有者更改为我想要在 DC 和管理站上的任何内容,所以这不是一个明显的权限问题。另一方面,我还看到代码在由Domain Admins组成员的用户运行后立即运行。

我使用的帐户故意缺少“域管理员”成员身份(它是“BUILTIN\Server Admins”组的成员),但需要能够自由设置对象的所有者。我看到涵盖此错误消息的 MSDN 文章建议“了解您有权将哪些用户和组分配为所有者”,这对我的情况没有帮助。

那么我做错了什么?


1在我的例子中是一个 GPO,但对象的类型并不重要,例如,我也看到它发生在 OU 中。

2调用看起来像一个黑客,Set-Acl -AclObject $targetAcl -Path "AD:\$($targetObject.DistinguishedName)"它确实是。我不能像期望的那样传递一个实现该方法的对象类型-InputObject $targetObject,[Microsoft.ActiveDirectory.Management.ADObject] 出于某种神秘的原因没有这样做。Set-ACLInputObjectSetSecurityDescriptor

powershell active-directory access-control-list
  • 1 1 个回答
  • 3703 Views

1 个回答

  • Voted
  1. Best Answer
    the-wabbit
    2017-02-11T03:47:52+08:002017-02-11T03:47:52+08:00

    当我认为我看到的效果可能是 Set-ACL 的特定实现时,我尝试获取 [System.DirectoryServices.ActiveDirectorySecurity] 类并使用它的 .SetOwner 方法:

    $adsiTarget = [adsi]"LDAP://$($targetObject.DistinguishedName)"
    $idRef = New-Object System.Security.Principal.NTAccount("CONTOSO", "Domain Admins")
    $adsiTarget.PSBase.ObjectSecurity.SetOwner($idRef)
    $adsiTarget.PSBase.CommitChanges()
    

    在我在 DC 上运行代码的初始测试中,如果我想将所有者设置为我自己(取得所有权)但再次未能将所有者设置为Domain Admins ,我感到很震惊:

    Exception calling "CommitChanges" with "0" argument(s): "A constraint violation occurred.
    

    对我来说幸运的是,我在 SF 上偶然发现了“Set-ACL failed”问题的答案,该问题被链接为“相关”。这个答案提到了特定于令牌的权限限制1 作为问题的可能原因,所以我继续在管理站上测试相同的方法,其中本地交互式 DC 令牌限制不适用。它起作用了——我现在可以根据自己的喜好在 Powershell 中设置 DS 对象的所有者(只要我不想在 DC 上这样做)。

    TechNet 论坛中的另一个主题是提供基于 .NET 类的解决方案,无需像 PSCX 这样的 3rd 方 Cmdlet 即可将此权限添加到当前进程令牌,但我还没有找到使其在我的特定情况下工作的方法.


    1这里的相关权限可能是SeRestorePrivilege - 默认情况下,交互式登录进程令牌禁用它。

    这也意味着需要更改 AD DS 对象所有权的帐户需要通过默认 BUILTIN 组(如 DC 上的服务器操作员和备份操作员)中的组成员身份或通过更改默认域控制器策略分配来分配此权限“恢复文件和目录”用户权限。

    • 0

相关问题

  • 资源锁和电源外壳

  • 脚本 - 如何断开远程桌面会话?

  • 如何限制向通讯组发送到外部地址?

  • Powershell对值与数组的作用不同?

  • Windows Powershell Vim 键绑定

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve