LDAP Einträge auf der Kommandozeile editieren mit ldapvi

Um Einträge in einem LDAP auf der Kommandozeile zu ändern habe ich vor kurzem das Programm ldapvi kennengelernt. Dieses kann unter Debian oder Ubuntu mit dem folgenden Kommando aus den Paketquellen installiert werden:

aptitude install ldapvi

Danach ist noch der BindDN und das dazugehörige Passwort in die Konfigurationsdatei /etc/ldapvi.conf einzutragen. Die Werte kann man zum Beispiel so erfahren:

cat /etc/ldap.secret && grep -i admin /etc/ldap.conf

In der ldapvi.conf ist dann die Syntax:

user: cn=admin,dc=.....
password: XXXXXX

Anschließend können mit dem Aufruf des Kommandos ldapvi die Einträge im Standardeditor des Systems (update-alternatives –config editor) bearbeitet werden. Ist man fertig und schließt den Editor wird man informiert ob Änderungen vorliegen und wenn ja vor die Wahl gestellt was man nun machen möchte. Hier nutze ich die folgenden Kommandos:

  • v zeigt einem im LDIF Format die Änderungen an
  • e geht zurück in den Editiermodus
  • Q verwirft die Änderungen
  • y übernimmt die Änderungen

Howto: Clone LDAP Server

Alles Zeugs mit slapcat und slapadd hat bei mir nicht funktioniert. Nur zum festhalten:

$ slapcat -l ldapdump-$(date -I).ldif
$ slapadd -l ldapdump-$(date -I).ldif

Hier hat jemand wohl erfolg gehabt…

Was bei mir gut funktioniert hat war den neuen LDAP erst einmal mehr oder weniger so aufzusetzen wie den alten, also gleiche DN und schemas drin (dpkg-reconfigure slapd). Anschliessend habe ich mit ldapsearch auf dem alten Server alles exportiert und mit ldapadd auf dem neuen Server importiert:

$ ldapsearch -x -LLL > ldapdump-$(date -I).ldif
$ ldapadd -x -D "cn=admin,dc=example,dc=org" -W -f ldapdump-$(date -I).ldif

Der entscheidene Hinweis kam von hier.

— UPDATE 2013-07-31 —

Bei dem Export mittels ldapsearch sicherstellen, dass auch die userPassword: Eintraege mit exportiert werden. Ansonsten muss man sich gegebenenfalls authentifizieren zum Beispiel mit:

$ ldapsearch -x -LLL -H ldap://127.0.0.1:389 -D "cn=admin,dc=example,dc=org" -W | gzip > $(date -I)-ldapdump.ldif.gz

LDAP – logging, loglevel, seperate logfile, logrotate

Das loglevel wird in der /etc/ldap/slapd.conf mit dem Eintrag

 loglevel INTEGER

festgelegt. Moegliche Werte sind (man slapd.conf)

  • 1 (0x1 trace) trace function calls
  • 2 (0x2 packets) debug packet handling
  • 4 (0x4 args) heavy trace debugging (function args)
  • 8 (0x8 conns) connection management
  • 16 (0x10 BER) print out packets sent and received
  • 32 (0x20 filter) search filter processing
  • 64 (0x40 config) configuration file processing
  • 128 (0x80 ACL) access control list processing
  • 256 (0x100 stats) connections, LDAP operations, results (recommended)
  • 512 (0x200 stats2) stats log entries sent
  • 1024 (0x400 shell) print communication with shell backends
  • 2048 (0x800 parse) entry parsing
  • 16384 (0x4000 sync) LDAPSync replication
  • 32768 (0x8000 none) only messages that get logged whatever log level is set

Diese Zahlen sind auch beliebig kombinierbar. Moechte man z.B. das loglevel 128 und 32 kombiniert haben, traegt man loglevel 160 ein.

Der LDAP logt normalerweise nach /var/log/syslog. Moechte man eine eigene Logfile haben, z.B. /var/log/slapd.log, dann die folgende Zeile in /etc/syslog.conf bzw. /etc/rsyslog.conf hinzufuegen:

 local4.*		/var/log/sldap.log

Um die logfile in logrotate mit aufzunehmen die Datei /etc/logrotate.d/slapd anlegen und wie folgt fuettern:

/var/log/slapd.log
{
	rotate 7
	daily
	missingok
	notifempty
	delaycompress
	compress
	postrotate
		invoke-rc.d rsyslog reload > /dev/null
	endscript
}

Nach entsprechenden Aenderungen natuerlich die jeweiligen Dienste (ldap, rsyslog) neustarten…