LDAP
Konfiguration
Konfigurationsdatei: /etc/openldap/slapd.conf
- Loglevel ändern
Standard:
loglevel 0
Debugging:
loglevel -1
Sonstiges
- Root Passwort setzen
smbpasswd -w <Passwort>
Das Passwort wird in /etc/samba/secrets.tdb gespeichert
- Administrator Anmeldung
cn=admin,dc=network
Smbldap-Tools
Die Konfiguration befindet sich in /etc/smbldap-tools/smbldap.conf
- Gültigkeitsdauer des Passwortes ändern
Standardwert ist 45 Tage. Folgende Änderung setzt diesen Wert auf quasi unendlich:
defaultMaxPasswordAge = 99999
Durch diese Option wird das LDAP Attribut ShadowMax geändert.
- Die Smbldap-tools verwenden
Die smbldap-tools befinden sich in
/usr/local/sbin
Das selbstgeschriebene Script /usr/local/sbin/adduser.sh kann verwendet werden, um einen einzelnen Benutzer oder eine Liste von Benutzern hinzuzufügen:
/usr/local/sbin/adduser.sh User Gruppe Zuname Vorname Passwort
oder
/usr/local/sbin/adduser.sh /usr/local/sbin/users.txt
Das Script erkennt automatisch, ob eine Liste oder ein einzelner Benutzer übergeben wurde.
LDAP Befehle
Daten anzeigen mit den smbldap-tools
smbldap-usershow <username> smbldap-groupshow <groupname>
Die angezeigten Daten sind offenbar nicht geeignet für den Import als LDIF Datei.
- Das Toool smbldap-usershow liefert mehrere Einträge in einer Zeile, z.B. für den Eintrag objectClass
objectClass: top,person,organizationalPerson,inetOrgPerson,posixAccount,shadowAccount,sambaSamAccount
Die Einträge sollten aber jeweils in einer Zeile stehen.
- Mit ldapsearch erhält man korrekt formatierte Daten:
objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount objectClass: sambaSamAccount
Daten suchen mit ldapsearch
Die Option -LLL liefert die Ausgabe ohne Kommentare etc.
- Suchanfrage als LDAP Administrator
Damit wirklich alle Daten angezeigt werden, auch Passwörter, muss eine Suche als LDAP Administrator durchgeführt werden:
# ganze Datenbank ausgeben ldapsearch -x -D "cn=admin,dc=network" -w <ldap_admin_passwort> -LLL > /root/ldap.backup.ldapmodify.ldif # einen Maschinenaccount ausgeben ldapsearch -x -D "cn=admin,dc=network" -W -b "ou=Machines,dc=network" uid=vbox1$ -LLL
- -D Authentifizierung mit der nachfolgenden DN
- -W Passwortabfrage
- Suchanfrage als normaler LDAP Benutzer.
Alle Einträge des Benutzers stehr_kar suchen:
ldapsearch -x -b "ou=users,dc=network" uid=stehr_kar -LLL
Speichern als LDIF Datei
user=ster_kar ldapsearch -x -b "ou=users,dc=network" uid=$user -LLL | tee $user.ldif
Eintrag gecos des Benutzers stehr_kar suchen:
ldapsearch -x -b "ou=users,dc=network" uid=stehr_kar gecos -LLL
Die Einträge Uid und GivenName suchen:
ldapsearch -x -b "ou=users,dc=network" Uid GivenName -LLL
Daten einer Gruppe ändern
Homeverzeichnisse aller Volksschüler ändern
ldapsearch -x -b "ou=users,dc=network" gidNumber=502 -LLL | grep "uid:" | cut -d " " -f "2" | \ while read user ; do smbldap-usermod -d /local/vs_schueler/$user $user ; done
Listen erzeugen
ldapsearch -x -b "ou=users,dc=network" Uid -LLL | grep uid: | cut -d " " -f "2" ldapsearch -x -b "ou=users,dc=network" homeDirectory -LLL | grep homeDirectory: | cut -d " " -f "2"
Komplette LDIF Datei erzeugen
slapcat -l ldap.backup.ldif
Dieser Befehl funktioniert nur, wenn in /etc/openldap/slapd.conf der Eintrag database monitor existiert
Die so erzeugte LDIF Datei kann nur mit slapadd wieder eingelesen werden. Um die Datei oder Teile daraus mit dem Befehl ldappadd bzw ldapmodify einlesen zu können, müssen bestimmte Zeilen entfernt werden.
# Erzeugen einer Steuerungsdatei für sed: cat >slapcat_ldapadd.ldif <<EOF /^creatorsName: /d /^createTimestamp: /d /^modifiersName: /d /^modifyTimestamp: /d /^structuralObjectClass: /d /^entryUUID: /d /^entryCSN: /d EOF
# Aufruf von slapcat und Weiterbearbeitung mit sed: slapcat -v | sed -f slapcat_ldapadd.ldif > ldap.backup.ldif
LDIF Datei wieder einlesen
- LDAP Server stoppen:
rcldap stop
- Alle Dateien in
/var/lib/ldapaußerDB_CONFIGlöschen
- Dann alles importieren:
slapadd -v -l ldap.backup.ldif
- LDAP Server wieder starten:
rcldap start
Ändern der Maschinenaccounts
Dies ist ein Beispiel für eine komplexe Datenänderung, durchgeführt am 08.10.2011
Achtung: Die Maschinenaccounts haben anschließend NICHT funktioniert und mussten an jeder Workstation durch neuerliches Anmelden in der Domäne angelegt werden.
- Maschinenaccounts als LDIF Datei speichern
ldapsearch -x -D "cn=admin,dc=network" -W -b "ou=Machines,dc=network" -LLL | tee machines.ldif
- Aus dieser Datei die Namen der Maschinen extrahieren und als machines.uid speichern
grep "uid:" machines.ldif | cut -d " " -f 2 > machines.uid
- Daten aus alten Accounts extrahieren, die weiter gebraucht werden, z.B. Passwörter
# ldif.old.sh
while read zeile
do ldapsearch -x -D "cn=admin,dc=network" -w <passwd> -b "ou=Machines,dc=network" uid=$zeile -LLL \
| tee ~/ldap /ldif.old/$zeile.ldif
done < ./machines.uid
rm ~/ldap/extract/*
for datei in ~/ldap/ldif.old/*
do
name=`basename $datei`.extract
echo objectClass: sambaSamAccount > ~/ldap/extract/$name
echo "sambaAcctFlags: sambaAcctFlags: [W ]" >> ~/ldap/extract/$name
grep sambaSID $datei >> ~/ldap/extract/$name
grep displayName $datei >> ~/ldap/extract/$name
grep sambaNTPassword $datei >> ~/ldap/extract/$name
grep sambaPwdLastSet $datei >> ~/ldap/extract/$name
done
- Maschinenaccounts ändern
# ldif.new.sh
# Aufgelistete Maschinenaccounts löschen
while read zeile
do ldapdelete -x -D "cn=admin,dc=network" -w <passwd> uid=$zeile,ou=Machines,dc=network
done < ./machines.uid
# Maschinenaccounts neu erzeugen
while read zeile
do smbldap-useradd -w $zeile
done < ./machines.uid
# Für jede aufgelistete Maschine eine LDIF Datei speichern
while read zeile
do ldapsearch -x -D "cn=admin,dc=network" -w <passwd> -b "ou=Machines,dc=network" uid=$zeile -LLL \
| tee /tmp/ldif.new
# Leerzeilen entfernen und speichern
sed -e '/^[ ]*$/d' /tmp/ldif.new > ~/ldap/ldif.new/$zeile.ldif
done < ./machines.uid
# Extrahierte Zeilen der alten Accounts zur neuen LDIF Datei hinzufügen
rm ~/ldap/ldif.complete/*
for datei in ~/ldap/ldif.new/*
do name=`basename $datei`
cat $datei ~/ldap/extract/$name.extract > ~/ldap/ldif.complete/$name
done
# Die aufgelisteten Maschinenaccounts in der LDAP Datenbank wieder löschen
while read zeile
do smbldap-userdel $zeile
done < ./machines.uid
# Die neuen Maschinenaccounts in LDAP einlesem
for datei in ~/ldap/ldif.complete/*
do ldapadd -x -D "cn=admin,dc=network" -w <passwd> -f $datei
done
Apache Authentifizierung über LDAP
Siehe: Apache
Weitere INFO
http://arktur.schul-netz.de/wiki/index.php/Administratorhandbuch:LDAP