Fui incumbido de delegar uma série de tarefas quotidianas do nosso domínio a um grupo de técnicos que não tem Domain Admins
filiação. Uma dessas tarefas é a criação de novas raízes Dfs baseadas em domínio (Server 2008 R2 Enterprise DCs). E é aqui que estou preso.
O c0de
Isso é basicamente apenas tentar criar uma raiz Dfs baseada em domínio, usando um controlador de domínio arbitrário (primeiro na lista) como o primeiro servidor de namespace:
$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
}
Teh err0r
O código acima está lançando uma exceção mencionando a falta de acesso a um recurso CIM. O caminho ROOT\Microsoft\Windows\DFSN\MSFT_DFSNamespace
fornecido em CategoryInfo se parece com um caminho 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
As tentativas inúteis de resolução:
Eu tenho "permissões de gerenciamento delegado" por meio do console Dfs para todo o domínio:
que é efetivamente apenas adicionar uma ACE de "controle total" para o principal adicionado ao CN=Dfs-Configuration,CN=System
contêiner do AD.
E como eu estava recebendo um erro indicando permissões ausentes no Service Control Manager usando o assistente "Add Dfs root"dfsmgmt.msc
em , usei sc sdset scmanager
para manipular a string SDDL adicionando o respectivo grupo com permissões "KA" (key access), análogo ao BUILTIN\Administrators
ACE que existe por padrão.
Dessa forma, posso usar o assistente "Adicionar raiz Dfs" para percorrer todas as etapas, mas a criação da raiz em si ainda está falhando - "O servidor de namespace \ADSRV0\Test não pode ser adicionado. Acesso negado"
W00t?
Os endpoints Just Enough Administration (JEA) são adequados para sua tarefa. Projetar um terminal JEA requer três decisões principais:
O endpoint do PowerShell no PS 5.1 não é tecnicamente um endpoint JEA, mas o mecanismo é essencialmente o mesmo.
A partir disso, os grupos de permissão definem quem tem permissão para ligar. Não há limitação no ponto de extremidade do PowerShell do que pode ser feito, então você tem recursos completos de linguagem. E, por último, com RunAsUser em branco - o código é executado representado pelo usuário ou pelas credenciais fornecidas.
Com essa base, consulte a ajuda para
Register-PSSessionConfiguration
, e uma visão geral do JEA .Para obter pontos de bônus, considere o uso de contas de serviço gerenciado de grupo (GMSA) como parte de sua solução, especialmente como o chamador.
No seu caso: você pode restringir o terminal para ser chamado por seus usuários com privilégios limitados.
Em seguida, defina cmdlets específicos que você deseja que eles usem. Eles podem ser incorporados ou expostos a partir de módulos personalizados que você especificar. Mantenha-os específicos para sua tarefa, para evitar ataques de elevação de privilégio com argumentos complicados ou muitos comandos de baixo nível expostos que podem tirar vantagem de serem executados como um usuário elevado.
Você pode usar um
RunAsUser
administrador de domínio ou outra conta com privilégios suficientes.Para criar um namespace DFS em todo o domínio, uma conta que o faça deve ter um privilégio de administrador local em um servidor de namespace,
ADSRV0
no seu caso. Sua última mensagem de erro me sugere que não é assim no seu caso.Apenas para adicionar alguns detalhes de implementação à ideia inicial de Matthew Wetmore aqui, criamos uma função configurando o namespace Dfs de acordo com nossos requisitos, expondo-o em um módulo Powershell
LT-DFSManagement
e criando uma configuração de sessão Powershell em execução em uma "conta virtual" (que está obtendo privilégios de administrador local) em um controlador de domínio restrito a chamar essa mesma função e acessível aos membros de um grupo de segurança de técnicos.Estamos usando
dfsutil
o código como foi escrito para rodar em uma máquina Server 2008 R2, onde os Dfsn -cmdlets não estão disponíveis. Esteja ciente de que o código está usando algumas variáveis globais que não serão definidas em seu ambiente por padrão, mas são vitais para a execução correta do código.O arquivo PSSessionConfiguration define o grupo de segurança para o qual esta configuração de sessão estará disponível:
e o
AD-JEA-DFS
arquivo de capacidade de função restringe o terminal apenas à função Add-DfsNamespace:Um registro final da configuração coloca as coisas no lugar: