heise online
  • c't
  • iX
  • Technology Review
  • Mac & i
  • mobil
  • Security
  • Netze
  • Open Source
  • Developer
  • c't-TV
  • Download
  • Telepolis
  • Resale
  • Foto
  • Autos
  • Preisvergleich
  • Stellenmarkt
  • Abo
  • weitere Angebote
    • Shop
    • Artikel-Archiv
    • Veranstaltungen
    • Whitepapers
    • heise-marktplatz
    • IT-Markt
    • Tarifrechner
    • Jobs bei Heise

c't Magazin
  • Startseite
  • Artikel
  • c't-Projekte
  • Hotline & FAQ
  • Treiber & mehr
  • Kolumnen
Software zu Projekten Allgemeine Hinweise
Archiv-Suche Newsletter RSS-FeedRSS

c't › c't-Projekte

c't
  • Login
  • Help/Guide
  • About Trac
  • Preferences
  • Wiki
  • Timeline
  • Roadmap
  • Browse Source
  • View Tickets
  • Search

Context Navigation

  • Start Page
  • Index
  • History
  • Last Change

Benutzerverwaltung mit LDAP

  1. Benutzerverwaltung mit LDAP
    1. Warum LDAP?
      1. Verwaltung von Benutzerkonten
      2. Verteilung der Daten
    2. Voraussetzungen
    3. Installation und Konfiguration des LDAP-Servers
    4. Konfiguration von SAMBA
      1. Hinweis für eine Migration auf einen neuen Server
    5. Konfiguration der smbldap-tools
    6. Anlegen der initialen LDAP-Objekte
    7. NSS
    8. PAM
    9. Anlegen und Verwalten von Benutzern
    10. Anbinden von Linux-Clients an die LDAP-Datenbank
    11. Weiterführende Themen
      1. Inhalt der LDAP-Datenbank ausgeben
      2. LDAP-Datenbank zurücksetzen
      3. LDAP-Datenbank von einem anderen Rechner migrieren
      4. Von passwd+tdbsam nach LDAP migrieren
    12. Literatur

Diese Beschreibung geht auf die Verwaltung von Unix- und Samba-Accounts mit LDAP ein. Bei der hier beschriebenen Methode werden für die Verwaltung der User und Gruppen die smbldap-tools verwendet. Später können ggf. auch grafische Verwaltungsprogramme benutzt werden, die teilweise über den Webbrowser bedient werden.

Um die unten beschriebenen Vorteile von LDAP nutzen zu können, sollten alle User (außer die Systembenutzer wie z.B. root, daemon, bin, ...) in der LDAP-Datenbank gespeichert werden. Falls zu Testzwecken bereits Benutzeraccounts angelegt wurden, sollten diese jetzt evtl. wieder entfernt werden (ggf. vorher die jeweiligen Home-Verzeichnisse sichern!).

Warum LDAP?

Verwaltung von Benutzerkonten

Eigentlich könnte man annehmen, dass der Einsatz von LDAP in einem Heimnetzwerk etwas übertrieben wäre. Die lokalen User können doch genauso gut in der /etc/passwd bzw. /etc/shadow gespeichert werden.

Problematisch wird es dann, wenn bestimmte Programme weitere Informationen über einen User ablegen müssen, welche durch das festgelegte Dateiformat der /etc/passwd Datei nicht abgedeckt werden können. Zum Beispiel benötigt Samba das User-Passwort in einem anderen Format, als jenes, welches in der /etc/shadow verwendet wird. Für alle Benutzer, die über Samba auf den Server zugreifen wollen, muss also ein Eintrag in einer zweiten Datenbank existieren (früher meistens smbpasswd, heute eher tdbsam), welches parallel geflegt werden muss.

Wenn Samba das einzige Programm wäre, welches zusätzliche Daten über einen Benutzer benötigt, wäre die Situation wohl noch halbwegs übersichtlich. Man muss dann halt einen User an zwei Stellen anlegen bzw. das Passwort mit zwei unterschiedlichen Befehlen ändern. Für solche Fälle kann man noch problemlos ein kleines Skript schreiben. Auf einem realen System benötigen aber auch noch weitere Programme zusätzliche Daten über die einzelnen User, welche ebenfalls extra verwaltet werden müssen. Typische Anwendungen können z.B. ein Mail-Server oder die Anrufbeantworter-Software sein.

