Seite 1 von 1

Eigenes Programm anderem User zuordnen?

Verfasst: 25.01.2007 13:52
von Kukulkan
Hallo,

Mein Problem:
Mein Programm soll auf Netzwerk-Shares zugreifen auf die der benutzende User definitiv keinen Zugriff hat. Eine versteckte Freigabe ist nicht sicher genug! Mein Programm kennt nach dem Starten aus seiner Datenbank einen speziellen Benutzernamen, Domain und Kennwort um auf diese Shares zugreifen zu können.

Die Frage:
Wie schaffe ich es dass mein Programm sich selbst zur Laufzeit die Rechte dieses speziellen Users verschafft um so auf die Shares zugreifen zu können? Der 'echte' Benutzer darf niemals Zugriff auf diese Shares erhalten.

Ich hatte die Idee mit LogonUser_() und ImpersonateLoggedOnUser_() (MSDN: http://msdn2.microsoft.com/en-us/library/aa378612.aspx), aber dazu muss der 'echte' Benutzer das SE_TCB_NAME Privileg haben. Und das hat normalerweise nichtmal ein Admin. :freak:

Ideen?

PS. Nein, ein "Ausführen als..." fällt definitiv weg da der Benutzer, der das Programm startet, diese Rechte ja definitiv nicht haben soll! Und auch einen "Loader" zu schreiben ist nicht möglich, da sich dieser zuerst auf die Datenbank verbinden müsste. Das kann ich aber nicht ohne einen Logon zu machen und dann klappt gar nix mehr....

Volker

Verfasst: 25.01.2007 15:36
von bobobo
Häkel Dir einen Service mit hinreichenden Rechten für das Share mit dem
Du per Programm kommunizierst.

Verfasst: 25.01.2007 16:00
von Rings
geht kein 'NET use' um laufwerke kurz zu mappen ?
Dort kann man benutzer/PWD mit angeben. Selbiges sollte auch direkt gehen mit Api soviel ich weiss......... oder du meinst was total anderes.
Anyway, BBB's service geht natürlich, da der mit nem anderen Account laufen kann.......

Verfasst: 25.01.2007 16:07
von Kukulkan
Hallo Bobobo,

Mein Programm besteht aus über 41'000 Zeilen Code und macht an etwa 45 Stellen einen Zugriff auf diese Shares. Dabei sind auch Dateizugriffe über ZIP- und Verschlüsselungs-DLL's die ich nicht beeinflussen kann (nur den Pfad).
Ich kann ja nicht alle diese Zugriffe über einen Service gestalten. Da bin ich alleine mit dem anschliessenden Testen aller Funktionen schon zwei Monate beschäftigt. Die Performance wird sicher auch leiden...

Die neuen Rechte müssen komplett für den ganzen Thread/Process des Programmes gelten. So müssen keine Zugriffe verändert werden. Desshalb möchte ich ja auch den User des Programmes ändern - damit das Programm mit diesen Rechten auf die Shares zugreift.

Volker

Verfasst: 25.01.2007 16:08
von Kukulkan
Hallo Rings,
Rings hat geschrieben:geht kein 'NET use' um laufwerke kurz zu mappen ?
Dort kann man benutzer/PWD mit angeben. Selbiges sollte auch direkt gehen mit Api soviel ich weiss......... oder du meinst was total anderes.
Anyway, BBB's service geht natürlich, da der mit nem anderen Account laufen kann.......
Dann kann der aktuelle User ja während der Laufzeit meines Programmes munter den Share verwenden... Das wäre eine Katastrophe!

Volker

Verfasst: 25.01.2007 19:42
von bobobo
Volker Schmid hat geschrieben:Hallo Bobobo,

Mein Programm besteht aus über 41'000 Zeilen Code und macht an etwa 45 Stellen einen Zugriff auf diese Shares. Dabei sind auch Dateizugriffe über ZIP- und Verschlüsselungs-DLL's die ich nicht beeinflussen kann (nur den Pfad).
Ich kann ja nicht alle diese Zugriffe über einen Service gestalten. Da bin ich alleine mit dem anschliessenden Testen aller Funktionen schon zwei Monate beschäftigt. Die Performance wird sicher auch leiden...

Die neuen Rechte müssen komplett für den ganzen Thread/Process des Programmes gelten. So müssen keine Zugriffe verändert werden. Desshalb möchte ich ja auch den User des Programmes ändern - damit das Programm mit diesen Rechten auf die Shares zugreift.

Volker
na klar doch, kannst Du alles über den Service regeln
Der Service beinhaltet eben die notwendigen Funktionen aus dem
Thread/Process.
In der Kommunikation mit dem Service steckt letztlich Deine auf-
zuwendende Programmierenergie.

Ich denke da musst Du durch.

Frage: Ein Zugriff auf etwas auf das Du keinen Zugriff hast be-
werkstelligst Du wie?

Antwort: Du fragst jemanden der Zugriff hat. Denjenigen nennt man auch Proxy (glaub ich)
glaub ich.


Wenn Du da ne andere Lösung findest dann tu die bitte kund .. Tät mich schon interessieren.

Verfasst: 26.01.2007 09:22
von Kukulkan
Hallo bobobo,

Dank für deine guten Tipps.
na klar doch, kannst Du alles über den Service regeln
Ok, aber wie bringe ich das den zugekauften DLL's für ZIP und Crypto bei?

Also einen User je Thread ändern geht nicht?

Volker

Verfasst: 26.01.2007 11:23
von funk.munich
Hi zusammen,

ich habe zwar auch keine Idee wie man das lösen könnte wollte auch nur kurz mitteilen, dass damit unter Vista noch mehr Probleme auftauchen werden.

Es gibt da doch den neuen security Level UAC. Dort existiert das Problem, wenn Du mit dem eingeloggten User shares einrichtest Du nur mit dem User darauf zugreifen kannst.
Wenn Du jetzt z.B. ein DOS Fenster mit "Run As Administrator" aufrufst und "net use" eingibst, zeigt Dir Vista zwar die shares an, kann jedoch darauf nicht zugreifen.

Aber dafür muss es irgenwie einen API call geben, denn wenn ich das mit dem Explorer ausprobiere (also den als Run as Admin aufrufe) kann ich darauf zugreifen.

Ich habe aber leider noch keine Infos dazu finden können :-(

Gruß,
Daniel

Verfasst: 26.01.2007 14:13
von bobobo
auch da hilft der Service .. nicht ein User loggt sich um, sondern
ein vorhandener Dienst HAT schon passende Rechte und wird nur entsprechend wachgekitzelt.

Die Kommunikation mit dem Dienst bleibt das Problem.

Auch ein Dienst kann Programme starten und die haben dann
üblicherweise die Rechte des Dienstes und dürfen dann das tun,
was der Dienst könnte (wenn er denn könnte, denn der Dienst ist ja
erstmal doof und wird).

Als nettes Prinzipdemo gilt für mich der WindowsInstaller
http://de.wikipedia.org/wiki/Windows_Installer