Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:ldap_c7:data [16.07.2015 20:55. ] – [Datenmigration] django | centos:ldap_c7:data [22.07.2019 15:03. ] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 4: | Zeile 4: | ||
Nachdem wir die [[centos: | Nachdem wir die [[centos: | ||
- | Wir werden im ersten Schritt unseren OpenLDAP-Verzeichnisdienst mit Schemen befüllen, die wir im späteren Betrieb benötigen werden. Für die Befüllung mit Nutzdaten, die aus Distinguished Names (DN) und einem eindeutigen Objektnamen bestehen, müssen hierzu in den **Directory Information Tree** (**DIT**), einer hierarchischen Baumstruktur eingefügt werden. | + | Wir werden im ersten Schritt unseren OpenLDAP-Verzeichnisdienst mit Schemen befüllen, die wir im späteren Betrieb benötigen werden. Für die Befüllung mit Nutzdaten, die aus **Distinguished Names** (**DN**) und einem eindeutigen Objektnamen bestehen, müssen hierzu in den **Directory Information Tree** (**DIT**), einer hierarchischen Baumstruktur eingefügt werden. |
===== Schemata ===== | ===== Schemata ===== | ||
Zeile 3567: | Zeile 3567: | ||
Wir erstellen also nun die beiden .ldif-Dateien. | Wir erstellen also nun die beiden .ldif-Dateien. | ||
- | # / | + | # / |
# / | # / | ||
+ | Aus der Datei // | ||
+ | michael: | ||
+ | inge: | ||
+ | rebekka: | ||
+ | jakob: | ||
+ | ruben: | ||
+ | leah: | ||
+ | markus: | ||
+ | gertraud: | ||
+ | johann: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | cn: django | ||
+ | userPassword: | ||
+ | gidNumber: 1000 | ||
+ | memberUid: 1000 | ||
+ | |||
+ | dn: cn=michael, | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | cn: michael | ||
+ | userPassword: | ||
+ | gidNumber: 1001 | ||
+ | memberUid: 1001 | ||
+ | |||
+ | dn: cn=inge, | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | cn: inge | ||
+ | userPassword: | ||
+ | gidNumber: 1002 | ||
+ | memberUid: 1002 | ||
+ | |||
+ | dn: cn=rebekka, | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | cn: rebekka | ||
+ | userPassword: | ||
+ | gidNumber: 1003 | ||
+ | memberUid: 1003 | ||
+ | |||
+ | dn: cn=jakob, | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | cn: jakob | ||
+ | userPassword: | ||
+ | gidNumber: 1004 | ||
+ | memberUid: 1004 | ||
+ | |||
+ | dn: cn=ruben, | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | cn: ruben | ||
+ | userPassword: | ||
+ | gidNumber: 1005 | ||
+ | memberUid: 1005 | ||
+ | |||
+ | dn: cn=leah, | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | cn: leah | ||
+ | userPassword: | ||
+ | gidNumber: 1006 | ||
+ | memberUid: 1006 | ||
+ | |||
+ | dn: cn=markus, | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | cn: markus | ||
+ | userPassword: | ||
+ | gidNumber: 1007 | ||
+ | memberUid: 1007 | ||
+ | |||
+ | dn: cn=gertraud, | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | cn: gertraud | ||
+ | userPassword: | ||
+ | gidNumber: 1008 | ||
+ | memberUid: 1008 | ||
+ | |||
+ | dn: cn=johann, | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | cn: johann | ||
+ | userPassword: | ||
+ | gidNumber: 1009 | ||
+ | memberUid: 1009</ | ||
+ | |||
+ | Aus der Datei // | ||
+ | michael: | ||
+ | inge: | ||
+ | rebekka: | ||
+ | jakob: | ||
+ | ruben: | ||
+ | leah: | ||
+ | markus: | ||
+ | gertraud: | ||
+ | johann: | ||
+ | uid: django | ||
+ | cn: django | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | userPassword: | ||
+ | shadowLastChange: | ||
+ | shadowMin: 0 | ||
+ | shadowMax: 99999 | ||
+ | shadowWarning: | ||
+ | loginShell: /bin/bash | ||
+ | uidNumber: 1000 | ||
+ | gidNumber: 1000 | ||
+ | homeDirectory: | ||
+ | gecos: django | ||
+ | |||
+ | dn: uid=michael, | ||
+ | uid: michael | ||
+ | cn: michael | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | userPassword: | ||
+ | loginShell: /bin/bash | ||
+ | uidNumber: 1001 | ||
+ | gidNumber: 1001 | ||
+ | homeDirectory: | ||
+ | gecos: michael | ||
+ | |||
+ | dn: uid=inge, | ||
+ | uid: inge | ||
+ | cn: inge | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | userPassword: | ||
+ | loginShell: /bin/bash | ||
+ | uidNumber: 1002 | ||
+ | gidNumber: 1002 | ||
+ | homeDirectory: | ||
+ | gecos: inge | ||
+ | |||
+ | dn: uid=rebekka, | ||
+ | uid: rebekka | ||
+ | cn: rebekka | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | userPassword: | ||
+ | loginShell: /bin/bash | ||
+ | uidNumber: 1003 | ||
+ | gidNumber: 1003 | ||
+ | homeDirectory: | ||
+ | gecos: rebekka | ||
+ | |||
+ | dn: uid=jakob, | ||
+ | uid: jakob | ||
+ | cn: jakob | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | userPassword: | ||
+ | loginShell: /bin/bash | ||
+ | uidNumber: 1004 | ||
+ | gidNumber: 1004 | ||
+ | homeDirectory: | ||
+ | gecos: jakob | ||
+ | |||
+ | dn: uid=ruben, | ||
+ | uid: ruben | ||
+ | cn: ruben | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | userPassword: | ||
+ | loginShell: /bin/bash | ||
+ | uidNumber: 1005 | ||
+ | gidNumber: 1005 | ||
+ | homeDirectory: | ||
+ | gecos: ruben | ||
+ | |||
+ | dn: uid=leah, | ||
+ | uid: leah | ||
+ | cn: leah | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | userPassword: | ||
+ | loginShell: /bin/bash | ||
+ | uidNumber: 1006 | ||
+ | gidNumber: 1006 | ||
+ | homeDirectory: | ||
+ | gecos: leah | ||
+ | |||
+ | dn: uid=markus, | ||
+ | uid: markus | ||
+ | cn: markus | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | userPassword: | ||
+ | loginShell: /bin/bash | ||
+ | uidNumber: 1007 | ||
+ | gidNumber: 1007 | ||
+ | homeDirectory: | ||
+ | gecos: markus | ||
+ | |||
+ | dn: uid=gertraud, | ||
+ | uid: gertraud | ||
+ | cn: gertraud | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | userPassword: | ||
+ | loginShell: /bin/bash | ||
+ | uidNumber: 1008 | ||
+ | gidNumber: 1008 | ||
+ | homeDirectory: | ||
+ | gecos: gertraud | ||
+ | |||
+ | dn: uid=johann, | ||
+ | uid: johann | ||
+ | cn: johann | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | userPassword: | ||
+ | loginShell: /bin/bash | ||
+ | uidNumber: 1009 | ||
+ | gidNumber: 1009 | ||
+ | homeDirectory: | ||
+ | gecos: johann | ||
+ | </ | ||
+ | |||
+ | === Datenübernahme in den DIT === | ||
+ | Nachdem wir die Nutzerdaten aus dem/einem System migriert haben, werden wir nun mit dem Befehl **ldapadd** die gerade generierten LDIF-Dateien in den DIT importieren. | ||
+ | |||
+ | Als erstes importieren wir den **DN**((**D**istinguished **N**ame)) Group. | ||
+ | # ldapadd -W -x -D cn=Manager, | ||
+ | |||
+ | Enter LDAP Password: | ||
+ | < | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | </ | ||
+ | |||
+ | Anschließend importieren wir den **DN** People. | ||
+ | # ldapadd -W -x -D cn=Manager, | ||
+ | |||
+ | Enter LDAP Password: | ||
+ | < | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | adding new entry " | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== abschließender Test ==== | ||
+ | Für den abschliessenden Test, ob die Datenmigration aus den filebasierenden Dateien in den DIT unseres OpenLADP-Servers geklappt hat, befragen wir unseren LDAP-Server nach den Daten zum **User** // | ||
+ | # ldapsearch -W -x -D cn=config -b " | ||
+ | |||
+ | Enter LDAP Password: | ||
+ | < | ||
+ | uid: django | ||
+ | cn: django | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | userPassword:: | ||
+ | | ||
+ | | ||
+ | shadowLastChange: | ||
+ | shadowMin: 0 | ||
+ | shadowMax: 99999 | ||
+ | shadowWarning: | ||
+ | loginShell: /bin/bash | ||
+ | uidNumber: 1000 | ||
+ | gidNumber: 1000 | ||
+ | homeDirectory: | ||
+ | gecos: django</ | ||
+ | |||
+ | Unsere erfolgreiche Abfrage erzeugt einen entsprechendnen Eintrag im Logfile des slapd-Daemon. | ||
+ | # less / | ||
+ | |||
+ | < | ||
+ | Jul 16 23:26:21 vml000037 slapd[14264]: | ||
+ | Jul 16 23:26:21 vml000037 slapd[14264]: | ||
+ | Jul 16 23:26:21 vml000037 slapd[14264]: | ||
+ | Jul 16 23:26:21 vml000037 slapd[14264]: | ||
+ | Jul 16 23:26:21 vml000037 slapd[14264]: | ||
+ | Jul 16 23:26:21 vml000037 slapd[14264]: | ||
+ | Jul 16 23:26:21 vml000037 slapd[14264]: | ||
+ | Jul 16 23:26:21 vml000037 slapd[14264]: | ||
+ | </ | ||
+ | |||
+ | Zu guter letzt befragen wir nun noch unseren LDAP-Server nach den Daten der **Gruppe** // | ||
+ | # ldapsearch -x -b " | ||
+ | |||
+ | < | ||
+ | # | ||
+ | # LDAPv3 | ||
+ | # base < | ||
+ | # filter: (objectclass=*) | ||
+ | # requesting: ALL | ||
+ | # | ||
+ | |||
+ | # django, Group, nausch.org | ||
+ | dn: cn=django, | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | cn: django | ||
+ | userPassword:: | ||
+ | gidNumber: 1000 | ||
+ | memberUid: 1000 | ||
+ | |||
+ | # search result | ||
+ | search: 2 | ||
+ | result: 0 Success | ||
+ | |||
+ | # numResponses: | ||
+ | # numEntries: 1</ | ||
+ | |||
+ | Natürlich wurde auch hier unsere Abfrage im LDAP-Log dokumentiert. | ||
+ | # less / | ||
+ | |||
+ | < | ||
+ | Jul 16 23:40:26 vml000037 slapd[14264]: | ||
+ | Jul 16 23:40:26 vml000037 slapd[14264]: | ||
+ | Jul 16 23:40:26 vml000037 slapd[14264]: | ||
+ | Jul 16 23:40:26 vml000037 slapd[14264]: | ||
+ | Jul 16 23:40:26 vml000037 slapd[14264]: | ||
+ | Jul 16 23:40:26 vml000037 slapd[14264]: | ||
+ | |||
+ | ===== DIT Indizes ===== | ||
+ | ==== Abfrage der Indizes ==== | ||
+ | Wollen wir später einzelne Index Felder im **DIT** anpassen, müssen wir natürlich wissen wie die derzeitigen Felder indiziert wurden. Hierzu lassen wir uns die existierende Indizierung der Felder anzeigen. | ||
+ | |||
+ | Hierzu nutzen wir nun folgenden Befehlsaufruf. | ||
+ | # | ||
+ | |||
+ | Enter LDAP Password: | ||
+ | < | ||
+ | # | ||
+ | # LDAPv3 | ||
+ | # base < | ||
+ | # filter: (objectclass=*) | ||
+ | # requesting: ALL | ||
+ | # | ||
+ | |||
+ | # {2}hdb, config | ||
+ | dn: olcDatabase={2}hdb, | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | olcDatabase: | ||
+ | olcDbDirectory: | ||
+ | olcSuffix: dc=nausch, | ||
+ | olcRootDN: cn=Manager, | ||
+ | olcRootPW: {SSHA}lfeku/ | ||
+ | olcDbIndex: objectClass eq,pres | ||
+ | olcDbIndex: ou, | ||
+ | |||
+ | # search result | ||
+ | search: 2 | ||
+ | result: 0 Success | ||
+ | |||
+ | # numResponses: | ||
+ | # numEntries: 1</ | ||
+ | |||
+ | Für die Felder **objectClass** und **ou, | ||
+ | |||
+ | * **olcDbIndex: | ||
+ | * **olcDbIndex: | ||
+ | |||
+ | Dies entspricht nachfolgender Tabelle. | ||
+ | ^ **Felder** | ||
+ | | ::: ^ // | ||
+ | | **objectClass** | ||
+ | | **ou** | ||
+ | | **cn** | ||
+ | | **mail** | ||
+ | | **surname** | ||
+ | | **givenname** | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | Erfolgt ein Zugriff auf ein Fled im OpenLDAP-Verzeichnisbaum bei dem kein Index definiert wurde, wird dazu im LDAP-Log // | ||
+ | Jul 17 12:32:53 vml000037 slapd[14264]: | ||
+ | |||
+ | ==== Setzen der Indizes (LDIF) ==== | ||
+ | Für die Felder in der folgenden Tabelle wollen wir nun noch Indizes erstellen. | ||
+ | |||
+ | ^ **Felder** | ||
+ | | ::: | ||
+ | | **uidNumber** | ||
+ | | **gidNumber** | ||
+ | | **loginShell** | ||
+ | | **uid** | ||
+ | | **memberUid** | ||
+ | | **nisMapName** | ||
+ | | **nisMapEntry** | ||
+ | | **uniqueMember** | ||
+ | |||
+ | Zu dieser Tabelle erstellen wir uns nun eine passende LDIF-Datei. | ||
+ | # vim / | ||
+ | |||
+ | <file ldif / | ||
+ | # Erstellen von zusätzlichen Indizes für Felder im DIT | ||
+ | # https:// | ||
+ | |||
+ | dn: olcDatabase={2}hdb, | ||
+ | changetype: modify | ||
+ | add: olcDbIndex | ||
+ | olcDbIndex: uidNumber, | ||
+ | olcDbIndex: uid, | ||
+ | olcDbIndex: nisMapName, | ||
+ | olcDbIndex: uniqueMember eq,pres | ||
+ | </ | ||
+ | |||
+ | Anschließend importieren wir diese Daten in unseren **DIT**. | ||
+ | # ldapmodify -Y EXTERNAL -H ldapi:/// -f / | ||
+ | |||
+ | SASL/ | ||
+ | SASL username: gidNumber=0+uidNumber=0, | ||
+ | SASL SSF: 0 | ||
+ | modifying entry " | ||
+ | |||
+ | |||
+ | ==== Überprüfen der gesetzten Indizes ==== | ||
+ | Zu guter letzt lassen wir uns erneut anzeigen für welche Felder im **DIT** Indizies gesetzt sind. Dazu verwenden wir folgenden Befehl. | ||
+ | # | ||
+ | |||
+ | Enter LDAP Password: | ||
+ | < | ||
+ | # | ||
+ | # LDAPv3 | ||
+ | # base < | ||
+ | # filter: (objectclass=*) | ||
+ | # requesting: ALL | ||
+ | # | ||
+ | |||
+ | # {2}hdb, config | ||
+ | dn: olcDatabase={2}hdb, | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | olcDatabase: | ||
+ | olcDbDirectory: | ||
+ | olcSuffix: dc=nausch, | ||
+ | olcRootDN: cn=Manager, | ||
+ | olcRootPW: {SSHA}lfeku/ | ||
+ | olcDbIndex: objectClass eq,pres | ||
+ | olcDbIndex: ou, | ||
+ | olcDbIndex: uidNumber, | ||
+ | olcDbIndex: uid, | ||
+ | olcDbIndex: nisMapName, | ||
+ | olcDbIndex: uniqueMember eq,pres | ||
+ | |||
+ | # search result | ||
+ | search: 2 | ||
+ | result: 0 Success | ||
+ | |||
+ | # numResponses: | ||
+ | # numEntries: 1</ | ||
+ | |||
+ | ====== Links ====== | ||
+ | * **⇐ [[centos: | ||
+ | * **⇒ [[centos: | ||
+ | * **[[centos: | ||
+ | * **[[wiki: | ||
+ | * **[[http:// | ||
- | FIXME | ||