Auf einem "idealen" System würden wohl alle Programme sämtliche Userdaten über LDAP verwalten. Dieses Ziel ist aber Aufgrund der sehr heterogenen Softwarelandschaft unter Linux sicherlich nur schwer zu erreichen. Zum einen unterstützt nicht jedes Programm LDAP, zum anderen ist die notwendige Einrichtungsprozedur nicht immer wirklich selbsterklärend.

Verteilung der Daten

Außerdem bringt LDAP den großen Vorteil mit sich, dass auch Client-PCs die auf dem LDAP-Server abgelegten Accounts verwenden können. Für Windows-Clients bringt das keine neuen Vorteile, hier sorgt bereits Samba als Domänencontroller für die Verteilung der Userdaten. Bei Linux-Clients bietet es sich aber geradezu an, die auf den Server gespeicherten User-Accounts einfach mit zu benutzen.

Gerade wenn für die Dateifreigabe ausschließlich Samba benutzt wird, erspart man sich einige Probleme, wenn auf allen Rechnern im Netzwerk die gleichen Benutzernamen und Passwörter verwendet werden. In diesem Fall bietet es sich an, auf den Linux-Clients die Samba-Freigaben automatisch beim Login zu mounten, ohne dass erneut ein Passwort für den Server eingegeben werden muss. Das Modul pam_mount kann dabei für das Mounten der Samba-Freigaben auf das Passwort zugreifen, welches unmittelbar vorher beim Login eingegeben wurde.

Voraussetzungen

Bei der Einrichtung von LDAP müssen einige Pakete installiert werden, die nicht Bestandteil der DVD sind. Daher muss voher die Internetverbindung eingerichtet und die Paketquellen erweitert worden sein.

Außerdem sollte darauf geachtet werden dass nicht "das Pferd von hinten aufgezäumt wird". Konkret heißt das, dass zuerst LDAP und Samba eingerichtet werden sollten, bevor die User angelegt werden.

Installation und Konfiguration des LDAP-Servers

Der LDAP-Server (slapd) kann z.B. über ctsrvcfg (Gruppe "infra") installiert werden. Außerdem werden die Pakete samba (Gruppe "serv"), samba-doc und smbldap-tools (beide nicht über ctsrvcfg installierbar) benötigt.

Bei der Installation der Pakete werden diverse Fragen gestellt, die alle mit den vorgeschlagenen Standardwerten beantwortet werden können. Bei mir wird während der Installation des slapd-Paketes nicht das Administrator-Passwort abgefragt. Daher lasse ich mit 'dpkg-reconfigure slapd' die Konfiguration noch einmal durchlaufen, wobei dieses mal das Passwort eingegeben werden kann. Dieses Passwort (sollte nicht unbedingt identisch mit dem Root-Passwort sein) ermöglicht die Administration der gesamten LDAP-Datenbank und muss später an diversen Stellen hinterlegt werden.

Achtung: Bei jedem Durchlauf von 'dpkg-reconfigure slapd' werden die Konfigurationsdatei "/etc/ldap/slapd.conf" und die LDAP-Datenbank überschrieben!

Die folgenden Schritte werden auch unter [1] erklärt.

Als nächstes muss das LDAP-Schema für Samba eingebunden werden. Dieses Schema erweitert die LDAP-Einträge um die für die Verwaltung von Samba-Accounts notwendigen Felder:

# zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema
# vi /etc/ldap/slapd.conf

-----------8<----------
# Schema and objectClass definitions
include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/nis.schema
include         /etc/ldap/schema/inetorgperson.schema
include         /etc/ldap/schema/samba.schema
----------->8----------

Jetzt die Index-Optionen festlegen. Diese dienen wohl zur Optimierung der Geschwindigkeit des Servers:

