alex: Perl-LDAP Benutzergruppen

Hallo Leute.

Ich habe mal ne Frage zu Benutzergruppen:

Mittels Win32::FileSecurity bekomm ich die Rechte von Dateien.
Standard sind 3 Werte:

Vordefiniert\Administratoren
Vordefiniert\Benutzer
NT-AUTORITÄT\SYSTEM

Ich frage mittels LDAP die Benutzergruppen von Usern ab.
Mein Filter sieht so aus:
(&(objectClass=user)(objectCategory=person)(cn=%s))

Alles wunderbar, doch wie ordne ich die Benutzergruppen den Gruppen zu, die ich durch Win32::FileSecurity bekommen habe?
Ich hab zum Beispiel als Benutzergruppe von LDAP folgendes bekommen:
"Domänen-Admins".

Was bringt mir das jetzt? Ich möchte das am liebsten 1:1 vergleichen können.

Um zu wissen, ob ein Benutzer bestimmte Dateien per Web lesen darf, muss ich halt auch die Gruppenrechte betrachten.

Kann mir jemand ein paar Seiten empfehlen wo sowas beschrieben wird?
Möglichst Perl-freundlich ;)

danke

  1. Hallo Alex,

    Vordefiniert\Administratoren
    Vordefiniert\Benutzer

    Wenn ich es richtig verstanden habe sind das auch Gruppen, lokale Gruppen auf dem jeweiligen Rechner, auf dem Du das Filesystem untersucht hast. Diese haben Mitglieder, lokale Accounts oder Domänenaccounts, z.B. Domänen-Admins (wenn der Rechner Mitglied einer Domäne ist).

    Löse die (ggf. verschachtelten) Gruppenmitglieder auf, bis Du alle wirklichen Mitglieder zusammengesammelt hast und überprüfe nun ob dein User Account dabei ist (Bzw. ob Dein User Account in einer dieser Gruppen Mitglied ist).

    Wenn Du dann noch weißt, welche Rechte diese Gruppe(n) auf dem FileSystem hat/haben, weißt Du auch was Dein User Account darf.

    mfg
    HADI

    1. huhu,

      sorry ich kenn mich mit der materie nicht gut aus, so dass ich aus deiner antwort nicht schlau werde.

      vielleicht sollte ich das problem nochmal neu umschreiben, dann wirds vielleicht für beide seiten klarer:

      • ich hab nen benutzer den ich an nem server anmelde
      • der benutzer hat keinen direkten zugriff auf dateien, sondern über bestimmte benutzergruppen, denen er zugeordnet ist, kann er drauf zugreifen
      • ich bekomme per ldap alle benutzergruppen des benutzers

      ich bin als dieser benutzer angemeldet, kann eigentlich alles im system lesen, was wohl damit zusammenhängt, dass die benutzergruppe des users "Domänen-Admins" ist.

      aber das ist keine benutzergruppe, die ich durch win32::FileSecurity auslesen kann.

      wenn ich dich jetzt richtig verstehe, dann soll ich das jetzt rekursiv weitermachen, weil "Domänen-Admins" wohl auch in einer anderen Gruppe ist?

      brauch ich dazu nen neuen filter? weil Domänen-Admins ist kein benutzer und wird natürlich nicht gefunden..

      also vielleicht objectCategory=group????

      freue mich auf ne antwort
      alex

      Hallo Alex,

      Vordefiniert\Administratoren
      Vordefiniert\Benutzer

      Wenn ich es richtig verstanden habe sind das auch Gruppen, lokale Gruppen auf dem jeweiligen Rechner, auf dem Du das Filesystem untersucht hast. Diese haben Mitglieder, lokale Accounts oder Domänenaccounts, z.B. Domänen-Admins (wenn der Rechner Mitglied einer Domäne ist).

      Löse die (ggf. verschachtelten) Gruppenmitglieder auf, bis Du alle wirklichen Mitglieder zusammengesammelt hast und überprüfe nun ob dein User Account dabei ist (Bzw. ob Dein User Account in einer dieser Gruppen Mitglied ist).

      Wenn Du dann noch weißt, welche Rechte diese Gruppe(n) auf dem FileSystem hat/haben, weißt Du auch was Dein User Account darf.

      mfg
      HADI

        • ich hab nen benutzer den ich an nem server anmelde

        Wie wird denn der Benutzer angemeldet? Vermutung: Windows(-Domain)-Login?

        • der benutzer hat keinen direkten zugriff auf dateien, sondern über bestimmte benutzergruppen, denen er zugeordnet ist, kann er drauf zugreifen

        Es ist eigentlich üblich das nicht direkt Benutzer im FileSystem eingetragen werden, sondern Gruppen, in denen dann die Benutzer eingetragen sind. Diese Gruppen unterscheiden sich in (rechner-)lokale Gruppen und "Active Directory" Gruppen (dort gibt es dann domain-lokale, globale und universale Gruppen).

        • ich bekomme per ldap alle benutzergruppen des benutzers

        Also vermute ich mal das Du die Active Directory Gruppen per LDAP bekommst. Nun mußt Du nur noch überprüfen ob eine (oder auch mehr) dieser LDAP AD-Gruppen als Mitglied einer der Gruppen auf dem FileSystem ist -> Der Benutzer hat die Rechter dieser Gruppe(n).
        Aber: Es gibt auch so was wie "negativen" Zugriff, d.h. wenn ein Benutzer Mitglied in einer Gruppe ist, die im Rechte einräumt kann dieser die Rechte über die Mitgliedschaft in einer anderen Gruppe (die den Zugriff verbietet) verlieren.

        ich bin als dieser benutzer angemeldet, kann eigentlich alles im system lesen, was wohl damit zusammenhängt, dass die benutzergruppe des users "Domänen-Admins" ist.

        Als Domain-Admin hat der Benutzer normalerweise sehr viel Rechte auf dem Rechner, da er vmtl. in der lokalen "Administrators" Gruppe Mitglied ist.

        aber das ist keine benutzergruppe, die ich durch win32::FileSecurity auslesen kann.

        Richtig, "Domain-Admins" ist keine lokale Gruppe auf dem Rechner, sondern eine Active Directory Gruppe.

        wenn ich dich jetzt richtig verstehe, dann soll ich das jetzt rekursiv weitermachen, weil "Domänen-Admins" wohl auch in einer anderen Gruppe ist?

        Genau, ich vermute mind. in der lokalen Administrators Gruppe. Ggf. auch noch viel mehr ...

        brauch ich dazu nen neuen filter? weil Domänen-Admins ist kein benutzer und wird natürlich nicht gefunden..

        Ja.

        also vielleicht objectCategory=group????

        Schau Dir mal das Schema des Active Directory an. Dort findest Du alle Attribute die via LDAP abgefragt werden können. Damit solltest Du die Filter zusammenbauen können.

        mfg
        HADI

        1. danke für eure antworten,

          scheint wohl doch ne menge mehr arbeit zu sein, als ich vorher kalkuliert hatte :(

          grüße
          alex

  2. Hallo,

    Vordefiniert\Administratoren
    Vordefiniert\Benutzer
    NT-AUTORITÄT\SYSTEM

    Ich frage mittels LDAP die Benutzergruppen von Usern ab.
    Mein Filter sieht so aus:
    (&(objectClass=user)(objectCategory=person)(cn=%s))

    Alles wunderbar, doch wie ordne ich die Benutzergruppen den Gruppen zu, die ich durch Win32::FileSecurity bekommen habe?
    Ich hab zum Beispiel als Benutzergruppe von LDAP folgendes bekommen:
    "Domänen-Admins".

    Drei Dinge dazu:

    1. Relevant für Windows ist nur die SID des Benutzer / der Gruppe - das ist eine sehr lange, eindeutige Kennung, die beim Anlegen derselben vergeben wird. Das heißt: Du willst eigentlich SIDs vergleichen, nicht irgendwelche Namen (weil die irreführend sein können). Die SIDs der Gruppen und Benutzer stehen auch irgendwo im LDAP (frag mich aber bitte nicht nach dem genauen Schema, ich bin kein AD-Experte; gib Dir halt mal im Zweifel alle Attribute zu einem LDAP-Objekt aus und such sie Dir dort heraus).

    2. Gruppen können unter Windows auch "Mitglieder" anderer Gruppen sein. Wenn ein Rechner in eine Domäne hinzugefügt wird unter Windows, wird die Domänen-Gruppe "Domain Admins" automatisch zur lokalen Gruppe "Administratoren" hinzugefügt; damit haben Domain Admins automatisch Admin-Rechte auf allen Rechnern der Domäne.

    3. Lokale Benutzer und Gruppen (wie "Administratoren") stehen nicht im LDAP, weil sie nicht Teil der Domäne sind. Du müsstest dazu irgendwie auf die lokale Benutzerdatenbank unter Windows zugreifen. Wie, kann ich Dir leider nicht sagen, ich kenne mich da nicht so extrem gut aus.

    Um also zu überprüfen, ob ein Benutzer Rechte auf eine Datei / ein Verzeichnis hat, musst Du rekursiv alle Gruppenmitgliedschaften auflösen (d.h. erst einmal alle Gruppen zu einem Benutzer heraussuchen, dann zu jeder Gruppe alle Gruppen und dann zu diesen wieder alle weiteren Gruppen bis irgendwann keine Ergebnisse mehr da sind). Danach suchst Du Dir zu allen Gruppen denen der User direkt oder indirekt angehört die SID heraus und vergleichst diese mit den ACL-Einträgen der Datei / des Verzeichnisses. Wenn's einen Treffer gibt, ist Zugriff möglich.

    Als zusätzlicher Hinweis vielleicht noch, dass Windows - zumindest wenn ich mich richtig erinnere - auch negative ACLs kennt, d.h. man in den ACLs auch zusätzliche Rechte definieren kann "der darf nicht". Das müsstest Du vermutlich auch berücksichtigen - außer ihr nutzt solche Berechtigungen pauschal nicht.

    Viele Grüße,
    Christian

    1. huhu,

      inzwischen hab ich ne anständige version, eine frage hätte ich aber noch:

      kann es sein, dass es keine beidseitige verkettung geben muss?
      wenn also eine gruppe im benutzer eingetragen ist muss die gruppe nicht zwangsweise den benutzer als member enthalten?

      blöd ist es dann wenn die gruppe member definiert zb Benutzer X, aber der Benutzer kein einziges memberOf hat?

      1. Lokale Benutzer und Gruppen (wie "Administratoren") stehen nicht im LDAP, weil sie nicht Teil der Domäne sind. Du müsstest dazu irgendwie auf die lokale Benutzerdatenbank unter Windows zugreifen. Wie, kann ich Dir leider nicht sagen, ich kenne mich da nicht so extrem gut aus.

      ich glaube, dass groupType angibt was für eine Gruppe es ist, und lokal wäre es dann ein wert von -2147483643

      aber das ist eigentlich nur ne vermutung.

      bye alex