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/ldap
außerDB_CONFIG
lö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