# Indexing options for database #1
index           objectClass eq
index           uid,uidNumber,gidNumber,memberUid       eq
index           cn,mail,surname,givenname               eq,subinitial
index           sambaSID                                eq
index           sambaPrimaryGroupSID                    eq
index           sambaDomainName                         eq
index           sambaSIDList                            eq
index           sambaGroupType                          eq

Als letztes muss noch eingestellt werden, dass Benutzer ihre Samba-Passwörter selber ändern dürfen.

# The userPassword by default can be changed
# by the entry owning it if they are authenticated.
# Others should not be able to see it, except the
# admin entry below
# These access lines apply to database #1 only
access to attrs=userPassword,shadowLastChange,sambaNTPassword,sambaLMPassword
        by dn="cn=admin,dc=meinnetz,dc=xx" write
        by anonymous auth
        by self write
        by * none

Nach der Konfiguration muss der LDAP-Server neu gestartet werden:

# /etc/init.d/slapd restart

Konfiguration von SAMBA

Die eigentliche Konfiguration von Samba beschreibe ich in einem Extra-Kapitel?. Allerdings müssen vor dem Anlegen der ersten Benutzer einige Systemgruppen im LDAP angelegt werden. Davor wiederum muss im Falle einer Migration der Security Identifier (SID) von Samba angepasst werden. Außerdem sollte spätestens jetzt der Name der Samba-Domäne festgelegt werden (Schlüssel "workgroup" in der Datei /etc/smb.conf).

Hinweis für eine Migration auf einen neuen Server

Ich möchte gerne einem bestehenden Samba-Server durch einen neuen ersetzen. Dabei möchte ich vermeiden, dass ich später alle Windows-Maschinen neu in der Domäne anmelden muss. Um Probleme aller möglichen Art auszuschließen, kopiere ich die SID von dem alten Server auf den Neuen, bevor die initialen LDAP-Objekte angelegt werden:

alt# net getdomainsid
SID for local machine SERVER is: S-1-5-21-2933959368-292390781-2485280579
SID for domain MEINNETZ is: S-1-5-21-2933959368-292390781-2485280579

neu# net setdomainsid S-1-5-21-2933959368-292390781-2485280579
neu# net setlocalsid S-1-5-21-2933959368-292390781-2485280579
net# net getdomainsid
SID for local machine SERVER is: S-1-5-21-2933959368-292390781-2485280579
SID for domain MEINNETZ is: S-1-5-21-2933959368-292390781-2485280579

Ich musste die Befehle auf dem neuen Server mehrmals eingeben, bis die neue SID richtig angezeigt wurde.

Konfiguration der smbldap-tools

Die Skripte aus dem smbldap-tools Paket werden über die Dateien "smbldap.conf" und "smbldap_bind.conf" im Verzeichnis "/etc/smbldap-tools" konfiguriert. Das Verzeichnis war bei mir nach der Installation des Paketes zwar vorhanden, es fehlten aber die Konfigurationsdateien. Die Vorlagen hierfür liegen unter "/usr/share/doc/smbldap-tools/examples".

# cd /etc/smbldap-tools
# zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz > smbldap.conf
# cat /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf > smbldap_bind.conf
# chmod 0644 smbldap.conf
# chmod 0600 smbldap_bind.conf

In der Datei "smbldap.conf" muss als SID der Wert angegeben werden, der von "net getlocalsid" ausgegeben wird. Als Name für die Domain muss der gleiche Wert wie bei der Samba-Installation angegeben werden (siehe vorheriger Abschnitt).

# Put your own SID. To obtain this number do: "net getlocalsid".
# If not defined, parameter is taking from "net getlocalsid" return
SID="S-1-5-21-2933959368-292390781-2485280579"

# Domain name the Samba server is in charged.
# If not defined, parameter is taking from smb.conf configuration file
# Ex: sambaDomain="IDEALX-NT"
sambaDomain="MEINNETZ"

Außerdem muss das LDAP-Suffix richtig eingestellt werden. Der richtige Wert findet sich in der Datei "/etc/ldap/slapd.conf" hinter dem Schüsselwort "suffix":

# LDAP Suffix
# Ex: suffix=dc=IDEALX,dc=ORG
suffix="dc=meinnetz,dc=xx"

