C# admin rechte

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.

aber wie?

kann mir da jemand bitte helfen?

DANKE! :wink:

meine frage ist nun, wie kann ich mein programm als admin
laufen lassen?

Hallo,

am einfachsten geht es mit Hilfe eine Manifest-Datei.
Dann fragt Windows bei Programmstart nach dem Password.

Hier ein link

http://www.vb-magazin.de/forums/blogs/janm/archive/2…

Viele Grüße
Thorsten

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

gibt es noch einen anderen weg?

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.

Viele Grüße,
Sebastian

Hi,
du musst dafür sorgen, dass der Dienst durch einen den Benutzer beendet werden darf.

Entweder so: http://www.tom-henne.de/Wiki.jsp?page=DiensteOhneAdm…

oder über die GPOs wenn der Rechner in der Domäne hängt.

Muss der Dienst der gestoppt werden soll denn unbedingt unter Admin/System auf dem Rechner laufen?

Gruss
Joey

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.

Servus,

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.

Hoffe das hilft dir weiter.

Gruß Bytestorm

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 :frowning:

mhmmm

noch jemand eine nette idee?

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.

Es gibt in .Net zwar noch so was : http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

Aber im Grunde ist das auch nur eine Anwandlung der bestehenden Vorschläge.

Suche dir davon etwas aus oder kombiniere die Vorschläge. Am Security-Model von Windows kommst du aber nicht vorbei.

Gruss
Joey

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 :frowning:

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.

Gruß bytestorm.