GetEffectiveRightsFromAcl + Alternative ?
-
Hey Peoplez,
jemand von euch Ahnung mit Access Rights für Files und Folders unter NT 4, 2000 und >?
Habe folgendes Problem:
Mit meinem Programm soll es möglich sein die wahren effektiven Rechte eines Nutzers auf eine Datei oder einen Folder anzuzeigen.
Normalerweise kann man dazu die Funktion GetEffectiveRightsFromAcl nutzen, diese versagt allerdings wenn es sich dabei um Netzwerkpfade handelt, doch auch dies soll möglich sein. Man gehe davon aus das man Administrative Rechte im Netzwerk besitzt und dieses Tool dann anwendet. Somit sollte also keine Zugriffsproblem bestehen.
Die Funktion GetEffectiveRightsFromAcl kann auf Remotemaschinen die Gruppenzugehörigkeiten eines Benutzers nicht auflösen und berechnet somit keine Effektiven Rechte. Jemand von euch eine Ahnung ob es noch eine andere Funktion gibt oder etwas undokumentiertes, denn Windows muss das ganze ja auch irgendwie handeln.Vielen Dank für eure Antworten.
-
Such mal nach GetEffectiveRightsFromAcl. Danach weißt Du, daß Du diese Funktion nicht wirklich einsetzen willst.
Der empfohlene Weg geht über AccessCheck, wie es z.B. im KB Artikel 115945 beschrieben wird.
Unter den neueren Versionen von Windows hast Du übrigens bereits ein fertiges UI für Deine Zwecke. Schau Dir einfach mal den Access Control Editor an. Im PSDK gibt's auch ein Sample, das die Anwendung demonstriert.
-
Okay wenn du meinst,
dann folgende Frage......
Wie erhalte ich TokenInformationen für folgende Situation...
Der Nutzer kann beliebige Benutzernamen und DomainNamen eingeben und das Programm soll dann überprüfen ob der Benutzer Zugriff auf das Objekt hat und welchen.
Wenn man sich die Funktion AccessCheck anschaut dann sieht das wie folgt aus !
BOOL AccessCheck( PSECURITY_DESCRIPTOR pSecurityDescriptor, HANDLE ClientToken, DWORD DesiredAccess, PGENERIC_MAPPING GenericMapping, PPRIVILEGE_SET PrivilegeSet, LPDWORD PrivilegeSetLength, LPDWORD GrantedAccess, LPBOOL AccessStatus );
So und nun die Frage woher bekomme ich den ClientToken für die besagte Operation ?
Vielleicht kannst du mir ja helfen denn habe versucht ein Beispiel zu finden no chance.
Greets
-
DaDaywalker schrieb:
Okay wenn du meinst,
Was meinst Du damit? Du hast Dich also nicht in der KB umgesehen? Denn nicht ich meine das, sondern:
MSDN schrieb:
Due to these limitations, the GetEffectiveRightsFromAcl API should not be used except for situations where you can be certain that the context is such that any overriding user rights or privileges are not pertinent, and the target object is not secured by granting or denying access to any pseudo-groups. Generally, accurate access information for a given user and securable object can only be retrieved through the AccessCheck function, which requires an access token for the user logon.
Quelle: http://support.microsoft.com/default.aspx?scid=kb;en-us;262278
Und wenn Du dann mal weiterschaust, findest noch zahlreiche Bug-Infos, die die Verwendung von GetEffectiveRightsFromAcl praktisch unmöglich machen.
DaDaywalker schrieb:
Wie erhalte ich TokenInformationen für folgende Situation...
Ein Impersonation Token erhälst Du von OpenThreadToken. Du kannst den User impersonaten, indem Du über die Kombination LogonUser/ ImpersonateLoggedOnUser gehst.
Unter Windows 2000 mußt Du aber aufpassen. Leider benötigst Du hier das Privilege SE_TCB_NAME.
BTW: Wenn es nur um das Anzeigen von Berechtigungen geht, ist vielleicht auch das hier hilfreich (sogar incl. Source):
http://www.sysinternals.com/ntw2k/source/accessenum.shtml
-
Doch Doch ich habe mir die KB durchgelesen auch schon vorher....
Das man GetEffictiveRightsFromAcl nicht nehmen soll ist mir klar dennoch besteht das Problem das ich auch mit AccessCheck nicht wirklich weit komme.Nochmals die Problemschilderung....
Das Programm soll die effektiven Rechte eines Nutzers auf eine Objekt anzeigen. Dieses Objekt kann sowohl Lokal als auch Global sein. Beispiel:
c:\test\test.txt auf Server testsrv ist freigegeben unter Test\Test.txt
somit steht folgender String im Programm. \\testsrv\test\test.txt okay ?
So nun kann der Nutzer einen beliebigen Domainnamen und einen beliebigen UserNamen eingeben und das Programm soll überprüfen welche Rechte der angegebene User besitzt auf diese Datei.Das Problem lässt sich weder mit LogonUser noch mit ImpersonateLoggedOnUser klären das diese Funktionen eine Verbindung zum Lokalen Rechner herstellen und nicht zum Remoterechner. Desweiteren bleibt folgendes fraglich. Die UserCredentials sollen das Passwort nicht enthalten. Sonnst müsste man ja jedesmal den Nutzer nach seinem Passwort fragen.
Die Frage ist ?
ab Windows 2003 ist dies eine Integrierte Funktion.
Im Sicherheitsdialog eines jeden Objektes ist es möglich diese effektiven Rechte anzeigen zu lassen, jedoch macht Windows oder besser Microsoft ebenfalls nur eine approximation der Rechte und kann sie wohl selber nicht bestimmen.Important
The Effective Permissions tool only produces an approximation of the permissions that a user has.....
The actual permissions the user has may be different, since permissions can be granted or denied based on how a user logs on.
etc.......Also wenn du eine Lösung via LogonUser etc. hast, dann sei so nett und poste sie denn ich sehe derzeit kein Land außer das ich die Auswertung der Rechte selber vornehme und eben auch nur eine approximation anzeige.
Gruss.
Danke bis hierher.
-
Eine Alternative, die kein Passwort verlangt, ist mir nicht bekannt. Sorry. Du wirst das wohl selbst ausbusseln müssen.