AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Adminrechte für eine Prozedur

Ein Thema von Captnemo · begonnen am 23. Okt 2015 · letzter Beitrag vom 27. Okt 2015
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#11

AW: Adminrechte für eine Prozedur

  Alt 24. Okt 2015, 08:52
Okay, wir kommen der Sache näher Da sieht ja schon mal so aus, wie ich mir das vorstelle.

Ich habe mir mal die Funktion LogonUser angeschaut. In der "muss" ich ja explizit den User und das Passwort mit übergeben.

Ist der User nur normaler User, so muss sicherlich der Benutzername von einem (lokalen) Admin und dessen Kennwort abgefragt werden. Ist er aber selber schon mindestens lokaler Admin, so wären das ja im Grund nicht notwendig.

Als Beispiel nehme ich mal eine Anwendung, die per Manifest immer mit Adminrechten starten will. In dem Fall ist es ja so, dass wenn User bereits Administrator nur die UAC-Abfrage erscheint, dass das diese Programm explizit mit Adminrechten startet, aber Benutzer oder Kennwort-Eingaben sind nicht notwendig. Oder, wenn User eben "normaler" User ist, von Windows dann die Benutzer- und Kennwort-Abfrage kommt, und anschließend das Programm unter dem Benutzerkontext des eingegebenen Benutzers gestartet wird.

So ungefär hätte ich das auch. Ich will nicht selber Benutzernamen und Kennwort abfragen, sondern Windows das erledigen lassen.

Denn selbst wenn ich über die Informationen Benutzername und Kennwort eine lokalen Admins verfüge, so ist bei UAC ja so, dass für bestimmte Änderungen am System die Anmeldung als Administrator nicht ausreicht, sondern auch diesem für solche Vorgänge nochmal explizit erweiterte Rechte zugeteilt werden müssen.

Ich habe das bei mir ausprobiert. Wenn ich mich meinem Benutzerkonto die Lokale Gruppe Administratoren zuweise, und mein Programm starte, so kann ich keine Änderungen an HKLM vornehme. Ich muss es trotzdem mit der rechten Maustaste "Als Administrator ausführen", erst dann sind Änderungen an HKLM möglich, aber, und das ist für mich logisch, gehen die notwendigen Änderungen an HKCU in die Hose. Um also dieses "Als Administrator ausführen" in dem Fall über LogonUser zu erreichen müsste ich ja erst mal einen Benutzer (und Kennwort) haben, dass über noch mehr Rechte verfügt, als es das aktuelle Benutzerkonto in der Gruppe der lokalen Administratoren eh schon hat.

Ich weiß nicht, ob ich mich jetzt klar ausgedrückt habe, und meine Problematik korrekt rüberkommt. Vielleicht habe ich ja an der Funktion LogonUser irgendwas noch nicht verstanden, Also nicht gleich anmeckern
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#12

AW: Adminrechte für eine Prozedur

  Alt 24. Okt 2015, 09:49
Du könntest für das Schreiben in den HKLM eine kleine Exe schreiben, die du dann in deinem Programm mit "runas" aufrufst, und alles ist chic. Vorteil: Du musst dich nicht um Usernamen usw. kümmern und wenn der User keine Adminrechte hat/bekommt, dann funktioniert es sowieso nicht.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#13

AW: Adminrechte für eine Prozedur

  Alt 24. Okt 2015, 11:50
Das könnte ich machen. Ich könnte auch eine .reg erstellen und das mit der machen.
In der Frage ist aber auch ein wenig persönlicher Ehrgeiz drin
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#14

AW: Adminrechte für eine Prozedur

  Alt 24. Okt 2015, 12:05
Diesen Ehrgeiz hatte ich früher auch mal. Jetzt liegt mein Fokus mehr auf der Rente und einer geschmeidigen Zeit bis dahin
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#15

AW: Adminrechte für eine Prozedur

  Alt 24. Okt 2015, 15:38
Also es ist auf jeden Fall nicht möglich (ohne dreckige Hacks) volle Adminrechte zu erhalten (linked Token) ohne deinen Prozess wie schon vorgeschlagen mit "runas" als Administrator neu zu starten. Wenn es nur um eine kleine Einstellung geht, könntest du deinem Programm einen Parameter verpassen und den Prozess bei Bedarf mit "runas" und diesem Parameter im Hintergrund starten. Notfalls IPC einbauen, wenn du der eingeschränkten Instanz irgendein Feedback geben musst.

