LDAP

Aus Mediawiki Ferdinand Gruber
Zur Navigation springen Zur Suche springen

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ßer DB_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