TODO: userHomeDirectoryMode="700" prüfen

Anlegen der initialen LDAP-Objekte

Jetzt werden die Basisobjekte in der Datenbank angelegt:

# smbldap-populate

Falls hierbei irgendwelche Probleme auftreten, kann der Befehl später einfach noch einmal eingegeben werden. Meistens wurde entweder vergessen, den slapd nach einer Änderung der Konfiguration neu zu starten, oder eine bereits fertig eingerichtete slapd.conf wurde durch dpkg-reconfigure slapd wieder überschrieben.

NSS

Wenn Programme wie ls oder chmod mit Benutzerdaten (uid, gid, Name, ...) arbeiten, lesen diese nicht direkt die Datei /etc/passwd aus, sondern verwenden die NSS-Funktionen (Name Service Switch) der C-Bibliothek. Daher muss nur an einer zentralen Stelle der Zugriff auf die LDAP-Datenbank eingerichtet werden, damit alle Programme auf die Daten zugreifen können.

Für die Anbindung der NSS-Bibliothek an LDAP existieren zwei Pakete (libnss-ldap und libnss-ldapd), von denen libnss-ldapd die fortschrittlichere Variante ist. Bei der Installation des Pakets wird automatisch die Konfiguration aufgerufen, in der fast alle Werte bereits korrekt voreingestellt sind. Lediglich bei der Konfiguration der Namensauflösungsdienste müssen die Felder "group" und "passwd" ausgewählt werden.

Die bei der Konfiguration von libnss-ldapd eingestellen Werte stehen später in den Dateien /etc/nss-ldapd.conf und /etc/nsswitch.conf.

Wenn bisher alles richtig eingestellt wurde, müsste jetzt das Kommando getent passwd eine Liste aller Benutzer (/etc/passwd + LDAP) ausgeben. Falls noch keine eigenen Benutzer in der LDAP-Datenbank angelegt wurden, muss zumindest je ein zweiter Eintrag für die Benutzer "root" und "nobody" angezeigt werden. Diese LDAP-Benutzer wurden durch smbldap-populate angelegt.

PAM

Für alles was irgendwie mit Authentifizierung und Passwörtern zu tun hat, wird normalerweise nicht NSS, sondern PAM (Pluggable Authentication Modules) verwendet. Bei der alleinigen Verwendung von NSS müsste der LDAP-Server die Liste mit den Passwörtern (bzw. deren Hashes) für jedermann lesbar im Netzwerk bereitstellen oder es müsste zumindest das Admin-Passwort für den Zugriff auf die LDAP-Datenbank auf jeden Client abgelegt werden.

Bei der Verwendung von PAM versucht das pam_ldap-Modul zuerst, über eine anonyme Suchanfrage die DN des betreffenden Benutzers herauszufinden. Daraufhin findet eine Anmeldung an dem LDAP-Server mit der DN des zu authentifizierenden Users statt. Dabei muss zwar auch das Passwort über das Netz übertragen werden, aber wenigstens sind nicht sämtliche Passwort-Hashes permanent zugänglich.

Das pam_ldap-Modul (Paket "libpam-ldap") bindet PAM an eine LDAP-Datenbank an. Leider ist der Installer von diesem Paket nicht so intelligent wie der von libnss-ldapd, daher müssen einige Einstellungen an die lokalen Gegebenheiten angepasst werden werden. Außerdem wird nur eingstellt, wie pam_ldap auf die Datenbank zugreifen kann. Dass das PAM-Subsystem überhaupt pam_ldap verwenden soll, muss später manuell konfiguriert werden.

Die bei der Konfiguration von libss-ldapd eingestellten werden stehen später in den Dateien /etc/pam_ldap.conf und /etc/pam_ldap.secret.

Jetzt folgt die Konfiguration von PAM selbst. Dazu müssen die Dateien unter /etc/pam.d bearbeitet werden:

/etc/pam.d/common-account

...
#account required pam_unix.so

# Try Unix authentication first. On success skip pam_ldap.so an jump to
# pam_permit.so. Else ignore result and try pam_ldap.so next.
account [success=1 default=ignore] pam_unix.so
account required pam_ldap.so use_first_pass
account required pam_permit.so

