19.04.2023

Programminstallation unter Linux

Apache Webserver
Samba Server
eMail-Server
Kerberos einrichten
OpenSSH Server / Client
DSL Konfiguration unter Linux
NTP Server / Client
DNS Server
Subversion
iSCSI
LDAP-Server
Radius-Server
OpenSSL-Server einrichten
NNTP Server (NEWS-Server) INN und Leafnode
DHCP-Server einrichten
SNMP Service einrichten
Stunnel einrichten
MySQL-Server einrichten
Datensicherung auf Bandlaufwerk
Audio CDs in WAV umwandeln
CDs und DVD erstellen
Grafiken bearbeiten erstellen
FAX Versand und Empfang
Web und FTP Sites syncronisieren
Verschlüsselung von E-Mails und Dokumenten
Programm Übersicht
Datenrettung
Linux Terminalserver
PXE Boot
sonstige Programme

Seitenanfang

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

 

 

 

 

 

Seitenanfang

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.
   

SeitenanfangInstallation 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
   

SeitenanfangEinrichtung 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.


SeitenanfangStruktur 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.


SeitenanfangLDAP 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


SeitenanfangLDAP 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

SeitenanfangBefehle
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