Endlich klappt es: dynamische Posix-Gruppen im OpenLDAP

Bis vor einiger Zeit war es leider nicht möglich, dynamische Posix-Gruppen in eine Multiproviderumgebung im OpenLDAP einzurichten, die entsprechenden Attribute wurden einfach nicht repliziert. Jetzt aber klappt es.

Sollen die dynamischen Posix-Gruppe genutzt werden, ist es wichtig, dass die dynmischen LDAP-Gruppen bereits korrekt eingerichtet sind. Das Einrichten der dynamischen LDAP-Gruppen ist nicht Bestandteil dieser Anleitung.

Um die dynamischen Posix-Gruppen nutzen zu können, wird eine Schemaerweiterung benötigt. Es werden je eine neue ObjectClass für Posix-Benutzer und für Posix-Gruppen benötigt. Das folgenden Listing zeig die LDIF-Datei um die Schemaerweiterung einzuspielen. Achten Sie darauf, meinen ODI durch den eigene OID zu ersetzen, das Gleiche gilt auch für den Suffix der Namen.

dn: cn=stkaPosixExtension,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: stkaPosixExtension
olcObjectClasses: ( 1.3.6.1.4.1.56860.1.2.1
NAME ’stkaPosixGroup‘
DESC ‚advanced PosixGroup for dynamic use‘
SUP top
AUXILIARY
MUST ( cn $ gidNumber )
MAY ( userPassword $ memberUid $ description ) )
olcObjectClasses: ( 1.3.6.1.4.1.56860.1.2.2
NAME ’stkaPosixAccount‘
DESC ‚advanced PosixAccount for dynamic use‘
SUP posixAccount
AUXILIARY
MAY ( memberUID ) )

Denken Sie daran, das Schema nicht nur auf den Providern, sondern auch auf allen Consumern einzuspielen.

Um später die Gruppen dynamisch erstellen zu können, wird hier nicht das Overlay „dynlist“ verwendet, sondern das Overlay „autogroup“. Für diese Overlay muss ein eigens Modul geladen werden. Das folgenden Listing zeigt das einbinden des Moduls und das Hinzufügen des Overlays zur Objekt-Datenbank.

dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: autogroup.la

dn: olcOverlay=autogroup,olcDatabase={2}mdb,cn=config
changetype: add
objectClass: olcAutoGroupConfig
objectClass: olcOverlayConfig
olcOverlay: autogroup
olcAutoGroupAttrSet: groupOfURLs memberURL memberUID

Auch hier müssen Sie darauf achten, dass die Änderungen sowohl auf den Providern als auch auf den Consumern durchgeführt werden.

Im Anschluss daran kann die erste dynamische Posix-Gruppe auf einem der Provider angelegt werden. Ein Beispiel für eine Posix-Gruppe zeigt das folgende Listing:

dn: cn=dynposix,ou=groups,dc=example,dc=net
cn: dynposix
objectClass: top
objectClass: groupOfURLs
objectClass: stkaPosixGroup
gidNumber: 4242
memberURL: ldap:///dc=example,dc=net?memberUID?sub?(title=Linuxuser)

Jeder Benutzer der im Attribute „title“ jetzt „Linuxuser“ als Eintrag hat, wird zum Mitglied der Gruppe. Selbstverständlich können Sie hier auch andere Attribute oder komplexe Filter nutzen.

Jetzt folgt ein Listing für einen neuen Benutzer, der Mitglied der Gruppe werden soll.

dn: uid=dynuser,ou=users,dc=example,dc=net
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: stkaPosixAccount
cn: John Doe
sn: Dynamo
title: Linuxuser
uid: dynuser
gidNumber: 1000
homeDirectory: /home/dynuser
uidNumber: 12345
userPassword: {ARGON2}$argon2i$v=19$m=4096,t=3,p=1$ZHN…
memberUid: dynuser

Der neue Benutzer zeigt die neue ObjecClass und das Attribut „memberUid: dynuser“. Selbstverständlich lassen sich bereits vorhandene Benutzer um die ObjectClass und das Attribut erweitern.

