2016-07-12 8 views
1

Ich habe ein Kommandozeilenprogramm (C#), das Konfigurationsdateien basierend auf Maschinenschlüssel verschlüsselt. Ein Powershell-Skript kopiert den Build auf einen Zielserver, ändert die Konfiguration entsprechend und installiert Windows-Dienste. Alle Windows-Dienste werden als lokales Systemkonto ausgeführt (Standardbenutzer, nicht-Administrator) - nennen wir dieses Konto "locuser".Powershell Remoting - kann keine exe als ein anderer Benutzer ausführen

Der Zielserver ist ein Win 2012 R2-Server. All dies wird durch PS Remoting vom Build Server auf diesen Zielserver erreicht.

Jetzt muss ich das verschlüsselte Befehlszeilenprogramm als "locuser" ausführen, damit das Programm den kontospezifischen Schlüssel für die Verschlüsselung verwenden kann. Ich weiß, dass dies leicht erreicht werden kann, indem Start-Process Cmdlet mit -Credentials Parameter aufgerufen wird. Nun, hier ist der Haken, das obige funktioniert gut, wenn ich in (RDP) zum Zielserver remote und dann das Start-Process .... -Credential $cred von einer Powershell-Konsole ausführen.

Allerdings muss ich arbeiten, während ich remote-in (mit meinen Skripten) auf dem TargetServer während der Bereitstellung. Beim Remote-In-Zugriff auf den TargetServer verwende ich Zugangsdaten mit Administratorrechten.

Ich habe versucht, die folgenden

  1. I "locuser" sowohl "Full Control" und "Invoke (Ausführen)" Berechtigungen mithilfe des Set-PSSessionConfiguration -Name Microsoft.PowerShell -ShowSecurityDescriptorUI Befehl erteilt habe. Ich habe diesen Befehl für beide ausgeführt Microsoft.Powershell und Microsoft.Powershell32 - Immer noch Zugriff verweigert
  2. Ich habe die "Lokale Sicherheitsrichtlinie" -> "Lokale Richtlinien" -> "User Rights Assignment" -> Imitieren eines Clients nach der Authentifizierung - und fügte hinzu, sowohl das Admin-Konto (das ich melde mich mit) und den „locuser“ Konto - noch erhält Zugriff verweigert
  3. ich habe auch locuser Admin-Rechte gewährt - Still Zugang
  4. verweigert bekommen

ich bin mir ziemlich sicher, , gibt es einige Konfiguration auf der PS Remoting-Seite von Dingen, die ich verpasse, aber nicht herausfinden kann, was - weil alle Powershell wirft mir ist ein Access Denied Fehler (siehe Screenshot) mit wenig bis gar nicht uns nützliche Informationen zur weiteren Fehlerbehebung.

Auch aktiviert Ereignisprotokolle für alle Spuren, aber ohne Erfolg.

PS Remoting Error

Antwort

0

Sie haben ein Opfer der gefürchteten Doppel Hop gefallen. Grundsätzlich authentifizieren Sie sich von Computer A zu Computer B und versuchen dann, sich erneut von Computer B zu Computer C zu authentifizieren (was in diesem Fall auch B ist).

Wenn es Ihnen möglich ist, sollten Sie besser die Sitzung beenden und eine neue mit den Zugangsdaten des Benutzers starten. Rufen Sie dann einfach Start-Process auf. Ein anderer, chaotischerer Ansatz ist die Verwendung von Schtasks.

Ich kann Ihnen sagen, wie es in der gleichen Sitzung zu tun, aber es ist ein bisschen chaotisch und sehr kompliziert, und sollte nur das letzte Mittel sein:

auf dem Ursprungs-Server (Build Server):

  1. Führen Sie den Befehl Enable-WSManCredSSP -Role Client -Delegate [name] aus, wobei [name] eine IP- oder DNS-Adresse/ein Bereich einschließlich beliebiger Zielserver ist (z. B. "192.168.1.* ")
  2. öffnen GPEdit.msc, navigieren Sie zu Computer Configuration\Administrative Templates\System\Credentials Delegation und prüfen, ob die Regeln Allow delegating fresh credentials und Allow delegating fresh credentials with NTLM... aktiviert sind und umfassen [name]

auf dem Zielserver:

  1. Führen Sie den Befehl Enable-WSManCredSSP -Role Server

Ausführung des Befehls:

Invoke-Command [targetserver] [-Credential $cred] -Scriptblock { 
    ## do stuff 

    Invoke-Command . -Credential $locusercred -Authentication Credssp -ScriptBlock { 
     Start-Process -FilePath $sC#etc 
    } 
} 

Einige Dinge zu beachten:

Erstens ich dieses Setup verwendet, um eine lokale Sitzung zu erstellen, dann entfernt von dort (so AAB statt ABB), so könnten die Gruppenrichtlinien Sachen an der falschen Stelle, aber ziemlich sicher, dass es richtig ist.

Zweitens fand ich, dass Berechtigungsnachweise ein Schmerz sind in Sitzungen zum Laufen zu bringen (in diesem Fall $locusercred). Ich habe es nativ laufen lassen, aber seltsamerweise konnte es den Sicherungsdraht nicht entschlüsseln. Ich habe am Ende einen Sicherungsstring mit einem definierten Schlüssel für die Registrierung gespeichert, damit er immer von jedem Konto entschlüsselt werden kann. Möglicherweise müssen Sie dort Ihre eigene Lösung finden.

All diese Sachen wird in der freien eBook "The Secrets of PowerShell Remoting" erklärt, wenn Sie für die Doppel-Hop-Ansatz gehen, empfehle ich, es zu lesen. Ich habe mich nicht nur realisiert erklären, warum dies ein Problem ist

+0

Eigentlich. Das liegt daran, dass Sie die Anmeldeinformationen von dort an einen anderen Computer und dann an einen dritten Computer senden, und Windows nicht vollständig darauf vertraut, dass es nicht imitiert oder umgeleitet wird. Im Grunde handelt es sich um eine Sicherheitsvorkehrung, daher müssen Sie eine Reihe von Ausnahmen für Dinge, denen Sie vertrauen, hinzufügen und es aktivieren, um zu bestätigen, dass Sie wissen, was Sie tun. –

+0

Ich habe den obigen Befehl versucht .. es gibt mir nun eine detailliertere Fehler - [localhost] Verbindung zum Remote-Server localhost mit der folgenden Fehlermeldung fehlgeschlagen: Der WinRM-Client die Anfrage nicht verarbeiten kann. Die CredSSP-Authentifizierung ist derzeit in der Client-Konfiguration deaktiviert. Ändern Sie die Client-Konfiguration und versuchen Sie erneut die Anfrage . Die CredSSP-Authentifizierung muss auch in der Serverkonfiguration aktiviert sein. – obfuscate

+0

lief ich dies von beiden Servern - ich den gleichen Fehler, wenn ich es sowohl aus dem ursprünglichen Server (Build Server) und den Zielserver ausgeführt - ich auch Anmeldeinformationen auf dem Zielserver zu delegieren zu nur aktiviert sicher zu sein .. immer noch die gleichen Fehler :(- könnte es sein, dass locuser sein sollte .. mit enable-WSManCredSSP nicht sicher, wie das tun, obwohl so konfiguriert werden, ich kann nicht einmal läuft Powershell-Konsole als admin, angemeldet als locuser – obfuscate