Inhaltsverzeichnis
Dieses Kapitel hilft Ihnen, eine Winbind-basierende Authentifizierung auf jedem PAM-fähigen UNIX/Linux-System zu verwenden. Winbind kann verwendet werden, um eine Programm-Zugriffsauthentifizierung auf Benutzerebene von jeder MS Windows NT-Domäne, MS Windows 200x Active Director-basierenden Domäne oder einer Samba-basierten Domänen-Umgebung aus zu erlauben. Es sollte ihnen auch helfen, PAM-basierte lokale Host-Zugriffskontrollen zu konfigurieren, die Ihrer Samba-Konfiguration entsprechen.
Zusätzlich zur Konfiguration von Winbind in PAM werden Sie die PAM-Management-Möglichkeiten kennen lernen, wie z.B. die Verwendung von Werkzeugen wie pam_smbpass.so.
Die Verwendung von Winbind erfordert mehr als nur die Konfiguration von PAM. Für mehr Informationen zu Winbind schauen Sie sich bitte ??? an.
Eine Vielzahl von UNIX-Systemen (z.B. Sun Solaris) sowie die xxxxBSD-Familie und Linux benutzen inzwischen die Pluggable-Authentication-Modules-(PAM-)Dienste, um die gesamten Dienste für die Authentifikation, Autorisation und Ressourcen-Kontrolle anzubieten. Wollte man vor PAM eine Alternative zur systeminternen Passwortdatenbank (/etc/passwd) haben, musste man auch Änderungen oder Alternativen zu allen Programmen finden, die Sicherheitsdienste anbieten wie z.B. login, passwd, chown usw.
PAM liefert einen Mechanismus, der diese Sicherheitsprogramme von der darunterliegenden Authentifizierung/Autorisierung trennt. PAM wird konfiguriert, indem man Änderungen an /etc/pam.conf vornimmt (Solaris) oder indem man die einzelnen Dateien, die in /etc/pam.d aufgelistet sind, anpasst bzw. verändert.
Auf PAM-fähigen UNIX/Linux-Systemen ist es ein einfaches Unterfangen, irgendein Authentifizierungs-Backend zu konfigurieren, solange die entsprechenden dynamisch ladbaren Modul-Bibliotheken vorhanden sind. Das Backend kann auf dem lokalen System oder zentralisiert, d.h. auf einem entfernten Server vorhanden sein.
PAM-unterstützte Module sind vorhanden für:
Es gibt mehrere PAM-Module, die mit dieser Standard-UNIX-Benutzerdatenbank interagieren. Die bekanntesten sind pam_unix.so, pam_unix2.so, pam_pwdb.so und pam_userdb.so.
Das Modul pam_krb5.so erlaubt die Nutzung von jedem Kerberos-fähigen Server. Dieses Tool kann mit MIT Kerberos, Heimdal Kerberos und möglicherweise mit Microsoft Active Directory (falls es eingeschaltet ist) benutzt werden.
Das pam_ldap.so-Modul erlaubt die Benutzung von jedem LDAP v2- oder LDAP v3-kompatiblem Backend-Server. Weit verbreitete LDAP-Backend-Server sind z.B. OpenLDAP v2.0 und v2.1, Sun ONE iDentity Server, Novell eDirectory Server und Microsoft Active Directory.
Das Modul pam_ncp_auth.so erlaubt die Authentifizierung auf jedem Bindery-fähigen NetWare-Core-Protokoll-basierenden Server.
Dieses Modul, namentlich pam_smbpass.so, erlaubt die Benutzerauthentifizierung mit dem passdb-Backend, das in der Datei smb.conf angegeben ist.
Das Modul pam_smb_auth.so ist das original MS Windows-Netzwerk-Authentifizierungs-Werkzeug. Dieses Modul ist eigentlich überholt, seit es das Winbind-Modul gibt.
Das Modul pam_winbind.so erlaubt Samba, sich an jedem MS Windows-Domänencontroller zu authentifizieren. Es kann genauso benutzt werden, um Benutzern den Zugang zu irgendeiner PAM-fähigen Applikation zu erlauben.
Es gibt auch ein PAM-RADIUS-(Remote Access Dial-In User Service-) Authentifizierungsmodul. In den meisten Fällen muss der Administrator den Quellcode suchen und dieses Modul selbst kompilieren und installieren. RADIUS-Protokolle werden von vielen Routern und Terminalservern benutzt.
Von diesen Modulen stellt Samba nur das pam_smbpasswd.so- und das pam_winbind.so-Modul zur Verfügung.
Wenn sie einmal konfiguriert sind, erlauben diese Module einen bemerkenswerten Zuwachs an Flexibilität und die Benutzung von verteilten Samba-Domänencontrollern, die wiederum eine effiziente Ausnutzung der Bandbreite in großen Netzwerken mit PAM-fähigen Systemen erlauben. Richtig eingesetzt, erlaubt dies eine zentrale Administration einer verteilten Authentifizierung von einer Einzelbenutzer-Datenbank aus.
PAM wurde entworfen, um dem Systemverwalter eine große Flexibilität in der Konfiguration von Programmzugriffen auf das System zu geben. Die lokale Konfiguration der Systemsicherheit, die von PAM überwacht wird, liegt an einem dieser zwei Orte: entweder in der einzelnen System-Datei /etc/pam.conf oder im Verzeichnis /etc/pam.d/.
In diesem Kapitel sehen wir uns die richtige Syntax und die verschiedenen Optionen der Einträge in diesen Dateien an. Bei PAM-spezifischen Zeichen ist die Groß- und Kleinschreibung egal. Bei den Modul-Pfaden hingegen spielt die Groß- und Kleinschreibung eine Rolle, da sie auf Dateinamen verweisen und diese die Schreibweise des Dateisystems wiedergeben. Ob bei den Argumenten der einzelnen Module auf die Groß- und Kleinschreibung geachtet werden muss, wird für jedes Modul eigens festgelegt.
Zusätzlich zu den unten beschriebenen Zeilen gibt es noch zwei zusätzliche Zeichen, die dem Systemadministrator die Arbeit erleichtern: Auszukommentierende Zeilen werden mit einem „#“ eingeleitet, das in der nächsten Zeile die Gültigkeit verliert; um Zeilen in einer Modulbeschreibung über den Zeilenumbruch zu verlängern, kann ein „\“ Zeichen verwendet werden.
Befindet sich das PAM-Authentifizierungsmodul (dynamisch ladbare Programmbibliothek) im Standardpfad, so ist es nicht nötig, den Pfad nochmals anzugeben. Befindet sich das Modul außerhalb dieses Pfades (unter Linux /lib/security), muss dieser wie folgt angegeben werden:
auth required /anderer_pfad/pam_fremdes_modul.so
Die restlichen Informationen in diesem Unterkapitel sind dem Linux-PAM-Dokumentationsprojekt entnommen. Für mehr Informationen zu PAM besuchen Sie diesen Link: The Official Linux-PAM home page.
Eine allgemeine Konfigurationszeile der Datei /etc/pam.conf hat folgende Form:
Service-name Modul-type control-flag Modul-path Args.
Hier beschreiben wir die Bedeutung dieser einzelnen Angaben. Bei der zweiten (und öfter angewendeten) Methode der Konfiguration von Linux-PAM ändern Sie den Inhalt des Ordners /etc/pam.d/. Nachdem wir die obigen Angaben erklärt haben, werden wir näher auf diese Methode eingehen.
Der Name des Dienstes, der mit diesem Eintrag verbunden ist. Meistens ist dies der herkömmliche Name der Anwendung. Zum Beispiel ftpd, rlogind, su usw.
Es gibt einen speziellen Dienste-Namen, der für einen Standard-Authentifizierungsmechanismus reserviert ist, und zwar den Namen OTHER, wobei es egal ist ob man ihn groß- oder kleinschreibt. Beachten Sie, dass dieser Parameter ignoriert wird, falls bereits ein Modul für einen Dienst namentlich angegeben ist.
Einer von (momentan) vier Typen von Modulen, die da wären:
auth: Dieser Modul-Typ stellt zwei Aspekte der Benutzerauthentifizierung zur Verfügung. Erstens wird festgestellt, dass der Benutzer der ist, der er angibt zu sein, indem er von der Applikation aufgefordert wird, ein Passwort anzugeben oder sich sonst irgendwie zu authentifizieren. Zweitens kann dieses Modul Gruppenzugehörigkeiten erlauben (unabhängig vom Inhalt von /etc/groups, der oben behandelt wurde) oder andere Privilegien, da es befähigt ist, diese zu vergeben.
account: Dieses Modul führt ein nicht-authentifizierungsbasiertes Benutzermanagement aus. Normalerweise wird es benutzt, um den Zugang zu Diensten aufgrund der Tageszeit, der momentan verfügbaren Systemressourcen (maximale gleichzeitige Benutzer) oder vielleicht der Lage des „root“-Logins auf der Konsole zu erlauben oder verweigern.
session: Dieses Modul wird vor allem verwendet, um festzulegen, was ausgeführt werden sollte, bevor ein Benutzer einen Dienst benutzt oder beendet. Dies könnte zum Beispiel das Aufzeichnen von Informationen bezüglich des Datenaustauschs mit dem Benutzer oder das Mounten von Ordnern usw. sein.
password: Dieser letzte Modultyp wird gebraucht, um das mit dem Benutzer verbundene Authentifizierungstoken zu aktualisieren. Normalerweise gibt es ein Modul für jeden „challenge/response“ -basierten Authentifizierungs-(auth)-Modul-Typus.
Das control-flag wird benutzt, um festzulegen, wie die PAM-Bibliothek auf einen Erfolg oder Misserfolg des mit ihr verbundenen Moduls reagiert. Seit Module gestapelt werden können (Module des gleichen Typs werden nacheinander geschaltet, so dass eins nach dem anderen ausgeführt wird), legen die control-flags auch die relative Wichtigkeit dieser Module fest. Der Applikation wird nicht der Erfolg oder Misserfolg jedes Moduls in der /etc/pam.conf-Datei mitgeteilt, sondern sie erhält eine Zusammenfassung des Erfolgs oder Misserfolgs von der Linux-PAM-Bibliothek. Die Reihenfolge, in der diese Module ausgeführt werden, ist die der Einträge in /etc/pam.conf; der erste Eintrag wird als Erstes ausgeführt und der Letzte zum Schluss. Ab Linux-PAM v0.60 kann dieses Control-flag mit einer von zwei Syntaxen angegeben werden.
Die einfachere (und historische) Syntax für das Control-flag ist ein einzelnes Schlüsselwort, das die Wichtigkeit des Erfolgs oder Misserfolgs des Moduls festlegt. Es gibt vier solcher Schlüsselwörter: required, requisite, sufficient und optional.
Die Linux-PAM-Bibliothek interpretiert diese Schlüsselwörter wie folgt:
required: Dies gibt an, dass der Efolg dieses Moduls für den Erfolg des mit diesem Modul verbunden Dienstes wesentlich ist. Ein Misserfolg dieses Moduls wird dem Benutzer nicht mitgeteilt, bevor nicht alle anderen Module (desselben Modul-Typs) ausgeführt worden sind.
requisite: Entspricht required, nur dass im Falle eines Misserfolges die Kontrolle direkt an die Applikation zurückgegeben wird. Der Rückgabewert ist der gleiche wie bei einem Misserfolg des ersten Moduls. Dieses Flag kann gesetzt werden, um dem Benutzer die Möglichkeit zu nehmen, das Passwort über ein unsicheres Medium einzugeben. Es wäre möglich, dass dies einem Angreifer Informationen über Benutzernamen geben könnte. Der Einsatz dieses Parameters sollte gut überlegt werden, da das nicht unerhebliche Risiko besteht, Passwörter in einer unsicheren Umgebung preiszugeben.
sufficient: Der Erfolg dieses Moduls genügt, damit die Linux-PAM-Bibliothek ausgibt, dass dieses Modul erfolgreich war. In dem Fall, dass kein vorhergehendes wichtiges (required)-Modul einen Misserfolg zurückgab, wird kein weiteres „gestapeltes“ Modul ausgeführt (in diesem Fall werden auch keine weiteren wichtigen Module mehr ausgeführt). Ein Fehlschlagen dieses Moduls allein genügt nicht für das Fehlschlagen des Stapels.
optional: Wie der Name schon sagt, bedeutet dieses Flag, dass das zugehörige Modul keinen kritischen Einfluss auf den Erfolg der Applikation des Benutzers hat. Wenn Linux-PAM festlegen muss, ob ein Modul-Stapel erfolgreich war, werden diese Module normalwerweise ignoriert. Sendet jedoch kein vorhergehendes oder nachfolgendes Modul des Stapels eine definitve Rückgabe über den Erfolg, ist der Rückgabewert dieses Moduls ausschlaggebend für den Erfolg des Modul-Stapels. Ein Beispiel für diesen Fall wäre, wenn die anderen Module eine Rückgabe wie PAM_IGNORE geben würden.
Die besser ausgearbeitete (und neuere) Syntax ist viel spezifischer und gibt dem Administrator mehr Möglichkeiten und Kontrolle darüber, wie der Benutzer authentifiziert wird. Diese Form der Kontroll-Flags wird mit eckigen Klammern abgegrenzt und besteht aus einer Serie von value=action-Paaren.
[value1=action1 value2=action2 ...]
Hier ist value1 einer der folgenden Rückgabewerte:
success; open_err; symbol_err; service_err; system_err; buf_err; perm_denied; auth_err; cred_insufficient; authinfo_unavail; user_unknown; maxtries; new_authtok_reqd; acct_expired; session_err; cred_unavail; cred_expired; cred_err; no_module_data; conv_err; authtok_err; authtok_recover_err; authtok_lock_busy; authtok_disable_aging; try_again; ignore; abort; authtok_expired; module_unknown; bad_item; and default.
Der letzte dieser (default)-Parameter kann dafür benutzt werden, die Aktion für Rückgabewerte festzulegen, die nicht explizit definiert wurden.
Der Parameter action1 kann ein positiver Integer-Wert oder eines der folgenden Zeichen sein: ignore; ok; done; bad; die und reset. Ein positiver Integer J kann, wenn er als Aktion festgelegt wurde, benutzt werden, um anzugeben, dass die nächsten J Module vom momentanen Modul-Stapel übersprungen werden sollen. Wird dies richtig angewendet, kann der Administrator einen hoch entwickelten Modul-Stapel mit mehreren Ausführungsmöglichkeiten bauen. Welche Möglichkeit letztendlich gewählt wird, kann mit der Reaktion der einzelnen Module bestimmt werden.
ignore: Wird dieser Parameter mit in einem Modul-Stapel angewendet, beeinflusst die Rückgabe dieses Moduls nicht den Rückgabewert, den die Applikation vom gesamten Stapel erhält.
bad: Dies gibt an, dass der Rückgabewert dieses Modul für das Fehlschlagen des Moduls ausschlaggebend ist. Wenn dieses Modul das erste ist, das erfolglos ausgeführt wird, wird sein Rückgabewert für den Status des gesamten Modul-Stapels verwendet.
die: Das Gleiche wie bad, nur mit dem Effekt, dass der Modul-Stapel und PAM sofort abgebrochen werden und zur Anwendung zurückgekehrt wird.
ok: Dieser Parameter teilt PAM mit, dass der Administrator glaubt, dieser Rückgabewert sollte direkt den Rückgabewert des gesamten Modul-Stapels beeinflussen. Mit anderen Worten: Wenn der vorherige Wert des Stapels einen Rückgabewert PAM_SUCCESS enthalten hätte, wird er jetzt von dem Rückgabewert dieses Moduls überschrieben. Achtung: Weist jedoch der vorherige Wert auf den Misserfolg eines Moduls hin, so wird der Parameter ok nicht verwendet, um diesen zu überschreiben.
done: Das Gleiche wie ok, mit dem Effekt, dass der Modul-Stapel und PAM sofort beendet werden und zur Anwendung zurückgekehrt wird.
reset: Löscht den Speicher des Rückgabewertes des Moduls und startet mit dem nächsten gestapelten Modul neu.
Jedes der vier Schlüsselwörter required, requisite, sufficient und optional hat einen gleichwertigen Ausdruck in der [...] Syntax:
required entspricht [success=ok new_authtok_reqd=ok ignore=ignore default=bad].
requisite entspricht [success=ok new_authtok_reqd=ok ignore=ignore default=die].
sufficient entspricht [success=done new_authtok_reqd=done default=ignore].
optional entspricht [success=ok new_authtok_reqd=ok default=ignore].
Um die Möglichkeiten im Umgang mit der neuen Syntax zu zeigen, folgen hier ein paar Beispiele. Mit Linux-PAM-0.63 wurde der Begriff „Client Plug-in Agents“ eingeführt. Dies macht es möglich, dass PAM eine Rechner-zu-Rechner-Authentifizierung erlaubt, die das Transportprotokoll der Client/Server-Applikation benutzt. Mit der Kontroll-Syntax [ ... value=action ... ] kann eine Applikation so konfiguriert werden, dass sie binäre Aufforderungen entsprechender Clients unterstützt, jedoch ohne Probleme ältere Applikationen mit einer alternativen Methode authentifizieren kann.
Der Pfadname der dynamisch ladbaren Objekt-Datei; das Plug-in-Modul selbst. Ist das erste Zeichen des Modulpfades ein „/“, wird davon ausgegangen, dass es ein absoluter Pfad ist. Ist dies nicht der Fall, wird der angegebene Pfad an den Standard-Modul-Pfad angehängt: /lib/security (siehe oben).
Die Argumente sind eine Liste von Zeichen, die an das Modul weitergegeben werden, wenn es aufgerufen wird. Sie sind damit den Argumenten eines normalen Linux-Shell-Befehls sehr ähnlich. Normalerweise sind gültige Argumente optional und für das angegebene Modul spezifisch. Ungültige Argumente werden vom Modul ignoriert, es wird jedoch ein Fehler in Syslog(3) geschrieben. Eine Liste der verschiedenen Optionen sehen Sie im nächsten Abschnitt.
Wenn Sie ein Leerzeichen in ein Argument einfügen möchten, sollten Sie es mit eckigen Klammern umschließen, z.B.:
squid auth required pam_mysql.so user=passwd_query passwd=mada \ db=eminence [query=select user_name from internet_service where \ user_name=„%u“ und password=PASSWORD(„%p“) und service=„web_proxy“]
Wird dies so angewendet, kann man das Zeichen „[“ in der Zeichenkette verwenden. Möchte man das Zeichen „]“ in der Zeichenkette haben, das die Argumentübergabe überlebt, sollten Sie „\[“ verwenden. Mit anderen Worten:
[..[..\]..] --> ..[..]..
Jede Zeile in einer der Konfigurationsdateien, die nicht richtig formatiert ist, wird sehr wahrscheinlich dazu führen, dass der Authentifizierungsprozess fehlschlägt. Ein dementsprechender Fehler wird in die System-Logs geschrieben, mit einem Aufruf in der Syslog(3).
Im Folgenden sehen Sie ein Beispiel der Konfigurationsdatei /etc/pam.d/login. In diesem Beispiel sind alle Optionen eingeschaltet, und es ist möglicherweise nicht brauchbar, weil zu viele Bedingungen gestapelt werden, bevor ein erfolgreicher Abschluss erlaubt wird. Im Wesentlichen kann man alle Bedingungen auskommentieren, außer den Aufruf pam_pwdb.so.
#%PAM-1.0
# The PAM configuration file for the „login“ service
#
auth required pam_securetty.so
auth required pam_nologin.so
# auth required pam_dialup.so
# auth optional pam_mail.so
auth required pam_pwdb.so shadow md5
# account requisite pam_time.so
account required pam_pwdb.so
session required pam_pwdb.so
# session optional pam_lastlog.so
# password required pam_cracklib.so retry=3
password required pam_pwdb.so shadow md5
PAM erlaubt die Verwendung von austauschbaren Modulen. Auf einem Beispiel-System sollten folgende Module verfügbar sein:
$/bin/ls /lib/security
pam_access.so pam_ftp.so pam_limits.so pam_ncp_auth.so pam_rhosts_auth.so pam_stress.so pam_cracklib.so pam_group.so pam_listfile.so pam_nologin.so pam_rootok.so pam_tally.so pam_deny.so pam_issue.so pam_mail.so pam_permit.so pam_securetty.so pam_time.so pam_dialup.so pam_lastlog.so pam_mkhomedir.so pam_pwdb.so pam_shells.so pam_unix.so pam_env.so pam_ldap.so pam_motd.so pam_radius.so pam_smbpass.so pam_unix_acct.so pam_wheel.so pam_unix_auth.so pam_unix_passwd.so pam_userdb.so pam_warn.so pam_unix_session.so
Das folgende Beispiel für das Login-Programm ersetzt die Verwendung des Moduls pam_pwdb.so, das die System-Passwort- Datenbank (/etc/passwd,/etc/shadow, /etc/group) mit dem Modul pam_smbpass.so benutzt, das die Samba-Datenbank verwendet, die die mit Microsoft-MD4 verschlüsselten Passwort- Hashes enthält. Diese Datenbank wird entweder in /usr/local/samba/private/smbpasswd, /etc/samba/smbpasswd oder in /etc/samba.d/smbpasswd aufbewahrt, je nach der Samba-Implementation Ihres UNIX/Linux-Systems. Das Modul pam_smbpass.so wird ab Samba-Version 2.2.1 mitgeliefert. Es kann mitkompiliert werden, indem man die Option --with-pam_smbpass einschaltet, wenn man Sambas configure-Skript aufruft. Mehr Informationen zum Modul pam_smbpass finden Sie in der Dokumentation im Ordner source/pam_smbpass der Samba-Quelldistribution.
#%PAM-1.0
# The PAM configuration file for the „login“ service
#
auth required pam_smbpass.so nodelay
account required pam_smbpass.so nodelay
session required pam_smbpass.so nodelay
password required pam_smbpass.so nodelay
Folgendes ist eine PAM-Konfiguration für ein bestimmtes Linux-System. Unter Normalbedingungen wird pam_pwdb.so verwendet.
#%PAM-1.0
# The PAM configuration file for the „samba“ service
#
auth required pam_pwdb.so nullok nodelay shadow audit
account required pam_pwdb.so audit nodelay
session required pam_pwdb.so nodelay
password required pam_pwdb.so shadow md5
Im folgenden Beispiel wurde die Entscheidung getroffen, die smbpasswd-Datenbank auch für Standard-Samba-Authentifizierungen zu verwenden. So eine Entscheidung könnte auch für das Programm passwd getroffen werden. Sie würde es erlauben, dass smbpasswd-Passwörter mit dem passwd-Programm geändert werden können.
#%PAM-1.0
# The PAM configuration file for the „samba“ service
#
auth required pam_smbpass.so nodelay
account required pam_pwdb.so audit nodelay
session required pam_pwdb.so nodelay
password required pam_smbpass.so nodelay smbconf=/etc/samba.d/smb.conf
PAM erlaubt das Stapeln von Authentifizierungsmechanismen. Es ist auch möglich, Informationen, die man in einem PAM-Modul erhalten hat, an das nächste Modul im PAM-Stapel weiterzugeben. Für Details zu den Fähigkeiten von PAM in Ihrem Umfeld, greifen Sie bitte auf die Dokumentation für Ihr spezifisches System zurück. Manche Linux-Implementationen enthalten ein Modul pam_stack.so, das es erlaubt, dass jede Authentifizierung in einer einzigen zentralen Datei konfiguriert wird. Die pam_stack.so-Methode hat einige Anhänger, da mit ihr eine einfachere Administration möglich ist. Wie so oft im Leben sind Entscheidungen mit Kompromissen verbunden, deshalb sollten Sie für mehr Informationen die PAM-Dokumentation konsultieren.
Es gibt eine Option in smb.conf, die obey pam restrictions heißt. Folgendes findet man zu dieser Option in der Online-Hilfe von SWAT:
Wenn Samba mit PAM-Unterstützung konfiguriert wurde (--with-pam), gibt dieser Parameter an, ob Samba den PAM Konto- und Sitzungsrichtlinien gehorchen soll oder nicht. Das Standard-Verhalten sieht vor, dass PAM nur für die Klartext-Authentifizierung verwendet wird und dass das Konto- und Sitzungsmanagement ignoriert werden. Samba ignoriert PAM vollkommen, falls die Option encrypt passwords = yes hat. Dies ist so, weil PAM-Module nicht den challenge/response-Authentifizierungsmechanismus unterstützen, der von Samba bei der Passwort-Verschlüsselung verwendet wird.
Alle Betriebssysteme sind darauf angewiesen, dass Benutzerdaten so dargestellt werden, dass sie von der jeweiligen Plattform akzeptiert werden. UNIX benutzt dazu die Übergabe eines „User Identifier“ (UID) sowie eines „Group Identifier“ (GID). Dies sind beides Zahlen vom Typ Integer, die von einem Passwort-Backend wie /etc/passwd bezogen werden.
Benutzern und Gruppen unter Windows NT Server werden relative IDs (RID) zugeteilt, welche für die Domäne einzigartig sind, wenn der Benutzer oder die Gruppe erstellt wird. Um die Windows NT-Benutzer und -Gruppen in UNIX-Benutzer und -Gruppen umzuwandeln, ist ein Abgleich zwischen den RIDs und den UNIX-Benutzer- und -Gruppen-IDs erforderlich. Dies ist eine der Aufgaben, die Winbind ausführt.
So, wie Winbind-Benutzer und -Gruppen von einem Server aufgelöst werden, werden Benutzer- und Gruppen-IDs aus einer bestimmten Gruppe von Zahlen ermittelt. Diese werden auf einer Basis à la „Wer zuerst kommt, kriegt zuerst“ verteilt, obwohl alle bestehenden Benutzer und Gruppen gemappt werden, sobald ein Client einen Befehl zur Auflistung der Benutzer und Gruppen gibt. Die zugeteilten UNIX-IDs werden in einer Datenbank-Datei im Samba-Lock-Verzeichnis gespeichert, um sie nachher wiederverwenden zu können.
Aufmerksame Administratoren werden bemerkt haben, dass die Kombination von pam_smbpass.so, winbindd und einem verteilten passdb backend wie ldap die Einrichtung einer zentral verwalteten, verteilten Benutzer/Passwort-Datenbank erlaubt, die von allen PAM-fähigen (d.h. Linux-) Programmen und Anwendungen verwendet werden kann. Dieses System kann große Vorteile im Vergleich zu Microsofts Active Directory Service (ADS) haben, da es den Authentifizierungsverkehr in großen Netzwerken reduziert.
Die RID-zu-UNIX-ID-Datenbank ist der einzige Ort, an dem die Benutzer- und Gruppen-Umwandlung von winbindd gespeichert wird. Wenn diese Datei gelöscht oder beschädigt wird, hat winbindd keine Möglichkeit herauszufinden, welche Benutzer- und Gruppen-ID zu welcher Windows NT-Benutzer- oder Gruppen-RID gehört.
pam_smbpass ist ein PAM-Modul, das auf entsprechenden Systemen dazu verwendet werden kann, die smbpasswd-(Samba-Passwort-)Datenbank mit der UNIX-Passwort-Datei laufend zu synchronisieren. PAM (Pluggable Athentication Modules) ist eine unter manchen UNIX-Betriebssystemen wie Solaris, HPUX und Linux unterstützte API, die den Authentifizierungsmechanismen eine generische Schnittstelle zur Verfügung stellt.
Dieses Modul authentifiziert eine lokale Benutzer-Datenbank smbpasswd. Wenn Sie die Authentifizierung auf einem entfernten SMB-Server benötigen oder wenn Sie über die Anwesenheit von SUID-root-Binärdateien auf Ihrem System besorgt sind, sollten Sie hingegen pam_winbind verwenden.
Die Optionen, die von diesem Modul akzeptiert werden, finden Sie in ???.
Tabelle 25.1. Gültige Optionen für pam_smbpass
| debug | Mehr debug-Informationen werden aufgezeichnet. |
| audit | Das Gleiche wie debug, es werden aber zusätzlich noch unbekannte Benutzernamen geloggt. |
| use_first_pass | Den Benutzer nicht nach dem Passwort fragen, sondern diese aus den Elementen von PAM_ auslesen. |
| try_first_pass | Versuche, das Passwort von einem vorhergehenden PAM-Modul zu holen, Benutzer fragen. |
| use_authtok | Wie try_first_pass, aber *fail*, wenn die neue PAM_AUTHTOK nicht vorher gesetzt wurde(nur vorgesehen, um Password-Module zu stapeln). |
| not_set_pass | Passwörter, die dieses Modul verwendet, nicht für andere Module verfügbar machen. |
| nodelay | Keine Wartezeit von ~1 Sekunde bei Authentifizierungsfehlern. |
| nullok | Null-Passwörter sind erlaubt. |
| nonull | Null-Passwörter sind nicht erlaubt. Wird benutzt, um die Samba-Konfiguration zu übergehen. |
| migrate | Nur sinnvoll in einem „auth“-Kontext; wird benutzt, um die smbpasswd-Datei mit einem Passwort zu aktualisieren, das zu einer erfolgreiche Authentifizierung verwendet wurde. |
| smbconf=file | Legt einen alternativen Pfad zur Datei smb.conf fest. |
Im Folgenden sehen Sie ein paar Beispiele für die Anwendung von pam_smbpass.so im Format von Linux-/etc/pam.d/-Dateistrukturen. Möchte jemand dieses Werkzeug auch auf anderen Plattformen verwenden, muss er es passend adaptieren.
Ein Beispiel einer PAM-Konfiguration, die die Verwendung von pam_smbpass.so zeigt, so dass private/smbpasswd mit /etc/passwd (/etc/shadow) synchronisiert bleibt, wenn diese verändert wird. Nützlich, wenn z.B. ein verfallenes Passwort möglicherweise von einem Programm geändert wird (z.B. ssh).
#%PAM-1.0 # password-sync # auth requisite pam_nologin.so auth required pam_unix.so account required pam_unix.so password requisite pam_cracklib.so retry=3 password requisite pam_unix.so shadow md5 use_authtok try_first_pass password required pam_smbpass.so nullok use_authtok try_first_pass session required pam_unix.so
Ein Beispiel einer PAM-Konfiguration, die die Verwendung von pam_smbpass.so zeigt, um von Klartext- zu verschlüsselten Passwörtern zu migrieren. Im Gegensatz zu anderen Methoden kann dies auch für Benutzer gemacht werden, die sich noch nie mit Samba-Freigaben verbunden haben: Die Passwort-Migration findet statt, sobald der Benutzer eine ftp-Verbindung herstellt, sich per ssh einloggt, seine Mails holt usw. ...
#%PAM-1.0 # password-migration # auth requisite pam_nologin.so # pam_smbpass is called IF pam_unix succeeds. auth requisite pam_unix.so auth optional pam_smbpass.so migrate account required pam_unix.so password requisite pam_cracklib.so retry=3 password requisite pam_unix.so shadow md5 use_authtok try_first_pass password optional pam_smbpass.so nullok use_authtok try_first_pass session required pam_unix.so
Das Folgende ist ein Beispiel einer Konfiguration für eine ausgereifte smbpasswd-Installation. private/smbpasswd ist mit Benutzern „gefüllt“, und wir betrachten es als Fehler, wenn kein SMB-Passwort vorhanden ist oder wenn es nicht mit dem UNIX-Passwort übereinstimmt.
#%PAM-1.0 # password-mature # auth requisite pam_nologin.so auth required pam_unix.so account required pam_unix.so password requisite pam_cracklib.so retry=3 password requisite pam_unix.so shadow md5 use_authtok try_first_pass password required pam_smbpass.so use_authtok use_first_pass session required pam_unix.so
Ein Beispiel einer PAM-Konfiguration, die die Verwendung von pam_smbpass zusammen mit pam_krb5 zeigt. Dies kann für einen Samba-PDC nützlich sein, der zugleich Mitglied in einer Kerberos-REALM ist.
#%PAM-1.0 # kdc-pdc # auth requisite pam_nologin.so auth requisite pam_krb5.so auth optional pam_smbpass.so migrate account required pam_krb5.so password requisite pam_cracklib.so retry=3 password optional pam_smbpass.so nullok use_authtok try_first_pass password required pam_krb5.so use_authtok try_first_pass session required pam_krb5.so
PAM kann sehr unbeständig und empfindlich gegenüber Ausrutschern bei der Konfiguration sein. Wir schauen uns hier ein paar Fälle aus der Samba-Mailingliste an.
Ein Benutzer berichtet: Ich habe folgende PAM-Konfiguration:
auth required /lib/security/pam_securetty.so auth sufficient /lib/security/pam_winbind.so auth sufficient /lib/security/pam_unix.so use_first_pass nullok auth required /lib/security/pam_stack.so service=system-auth auth required /lib/security/pam_nologin.so account required /lib/security/pam_stack.so service=system-auth account required /lib/security/pam_winbind.so password required /lib/security/pam_stack.so service=system-auth
Wenn ich mit [ctrl][alt][F1] eine neue Konsole aufmache, kann ich nicht mit meinem Benutzer „pitie“ einsteigen. Ich habe es auch mit dem Benutzer „scienceu+pitie“ versucht.
Antwort: Das Problem könnte an der Einbindung von pam_stack.so service=system-auth liegen. Diese Datei enthält oft eine Menge Zeilen, die Sachen doppelt machen, die man eigentlich schon tut. Versuchen Sie, die pam_stack-Zeilen für auth und account auszukommentieren, und probieren Sie es dann noch mal. Falls es so funktioniert, sollten Sie sich die Datei /etc/pam.d/system-auth ansehen und nur das Nötige in Ihre /etc/pam.d/login-Datei kopieren. Alternativ könnten Sie, wenn Sie für alle Dienste Winbind benutzen möchten, das Winbind-bezogene Material nach /etc/pam.d/system-auth verschieben.
„ Meine smb.conf ist richtig konfiguriert. Ich habe Folgendes festgelegt: idmap uid = 12000 und idmap gid = 3000-3500; winbind läuft. Wenn ich Folgendes mache, funktioniert alles perfekt: “
root# wbinfo -u MITTELERDE+maryo MITTELERDE+jackb MITTELERDE+ameds ... MITTELERDE+root root# wbinfo -g MITTELERDE+Domain Users MITTELERDE+Domain Admins MITTELERDE+Domain Guests ... MITTELERDE+Accounts root# getent passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/bash ... maryo:x:15000:15003:Mary Orville:/home/MITTELERDE/maryo:/bin/false
„ Aber folgender Befehl schlägt fehl: “
root# chown maryo a_file chown: 'maryo': invalid user
„Das macht mich noch verrückt! Was könnte hier falsch sein?“
Antwort: Auf Ihrem System läuft wahrscheinlich nscd, der „name service caching daemon“. Schalten Sie ihn aus, und starten Sie ihn nicht noch einmal! Dies sollte Ihr Problem lösen.