AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi [Erledigt] JwSCL AccessCheck löst Gruppen nicht auf
Thema durchsuchen
Ansicht
Themen-Optionen

[Erledigt] JwSCL AccessCheck löst Gruppen nicht auf

Ein Thema von berens · begonnen am 11. Aug 2015 · letzter Beitrag vom 12. Aug 2015
Antwort Antwort
berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#1

[Erledigt] JwSCL AccessCheck löst Gruppen nicht auf

  Alt 11. Aug 2015, 14:07
Zitat:
TL;DR
-Nimmt man einen Benutzer in eine Gruppe auf, muss Dieser sich erst neu anmelden, damit die Änderungen wirksam werden
-Der Benutzer ist laut AccessCheck NICHT Mitglied aller generischen Administrator-Gruppen (Domänen-Admins etc.), wenn das Programm nicht mit rechter Maustaste --> Als Administrator ausführen gestartet wurde.
Hallo!

Bezugnehmend auf http://www.delphipraxis.net/186129-m...ststellen.html und http://www.delphipraxis.net/184812-w...verwenden.html bin ich immernoch dabei zu prüfen, ob der aktuell angemeldete Benutzer (also der Context, in dem mein Programm läuft) die Berechtigung für etwas hat: Wenn eine Gruppe die Berechtigung hat, in welcher der Benutzer Mitglied ist, oder eine Gruppe, welche die zuerstgenannte Gruppe enthält usw. (Verschachtelung, Vererbung(?).

Zwischenfrage: Reden wir überhaupt von Vererbung, wenn ein Benutzer Mitglied in einer Gruppe ist, bzw. eine Gruppe Mitglied in einer Gruppe? Oder hab dies garnichts mit Vererbung zu tun? (Bei Dateien und Ordnern heißt vererben ja dass sich die Rechte auf die Unterordner auswirken, Gruppenberechtigungen wirken sich ja dort IMMER auf die enthaltetenen Gruppen und Benutzer aus...)


Ich bin nun soweit, dass ich meinen TJwSecurityDescriptor habe, in dem die Rechte etc. nun korrekt gespeichert sind. Mit
Delphi-Quellcode:
  CheckBox1.Checked := TJwSecureGeneralObject.AccessCheck(mySecurityDescriptor, NIL, 1, TMySampleMapping);
  CheckBox2.Checked := TJwSecureGeneralObject.AccessCheck(mySecurityDescriptor, NIL, 2, TMySampleMapping);
kann ich nun sogar -korrekt- prüfen, ob der aktuelle Benutzer etwas darf (hier: Ob das "Recht" bzw. Bit 1 bzw. 2 in dem SecurityDescriptor gesetzt ist). Wenn ich -auf meinem lokalen PC ohne Domäne- eine Gruppe berechtige, wirkt sich das Recht korrekt auf meinen Account aus, der Mitglied in dieser Gruppe ist, auch wenn mein Account nicht explizit im SecurityDescriptor erwähnt ist. Soweit alles super.

Wenn ich das Ganze nun in einer Domäne teste und dort eine Gruppe berechtige, in der mein aktuell angemeldeter Domänenbenutzer Mitglied ist, funktioniert das aber nicht und ich erhalte immer "False" zurück.

Scheinbar wird also nicht nachgeschaut, ob der aktuelle Benutzer Mitglied in dieser Gruppe ist. Wie kann man das korrigieren?

Edit:
1) Ich verwende für Clienttoken NIL, weil ich davon ausgehe, dass AccessCheck dann einfach meinen aktuellen Benutzeraccount nimmt. Spricht was dagegen?
2) Ich verwende MapGenericMask nicht, was in diesem Beispiel verwendet wird: http://www.delphipraxis.net/837437-post14.html , da ich einfach bei DesiredAccess nur das "Bit" übergebe, dessen Zugriff ich brauche (PowerOf2, also 1-2-4-8-16-...). Kombinationen wäre später auch möglich (z.B. bei "15" (Binär: "1111") müssten die ersten vier Bits/ACEs "Erlauben" sein). Ich denke mal, MapGenericMask brauch man nur, wenn bestimmte Bedingungen eingehalten werden müssen (z.B. bei Dateien erfordert "Schreiben" unbedingt auch das Recht "Lesen"), und deshalb kann ich es weglassen, oder?

Geändert von berens (12. Aug 2015 um 09:16 Uhr)
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#2

[Erledigt] JwSCL AccessCheck löst Gruppen nicht auf

  Alt 12. Aug 2015, 09:13
Ok, Problem gelöst, ich weiß nicht recht, ob ich mich wegen der Ursache des Problems ärgern, oder wegen der einfachen Lösung freuen soll. Um mein Programm zu testen, habe ich es jedes mal in meine Testdomäne übertragen und dort immer und immer wieder getestet. Was hier nicht erwähnt wurde, ist das ich die Domänen-Gruppen in der laufenden Sitzung erstellt habe, und meinen Benutzer auch dann "erst" in die Gruppen hinzugefügt habe.

Mal wieder ist mehr Hintergrundwissen echt von Vorteil:
Dank http://blog.dikmenoglu.de/2009/11/al...s-exportieren/ weiß ich nun dass der Benutzer erst nach einer erneuten Anmeldung an der Domäne tatsächlich in die entsprechenden Gruppen aufgenommen wird. Das muss man erst mal wissen!

Zitat:
-Hat sich der Benutzer nach dem hinzufügen zur Gruppen erneut an seinem Client angemeldet? Denn Gruppenmitgliedschaften werden nicht während einer Benutzersitzung ausgewertet, sondern nur bei der Anmeldung.

-Hat sich der Benutzer bereits neu angemeldet, kann mit Whoami /all das Access-Token ausgewertet werden. Damit kann man überprüfen, ob sich der Benutzer auch tatsächlich in der entsprechenden Gruppe befindet.
Den "whoami /all" Befehl kann ich Euch nur wärmstens empfehlen, er zeigt ALLE Gruppen an, in der man direkt oder auch indirekt (durch 1000fache Verschachtelung) Mitglied ist. Da man die Kommandozeilenausgabe auch in eine Datei umleiten kann, lässt sich diese besser lesen und durchsuchen. Man nehme hier "whoami /all > x:\1.txt" um z.B. auf Laufwerk X: eine Textdatei mit dem Namen 1.txt zu erstellen... (oh, steht ja auch oben auf der Seite beschrieben... )

Und jetzt kommt nochmal der besondere Clou:
Die UAC beeinflusst die Ergebnisse der Abfrage [der Gruppenmitgliedschaft] mit dem AccessCheck. Mein Benutzer ist Mitglied von "Domänen-Admins". "Domänen-Admins" hat in meiner Demo ein bestimmtest Recht. Wenn ich das Programm nun normal starte habe "ich" dieses Recht aber nicht. .exe-Datei nochmal mit rechte Maustaste "Als Administrator ausführen" gestartet --> Recht vorhanden, Alles in Ordnung.

Dank an alle Leser, ich hoffe, meien Antwort konnte Euch auch helfen.
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 19:11 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