19.04.2023
Programminstallation unter Linux
LDAP-Server 2.4.x (Lightweight Directory Access Protocol)
Dokumentation: Galileo OpenLDAP, ubuntu Documentation
Beispiel ubuntu oder Debian OpenLDAP
Verzeichnisse / Dateien |
Beschreibung |
/etc/ldap/schema |
Verzeichnis für die aktiven LDAP Schemas |
/var/lib/ldap |
Verzeichnis mit den LDAP Datenbanken |
/etc/ldap |
LDAP Konfigurationsverzeichnis |
/etc/ldap/ldap.conf |
Konfigurationsdatei |
/etc/default/slapd |
Daemon Konfiguration |
/etc/ldap/slapd.d/cn=config/cn=schema |
Standard Schema |
Paket slapd |
slapacl |
|
slapauth |
|
slapd |
Daemon |
slapindex |
|
slapschema |
|
slapadd |
|
slapcat |
Ausgabe der LDAP Daten als .ldif Datei |
slapdn |
|
slappasswd |
Passwort Generator, gibt Passwort Hash für des eingegebene Passwort aus. Standard {SSHA} |
slaptest |
Konfiguration testen |
Paket ldap-utils |
ldapadd |
Einträge zur LDAP-DB hinzufügen |
ldapdelete |
Einträge aus der LDAP-DB entfernen |
ldapmodify |
Einträge in der LDAP-DB bearbeiten |
ldappasswd |
LDAP Benutzer Passwort setzen |
ldapurl |
|
ldapcompare |
|
ldapexop |
|
ldapmodrdn |
|
ldapsearch |
|
ldapwhoami |
|
Standard Schemas nach der Installation
core.ldif
cosine.ldif
inetorgperson.ldif
nis.ldif
Schemas zum Konvertieren vorbereiten
# /etc/ldap/schema/schema_convert.conf
include /etc/ldap/schema/collective.schema
include /etc/ldap/schema/corba.schema
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/duaconf.schema
include /etc/ldap/schema/dyngroup.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/java.schema
include /etc/ldap/schema/ldapns.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/openldap.schema
include /etc/ldap/schema/pmi.schema
include /etc/ldap/schema/ppolicy.schema
- Konfiguration testen
slaptest -f /etc/ldap/ldap.conf -F /etc/ldap/slapd.d/
Optionen
-f - Konfigdatei
-F - Konfig Verzeichnis
- Dump der LDAP Datenbank erstellen
slapcat -l backup_ldap.ldif
- prüfen ob der LDAP Daemon slapd läuft
lsof -a -i -c slapd
- prüfen welcher Dienst auf TCP Port 389 läuft
lsof +i TCP:389
LDAP Konfiguration eines alten Servers auf einen anderen übertragen
- LDAP Konfiguration eines alten Servers in Datei speichern
slapcat -n0 -F /etc/ldap/slapd.d > /tmp/config.ldif
- LDAP Konfiguration auf einen neuen Server einlesen un danach die Konfiguration testen
slapadd -n0 -F /etc/ldap/slapd.d -l /tmp/config.ldif
slaptest -F /etc/ldap/slapd.d
LDAP Daten ausgeben
- alle Attribute anzeigen (-h und -p kann weggelassen werden, wenn LDAP auf Standard Einstellungen läuft).
ldapsearch -h localhost -p 389 -xLLL -b ou=benutzer,dc=domain,dc=tld uid=user1
- nur abgefragte Attribute (sn givenName cn)
ldapsearch -h localhost -p 389 -xLLL -b "dc=domain,dc=tld" uid=user1 sn givenName cn
dn: uid=user1,ou=benutzer,dc=domain,dc=tld
cn: Max Mustermann
sn: Mustermann
givenName: Max
Optionen
-x - einfache Authentifizierung, kein SASL
-LLL - ohne LDAP Schema
-b - Basis DN
-h - Hostname
-p - Port
LDAP User Passwort setzen
- LDAP User Passwort festlegen (als Root)
ldappasswd -xWD cn=admin,dc=domain,dc=tld uid=user1,ou=benutzer,dc=domain,dc=tld -s NewPasswd
- LDAP Passwort HASH erstellen zum eintragen in eine .ldif Datei
# slappasswd
New password:
Re-enter new password:
{SSHA}OR5F+XAEoQ+3mlzZnE6XguqEo4s8G8hn
LDAP Struktur erstellen
- LDAP Struktur zur Datenbank hinzufügen
ldapadd -x -W -D 'cn=admin, dc=domain,dc=tld' -f ldap.ldif
# ldap.ldif - OUs einrichten
#
# Zweite Stufe - Organisationseinheiten
dn: ou=benutzer,dc=domain,dc=tld
objectclass: organizationalunit
ou: benutzer
description: Benutzer OU
dn: ou=service,dc=domain,dc=tld
objectclass: organizationalunit
ou: service
description: Service OU
# Dritte Stufe - Benutzer
dn: uid=user1,ou=benutzer,dc=domain,dc=tld
cn:Max Mustermann
sn:Mustermann
givenName:Max
mail:user1@domain.tld
uid:user1
userPassword: {SSHA}OR5F+XAEoQ+3mlzZnE6XguqEo4s8G8hn
LDAP-Server ältere Version
Installation unter Debian
Einrichtung des LDAP Servers
Struktur der Organisation
LDAP Schema
LDAP Autorisierung mit PAM
Befehle und Beispiele
"
Solaris Nameserver Switch" Hilfe "man nsswitch.conf"
Auf allen Clientrechnern muss die Datei /etc/nsswitch.conf bearbeitet werden.
Festlegen der Reihenfolge für die Authentifizierung, als erstes wird beim
Login der Name des Users in der Datei /etc/passwd und /etc/shadow gesucht, dann
auf einem Server im Netz und dann auf einem LDAP-Server
passwd: compat ldap
shadow: compat ldap
group: compat ldap
files |
in den Dateien /etc/passwd oder /etc/shadow |
nis |
Netzwerk-Server, wie der abzufragende Server erreicht werden kann,
wird in der Datei yp.conf festgelegt. |
ldap |
ein LDAP-Server im Netzwerk |
compat |
Für Kompatibilität mit älteren Dateiformaten. Diese
Option kann benutzt werden, wenn entweder NYS oder glibc 2.x für
NIS- und NIS+-Lookups verwendet werden. Normalerweise können diese
Versionen ältere NIS-Einträge in passwd und group nicht verarbeiten.
Erst die Option compat macht es möglich. |
db |
Suche die Informationen in DBM-Dateien im Verzeichnis /var/dbm. Der
für die Datei verwendete Name ist derjenige der entsprechenden NIS-Map. |
|
|
Installation unter Debian
apt-get install ldap-utils libnss-ldap libpam-ldap slapd
Das Paket libpam-ldap stellt ein PAM-Modul zur Verfügung (pam_ldap.so),
welches die Passwort-Authentifizierung gegen einen LDAP-Server über den
flexiblen PAM-Mechanismus ermöglicht.
Paket libnss-ldap
/etc/libnss-ldap.conf
/etc/pam_ldap.conf
Konfigurationsverzeichnis /etc/ldap
ldap.conf -- Client Konfiguration
ldapfilter.conf -- Filterregeln
ldapsearchprefs.conf -- Bevorzugte Suchkriterien
ldaptemplates.conf -- Templates für Formulare
slapd.conf -- Server Konfiguration
slapd.at.conf -- Beschreibung der Attribute
slapd.oc.conf -- Beschreibung der Objektklassen
*.schema -- neue Beschreibung der Attribute und Objektklassen
/etc/default/slapd -- LDAP Server Grundeinstellungen
/etc/ldap.secret -- LDAP-Server Passwortdatei
Datei /etc/ldap.conf |
(Hilfe "man ldap.conf") |
BASE dc=domain, dc=tld |
# Searchbase meist die Domain (hier domain.tld) |
HOST pc1.domain.tld |
# LDAP-Server |
PORT 389 |
# LDAP Port des Servers |
|
|
Datei /etc/slap.conf |
(Hilfe "man slapd.conf") |
referral ldap://root.openldap.org |
#wenn der Server nicht in der Lage ist eine Anfrage zu beantworten,
wird diese zu einem anderen Server geleitet. |
loglevel 256 |
Loglevel |
database ldbm |
Format der Datenbank |
directory "/var/lib/ldap" |
Speicherort der Datenbank |
rootdn "cn=admin, dc=domain,dc=tld" |
|
rootpw {CRYPT}YkZTNIboTMYE2 |
Server Passwort String wird mit slappasswd erzeugt |
|
|
Einrichtung des LDAP Servers
1. LDAP Datenbank initalisieren "~/ldif/initial.ldif"
dn: dc=domain, dc=tld
objectClass: dcObject
objectClass: organization
dc: domain
o: Domain.tld Org.
description: Domain.tld Org.
dn: cn=Manager, dc=domain, dc=tld
objectclass: organizationalRole
cn: Manager
dn: ou=Admin,dc=domain,dc=tld
ou: Admin
objectClass: organizationalUnit
2. LDIF Daten in Datenbank schreiben und danach den Server starten
slapadd -v -l ~/ldif/initial.ldif
/etc/init.d/slapd start
3. Testen der Einträge in der Datenbank
ldapsearch -x -b 'dc=domain, dc=tld' '(objectclass=*)'
4. ändern der Einträge
ldapmodify -v -x -D "cn=Admin,dc=domain,dc=tld" -W -f /etc/ldap/ldif/xxx.ldif
5. hinzufügen von Einträgen
ldapadd -v -x -D "cn=Admin,dc=domain,dc=tld" -W -f /etc/ldap/ldif/xxx.ldif
- slappasswd generiert ein Passwort das man in die LDIF-Datei einfügen kann.
Wenn man die Verschlüsselung für das Passwort ändern will, kann
man die "slappasswd" mit der Option (-h) aufrufen und den Verschlüsselungsmodus
angeben ({CRYPT}, {MD5}, {SMD5}, {SSHA}, {SHA}. default ist {SSHA})
slappasswd -h {CRYPT}
Das Passwort steht dann in der Datei "/etc/ldap.secret", diese ist
nur durch Root lesbar, wie die slapd.conf auch sein sollte.
- wenn der Server mal nicht starten will (DEBUG-Modus)
slapd -d 16383 -f /etc/ldap/slapd.conf
- Achtung: bevor slapadd, slapcat oder slapindex verwenden wird, den LDAP Server
stoppen mir "/etc/init.d/slapd stop" ansonsten ist das LDAP Verzeichnis
nicht konsistent.
- in der LDIF Datei darf nur am Anfang der Datei das Zeichen # verwendet werden.
Struktur der Organisation (ein Beispiel)
DOMAIN.TLD:
|
+-- Admin
| |
| +-- Admin 1 (Root)
|
+-- User
| |
| +-- User 1 (Maxim Musterman)
| |
| +-- User 2 (Ted Tester)
|
+-- Support
| |
| +-- Support 1 (Tim Telefon)
-
Grundstruktur der Organisation "/etc/ldap/ldif/st.domain.tld.ldif"
# Organisation domain.tld
# Manager
# Admin
# User
# Support
#
dn: dc=domain,dc=tld
dc: domain
o: DOMAIN.TLD Org.
description: Organisation Domain.tld
objectclass: domain
objectClass: dcObject
objectClass: organization
l: Musterstadt
postalcode: 12345
dn: cn=Manager,dc=domain,dc=tld
cn: Manager
description: domain.tld administrator Rolle
objectclass: organizationalRole
dn: ou=Admin,dc=domain,dc=tld
ou: Admin
objectclass: top
description: domain.tld administrator Rolle
objectClass: organizationalUnit
dn: ou=User,dc=domain,dc=tld
ou: User
description: domain.tld User Rolle
objectClass: organizationalUnit
dn: ou=Support,dc=domain,dc=tld
ou: Support
description: domain.tld Support Rolle
objectClass: organizationalUnit
dn: ou=group,dc=domain,dc=tld
ou: Group
description: Gruppen Rolle
objectClass: organizationalUnit
dn: cn=root,ou=group,dc=domain,dc=tld
objectClass: top
objectClass: posixGroup
description: Gruppe root
cn: root
gidNumber: 0
dn: cn=users,ou=group,dc=domain,dc=tld
objectClass: top
objectClass: posixGroup
description: Gruppe users
cn: users
gidNumber: 100
-
Struktur der User "/etc/ldap/ldif/user.domain.tld.ldif"
# User der Organisation domain.tld
# Administrator Root
# User Maxim Musterman
# User Ted Tester
# Support Tim Telefon
#
dn: cn=root,ou=Admin,dc=domain,dc=tld
cn: root
jpegPhoto: /tmp/pic.jpg
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
uid: root
uidNumber: 0
gidNumber: 0
homeDirectory: /root
loginShell: /bin/bash
sn: Root
mail: root@domain.tld
l: Musterstadt
postalCode: 12345
telephoneNumber: +49 (xx) 1234569
dn: cn=Maxim Musterman,ou=User,dc=domain,dc=tld
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: maxim
cn: Maxim Musterman
givenName: Maxim
sn: Musterman
telephoneNumber: +49 (xx) 1234569
mail: maxim@domain.tld
dn: cn=Ted Tester,ou=User,dc=domain,dc=tld
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: posixAccount
uid: ted
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/tim
loginShell: /bin/bash
cn: Ted Tester
sn: Tester
telephoneNumber: +49 (xx) 1234569
dn: cn=Tim Telefon,ou=Support,dc=domain,dc=tld
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: posixAccount
uid: tim
uidNumber: 1002
gidNumber: 1002
homeDirectory: /home/tim
loginShell: /bin/bash
cn: Tim Telefon
sn: Telefon
telephoneNumber: +49 (xx) 1234569
-
Struktur der User "/etc/ldap/ldif/group.domain.tld.ldif"
dn: cn=root,ou=group,dc=domain,dc=tld
objectClass: top
objectClass: posixGroup
description: Unix-Gruppe root
cn: root
gidNumber: 0
dn: cn=users,ou=group,dc=domain,dc=tld
objectClass: top
objectClass: posixGroup
description: Unix-Gruppe users
cn: users
gidNumber: 100
memberUid: ted
memberUid: tim
dn: cn=ted,ou=group,dc=domain,dc=tld
objectClass: top
objectClass: posixGroup
description: Unix-Gruppe User: Ted Tester
cn: ted
gidNumber: 1001
dn: cn=tim,ou=group,dc=domain,dc=tld
objectClass: top
objectClass: posixGroup
description: Unix-Gruppe User: Tim Telefon
cn: tim
gidNumber: 1002
... usw.
LDAP Schema
dn: cn=Max Musterman,ou=User,dc=domain,dc=tld |
Distinguished Name |
c: Germany |
Country |
o: Domain.tld |
Organisation |
ou: user-ou |
OrganizationalUnit |
uid: mmuster |
User ID (muss eindeutig sein) |
gidnumber: 100 |
Gruppen ID (muss eindeutig sein), oder Nummer der Gruppe in der der
User Mitglied ist. |
cn: Max Mustermann |
Common Name bevorzugt "Vorname Nachname" |
givenname: Max |
Vorname |
sn: Mustermann |
Nachname |
userpassword: {CRYPT}yIvSu2N2 |
Passwort |
mail: user@domain.tld |
E-Mail Adresse |
mailacceptinggeneralid: user@domain.tld |
E-Mail Adresse |
maildrop: user@domain.tld |
E-Mail Adresse |
preferredlanguage: de |
bevorzugte Frage |
objectclass: top |
oberstes Schema in der Hierarchie |
objectclass: posixAccount |
Unix User-Account im LDAP |
objectClass: posixGroup |
Unix Gruppen-Account im LDAP |
memberUid: max |
teilt den User "max" einer PosixGruppe zu |
homeDirectory: /home/max |
Heimatverzeichnis |
loginShell: /bin/bash |
Shell nach dem Login |
|
|
Das Schema wird in der Datei "slapd.conf" geladen mit Hilfe des INCLUDE Befehls
# Standard Schemas
include /etc/ldap/schema/core.schema # OpenLDAP core (required)
include /etc/ldap/schema/cosine.schema # Cosine and Internet X.500 (useful)
include /etc/ldap/schema/nis.schema # Network Information Services (FYI)
include /etc/ldap/schema/inetorgperson.schema # InetOrgPerson (useful)
# Zusatz Schemas
include /etc/ldap/schema/corba.schema
include /etc/ldap/schema/java.schema
include /etc/ldap/schema/krb5-kdc.schema
include /etc/ldap/schema/misc.schema # Assorted (experimental)
include /etc/ldap/schema/openldap.schema # OpenLDAP Project (experimental)
Hierarchie der Objektklassen
objectClass: top Oberste Klasse (Wurzel)
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
- Attribute der Objektklasse
person
sn: Bond
cn: James Bond
telephoneNumber: 020 7930 9007
userPassword: {crypt}geheim
description: Agent 007
- Attribute der Objektklasse
organizationalPerson
ou: MI6
title: Commander
street: The Enquiries Desk
postOfficeBox: 3255
st: CT
postalCode: SW1P 1AE
facsimileTelephoneNumber: 020 7930 9000
- Attribute der Objektklasse
inetOrgPerson
departmentNumber: 00
employeeType: permanent
givenName: James
initials: JB
jpegPhoto: james.jpg
audio: james.wav
homePhone: 020 7930 9007
pager: Opening the toy cabinet
preferredLanguage: English
userCertificate: certs/jb_cert.pem
LDAP Autorisierung mit PAM
mit der
PADL-Software erhält man ein paar Perl-Scripte die die localen Benutzer aus /etc/passwd und /etc/shadow in die LDAP Datenbank übernehmen. Um die Autorisierung über LDAP einzurichten sind folgende Einstellungen nötig.
- Eintrag in
/etc/nsswitch
passwd: files ldap
group: files ldap
shadow: files ldap
unter Debian
apt-get install libpam0g-dev ldap-utils libnss-ldap libpam-ldap
- Sym-Link erstellen
ln -s /etc/libnss-ldap.conf /usr/share/libnss-ldap/ldap.conf
- für alle lesbar machen
chmod 0644 /etc/libnss-ldap.conf
- Einstellungen in der
/etc/libnss-ldap.conf
host pc1.domain.tld
base dc=domain,dc=tld
ldap_version 3
- Einstellungen in der
/etc/pam_ldap.conf
host pc1.domain.tld
base dc=domain,dc=tld
ldap_version 3
bindpw {CRYPT}YkZTNIboTMYE2
rootbinddn cn=admin,dc=domain,dc=tld
pam_password crypt
PAM Autorisierung mittels LDAP (minimal)
dn: cn=root,dc=domain,dc=tld
objectclass: posixAccount
cn: root
uid: root
uidNumber: 0
gidNumber: 0
homeDirectory: /root
loginShell: /bin/bash
- Eintrag in /etc/pam.d
#%PAM-1.0
auth required pam_nologin.so
auth sufficient pam_ldap.so
auth required pam_unix.so use_first_pass # set_secrpc
account sufficient pam_ldap.so
account required pam_unix.so
password required pam_pwcheck.so
password required pam_ldap.so use_authtok
password required pam_unix.so use_first_pass use_authtok
session required pam_unix.so
session required pam_limits.so
session required pam_env.so
session optional pam_mail.so
Befehle |
ldapadd |
Eintrag hinzufügen |
ldapmodify |
Eintrag ändern |
ldapdelete |
Eintrag löschen |
ldapsearch |
Eintrag anzeigen lassen |
ldappasswd |
Passwort setzen |
ldapcompare |
|
ldapmodrdn |
|
ldapwhoami |
|
slurpd |
Standalone LDAP Update Replication Daemon |
slapd -d 16383 |
LDAP in Debug Modus starten |
slapcat -l out.ldif |
gibt eine LDIF Datei aus |
slapindex |
Index für LDIF Utilies |
slapadd -l in.ldif |
liest eine LDIF Datei in die SLAP Datenbank ein |
slapd -f /etc/ldap/slap.conf |
Stand-alone LDAP Daemon |
slapd -d 16383 |
LDAP in Debug Modus starten |
slappasswd |
erstellt USER-Passwörter |
|
|
Client Tools |
gq |
Grafische LDAP Client |
vlad |
LDAP visualisation tool |
Beispiele
- Eintrag der LDAP Datenbank hinzufügen
ldapadd -x -D "cn=Admin,dc=domain,dc=tld" -W -f /etc/ldap/ldif/user-add.domain.tld.ldif
- Eintrag der LDAP Datenbank ändern
ldapmodify -x -D "cn=Admin,dc=domain,dc=tld" -W -f /etc/ldap/ldif/user.domain.tld.ldif
- löschen eines Benutzers aus der LDAP Datenbank "cn=Maxim Musterman,ou=User,dc=domain,dc=tld"
ldapdelete -W -x -v -D "cn=Admin,dc=domain,dc=tld" "cn=Maxim Musterman,ou=User,dc=domain,dc=tld"
-anzeigen aller Einträge der Datenbank
ldapsearch -x -b 'dc=domain,dc=tld' '(objectclass=*)'
- Ein verschlüsseltes Passwort für den Server erstellen (das Passwort
kann
dann in
die
/etc/ldap/slapd.conf
eingetragen werden)
slappasswd -h {CRYPT}
- Passwörter in die Datenbank setzen
ldappasswd -D "cn=Admin,dc=domain,dc=tld" -x -W -S "cn=Maxim Musterman,ou=User,dc=domain,dc=tld"
- das neu gesetzte Passwort anzeigen (userPassword: ist nur sichtbar wenn man
sich unter der Identität angemeldet hat)
ldapsearch -x -D "cn=Maxim Musterman,ou=User,dc=domain,dc=tld" -W uid=maxim
- Wenn nach dem Anmelden eines Users, der Name des Users nicht angezeigt wir
z.B. "I
have no name!@pc2:~$" dann Hilft es die Leserechte auf die Konfigurationsdatei
zu setzen.
chmod a+r /etc/libnss-ldap.conf /etc/pam_ldap.conf
LDAP Schema Viewer