Bisherige Erfahrungen gibt's mit [[https://www.openldap.org/|OpenLdap]], der [[https://directory.fedoraproject.org/|389 Directory Server]] soll aber auch ganz gut sein. === OpenLDAP === == Gruppenmanagement == Um LDAP-User (oder auch andere Objekte) in Gruppen zu verwalten, gibt es die Objectklassen (~GroupOfNames und ~GroupOfUniqueNames) die mit ihrem Attribut "member" auf andere LDAP-Objekte verweisen. Wenn jetzt das Problem aufkommt, heraus zu finden, ob ein LDAP-Objekt Mitglied einer Gruppe ist bzw. in welchen Gruppen es Mitglied ist, ist das durchsuchen aller defionierten Gruppen eine Möglichkeit. Die bessere Möglichkeit ist das Overlay-Modul "~MemberOf". Diese Modul sorgt selbstständig für die Referenz des "Member"-Attributes entsprechend der Definition im "~GroupOf(Unique)Names"-Objekt, indem es das member-Attribut virtuell erstellt. Dieses Overlay ist in der Standard-Konfiguration nicht aktiv, das kann mit folgenden Code geändert werden: #> ldapmodify dn: cn=module{0},cn=config changetype: modify add: olcModuleLoad olcModuleLoad: memberof jetzt muss noch separat für jede Datenbank das Overlay eingerichtet werden, wobei es einen Unterschied zwischen "~GroupOfNames" und "~GroupOfUniqueNames" gibt: #> ldapadd dn: olcOverlay=memberof,olcDatabase={__xx__}hdb,cn=config olcMemberOfGroupOC: groupOfUniqueNames objectClass: olcMemberOf objectClass: olcOverlayConfig objectClass: olcConfig objectClass: top olcOverlay: memberof olcMemberOfRefInt: TRUE # die folgenden 2 Zeilen werden nur für "GroupOfUniqueNames" benötigt # für "GroupOfNames" stimmen die Defaultwerte des Overlays olcMemberOfMemberAD: uniqueMember olcMemberOfMemberOfAD: memberOf Wenn das alles ohne Fehler geklappt hat, werden bei Änderungen im Gruppen-Objekt die entsprechenden Member-Objekte angepast. == Berechtigungen / Access Control Lists == OpenLDAP speichert die ACLs im LDAP-baum im 'cn=config'-zweig. Unter Debian ist 'manage' Zugriff nur für den unix 'root' User zugelassen. Sollen auch reguläre LDAP-accounts Zugriff bekommen, muss mman das explizit einrichten. Folgender LDIF-schnipsel fügt eine entsprechende Zugriffsregel vor die ursprünglichen ein. dn: olcDatabase={0}config,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn=cn=admin,dc=stratoserver,dc=net manage by dn=cn=ldap-remote,ou=manager,dc=geroedel,dc=de manage olcAccess: {1}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break Das ganze kann per 'ldapmodify' ausgeführt werden. Durch die "SASL/Extern" auth funktioniert das nur von root-account des Systems. root:/etc# ldapmodify -Y EXTERNAL -H ldapi:/// SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 == Links == * https://wiki.debian.org/LDAP/OpenLDAPSetup * https://serverfault.com/a/737394 (zusätzliche plugin-module laden / aktivierien)