Bleibt noch der Test, ob der Benutzer auch auf allen Providern und allen Consumern Mitglied der Gruppe ist. Den Test sehen Sie im folgenden Listing:

root@ldap01:~# ldapsearch -Y external -LLL -H ldapi:/// cn=dynposix
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=dynposix,ou=groups,dc=example,dc=net
cn: dynposix
objectClass: top
objectClass: groupOfURLs
objectClass: stkaPosixGroup
gidNumber: 4242
memberURL: ldap:///dc=example,dc=net?memberUID?sub?(title=Linuxuser)
memberUid: dynuser

Es hat geklappt, der Benutzer ist Mitglied der Gruppe und zwar auf allen Providern und allen Consumern. Dieser Punkt war zum Zeitpunkt als wir das Buch geschrieben noch nicht der Fall. Sollte die Mitgliedschaft bei Ihnen nur auf dem Provider angezeigt werden, auf dem Sie die Gruppe und den Benutzer angelegt haben, ist Ihre OpenLDAP-Version nicht auf dem aktuelle Stand. Ich habe es mit der Version 2.6.10 der Symas-Pakete auf einem Debian 13 getestet.

Serverseitig ist damit alles eingerichtet. Fehlt noch der Client. Auf einem Linux-Client, auf dem der „sssd“ (und nur damit klappt es) eingerichtet ist, muss die Datei sssd.conf um die folgenden zwei Zeilen ergänzt werden:

ldap_group_object_class = stkaPosixGroup
ldap_group_object_class_alt = PosixGroup

Vergessen Sie nicht, nach der Änderung den sssd neu zu starten.

Werfen wir jetzt eine Blick auf den Client. Als erstes wird die Identität des vorher eingerichteten Benutzer abgefragt:

root@client:~# id dynuser
uid=12345(dynuser) gid=1000(stka) Gruppen=1000(stka),4242(dynposix)

Dort sehen Sie jetzt auch die Gruppe „dynposix“ aufgelistet.

Jetzt lege ich zu Testen ein Verzeichnis an und gebe nur der Gruppe „dynposix“ das Recht auf das Verzeichnis zuzugreifen und dort Daten speichern zu können.
root@client:~# mkdir /daten

root@client:~# chgrp dynposix /daten

root@client:~# ls -ld /daten
drwxr-xr-x 2 root dynposix 4096 5. Dez 19:37 /daten

root@client:~# chmod 770 /daten

Anschließend wechsel ich die Identität zum Benutzer „dynuser“ um zu testen, ob der Zugriff möglich ist.

root@client:~# su – dynuser

$ cd /daten

$ touch dat1

$ ls -l
insgesamt 0
-rw-r–r– 1 dynuser stka 0 5. Dez 19:38 dat1

Der Zugriff ist möglich, auch das Erstellen einer neuen Datei klappt. Somit sind Sie jetzt in der Lage, die Dateisystemberechtigungen über dynamische Gruppen im OpenLDAP zu steuern.

Ein Wermutstropfen gibt es aber noch: Da hier das Overlay „autoGroup“ genutzt wird, kann das Attribute „memberOf“ nicht dynamisch gefüllt werden. Hier müsste dann noch das Overlay „memberOf“ mit eingebunden werden. Das Overlay war lange Zeit als „deprecated“ gekennzeichnet, wird aber jetzt wieder weiter gepflegt. Der Aufwand ist aber etwas größer, aus diesem Grund (und weil die Funktion der dynamischen Gruppe darunter nicht leidet) bin ich hier auf das Thema nicht weiter eingegangen. Die beiden Manpages zu „slapo-autogroup“ und „slapo-memberof“ sind aber so hilfreich, dass die Einrichtung auch ohne weitere Hilfe durchgeführt werden kann. Hier ging es mir HAUPTSÄCHLICH um die Einrichtung der dynamischen Posix-Gruppen.

This entry was posted in Allgemein. Bookmark the permalink.