Table of Contents
eDirectory LDAP Users Import en Export
Samenvatting
De reden voor het maken van dit document waren de onduidelijkheden in de ICE (Import Convert Export tool) syntax om in grote schaal gebruikers uit eDirectory te lezen en weer te importeren in een andere TREE. De TIDs/tips/articles voor het aanpassen van objecten op grote schaal liggen voor het oprapen, voor het importeren was er alleen de documentatie, die alleen voorziet in een basis querie die veel te veel informatie eruit trekt, en waar je dus veel te veel wijzigingen in moet maken om hem te kunnen gebruiken. Dit document geeft dus uitgebreide uitleg om met de juiste commando's de juiste informatie uit een bestaande eDirectory TREE te trekken, deze informatie aan te passen zodat er wordt voldaan aan bepaalde eisen, en weer te importeren in je testomgeving. Zoals hier dus staat bestaat de procedure uit drie stappen:
- Het exporteren van user account gegevens naar een LDIF file
- Het aanpassen van deze LDIF file
- Het importeren van de LDIF file in je testomgeving
Alle werkzaamheden kunnen worden uitgevoerd op een Open Enterprise Server Linux kernel systeem. Indien gewenst kun je stap 1 en 3 ook uitvoeren op een Open Enterprise Server Netware kernel. Stap 2 maakt gebruik van functies binnen de tekstverwerker 'vi', geïnstalleerd op elk linux en unix systeem. Indien je hier niet de beschikking over heb kun je gebruik maken verschillende LINUX LIVE cd's, bijvoorbeeld 'Knoppix Live' of 'openSUSE Live'. De bewerkingen zijn uitgevoerd op een eDirectory versie 8.8 SP1 (20112.86).
Novell documentatie voor eDirectory 8.8: http://www.novell.com/documentation/edir88/index.html Directe download link van openSUSE LIVE DVD: http://download.opensuse.org/distribution/10.2/iso/dvd/openSUSE-10.2-GM-LiveDVD.iso FTP download site voor Knoppix: ftp://ftp.knoppix.nl/pub/os/Linux/distr/knoppix/
Het exporteren van user account gegevens naar een LDIF file
Om het jezelf makkelijk te maken log je in als root op je OES systeem, open je een terminal (dit kan dus ook vanuit een ssh sessie) en ga je naar de plek in het bestandssysteem waar de eDirectory utilities en tools zijn geïnstalleerd. Op OES is dit standaard in /opt/novell/eDirectory/bin. Hier geef je het volgende commando:
- ./ice -SLDAP -s<ipadressource> -p389 -b<usercontainer> -d<admin> -W -cone -Fobjectclass=inetorgperson -a<attributen> -DLDIF -fexportfile.ldf
Voor alle variabelen en opties hieronder geld dat ze direct achter de optie moeten worden geplaatst, zonder spatie en of scheidingsteken. Variabelen:
<ipadressource> | IP adres van de server waar een replica draait van de partitie waar de userobjecten in staan. |
<usercontainer> | De LDAP notatie van de container waar de user objecten in staan, dus bijvoorbeeld ou=users,ou=delft,o=ogd |
<admin> | De LDAP notatie van de gebruiker die rechten heeft om de usercontainer uit te lezen, bijvoorbeeld cn=admin,o=ogd |
<attributen> | Een lijst, gescheiden door komma's, waarin de attributen staan die je wilt exporteren. Verplicht hierin zijn de distinguished name, de common name, de surname en de objectClass. Deze zijn verplicht of omdat ze verplicht zijn als attribuut voor het object User (cn en surname) of omdat ze verplicht zijn voor de LDIF import (objectClass en dn). Bijvoorbeeld: dn,cn,givenName,sn,fullName,l,ou,description,mail,objectClass «br» Deze namen moeten overigens wel gekoppeld zijn aan de eDirectory attributen. Als je de precieze naam wilt weten per attribuut ga dan in consoleone naar het 'LDAP Group' object van de server en ga naar het tabblad attribute mappings. Hier kun je eventueel ook extra mappings maken. Denk eraan dat zowel LDAP als LDIF bestanden hoofdlettergevoelig zijn. |
Verder opties: | |
-SLDAP | -S Source Handler, hiermee vertel je dat de source die je gaat uitlezen van het type LDAP is. |
-p389 | Dit is de LDAP poort waarop verbinding wordt gemaakt. De standaard LDAP poort is 389. Je kan ook een secure connectie maken, dan moet je poort 636 gebruiken. Standaard mag je dit overigens niet unsecure doen. Je kan dus of poort 636 en het certificaat opgeven, of je kan naar het 'LDAP Group' object gaan en op het algemeen tabblad het vinkje uitzetten van 'Require TLS for simple binds with password'. Ik heb voor deze optie gekozen omdat het vinkje na afloop weer snel aan te zetten is, en dit specifieke verkeer op het interne netwerk bleef. |
-W | Deze switch werkt alleen op de Linux variant van OES. Met deze switch vraagt de utility om het wachtwoord, zodat deze niet in je '.bash history' komt. Op netware zul je de switch -w<wachtwoord> (let op:kleine letter w) moeten gebruiken. |
-cone | Zoek alleen in de container die je hebt opgegeven bij -b. |
-Fobjectclass=inetorgperson | Standaard haalt ICE alle objecten in een container eruit. Wij zijn alleen geïnteresseerd in userobjecten, en die heten onder LDAP 'inetorgperson'. Ook hiervoor gelden trouwens dezelfde voorwaarden als gesteld in het stuk <attributen> maar dan voor object classes. |
-DLDIF | -D Destination Handler, schrijf de data naar een LDIF file. |
-fexportfile.ldf | De naam van het bestand waar je data naartoe wil hebben geschreven. |
Je krijgt nu een ldif bestand eruit, wat er een beetje als volgt uitziet:
#This LDIF file was generated by Novell's ICE and the LDIF destination handler. version: 1 dn: cn=sjoerdh,ou=users,ou=delft,o=ogd changetype: add mail: s.hooft@ogd.nl givenName: Sjoerd fullName: S. Hooft sn: Hooft ou: Projecten objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: Person objectClass: ndsLoginProperties objectClass: Top objectClass: radiusprofile l: Delft description: MCNE - Novell specialist cn: sjoerdh dn: cn=joepp,ou=users,ou=delft,o=ogd changetype: add mail: j.piscaer@ogd.nl givenName: Joep fullName: J.Piscaer sn: Piscaer ou: Detachering objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: Person objectClass: ndsLoginProperties objectClass: Top objectClass: radiusprofile l: Delft description: CNE - Novell specialist cn: joepp
Bronnen: http://www.novell.com/documentation/edir88/index.html?page=/documentation/edir88/edir88/data/a5hgmnu.html Novell documentatie voor ICE
Het aanpassen van deze LDIF file
Het aangemaakte bestand is te openen met
- vi exportfile.ldf
In vi kun je met behulp van commando's bewerkingen uitvoeren die de file snel en effectief aanpassen aan je eigen behoeften, en aan de vereisten die LDIF stelt. In mijn situatie moest de dn worden aangepast omdat de container structuur van de testomgeving een weinig afweek van de productieomgeving, ik moest één van de objectclasses weghalen omdat het schema van de testomgeving niet was uitgebreid met radius attributen, en ik wou iedere gebruiker een standaard wachtwoord geven.
Voor de complete vi newbie, ik ga niet teveel uitleggen over vi, behalve dat het programma twee modi heeft, een commando modus en een edit modus. Switchen hiertussen doe je met <ESC> of door een commando te geven waardoor je in de edit mode komt. De commando's die hieronder staan beschreven moeten dus gegeven worden in commando modus.
Het aanpassen van de usercontainer:
:%s/ou=users,ou=delft,o=ogd/ou=users,o=ogd/ :%s Search and replace (substitute) in het complete document Eerste /string/ is de tekst die vervangen gaat worden door de tekst in de tweede /string/
Het weghalen van een complete regel per gebruiker:
:g/objectClass: radiusprofile/d g Commando geldt voor het complete document (global) /string/ is de tekst waarop gezocht wordt d Verwijder de regel waar de tekst in voorkomt
Het toevoegen van een regel per profiel onder de regel met description met daarin het nieuwe wachtwoord:
:%s/description.*$/&^Muserpassword: ogdogd/ .*$ Matcht je search pattern plus alles wat verder nog op de regel staat & Dit is een speciaal teken in je replace string wat gelijk is aan het gematchte stuk tekst. Gevolg: Hij laat de gematchte tekst netjes staan waar het stond, dus alles wat achter de & komt wordt ingevoegd na het gematchte stuk tekst (je search pattern plus de rest van de regel) ^M Nieuwe regel, deze krijg je overigens door eerst <CTRL>+V in te tikken en daarna <CTRL>+M
Nu heb je een bestand gekregen wat er zo uitziet:
#This LDIF file was generated by Novell's ICE and the LDIF destination handler. version: 1 dn: cn=sjoerdh,ou=users,o=ogd changetype: add mail: s.hooft@ogd.nl givenName: Sjoerd fullName: S. Hooft sn: Hooft ou: Projecten objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: Person objectClass: ndsLoginProperties objectClass: Top l: Delft description: MCNE - Novell specialist userpassword: ogdogd cn: sjoerdh dn: cn=joepp,ou=users,o=ogd changetype: add mail: j.piscaer@ogd.nl givenName: Joep fullName: J.Piscaer sn: Piscaer ou: Detachering objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: Person objectClass: ndsLoginProperties objectClass: Top l: Delft description: CNE - Novell specialist userpassword: ogdogd cn=joepp
Bronnen VI: http://thomer.com/vi/vi.html#manuals
Het importeren van de LDIF file in je testomgeving
Je hebt nu dus een betrouwbare LDIF file gemaakt die alle benodigde gegevens heeft die nodig zijn om gebruikers te importeren. Het enige wat je dus nog hoeft te doen is deze gegevens in te voeren. Dit doe je weer met het commando ICE:
- ./ice -SLDIF -fexportfile.ldf -DLDAP -s<ipadresdest> -p389 -d<admin> -W
Dit commando is gelijk opgebouwd aan het export commando behalve dat nu de Source Handler LDIF is en de Destination Handler LDAP. Verder moet je nu als <ipadresdest> de server opgeven die de desbetreffende replica heeft in de testomgeving.