Andere Möglichkeit, die auch dann funktionieren würde, wenn der User kein lokaler Administrator ist, wäre die Einrichtung eines System Services bei der Installation. Darüber kannst du dann per IPC alle Operationen ausführen, die erhöhte Rechte verlangen.

Die dritte Möglichkeit wäre der "dreckige Hack", den ich erwähnt hatte. Dieser benötigt auch einen Service oder einen Prozess, der mit Systemrechten läuft (könntest du im laufenden Betrieb - lokaler Administrator vorrausgesetzt - spawnen, indem du den Task Scheduler, bzw. den "at" Command in der Console verwendest).
Dein Programm muss dann mit dem Systemprozess kommunizieren und ihm das Handle des aktuellen Thread Tokens mitteilen. Der Service nutzt dann MSDN-Library durchsuchenDuplicateToken, um besagtes Token in seinen eigenen Prozess zu kopieren. Dann der Systemrechte kann hier jetzt das dazugehörige linked Token ermittelt werden, was wieder per DuplicateToken in den Userprozess kopiert wird. Abschließend schickt der Systemprozess das Handle des reinkopierten Tokens nochmal zurück und der Userprozess elevated seinen Thread über MSDN-Library durchsuchenImpersonateLoggedOnUser.
Achtung: Hier kann man sich schnell Sicherheitslücken (privilege Escalations) einbauen.

Mir persönlich wäre es den Aufwand nicht wert, weshalb ich wohl auf die "runas" Methode zurückgreifen würde. Sauberer ist meiner Meinung nach die Service Methode, aber du hattest glaube ich irgendwo weiter oben erwähnt, dass du keine Installation willst.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
axellang

Registriert seit: 3. Mai 2003
Ort: München
138 Beiträge
 
Delphi XE2 Enterprise
 
#16

AW: Adminrechte für eine Prozedur

  Alt 26. Okt 2015, 17:42
HI,

Gibt es die Möglichkeit sich innerhalb des Programm's die Adminrechte vom Betriebssystem anzufordern und später wieder abzugeben?
Das Problem hatte ich auch mal...
http://stackoverflow.com/questions/1...86365#19986365

Axel
Alexander Lang
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#17

AW: Adminrechte für eine Prozedur

  Alt 27. Okt 2015, 09:05
Ich habe mich jetzt zu einer anderen Lösung durchgerungen.
In dem entsprechenden Optionspunkt habe ich einen Hinweis eingebaut, dass dieser nur zur Verfügung steht, wenn das Programm mit der Option "Als Administrator ausführen" gestartet wurde. Wird nun das Programm genau so gestartet, werden die eigentlichen Programmfunktionen ausgeblendet und nur diese Option steht zur Verfügung. Die kann der Anwender oder der Admin nun aktivieren.
Beim erneuten Start im "normalen" Modus wird nun Read-Only der Inhalt von HKLM abgefragt und die dazugehörigen HKCU-Einträge ergänzt.
Damit habe ich mein Ziel erreicht. Es können alle notwendigen Einträge vorgenommen werden und ich stelle Sicher, durch das Deaktivieren der normalen Programmfunktion, dass keiner auf die Idee kommt das Programm immer "Als Administrator" auszuführen.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
axellang

Registriert seit: 3. Mai 2003
Ort: München
138 Beiträge
 
Delphi XE2 Enterprise
 
#18

AW: Adminrechte für eine Prozedur

  Alt 27. Okt 2015, 09:54
Ich habe mich jetzt zu einer anderen Lösung durchgerungen.
In dem entsprechenden Optionspunkt habe ich einen Hinweis eingebaut, dass dieser nur zur Verfügung steht, wenn das Programm mit der Option "Als Administrator ausführen" gestartet wurde. Wird nun das Programm genau so gestartet, werden die eigentlichen Programmfunktionen ausgeblendet und nur diese Option steht zur Verfügung. Die kann der Anwender oder der Admin nun aktivieren.
Beim erneuten Start im "normalen" Modus wird nun Read-Only der Inhalt von HKLM abgefragt und die dazugehörigen HKCU-Einträge ergänzt.
Damit habe ich mein Ziel erreicht. Es können alle notwendigen Einträge vorgenommen werden und ich stelle Sicher, durch das Deaktivieren der normalen Programmfunktion, dass keiner auf die Idee kommt das Programm immer "Als Administrator" auszuführen.
Na ja,

