Bulk Move Users in OpenLDAP (Skript)

Hat man ein LDAP Verzeichnis mit vielen Benutzern, dann ist einem angeraten direkt zu Beginn ein gutes, belastbares Design zu erstellen. Tut man das nämlich nicht, so hat man schnell einige hundert Benutzerkonten an falscher Stelle.

Wer dann nacharbeiten möchte, der such sich entweder gescheite Tools, oder macht es selbst. Dabei hat man eigentlich nicht viele Möglichkeiten. Im Grunde genommen geht es nur darum den DN eines Eintrages zu ändern, sodass dieser dann zum neuen Design passt.

Wenn man Beispielsweise 2000 Benutzer in einer OU hat, davon aber nur 789 zu einer bestimmten Gruppe gehörende verschieben will, so kann man das natürlich auch per Hand machen. Oder aber, man jongliert mit den vorhandnen Informationen und sichert sich gleich für die Zukunft ab, denn mit hoher Wahrscheinlichkeit wird so etwas in ähnlicher Form wieder vorkommen.

Zunächst einmal brauch man alle Benutzer einer Gruppe, und das möglichst durch Leerzeichen getrennt. Anschließend muss man sich eine LDIF zusammenschrauben die es einem ermöglicht ein Konto zu verschieben. In schnell und einfach sieht das dann so aus:

#!bin/bash
PASSWORD=STRENG_GEHEIMES_PASSWORD

for i in $(ldapsearch -x cn=G_R_U_P_P_E_N_N_A_M_E | grep memberUid | cut -f 2 -d " " | sort)
do
ldapsearch -x -s one -b ou=Users,dc=DOMAIN,dc=DE uid=$i | grep -i dn
if [ "$?" -eq "0" ]; then
echo "dn: uid=$i,ou=Users,dc=DOMAIN,dc=DE\nchangetype: moddn\nnewrdn: uid=$i\ndeleteoldrdn: 1\nnewsuperior: ou=extern,ou=Users,dc=DOMAIN,dc=DE" \
| ldapmodify -x -w $PASSWORD -D "cn=Manager,dc=DOMAIN,dc=DE" -H ldap://localhost

echo "$i wurde verschoben"
fi
done

 

Das Leben ist schön.

Windows Server 2008(R2) - externer NTP Server

Ich musste leider vor kurzem mal wieder an einem Windows Server um eine profane Aufgabe zu erfüllen. Es sollten externe NTP Server eingerichtet werden. Da der Server gleichzeitig auch ein DC war, gestaltet sich das (natürlich) schwieriger als erwartet.

Es müssen die folgenden Befele ausgfeführt werden, damit der gewünschte Server für die Abfragen genutzt wird:

net stop w32time 
w32tm /config /syncfromflags:manual /manualpeerlist:"ntp1.domaene.de,ntp2.domaene.de"
w32tm /config /reliable:yes
net start w32time

Anschließend war dann auch wieder alles gut.

 

Cloning mit dd und ssh

 Rechner von der Hardware zu virtuellen Maschinen umzufunktionieren ist ja mittlerweile eine ziemlich langweilige Aufgabe geworden. Wenn man das ganze allerdings anders herum probiert, dann braucht man zwar keine riesen Hilfsmittel, aber ein wenig Umdenken ist schon gefragt.

In diesem Beitrag  beschreibe ich, kurz und knapp, wie man aus einem eine Festplatte über das Netzwerk auf eine andere (auch gern ein Imagefile) clont.

Genutzt wird dd. Mit Hilfe von dd kann man einen Datenstrom von Blockdevices abgreifen und zum Beispiel in einer Datei speichern. Da es auf diesem Weg funktioniert, funktioniert es auch im Netzwerk mit Hilfe von SSH ziemlich einfach.

Wir greifen einfach die Daten von der Festplatte/dem Image ab

dd if=/mnt/storage/vm1234.raw

und geben es mit einer Pipe an SSH weiter

 | ssh root@111.222.333.444

wo wir es dann an die entgültige Stelle bewegen:

dd of=/dev/sda

Vollständig sieht das dann so aus:

 

dd if=/mnt/storage/vm1234.raw | ssh root@111.222.333.444 dd of=/dev/sda 

Auf diesem Weg kann man dann ziemlich einfach die Daten einer Festplatte/eines Images durch das Netz an einen anderen Ort bewegen, um dort dann zum Beispiel seinen neuen Rechner in Betrieb zu nehmen.

Geholfen hat:

LDAP Backupskript

Betreibt man einen LDAP Server, so will man sicherlich das ein oder andere Mal eine Sicherung machen. Ich möchte das ganz oft und da die Daten in der Regel ziemlich klein sind, kann ich das dann auch.

Dazu habe ich mir ein Skript gebaut, welches die Arbeit für mich erledigt. Es wird immer der komplette LDAP-Baum in eine LDIF Datei gesichert, sodass ich im Zweifelsfall alles schnell wieder rekonstruieren kann.

#!/bin/bash
DATE=`date +%Y%m%d-%H%M%S`
DST=/PATH/TO/BACKUP/
DEBUG=1
LDIF=SLAPBACKUP-$DATE.ldif

if [ $DEBUG -eq 1 ]

then
echo /usr/sbin/slapcat -l $DST$LDIF
/usr/sbin/slapcat -l $DST$LDIF 2>/dev/null
else
/usr/sbin/slapcat -l $DST$LDIF 2>/dev/null
fi

find $DST -type f -mmin +60 -name "*.ldif" -exec bzip2 {} \;
find $DST -type f -mtime +14 -name "*.bz2" -exec rm -f {} \;

exit 0

Dieses Skript rufe ich dann mittels Crontab alle Stunde auf und sichere mir so kontinuierlich den Zustand des Verzeichnisses. Abgelegt wird immer eine neue Datei mit Zeitstempel. Ältere Dateien werden komprimiert und nach 60 Tagen gelöscht.

So mag ich das.

S/MIME Zertifikat für die Emailverschlüsselung

Da ja grade technisch so ziemlich alles den Bach runter geht (ein wenig dramatisch, aber nahe dran) will vielleicht der ein oder andere seine Emails verschlüsseln. Aktuell beschäftige ich mich ein wenig mit S/MIME ist finde es ziemlich einfach nachvollziehbar.

Es funktioniert ähnlich zu SSL im Browser. Man braucht ein Zertifikat. Dieses wiederum sollte maximal vertrauenswürdig und daher vielleicht sogar von einer öffentlichen Stelle ausgestellt werden.
Komodo bietet ein solches Zertifikat an:https://www.instantssl.com/ssl-certificate-products/free-email-certificate.html 

Geht alle da drauf, schafft euch ein Zertifikat an und nutzt es in jeder erdenklichen Form für die Emailverschlüsselung/Signierung!

Unter Mac ist noch ein kleiner Schritt notwendig, damit man das erstellte Zertifikat dann auch auf dem iPhone oder sonst wie nutzen kann. Man muss aus der Schlüsselverwaltung heraus einen Export im PKCS12 Format machen. Andernfalls fehlt der private Schlüssel - was ziemlich doof ist.

Diese Datei schickt man sich dann einfach an sein Handy und import es. Anschließend kann man schnell und einfach in den Einstellungen die gewünschten Optionen aktivieren um zum Beispiel jede ausgehende Email zu signieren.

Einfach oder?

 


‪#‎SMIME‬ ‪#‎Encryption‬ ‪#‎Verschlüsselung‬ ‪#‎IT‬ ‪#‎Security‬ ‪#‎Cert‬

Home ← Ältere Posts