hallo,
ich versuche gerade ein programm zuschreiben was einen dienst starten anhalten und restarten kann. das klappt auch alles wunderbar.
jetzt möchte ich das programm ohne adminrechte starten lassen. naja wie zuerwarten ging es dann nicht mehr.
meine frage ist nun, wie kann ich mein programm als admin laufen lassen? der „normale“ user hat keine admin rechte, also muss das benutzerkonto vom admin „xyz“ und das password „abc“ im programm hinterlegt werden.
hi,
danke für die schnelle antwort.
aber die user die das programm benutezn sollen, sollen das admin passwort nicht kenne, daher muss es im code hinterlegt werden
Unter unixoiden Betriebssystemen gibt es bei ausführbaren Dateien im Dateisystem ein sogenanntes setuid-Flag. Wenn das gesetzt ist, wird der Prozess unter der Benutzerkennung des Besitzers der Datei gestartet, also z.B. unter der des Administrators, und dabei kein Passwort benötigt. Also falls du zufällig mit Mono unter Linux oder MacOS arbeitest, ist das Problem trivial.
Unter Windows weiß ich nicht, ob es etwas vergleichbares gibt. Ein erstes Googeln hat nichts offensichtliches gebracht.
Mir fällt nur die folgende komplexe Lösung ein: ein mit Adminrechten laufender Prozess läuft dauerhaft (z.B. als Dienst). Wenn einer der von den Anwendern gestarteten Prozesse das tun möchte, wofür er die Adminrechte braucht, spricht er mit dem mit Adminrechten laufenden Prozess, z.B. über SOAP (per WCF) oder vielleicht .NET remoting (?) oder einfach TCPIP, und „bittet“ ihn darum, es für ihn zu tun.
der normale user soll keine dienste starten oder stoppen dürfen.
nur mit hilfe des programm darf er genau diesen einen dienst starten und stoppen.
und dafür muss ich er admin rechte haben.
es muss doch die möglich keit geben den befehl „net start dienstname“ den ich in der console eingeben würde als admin in meinem programm ausführen darf.
also das ich meine funktion „selectedService.Start()“ als admin ausführen kann.
der normale user soll keine dienste starten oder stoppen dürfen.
nur mit hilfe des programm darf er genau diesen einen dienst starten und stoppen.
und dafür muss ich er admin rechte haben.
es muss doch die möglich keit geben den befehl „net start dienstname“ den ich in der console eingeben würde als admin in meinem programm ausführen darf.
also das ich meine funktion „selectedService.Start()“ als admin ausführen kann.
der normale user soll keine dienste starten oder stoppen
dürfen.
nur mit hilfe des programm darf er genau diesen einen dienst
starten und stoppen.
wie wärs mit
Process.Start(Pfad, Benutzer, Passwort, Domäne);
(der Namespace wäre System.Diagnostics)
Damit könntest du dann net start dienstname ausführen Benutzername und PW wären dann im Programm hinterlegt.
es muss doch die möglich keit geben den befehl „net start
dienstname“ den ich in der console eingeben würde als admin in
meinem programm ausführen darf.
Hi,
nein gibt es nicht und wäre eine riesige Sicherheitslücke.
Ohne Identifizierung mit User/Kennport keine Rechte des Benutzers.
Rechte selber kann man an bestimmte User/Gruppen delegieren, dann haben sie die aber immer.
Auch die Unix Lösung mit „Setuid“ Flag ist eher grenzwertig, da sehr risikoreich bei fehlerhafter Software.
das ist irgendwie alles käse.
es muss doch irgend eine möglichkeit geben, das ich vllt vor
dem laden der form mir adminrechte übergeben lassen kann
Ein Programm wird immer im Kontext des Benutzers laufen der dieses gestartet hat das kann man nicht rausprogrammieren (wäre ja auch noch schöner).
Du kannst mit, impersonarisierung nennt sich das glaub ich, arbeiten. Aber du kommst um benutzer und kennwort nicht rum das brauchst du egal mit welchem Lösungsweg du auch versuchtst das zu machen.