Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Windows Dienst auf entferntem Computer unter Angabe eines Administratorkontos starten (https://www.delphipraxis.net/179151-windows-dienst-auf-entferntem-computer-unter-angabe-eines-administratorkontos-starten.html)

LokutusvB 17. Feb 2014 16:06

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?

Sir Rufo 17. Feb 2014 16:19

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.

Luckie 17. Feb 2014 16:27

AW: Windows Dienst auf entferntem Computer unter Angabe eines Administratorkontos sta
 
Du musst dich vorher mit WNetAddConnection2W mit dem Rechner verbinden.
Delphi-Quellcode:
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;
Ich hoffe, zumindest, dass das die Richtige Funktion war. Habe ich lange nicht mehr gemacht.

Sir Rufo 17. Feb 2014 16:56

AW: Windows Dienst auf entferntem Computer unter Angabe eines Administratorkontos sta
 
@Luckie

Wie soll deine Methode das hier realisieren?
Zitat:

Zitat von LokutusvB (Beitrag 1248216)
das Passwort so zu verstecken, daß es niemand entschlüsseln kann.

Das ist unmöglich, oder nicht benutzbar ... weil auch das Programm es nicht entschlüsseln kann :mrgreen:

LokutusvB 19. Feb 2014 09:06

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.

Sir Rufo 19. Feb 2014 09:26

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

LokutusvB 19. Feb 2014 11:28

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.

Luckie 19. Feb 2014 12:45

AW: Windows Dienst auf entferntem Computer unter Angabe eines Administratorkontos sta
 
Einen Hexeditor bekommst du überall. Und der reicht.

Phoenix 19. Feb 2014 12:54

AW: Windows Dienst auf entferntem Computer unter Angabe eines Administratorkontos sta
 
Zitat:

Zitat von LokutusvB (Beitrag 1248216)
Dummerweise braucht er dafür eine Angabe eines Admin-Kontos,

Wieso?

Gebe doch einfach dem speziellen Nutzer die nötigen Rechte, genau diesen einen Service zu starten/stoppen:
http://social.technet.microsoft.com/...orum=itproxpsp

Dann brauchst Du kein Admin-Passwort zu hinterlegen.

LokutusvB 27. Feb 2014 15:44

[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 11:04 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf