Folgendes Problem ich habe ein WindowsDienst der als SYSTEM ausgeführt wird und möchte von diesem Dienst ein Programm auf einem bestimmten Benutzerkonto X starten.
So wird regedit zwar gestartet aber auf dem SYSTEM-Konto
Das ich btw. nur erreichen kann wenn ich mittels System Dienst die GUI(explorer.exe) auf dem SystemKonto starte. und meine GUI Prozesse kille.
was ja nicht das Ziel ist...
Probiere mal den ImpersonateManager (bzw. ProcessImpersonator) von Impersonation with C#. Das müsste deine Anforderungen bzgl. Anmelden über "Domain", "User" (und "Passwort") erfüllen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
Warumm sollte ich nicht den Code der ms Doku verwenden. :D Aber egal.
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);
Das geht ja nicht da das Programm das Passwort des Benutzers nicht kennt.
Gibt es noch eine andere Möglichkeit ohne Passwort?
Im Prinzip sollte es ja gehen das das Programm Systemrechte hat oder sehe ich falsch?
Und
Zitat
Es gibt aber verschiedene Wege der Impersonation.
Welche Du brauchst, das ist aus diesem Thread nicht ersichtlich.
Kenne mich überhaupt nicht mit aus, hab das Thema noch nie angefasst.
Werde aber gleich mal Googlen welche "Formen" es da gibt.
Warumm sollte ich nicht den Code der ms Doku verwenden. :D Aber egal.
Naja, das eine ist den Code aus der Doku nehmen und verstehen, das andere blind kopieren.
Die Doku verweist ja auch auf die Quelle von hToken.
Zitat von HexEdit
Gibt es noch eine andere Möglichkeit ohne Passwort?
Das wäre ein Sicherheitsleck.
Erklär, was Du tun willst.
Dann kann man Dir sagen, ob der Weg überhaupt aus Sicherheitsaspekten so valide ist.
Aber etwas auszuführen im Namen des Users, wenn Du dessen Credentials nicht kennst: nicht valide.
Und in Unternehmen auch in 99% der Fälle nicht legal (vor allem nicht mit Betriebsräten).
Ich will ein Tool erstellen das unter anderem die Funktionalitäten von psexec hat.
Und da bei psexec das Passwort nicht erforderlich ist habe ich jetzt angenommen das das ohne Passwort möglich ist.
Zitat
Und in Unternehmen auch in 99% der Fälle nicht legal (vor allem nicht mit Betriebsräten).
Bin noch in der Schule und hab sowas btw auch nicht mit Schul-PCs vor :D
Auch psExec wird nicht wahllos irgendein User impersonaten können.
Das wäre eine Windows-Lücke.
Und soweit ich weiß, funktioniert das Impersonate in PsExec durchaus mit Passwort - und fragt diese auch beim User Parameter ab.
Der -Credentials Parameter funktioniert mit gecachten Credentials; auch dort ist also eine Eingabe dieser notwendig.
So nach ein bisschen googlen habe ich einen DLLImport (CreateProcessAsUser) erstellt und obwohl der Dienst SYSTEM rechte hat hab ich den ErrorCode für Zugriff verweigert erhalten, weiß jemand warum?
Dann ist mir aufgefallen das der import eig. nichts anderes macht als einen Prozess mit diesen Optionen in der ProcessStartInfo zu starten. (Hätte ich auch früher darauf kommen können :D)
Das heisst aber noch lange nicht, dass Du dazu genügend Rechte hast.
"LocalSystem" kann auch nicht irgendwas einfach so im Namen anderer Ausführen - und das ist gut so.
Was heisst "in einem anderen Benutzer"? In einer anderen aktiven Anmeldung? Oder als einen anderen Benutzer?
Ohne Credentials (Username+Password oder bereits den User Token) ist das in Windows nicht möglich.
Da Du aber weiterhin nicht sagen willst, was dieses andere Programm (wirklich ein Programm mit einer Instanz, wenn ja was für eine Art von Instanz? Shell, UI, Service, Call? oder nur ein Code Snippet?) ist, kann man Dir auch nicht genau helfen.
Ja in der GUI des anderen Benutzers und das Problem mit dem Passwort hab ich mittlerweite auch verstanden dh.
Ein Programm im betreffenden Konto führt den folgenden cmd Command aus "sc start Dienstname -rp -userName:userName -password:(Vom Benutzer eingegebenes Passwort) -path:regedit.exe -args:regeditArgs"
Was soll daran Dubios sein bräuchte ich auch "Fremden" Rechnern SystemRechte würde ich A: PsExcec herunterladen oder B: von einem Linux USB-Stick booten und gewisse Systemdateien durch cmd austauschen(zb Utilman.exe die in logonUI.exe startbar ist)...
Der Sinn dahinter ist: Gewisse Aktionen in Windows erfordern Systemrechte(manchmal aleine das lesen von bestimmten Dateien oder Ordnern)
Und deswegen benötigt mein Programm Systemrechte und da ich denke dass so ein Dienst mit wenigen Zeilen Code geschrieben ist will ich nicht unbedingt auf ein externes Programm wie PsExec ausweichen.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von HexEdit am .
Den Dienst installiere ich ja und die Credentials werden auch übergebendas Problem ist immer noch die Exception "access denied" obwohl Credentials stimmen.
Hab auch mal mein PW entfernt und es funktioniert wie folgt immer noch nicht dh Exception
Wird bei "OnStart" aufgerufen mit StartProcess("cmd.exe", "@Echo Test")
Und ich kann dir versichern das ich es nur für Private Zwecke benötige.
Für was "Illegales" soll man den sonst so ein Programm verwenden ->
- Für die möglichen Dinge gibt es bereits Programme.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von HexEdit am .
Naja, wenn ich hier "Admin" sehe, dann bin ich mir hier sehr sicher, dass Du jeden empfohlenen Sicherheitsaspekt einer Anwendung bzw. eines Systems missachtest.
Aber das lass ich an dieser Stelle mal Dein Problem sein.
Access Denied kann hier viele Ursachen haben
... keine Rechte auf die Exe
... keine Rechte auf ein Pfad
... keine Rechte auf eine Dependency
... falsche Credentials
... Du versuchst einen Domain User gegen Local System zu authN
... Du versuchst eine Anwendung zu starten, die eine UI / Shell hat.
... das Vorgehen matched mit einer Virenscanner Heuristik und der Virenscanner knallt Dir Dein Zeug weg
... much more...
Zitat von HexEdit
Den Dienst installiere ich ja und die Credentials
Und wieso zeigt Dein Code dann erneut Plaintext Credentials statt einer Impersionation?
Velleicht hab ich das mit den Credentials falsch verstanden aber der Dienst bekommt als Start- Argument den Benutzernamen und das Password des Kontos auf dem das Programm ausgeführt wird mit übergeben.
Die dann an die ProcessStartInfo übergeben werden
Und installiert werden, muss der Dienst ja mit SystemRechten sonst hat das Programm ja nur Nutzerrechte.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von HexEdit am .