man kann's auch umständlich machen.

Axel
Alexander Lang
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#19

AW: Adminrechte für eine Prozedur

  Alt 27. Okt 2015, 10:30
Damit habe ich mein Ziel erreicht. Es können alle notwendigen Einträge vorgenommen werden und ich stelle Sicher, durch das Deaktivieren der normalen Programmfunktion, dass keiner auf die Idee kommt das Programm immer "Als Administrator" auszuführen.
Und was machst du, wenn noch jemand unter XP als lokaler Admin arbeitet oder ab >= Vista die UAC deaktiviert? In diesem Falle wäre dein Programm unbenutzbar, da alle Programmfunktionen deaktiviert werden.

Machs doch sauber und nimm die "runas" Geschichte und gib die auszuführende Option als Parameter an dich selbst weiter. Grade wenn es nur um Optionen geht. Dort brauchst du nach De/Aktivierung ja kein wirkliches Feedback in deiner GUI anzeigen bzw. weißt ja im Erfolgsfall, wie der neue Status aussieht.

In die DPR packst du sowas in die Art:
Delphi-Quellcode:
begin
  if (ParamCount >= 1) then
  begin
    if (ParamStr(1) = '/toggle') then
    begin
      Beep(700, 1000);
      Exit;
    end;
  end;
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm3, Form3);
  Application.Run;
end.
Und zum Togglen der Option sowas:
Delphi-Quellcode:
var
  ExecInfo: TShellExecuteInfo;
begin
  FillChar(ExecInfo, SizeOf(ExecInfo), #0);
  ExecInfo.cbSize := SizeOf(ExecInfo);
  ExecInfo.lpVerb := 'runas';
  ExecInfo.lpFile := PChar(ParamStr(0));
  ExecInfo.lpParameters := '/toggle';
  if ShellExecuteEx(@ExecInfo) then
  try
    WaitForSingleObject(ExecInfo.hProcess, INFINITE);
  finally
    CloseHandle(ExecInfo.hProcess);
  end;
end;
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
axellang

Registriert seit: 3. Mai 2003
Ort: München
138 Beiträge
 
Delphi XE2 Enterprise
 
#20

AW: Adminrechte für eine Prozedur

  Alt 27. Okt 2015, 11:13
Hi,
ich weiß nicht warum das so kompliziert sein muss.
Wenn ich es richtig verstanden habe, möchtest Du aus deinem laufenden Programm eine
Methode mit Admin Rechten aufrufen, ohne dass das Programm als Admin gestartet wurde und
das ist ohne weiteres machbar. Leider hört man immer wieder das es nicht geht, aber ja, es geht
und es funktioniert tadellos. Natürlich auch mit W10.

In deine konkreten Fall, möchtest Du einen REG Eintrag in der HKLM setzen und das geht, auf einer Workstation,
ergo Client Rechner, nur mit erweiterten Rechten. Beim Server, wenn man als Admin angemeldet ist, braucht man das nicht.
Also höhere Rechte anfordern.

Windows ist so easy und erledigt alles benötigte selbst. Wenn Du als Admin angemeldet bist
greift die UAC und fragt ob Du das zulassen möchtest. Solltest Du aber als Standardbenutzer arbeiten
erscheint die Anmeldemaske, ergo LogIn Fenster, und verlangt die Eingabe eines Kontos/Pass mit höheren
Rechten. Erfolgt keine passende Authentifizierung geht es nicht weiter und der Versuch wird abgebrochen.

Der User kann im Programm weiterarbeiten bzw. kannst Du den User aufmerksam machen das die Einstellung
gesetzt werden muss. Nun kann er, wenn nicht Admin, den Admin-Gott rufen um die Einstellung zu setzen.

Im Anhang findest Du die Lösung deines Problems. Schreibe die Methode um und et voilà, schon
ist das Essen angerichtet...


Axel
Angehängte Dateien
Dateityp: 7z Admin_Process.7z (62,2 KB, 46x aufgerufen)
Alexander Lang

Geändert von axellang (27. Okt 2015 um 11:19 Uhr) Grund: Typo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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