Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Dienste Remote Starten u. Beenden, Rechte? (https://www.delphipraxis.net/169481-dienste-remote-starten-u-beenden-rechte.html)

Jumpy 23. Jul 2012 10:57

Dienste Remote Starten u. Beenden, Rechte?
 
Hallo,

mein Programm soll einen bestimmten Dienst, der auf mehreren Servern läuft beenden und später auch wieder starten können.

In der DP hab ich u.a. dieses (und Varianten) dazu gefunden und würd das gerne einstzen:
Dienst/Service starten, stoppen oder Status abfragen

Ich hab dazu aber ein paar Fragen:
1) Machine soll als UNC path angegeben werden, bzw. ganz unten steht was von Name der Machine: Geht das auch über die IP-Adresse irgendwie?

2) Mit welchen Rechten muss mein Programm den laufen, damit es auf einem anderen Rechner/Server Dienste starten und stoppen kann? Mit einem Domöne-User der Adminrechte auf dem Rechner hat, auf dem die Dienste gestartet und gestoppt werden sollen?

mkinzler 23. Jul 2012 11:02

AW: Dienste Remote Starten u. Beenden, Rechte?
 
Das hat eher mit den Rechten desjenigen zu tun, welcher die Dienste remote steuren möchte

Jumpy 23. Jul 2012 13:22

AW: Dienste Remote Starten u. Beenden, Rechte?
 
Das Programm soll auf einem anderen Server laufen als geplante Task. Diese könnte ich mit "irgendeinem" User anlegen und starten lassen. Muss ich dafür einen Domän-Admin-User nehmen (der auch auf den Servern mit den Diensten Admin ist), damit das Programm dort die Dienste starten usw. kann?

nahpets 23. Jul 2012 18:22

AW: Dienste Remote Starten u. Beenden, Rechte?
 
Hallo,

muss es unbedingt per Programm sein oder reicht auch eine Batchdatei?

Wenn eine Batchdatei ausreicht, schau Dir bitte mal das Kommandozeilenprogramm sc an.

Mit sc /? bekommst Du eine ausführliche Hilfe.

Bei den Rechten wirst Du die aus Deiner 2. Alternative benötigen. Der Benutzter, mit dem Du Dein Programm oder die Batchdatei startest muss auf dem Zielrechner, auf dem der Dienst läuft, das Recht zum Starten oder Stoppen des Dienstes haben. Ggfls. einen entsprechenden Nutzer einrichten, der genau dieses Recht zugewiesen bekommt, damit Du keinen "globalgalaktischen" Administratortask einrichten musst, der alles darf. Task mit Adminrechten in der gesamten Domäne richte ich nur ungern ein, da man sie ggfls. durch Manipulation einer Batchdatei missbrauchen kann. Meine Devise lautet da: Sowenig Rechte wie möglich.

mjustin 24. Jul 2012 06:08

AW: Dienste Remote Starten u. Beenden, Rechte?
 
Zitat:

Zitat von Jumpy (Beitrag 1175659)
Das Programm soll auf einem anderen Server laufen als geplante Task. Diese könnte ich mit "irgendeinem" User anlegen und starten lassen. Muss ich dafür einen Domän-Admin-User nehmen (der auch auf den Servern mit den Diensten Admin ist), damit das Programm dort die Dienste starten usw. kann?

Das Recht zum starten von Diensten hat auch der lokale Administrator, und es kann auch ein normales Domänenkonto lokale Admin Rechte erhalten.

Eine neuere Methode ist Windows Management Instrumentation (WMI), das bei entsprechender Konfiguration und Zugriffsrechten über das Netzwerk verwendet werden kann. WMI arbeitet mit SQL-ähnlichen Befehlen wie
Code:
SELECT * FROM Win32_Service
Speziell für Delphi gibt es einen kostenlosen WMI - Quelltextgenerator. Wenn der Code einmal erstellt ist, kann man ihn per Copy-Paste ins das eigene Modul übernehmen (benötigt den Generator also nicht zur Laufzeit). Der generierte Code ist kompatibel mit Delphi 7, 2005, BDS/Turbo 2006 und RAD Studio 2007, 2009, 2010, XE, XE2.

Zu jedem Service würde man dann ein Objekt haben, und kann im Fall eines Win32 Service dann dessen StartService Methode aufrufen.

MSDN Seite zu Win32_Service.StartService: http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Die Homepage ist hier:

WMI Delphi Code Creator

Und auf Google Code das Projekt:

http://code.google.com/p/wmi-delphi-code-creator/

Jumpy 24. Jul 2012 07:50

AW: Dienste Remote Starten u. Beenden, Rechte?
 
@nahpets:
Es muss ein Programm sein. Vllt. kurz zum Hintergrund. Es laufen einige Web-Server auf denen ein bestimmter Portal-Dienst läuft. Der muss gelegentlich ab- und wieder angeschaltet werden können. Dafür soll es ein "Verwaltungsprogramm" geben.

Da die Webserver vom internen Netz aus hinter einer Firewall liegen ist ein Progamm, dass auf jedem Mitarbeiter-Rechner im Netz laufen kann schlecht, da dann für diesen Rechner ein Durchgang durch die Firewall freigeschaltet werden müsste.
Also soll auf den Arbeitsplatzrechnern nur ein Client-Programm entstehen. Auf einem Server soll ein Server-Programm sein, über das die Clients arbeiten können. Nur für das Server-Programm bzw. den Server gibt es nun einen Weg durch die Firewall zu den Webservern um dort die Dineste ein-/auszuschalten.

@mjustin:
Muss ich mich mal einlesen, klingt interessant.

sx2008 25. Jul 2012 02:25

AW: Dienste Remote Starten u. Beenden, Rechte?
 
Zitat:

Zitat von Jumpy (Beitrag 1175730)
Also soll auf den Arbeitsplatzrechnern nur ein Client-Programm entstehen. Auf einem Server soll ein Server-Programm sein, über das die Clients arbeiten können. Nur für das Server-Programm bzw. den Server gibt es nun einen Weg durch die Firewall zu den Webservern um dort die Dineste ein-/auszuschalten.

Wie wäre es, wenn du auf den Servern einen Secure Shell Dienst (z.B. http://www.freesshd.com/) installieren würdest und auf den Clients einen Secure Shell Client (z.B. Putty)?
Dann kannst du Scriptgesteuert die SC.exe - Befehle zum Stoppen oder Starten der anderen Dienste absetzen.
Programmieraufwand im Prinzip gleich Null; du musst nur den Port 22 in der Firewall öffnen und dir Gedanken darüber machen, ob jemand auf den Clients die Secure Shell missbrauchen könnte.

nahpets 25. Jul 2012 10:46

AW: Dienste Remote Starten u. Beenden, Rechte?
 
Hallo,

wenn Du ein explizites Programm benötigst, so spricht nichts dagegen aus diesem heraus SC als Konsolenprogramm aufzurufen. Über die JVCL (http://wiki.delphi-jedi.org/wiki/JVC...vCreateProcess) sollte das gehen und (vermutlich) kannst Du dort auch einem Benutzer noch explizite Rechte angeben. Ansonsten such' bitte mal hier und anderswo nach CreateProcess, CreateProcessAsUser....

Dies hätte den Vorteil, dass nicht einmal Dein Serverprogramm das Recht zum Starten und Stoppen von Diensten haben muss, sondern Du (per Konfiguration?) nur dem Aufruf von SC die benötigten Anmeldedaten/Rechte zuweist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 Uhr.

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