Meu script Powershell de adicionar usuários de domínio à máquina remota está falhando com o acesso negado

1

Eu tenho o seguinte script:

Param(
    [String[]] $targetMachines,
    [String] $targetMachineListFile,
    [String] $group,
    [String] $domain,
    [String] $user
)

if (-not ($targetMachines))
{
    $targetMachines = Get-Content $targetMachineListFile
}

foreach ($targetMachine in $targetMachines) 
{
    Write-Output "Adding domain user $user@$domain to $targetMachine"
    $de = [ADSI]"WinNT://$targetMachine/$group,group" 
    $de.Add("WinNT://$domain/$user")
    Write-Output "Done domain user $user@$domain to $targetMachine"
}

O problema é que quando eu adiciono um usuário, ele falha com o erro:

Exception calling "Add" with "1" argument(s): "Access is denied.
"
At C:\Users\jz03qx\source\repos\misc\server-prep\Add-User-To-Remote.ps1:20 char:5
+     $de.Add("WinNT://$domain/$user")
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI
  • Eu tenho acesso de administrador à máquina remota
  • Estou executando isso em powershell com privilégios de administrador.

O que há de errado com o roteiro? ou o que poderia estar errado com a configuração?

    
por Husain 11.05.2018 / 15:48

1 resposta

1

Meu palpite é que você está implicitamente usando autenticação double-hop que é proibida. Ao adicionar um usuário ao grupo na máquina de destino, a máquina de destino está tentando resolver o usuário no Active Directory. No entanto, isso requer uma nova autenticação no Active Directory que é proibida.

Você pode tentar criar uma sessão baseada no CredSSP para direcionar a máquina e emitir o comando na sessão. Exemplo (não testado):

$credential = get-credential
$session = New-PSSession -ComputerName $targetmachine -Credential $credential -Authentication Credssp
Invoke-Command -Session $session -ScriptBlock {
    $de = [ADSI]"WinNT://$using:targetMachine/$using:group,group" 
    $de.Add("WinNT://$using:domain/$using:user")
}

Consulte o link para mais informações sobre o double-hop e possíveis soluções.

O CredSSP deve estar explicitamente habilitado! No cliente, você deve executar:

Enable-WSManCredSSP -Role Client

E no servidor:

Enable-WSManCredSSP –Role Server

Esteja ciente de que o CredSSP expõe suas credenciais (basicamente de texto simples) para a máquina de destino. Em caso de comprometimento da máquina alvo, suas credenciais também serão comprometidas.

    
por 11.05.2018 / 16:09