Version: GSB 7LDAP-Anbindung
Um Mandantenfähigkeit für den Government Site Builder auch im Bereich Benutzeradministration zu gewährleisten, ist es notwendig eine externe LDAP-Nutzerverwaltung einzubinden. Dies ermöglicht es, für jeden Mandanten einen separaten Benutzer „Manager“ einzurichten, der eingeschränkt auf diesen Mandanten die Administration der Benutzer übernimmt. In der Standard-Benutzerverwaltung der CoreMedia-Version 4.2 ist eine Einschränkung der Administrationsprivilegien auf bestimmte Benutzergruppen/Mandanten nicht möglich.
Es ist wichtig anzumerken, daß im LDAP-Verzeichnis lediglich Benutzerdaten, inklusive Paßwort, Login, Emailadresse, Gruppenzugehörigkeiten wie auch Gruppen inklusive ihrer Namen und Obergruppenzugehörigkeiten etc. gespeichert werden, nicht jedoch die Rechtestruktur. Dies hat zur Folge, daß einer neu angelegten Gruppe zunächst bestimmte Rechte, wie z.B. Leserechte auf dem CoreMedia Root-Ordner zugeteilt werden müssen, sofern sie keine entsprechenden Rechte von einer ihrer Obergruppen erbt. Erst danach können sich Benutzer, die dieser Gruppe zugeordnet sind anmelden bzw. auf die entsprechenden Ressourcen zugreifen.
Für die mandantenfähige Benutzerverwaltung wird eine Installation der freien Software OpenLDAP in der Version 2.1.4-x benötigt (erhältlich unter http://www.openldap.org). Für diesen LDAP-Server stellt der GSB eine Schema-Erweiterung bereit (bkcms.schema). Dieses Schema führt die beiden Objektklassen bkcmsPerson und bkcmsGroup ein, die die Gruppen und Benutzer des Mandanten modellieren. Die Java-Klasse
de.bundonline.basis.cap.ldap.BOLUserPropvider
liefert dem CoreMedia-System Zugriff auf dieses spezielle Schema und stellt Funktionen zum Abfragen von Gurppenzugehörigkeiten, Auslesen von Benutzern, Gruppen etc. bereit.
Schema
Der GSB verwendet eine angepasste Schema-Definition, die in der Datei bkcms.schema abgelegt ist. Es definiert die beiden Objektklassen bkcmsPerson und bkcmsGroup.
Eine bkcmsGroup ist von der Objektklasse top aus dem core.schema abgeleitet und enthält die folgenden zusätzlichen Attribute:
- cn: Der Name der Gruppe
- isAdminGroup TRUE/FALSE ist die Gruppe eine AdmnistratorGruppe (CoreMedia-Internes Attribut)
- isContentServerGroup: TRUE/FALSE ist die Gruppe eine auf dem contentServer verfügbare Gruppe (CoreMedia-Internes Attribut)
- isLiveServerGroup TRUE/FALSE ist die Gruppe eine auf dem Generator verfügbare Gruppe (CoreMedia-Internes Attribut)
- group: multiples Attribut, das die Zugehörigkeit zu anderen Gruppen angibt. Es wird hier der DistinguishedName der Obergruppe registriert
- bkcmsDN: der DistinguishedName der Gruppe; OpenLDAP speichert den DistinguishedName nicht als eigenes Attribut, daher wird dies für eine Vereinheitlichung von Suchanfragen hier separat vorgenommen.
Ein bkcmsUser ist von der Objektklasse person aus dem Standard-Schema cosine.schema abgeleitet. Es wurden die folgenden erweiterten Attribtue angelegt:
- group: multiples Attribut, das die Zugehörigkeit zu Gruppen angibt. Es wird hier der DistinguishedName derGruppe registriert
- mail: die Emailadrese des Users
- bkcmsDN: der DistinguishedName des Users für vereinheiltichte Suchanfragen
- uid: das Login des Users. Es muss innerhalb eines Mandanten eindeutig sein.
- absent: TRUE/FALSE gibt an, ob der Benutzer gegenwärtig abwesend ist.
Konfiguration
Die Konfiguration unterteilt sich in die Konfiguration des LDAP-Servers und in die des ContentServer
Beispiel-LDAP-Verzeichnis-Struktur
Im Folgenden orientieren wir uns an einer Beispiel-Verzeichnis-Struktur. Wird eine alternative Struktur gewünscht, so sind die nachfolgenden Konfigurationen entsprechend anzupassen:
Der DistinguishedName des globalen LDAP-Administrators lautet:
cn=Manager,dc=bva,dc=bund,dc=de
Der Name des Mandanten lautet
Tests
Die Domäne des Mandanten lautet
Tests.bva.bund.de
Sämtliche LDAP-Einträge für den Mandanten werden unterhalb
BaseDN DC=Tests,DC=bva,DC=bund,DC=de
abgelegt
Der DistinguishedName des Mandanten-Administrators lautet
cn=Manager,DC=Tests,dc=bva,dc=bund,dc=de
Benutzer werden unterhalb der
BaseDN ou=Users,DC=Tests,DC=bva,DC=bund,DC=de
abgelegt
Gruppen werden unterhalb der
BaseDN ou=Groups,DC=Tests,DC=bva,DC=bund,DC=de
abgelegt
Hier eine kleine Skizze, die die Struktur verdeutlicht:
OpenLDAP
Es wird davon ausgegangen, daß lauffähige Installationen eines OpenLDAP-Servers und des GSB vorhanden sind. Bei allen Pfadangaben orientieren wir uns an im Folgenden an der Pfadstruktur der mit der Version Suse Linux 8.1/8.2 mitgelieferten OpenLDAP-Version. Bei anderen Installationen wird die Struktur sehr ähnlich sein. Es muss nun die Schema-Erweiterung bkcms.schema in das Schema-Verzeichnis des LDAP-Server kopiert und in der Datei slapd.conf per Include-Direktive zusammen mit den benötigten Standard-Schema.-Definitionen registrierte werden:
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/bkcms.schema
Neben den Standard-Konfigurationen müssen die Zugriffsrechte die einzelnen Mandanten konfiguriert werden. Eine Beispielkonfiguration für einen Mandaten mit Namen „Tests“ in der Datei slapd.conf könnte wie folgt aussehen:
<syntaxhighlight lang="xml" enclose="div">
- Access-Control
- Schreibrechte fuer ausgewaehlte Attribute
- Fuer alle User selber, fuer alle Site-Administratoren und LDAP-Gesamt-Administrator
access to attr=userPassword,cn,sn,mail,telephoneNumber
by self write
by anonymous auth
by dn.base="cn=Manager,dc=bva,dc=bund,dc=de" write
by dn.base="cn=Manager,DC=Tests,dc=bva,dc=bund,dc=de" write
by * none
- Tests-Mandant
- Schreib-/Leserechte fuer Site-Administrator UND LDAP-Gesamt-Administrator
access to dn.subtree="DC=Tests,DC=bva,DC=bund,DC=de"
by dn.base="cn=Manager,DC=Tests,dc=bva,dc=bund,dc=de" write
by dn.base="cn=Manager,dc=bva,dc=bund,dc=de" write
by self read
by anonymous auth
access to *
by dn.base="cn=Manager,dc=bva,dc=bund,dc=de" write
by dn.base="cn=Manager,DC=Tests,dc=bva,dc=bund,dc=de" read
by self read
by anonymous auth
- ENDE Access-Control
</syntaxhighlight>
Es wird in diesem Fall sichergestellt, daß Benutzer ihr Paßwort, ihren Namen, Emailadresse etc. selber editieren können, nicht jedoch ihre Gruppenzugehörigkeiten im Attribut group. Dieses Attribut steht nur dem Administrator des Mandanten und dem LDAP-Gesamt-Administrator zur Verfügung. Der DistinguishedName des Gesamt-Administrators ist in diesem Fall cn=Manager,dc=bva,dc=bund,dc=de, die des Tests-Mandante-Administrators cn=Manager,DC=Tests,dc=bva,dc=bund,dc=de.
Sobald weitere Mandanten angelegt werden, müssen die Berechtigungen entsprechend angepaßt werden und z.B. der Administrator des Mandanten Schreibrechte für seine Benutzer erhalten.
GSB/CoreMedia ContentServer
Der externe LDAP-Server muß im CoreMedia-ContentServer registriert. Dies geschieht in der Datei
CONTENT_SERVER_DIR/properties/corem/capserver.properties
Hier werden für jeden per LDAP angebundenen Mandanten zwei Zeilen der Form
cap.server.ldap.N.class=de.bundonline.basis.cap.ldap.BOLUserProvider
cap.server.ldap.N.properties=properties/corem/jndi_MANDANT.properties
eingefügt, wobei N beginnend bei 1 für jeden Mandanten hochgezählt wird und MANDANT der Name des Mandanten ist. Dadurch wird eine Instanz der Klasse de.bundonline.basis.cap.ldap.BOLUserProvider, die das BKCMS-Schema kennt, auf die Besonderheiten des Mandanten hin konfiguriert. Die eigentliche Konfiguration der Klassen steht in der Datei
CONTENT_SERVER_DIR/properties/corem/ jndi_MANDANT.properties
Hier werden die folgenden Werte (beispielhaft für den Mandanten Tests) gesetzt. Sie müssen mit den Werten in slapd.conf und ldap.conf übereinstimmen
<syntaxhighlight lang="xml" enclose="div">
- Log configuration
log.action.1.class=StdOutAction
log.action.1.selectors=debug
log.action.2.class=FileAction
log.action.2.selectors=ldap:info
log.action.2.initArgs=file=var/logs/ldap.log
- Authentifisizerungs-Methode desLDAP-Server
java.naming.security.authentication=simple
- Root-DN des LDAP-Servers
java.naming.security.principal=cn=Manager,dc=bva,dc=bund,dc=de
- Passwort der Root-DN des LDAP-Servers
java.naming.security.credentials=secret
- Hostname des LDAP-Servers
com.coremedia.ldap.host=server.host.com
- Port des LDAP-Servers
com.coremedia.ldap.port=389
- Die Base-DNs des Tests-Mandanten, relativ zu der alle Suchanfragen des Mandanten ausgeführt werden
- Es hat sich als praktisch herausgestellt eine OrganizationalUnit jeweils für Gruppen (ou=Groups) und für Benutzer (ou=Users) anzulegen
com.coremedia.ldap.basedns=OU=Users,DC=Tests,dc=bva,dc=bund,DC=de;OU=Groups,DC=Tests,dc=bva,dc=bund,DC=de
- Cache-Erneuerungs-Intervall
com.coremedia.ldap.expiration=3600
- Der Domänen-Name des Mandanten, muß fuer die gesamte BKCMS-Installation eindeutig sein
com.coremedia.ldap.domains=Tests.bva.bund.de
- Dieser Name erscheint in der Select-Box des Java-Editors beim Login
- Er muß mit den zusammengesetzten Domain-Komponenten des Mandanten übereinstimmen zum Thema Domain-Komponente siehe unten
com.coremedia.ldap.domains=Tests.bva.bund.de
- Maximale Anzahl von Suchergebnissen
com.coremedia.ldap.searchlimit=1000
com.coremedia.ldap.ou.predicate=(objectClass=organizationalUnit)
- LDAP-Attribute, die dem Cap-Server zugänglich gemacht werden sollen
com.coremedia.ldap.user.attrs=cn group sn userPassword bkcmsDN uid absent
- Weitere LDAP-Attribute
com.coremedia.ldap.user.customattrs= uid sn cn mail telephoneNumber absent
- Filter für Suchanfragen für Benutzer
com.coremedia.ldap.user.filter=(objectClass=bkcmsPerson)
- Name-Attribut für LDAP-Benutzer
com.coremedia.ldap.user.nameattr=uid
- Bleibt laut CoreMedia leer
com.coremedia.ldap.user.domainattr=
- LDAP-weite eindeutige ID des Benutzers
com.coremedia.ldap.user.idattr=bkcmsDN
- LDAP-Attribute, die dem Cap-Server zugänglich gemacht werden sollen
com.coremedia.ldap.group.attrs=member group sn bkcmsDN cn isContentServerGroup isLiveGroup isAdminGroup
- Filter für suchanfragen für Benutzer
com.coremedia.ldap.group.filter=(objectClass=bkcmsGroup)
- Name-Attribut für LDAP-Gruppen
com.coremedia.ldap.group.nameattr=cn
- Bleibt –laut CoreMedia leer
com.coremedia.ldap.group.domainattr=
- LDAP-weite eindeutige ID der Gruppe
com.coremedia.ldap.group.idattr=bkcmsDN
- Name des isContentServer-Attributes
com.coremedia.ldap.group.isContentGroupAttr=isContentServerGroup
- Name des isLiveGroup-Attributes
com.coremedia.ldap.group.isLiveGroupAttr=isLiveGroup
- Name des isAdminGroup-Attributes
com.coremedia.ldap.group.isAdminGroupAttr=isAdminGroup </syntaxhighlight>
Als letzte Datei muß
CONTENT_SERVER_DIR/properties/corem/jaas.conf
angepaßt werden. Hier werden die folgenden Properties gesetzt:
JaasCap {
/**
* weitere Properties
*/
hox.corem.login.LdapLoginModule sufficient host=<LDAP-Server-Hostname>" port="<LDAP-Server-Port>" domain="<Domain des Mandanten in Übereinstimmung mit den Doamin-Komponenenten des LDAP-Servers (siehe unten), z.B. Tests.bva.bund.de >";
};
Domain-Komponenten
Jeder Benutzer eines Mandanten muss vor dem Login in den ContentServer in der Select-Box seine Domain auswählen. Anhand der ausgewählten Domain wird die für die Konfiguration der Instanz der Klasse de.bundonline.basis.cap.ldap.BOLUserProvider
zu benutzende jndi_MANDANT.properties Datei ausgewählt. Die so konfigurierte UserProvider-Komponente berechnet aus dem DistinguishedName eines Suchergebnisses einen Domain-Namen nach der folgenden Regel:
Die einzelnen, durch Kommata getrennte Komponenten des DistinguishedNames werden mit „.“ als Trennzeichen miteinander verbunden, wenn sie mit „dc=“ beginnen. Hierbei wird davon ausgegangen, daß alle DistinguishedNames mit einer Serie von „dc=...,dc=..“ relativer DistinguishedNames enden und daß die Komponenten „dc=“ nur am Ende des DistinguishedNames auftreten. Der so erhaltene Domain-Name muss mit den in den Dateien jaas.conf und jndi_MANDANT.properties registrierten Domainnamen des Mandanten übereinstimmen.
Beispiel:
1. Die berechnete Domäne des Eintrages mit DistinguishedName
„uid=Kevin,ou=Users,dc=Tests,dc=bva,dc=bund,dc=de“
ist „Tests.bva.bund.de“
2. Der folgende DistinguishedName ist illegal, da nach der Komponente dc=SpecialUsers nicht ausschließlich weitere dc—Komponenten folgen, sondern eben auch die auch ou=Users:
uid=Kevin,dc=SpecialUsers,ou=Users,dc=Tests,dc=bva,dc=bund,dc=de