/etc/pam.d/common-auth

...
#auth required pam_unix.so nullok_secure

# Try Unix authentication first. On success skip pam_ldap.so an jump to
# pam_permit.so. On failure ignore result and try pam_ldap.so next.
auth [success=1 default=ignore] pam_unix.so
auth required pam_ldap.so use_first_pass
auth required pam_permit.so

/etc/pam.d/common-session

...
# session required pam_unix.so

# Try Unix authentication first. On success skip pam_ldap.so an jump to
# pam_mkhomedir.so. On failure ignore result and try pam_ldap.so next.
session [success=1 default=ignore] pam_unix.so
session required pam_ldap.so use_first_pass
session required pam_mkhomedir.so umask=0022

/etc/pam.d/common-password

...
#password   required   pam_unix.so nullok obscure md5

# Try Unix authentication first. On success skip pam_ldap.so an jump to
# pam_permit.so. On failure ignore result and try pam_ldap.so next.
password [success=1 default=ignore] pam_unix.so nullok obscure md5
password required pam_ldap.so try_first_pass
password required pam_permit.so
...

Die Konfiguration von PAM ist im Dokument The Linux-PAM System Administrators' Guide [3] sowie in den Man-Pages der einzelnen Module (man pam_unix bzw. man pam_ldap) beschrieben.

Wenn PAM korrekt konfiguriert wurde, sollten sich jetzt alle Benutzer (/etc/passwd + LDAP) einloggen sowie ihr Passwort verändern können.

Anlegen und Verwalten von Benutzern

[27.09.2009: Hier schreibe ich die nächsten Tage weiter...]

Anbinden von Linux-Clients an die LDAP-Datenbank


Weiterführende Themen

Inhalt der LDAP-Datenbank ausgeben

Der Inhalt der LDAP-Datenbank kann mit dem Kommando slapcat angezeigt werden.

LDAP-Datenbank zurücksetzen

Bei den ersten Versuchen mit LDAP wünscht man sich manchmal, noch einmal von "vorne", d.h. mit einer leeren Dankbank beginnen zu können. Eine von sicherlich mehreren Möglichkeiten besteht darin, einfach die Konfiguration noch einmal zu durchlaufen (dpkg-reconfigure slapd). Dabei wird eine neue Datenbank angelegt, welche lediglich das Wurzelelement sowie den Admin-Eintrag enthält.

Bei diesem Vorgang wird auch die Konfigurationsdatei /etc/ldap/slapd.conf überschrieben. Falls bereits Änderungen an dieser Datei vorgenommen wurden, muss vorher eine Sicherheitskopie angelegt werden.

Nach dem Wiederherstellen der Konfigurationsdatei ist ein Neustart des slapd notwendig. Das Zurücksetzen der Datenbank funktioniert möglichweise nicht, wenn die Prozedur schon vorher einmal durchgeführt wurde. In diesem Fall muss zuerst das Verzeichnis "/var/backups/unknown-xxx.ldapdb/" manuell gelöscht werden.

LDAP-Datenbank von einem anderen Rechner migrieren

Die Anleitung zum Übertragen einer LDAP-Datenbank auf einen anderen Server habe ich hier abgelegt.

Von passwd+tdbsam nach LDAP migrieren

Die Anleitung zum Übertragen von passwd/tdbsam Accounts nach LDAP habe ich hier abgelegt.

Literatur

[1] /usr/share/doc/smbldap-tools/README.Debian.gz
[2]  smbldap-tools Dokumentation
[3] The Linux-Pam System Administrators' Guide (/usr/share/doc/libpam-doc/txt/Linux-PAM_SAG.txt.gz)

Download in other formats:

  • Plain Text

Trac Powered

Powered by Trac 0.11.7
By Edgewall Software.

http://www.ctmagazin.de/
http://www.ctmagazin.de/projekte/

  • Datenschutzhinweis
  • Impressum
  • Kritik, Anregungen bitte an c't-WWW
  • Mediadaten
  • Copyright © 2011 Heise Zeitschriften Verlag
  • International: The H, The H Security, The H Open Source