![]() |
Windows Dienst auf entferntem Computer unter Angabe eines Administratorkontos starten
Hallo,
ich wollte zuerst ein kleines Scrypt schreiben, um einem der Nutzer die Möglichkeit zu geben, auf einem entfernten PC einen Dienst starten und stoppen zu können. Dummerweise braucht er dafür eine Angabe eines Admin-Kontos, was mit PsService.exe auch kein Problem darstellen würde. Nur gibt es bei dem ganzen "Gescripte" oder "Batchen" nicht wirklich die Möglichkeit, das Passwort so zu verstecken, daß es niemand entschlüsseln kann. Deswegen dachte ich mir, schreibe ich fix ein kleines Delphi-Programm. Ich konnte auch schnell im Netz die nötigen Informationen finden, Stichwort OpenSCManager, dafür gibt es viele Beispiele. Allerdings finde ich nirgends die Möglichkeit, Nutzername und Passwort für die Machine mitzugeben, auf der ein Dienst gestartet oder gestoppt werden soll. Gibt es dafür noch eine andere Funktion oder geht das nur unter Verwendung der CMD? |
AW: Windows Dienst auf entferntem Computer unter Angabe eines Administratorkontos sta
Das Problem mit dem Admin-Kennwort bleibt (egal ob Skript, Delphi, etc.) wenn du direkt zugreifen willst.
Bei einem indirekten Zugriff benötigst du das Admin-Kennwort nicht. Schreibe einen Dienst, der auf der Zielmaschine läuft und der von aussen (z.B. per HTTP/HTTPS) angesprochen werden kann. Diesem Dienst übermittelst du nun den Wunsch (Dienst starten/beenden) und irgendwelche Zugangsdaten, die dieser Dienst dann überprüft. Sind diese Zugangsdaten gültig, dann führt der Dienst den Wunsch aus. Dieser Kontrolldienst läuft dann schon im entsprechenden Kontext (Administrator) und hat somit keine Probleme andere Dienste zu starten/beenden. Für jeden Benutzer kann dann auch festgelegt werden, welche Dienste dieser starten/beenden darf. |
AW: Windows Dienst auf entferntem Computer unter Angabe eines Administratorkontos sta
Du musst dich vorher mit WNetAddConnection2W mit dem Rechner verbinden.
Delphi-Quellcode:
Ich hoffe, zumindest, dass das die Richtige Funktion war. Habe ich lange nicht mehr gemacht.
function ConnectToNetworkDriveW(LocalName: WideString; RemoteName: wideString; Username: WideString; Password: WideString;
RestoreAtLogon: boolean): DWORD; var NetResource : TNetResourceW; dwFlags : DWORD; begin dwFlags := 0; ZeroMemory(@NetResource, sizeof(TNetResource)); with NetResource do begin dwType := RESOURCETYPE_ANY; lpLocalName := PWideChar(LocalName); lpRemoteName := PwideChar(RemoteName); lpProvider := nil; end; if (RestoreAtLogon) then dwFlags := dwFlags or CONNECT_UPDATE_PROFILE; Result := WNetAddConnection2W(NetResource, PWideChar(Password), PWideChar(Username), dwFlags); end; |
AW: Windows Dienst auf entferntem Computer unter Angabe eines Administratorkontos sta
@Luckie
Wie soll deine Methode das hier realisieren? Zitat:
|
AW: Windows Dienst auf entferntem Computer unter Angabe eines Administratorkontos sta
Vielen Dank für die Antworten, ich werde das mal probieren, beide Varianten. Ja, Sir Rufo, das war von mir vielleicht ein wenig übereifrig ausgedrückt. :mrgreen:
Es würde schon völlig ausreichen, wenn es irgendwo verschlüsselt übermittelt wird bzw. im Delphiprogramm selbst steht. An den Quelltext kommt der Anwender ja nicht heran. Wenn ich aber ein Script auf seinem PC ausführe, muß er ja nur den Quelltext des Scriptes anschauen und schon kennt er das Kennwort. Und wenn ich die CMD nutze, muß ja nur die CMD mitlesen. Deswegen denke ich, ist ein Delphi-Programm ein ausreichend guter Weg, die Aufgabe zu realisieren. |
AW: Windows Dienst auf entferntem Computer unter Angabe eines Administratorkontos sta
Wenn das im Klartext im Delphiprogramm steht, dann lese ich dir das auch ohne Quelltext aus.
Wenn du das verschlüsselt ablegst, dann steht es irgendwann entschlüsselt im Speicher, bzw. die Entschlüsselungsroutine und der Schlüssel zum Entschlüsseln liegt irgendwo -> es ist also quasi verfügbar |
AW: Windows Dienst auf entferntem Computer unter Angabe eines Administratorkontos sta
Ich gehe davon aus, du verfügst dafür über spezielle Programme. Zumindest kenne ich keinen Weg, mit Standard-Windows-Boardmitteln Informationen aus Exe-Dateien oder aber verschlüsselte Speicherdateien auszulesen. Da dieses Programm erst einmal nur für eine Mitarbeiterin gedacht ist, entscheide ich mich für Luckies Version. Bei deiner Version müßte ich mich erst einarbeiten, da ich so etwas noch nicht gemacht habe.
|
AW: Windows Dienst auf entferntem Computer unter Angabe eines Administratorkontos sta
Einen Hexeditor bekommst du überall. Und der reicht.
|
AW: Windows Dienst auf entferntem Computer unter Angabe eines Administratorkontos sta
Zitat:
Gebe doch einfach dem speziellen Nutzer die nötigen Rechte, genau diesen einen Service zu starten/stoppen: ![]() Dann brauchst Du kein Admin-Passwort zu hinterlegen. |
[Erledigt] Windows Dienst auf entferntem Computer unter Angabe eines Administrator...
Das habe ich nun mal probiert, nach der Anleitung von dir und auch anderen Anleitungen aus dem Internet. Aber kein Erfolg. Möchte ich auf dem PC des Mitarbeiters z.B. ein sc \\servername query Dienst ausführen, kommt immer wieder Zugriff verweigert. Ein Neustart des Servers sowie des Nutzer-PCs hat nicht geholfen. Vollzugriff auf den Service mittels mmc hat nicht geholfen. Da der Server, auf dem der Service läuft, virtuell ist und der Benutzer keine Chance auf eine Anmeldung hat, habe ich ihn nun kurzerhand als Administrator im Server aufgenommen und fertig. Nun kann ich auch von seinem PC aus den Dienst starten und stoppen.
Danke trotzdem für die Hilfe! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf