我的任务是将我们领域中的一些日常任务委派给一群没有Domain Admins
会员资格的技术人员。其中一项任务是创建新的基于域的 Dfs 根(Server 2008 R2 Enterprise DC)。这就是我卡住的地方。
c0de
这基本上只是试图创建一个基于域的 Dfs 根,使用任意(列表中的第一个)域控制器作为第一个命名空间服务器:
$DfsnRootName="test"
$DCList = Get-ADDomainController -Filter * | ForEach-Object { ,$_.HostName }
New-DfsnRoot -Path "\\domain.contoso.com\$DfsnRootName" -TargetPath "\\$($DCList[0])\$dfsnRootName" `
-Description "Dfs-Root für $DfsnRootName" -EnableAccessBasedEnumeration $true -Type DomainV2
$DCList | ForEach-Object {
New-DfsnRootTarget -Path "\\domain.contoso.com\$DfsnRootName" `
-TargetPath "\\$_\$dfsnRootName" -State Online
}
错误0r
上面的代码抛出一个异常,提到缺少对 CIM 资源的访问权限。CategoryInfoROOT\Microsoft\Windows\DFSN\MSFT_DFSNamespace
中给出的路径类似于 WMI 路径:
New-DfsnRoot : Access to a CIM resource was not available to the client.
At line:1 char:1
+ New-DfsnRoot -Path "\\domain.contoso.com\$DfsnRootName" -TargetPath "\\$($DCList ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (MSFT_DFSNamespace:ROOT\Microsoft\...FT_DFSNamespace) [New-DfsnRoot], CimException
+ FullyQualifiedErrorId : MI RESULT 2,New-DfsnRoot
PS Z:\> $Error[0].CategoryInfo
Category : PermissionDenied
Activity : New-DfsnRoot
Reason : CimException
TargetName : MSFT_DFSNamespace
TargetType : ROOT\Microsoft\Windows\DFSN\MSFT_DFSNamespace
无奈的 res0luti0n 尝试:
这实际上只是为添加到CN=Dfs-Configuration,CN=System
AD 容器的主体添加“完全控制”ACE。
当我在使用“添加 Dfs root”向导时收到错误指示服务控制管理器上缺少权限时dfsmgmt.msc
,我曾经sc sdset scmanager
操纵 SDDL 字符串添加具有“KA”(密钥访问)权限的相应组,类似于BUILTIN\Administrators
ACE默认情况下存在。
这样,我可以使用“添加 Dfs 根”向导完成所有步骤,但根本身的创建仍然失败 - “无法添加命名空间服务器 \ADSRV0\Test。访问被拒绝”
W00吨?
Just Enough Administration (JEA)端点非常适合您的任务。设计 JEA 端点需要三个主要决策:
PS 5.1 中的 PowerShell 端点在技术上不是 JEA 端点,但机制本质上是相同的。
由此,权限组定义了允许呼叫的人。PowerShell 端点可以做什么没有限制,因此您拥有完整的语言功能。最后,在 RunAsUser 为空白的情况下 - 代码运行模拟为用户或提供的凭据。
在此基础上,查看 JEA 的帮助
Register-PSSessionConfiguration
和概述。对于奖励积分,请考虑使用组管理服务帐户 (GMSA)作为解决方案的一部分,尤其是作为呼叫者。
在您的情况下: 您可以将端点限制为由您的有限权限用户调用。
然后定义您希望他们使用的特定 cmdlet。这些可以内置,也可以从您指定的自定义模块中公开。保持这些特定于您的任务,以避免使用复杂参数的特权提升攻击或暴露的太多低级命令可以利用作为提升用户运行的优势。
您可以使用
RunAsUser
域管理员或其他具有足够权限的帐户。要创建域范围的 DFS 命名空间,这样做的帐户应该在命名空间服务器上具有本地管理员权限,这就是
ADSRV0
您的情况。您的最后一条错误消息向我表明,您的情况并非如此。在这里,为了给 Matthew Wetmore 的想法添加一些实现细节,我们创建了一个函数来根据我们的要求设置 Dfs 命名空间,将其暴露在 Powershell 模块中
LT-DFSManagement
,并创建一个在“虚拟帐户”中运行的 Powershell 会话配置(其中正在获得本地管理员权限)在域控制器上被限制为调用此功能并且技术人员安全组的成员可以访问。我们在代码中使用它是为了在没有Dfsn
dfsutil
-cmdlet的 Server 2008 R2 机器上运行而编写的。请注意,代码使用了一些默认情况下不会在您的环境中定义的全局变量,但对于正确执行代码至关重要。PSSessionConfiguration 文件定义了此会话配置可用于的安全组:
并且
AD-JEA-DFS
角色能力文件仅将端点限制为 Add-DfsNamespace 函数:配置的最终注册使事情到位: