Server: NIS mit Kerberos 5 sichern
Digitaler Wachhund
Serveradministration
Server: NIS mit Kerberos 5 sichern
Der Network Information Service (NIS) ist seit jeher die Linux/Unix- Methode, um Benutzern ein zentrales Login zu erlauben. Zwar lässt es sich auch mit den verschlüsselten Passwörtern aus der Shadow-Passwortdatenbank umgehen. Diese wandern jedoch durch das Netzwerk und lassen sich jederzeit abfangen. Authentifizieren sich die Benutzer hingegen mit Kerberos 5, gelangen die Passwörter überhaupt nicht mehr auf die Leitung. Stattdessen sorgt ein ausgefeiltes Ticketsystem dafür, dass Benutzer und Dienste sicher vor Passwortattacken sind. Der Workshop bespricht zuerst die Konfiguration des Kerberos-Dienstes. Anschließend setzen Sie einen NIS-Server sowie einen passenden Client auf.
Sichere Authentifizierung
Programmierer des Massachusetts Institute of Technology (MIT) haben Kerberos entwickelt, um eine sichere Authentifizierung für Client-Server-Anwendungen zu erreichen. Die Software setzt auf starke Kryptographie und ein auf Tickets basierendes Authentifizierungsprotokoll. Schwedische Programmierer haben aus dem Vorbild die freie Implementierung »Heimdal« geschaffen, das zum Lieferumfang von Suse Professional ab 9.1 gehört. Das Heimdal-System enthält Server und Client und bringt zahlreiche Werkzeuge für den Administrator mit. Im Netzwerk stehen nicht nur die Benutzer- Passwörter beim Systemlogin im Brennpunkt. Auch beim Zugriff auf Dienste wie FTP oder POP3 sollen Passwörter vor unbefugtem Zugriff schützen. Allerdings lässt sich hier vor Schutz kaum reden, da solche Passwörter im Klartext vom Client zum Server wandern. Ein mit einem Passwortsniffer ausgestatteter Benutzer kann diese leicht abfangen. Mit Kerberos gelangen die Passwörter überhaupt nicht ins Netzwerk, so dass ein Snifferangriff ins Leere läuft. Um Benutzer zu authentifizieren, sendet es einem Client nach Aufforderung ein so genanntes Ticket zu. Kerberos kümmert sich lediglich um die Authentifizierung. Die Benutzerinformationen wie User-ID, Loginshell oder Heimatverzeichnis stellt weiterhin der Verzeichnisdienst Network Information Service (NIS) bereit.
Diagramm:
Kerberos-Session im Detail: (1) Der Benutzer sendet die Loginanfrage an den AS. (2) Der AS sendet ein TGT zurück. (3) Der Client will mit einem Kerberos-Dienst wie POP3 verbinden und verlangt ein Serviceticket (ST). (4) Der TGT stellt das ST aus. (5) Der Client schickt das ST an den Kerberos-Dienst. (6) Der Benutzer ist authentifiziert und verbunden.
Tickets statt Passwörter
Server: NIS mit Kerberos 5 sichern
Statt Passwörter zu verwenden, sorgt ein ausgefeilter Mechanismus für Sicherheit (Bild oben). Der Client verbindet sich transparent durch das Anmeldeprogramm »login« oder über den Client »kinit« mit dem Key-Distribution-Center (KDC). Dieser besteht aus zwei Teilen: dem Authentication- Server (AS) und dem Ticket- Granting-Server (TGS). Der Authentication- Server prüft im Kerberos-Namensraum (Realm), ob der Benutzername (User-Principal) tatsächlich berechtigt ist, sich anzumelden.
Ist die Prüfung positiv verlaufen, erzeugt der AS einen zufälligen Session-Key und ein so genanntes Ticket-Granting- Ticket (TGT). Das TGT enthält diverse Einträge, unter anderem die IP-Adresse des Clients, die Gültigkeitsdauer des Tickets und den eben erzeugten Session-Key. Kerberos kodiert das TGT dann mit einem Schlüssel, den nur der Authentication-Server und der Ticket-Granting-Server kennt. Den Schlüssel selbst berechnet Kerberos aus dem Passwort des Benutzers. Zusammen mit dem Session-Key sendet der Server das Ticket an den Client. Nach Erhalt des TGT und des Session-Key schaltet das System den Login-Prompt zur Anmeldung frei. Das Passwort konvertiert der Client zu einem DES-Schlüssel, mit dem er das TGT entschlüsselt. Anschließend speichert er das TGT im Credential-Cache und löscht das Passwort aus dem Speicher. Läuft die Gültigkeit des Tickets ab, muss sich der Benutzer erneut einloggen.
Kerberos-Server konfigurieren
Der Kerberos Server verwaltet die Datenbank, in der die Principals gespeichert sind. Principals sind Benutzer, Dienste oder Hosts und nach dem Schema »primary/instance@ REALM« aufgebaut. Die Option »instance« dient lediglich zur Gruppierung des »primary« und muss nicht angegeben sein. Die Großbuchstaben des Realm (Kerberos-Namenraum) sind zwingend. Ein Benutzer-Principal ist etwa »joe/admin@BEISPIEL.DE« und ein POP3- Server hätte als Principal »pop3/pop.domain. de@BEISPIEL.DE«. Der Realm fasst alle Principals eines Bereichs zusammen. Neben den Principals enthält die Kerberos- Datenbank auch die Benutzerpasswörter und Netzwerkdienste. Zur Konfiguration des Kerberos-Servers öffnen Sie die Datei »/etc/krb5.conf« im Editor und tragen den Kerberos-Realm ein:
#/etc/krb5.conf
[libdefaults]
default_realm = BEISPIEL.DE
clockskew = 300
[realms]
BEISPIEL.DE = {
kdc = kdc.discworld.de
admin_server = kdc1.discworld.de
default_domain = discworld.de
}
[domain_realm]
.discworld.de = BEISPIEL.DE
.netzanmeld.de = BEISPIEL.DE
[logging]
default = SYSLOG:NOTICE:DAEMON
kdc = FILE:/var/log/kdc.log
admin_server = FILE:/var/log/
kadmind.log
[appdefaults]
pam = {
ticket_lifetime = 1d
renew_lifetime = 1d
forwardable = true
proxiable = false
retain_after_close = false
minimum_uid = 0
debug = false
}
Bevor Sie die Datenbank erzeugen, stellen Sie den Passwortschutz dafür ein. Dieses Masterpasswort muss sich der Administrator nicht merken. Es reicht, das Passwort einmal bei der Konfiguration einzugeben. Sie setzen es mit dem Befehl »kstash«. Im Verzeichnis »/var/heimdal« taucht daraufhin die Passwort-Datei »m-key« auf.
Anschließend erzeugen Sie die Datenbank. Dazu verwenden Sie zuerst »kadmin « mit der Option »l«, um in den lokalen Datenbankmodus zu gelangen:
kadmin -l
Nun erzeugen Sie mit dem »init«-Befehl die Datenbank:
init BEISPIEL.DE
Daraufhin möchte »kadmin« noch wissen, wie lange ein Ticket gültig sein darf. Dafür können Sie im Moment die Voreinstellung »unlimited« übernehmen und bestätigen. Im Verzeichnis »/var/heimdal « finden Sie nun die Protokolldatei »log« und die Datenbank »heimdal.db«. Nun benötigen Sie noch sich selbst als Principal. Benutzen Sie dazu den Loginnamen eines normalen Benutzers, den Sie mit dem Kommando »add« am »kadmin «-Prompt eingeben:
add joe
Jetzt ist alles bereit, um den KDC hochzufahren und das erste Ticket zu erhalten. Starten Sie erst den KDC: /etc/init.d/kdc start Anschließend holen Sie sich das Ticket für den Principal »joe«:
kinit joe
Nachdem Sie das entsprechende Passwort eingegeben haben, wird der Shell-Prompt wieder frei. Der Befehl »klist« an der Kommandozeile fördert das angelegte Ticket zu Tage.
Dienste und Clients hinzufügen
Server: NIS mit Kerberos 5 sichern
Am »kadmin«-Prompt fügt der Administrator mit »add« auch neue Dienste oder Clientrechner zur Datenbank hinzu. Nötig ist die Option »–random-key«, um einen Zufallsschlüssel mit dem Dienst oder Host zu verbinden:
add –random-key ftp/ftp.beispiel.de
add –random-key host/host1.
beispiel.de
Die Passwörter der Service-Principals müssen auf den entsprechenden Servern bekannt sein. Dazu ist das Passwort für einen Service aus der Kerberos-Datenbank zu extrahieren:
ext host/host1.beispiel.de
Das Passwort für den FTP-Dienst legt »kadmin« in der Datei »/etc/krb5.keytab« ab. Dieses kopieren Sie anschließend sicher auf den entsprechenden Rechner. Dafür eignet sich zum Beispiel »scp« (Secure Copy). Diesen Vorgang müssen Sie für jeden Dienst oder Host wiederholen und vorher immer die Keytab-Datei umbenennen. Ansonsten hängt der »ext«- Befehl die Passw
örter einfach an. Kerberos sichert jeden Dienst, der über ein GSS-API (Generic Security Service Application Program Interface) verfügt. Um die Kerberos-Version eines Netzwerkdienstes wie POP3 einzusetzen, deinstallieren Sie zuerst den alten Daemon. Dann stellen Sie auf dem betreffenden Rechner die Datei »/etc/krb5.conf« entsprechend ein.
Clients für Kerberos einrichten
Die Konfiguration der von Clients erledigen Sie bequem über das Suse-Verwaltungsprogramm Yast. In der Kerberos-Maske tragen Sie den Realm sowie den KDC ein. Yast überträgt die Angaben in die Dateien »/etc/krb5.conf« und »/etc/ pam.d/pam_unix2.conf« ein. Aus »pam_ unix2.conf« ruft der Kerberos-Client das PAM-Modul »pam_krb5.so« auf, das die Benutzernamen an den Authentication- Server weiterleitet, um ein TGT zu erhalten. Hat sich ein Benutzer über eine Kerberos- Workstation authentifiziert, bekommt er ein gültiges TGT. Dieses kann er mit dem Befehl »klist« prüfen. Das Programm zeigt die empfangenen Tickets an und gibt zusätzliche Informationen über die Tickets wie zum Beispiel die Gültigkeitsdauer. Gültig ist ein Ticket in der Regel einen Tag. Dies lässt sich jedoch in »/etc/ krb5.conf« einstellen. Um das Passwort zu ändern, nutzt der User das Programm »kpasswd« auf dem Kerberos-Server.
NIS zentralisiert
Der NIS-Dienst nimmt Ihnen viel Arbeit ab. Dateien wie »/etc/hosts« pflegen Sie damit nur noch auf dem NIS-Server. Dieser verteilt die Dateien automatisch an die Workstations. Wichtigste Dateien sind neben »/etc/hosts« die Benutzer- und Passwortdatei »passwd« und die Gruppendatei »group«, die Linux im Verzeichnis »/etc« ablegt. Halten Sie diese Benutzerdateien zentral auf dem NIS-Server, können beispielsweise alle Mitarbeiter von jedem PC im Netzwerk auf ihr persönliches Verzeichnis unter »/home« und eventuelle NFS-Freigaben zugreifen. Beides wird auf dem NIS-Server eingestellt, der Client muss nur laufen und wissen, wie der NIS-Server heißt. Der NIS-Dienst verlangt zudem, dass die Dateien im speziellen Datenbankformat »db« (oder »dbm«) vorliegen. Die resultierende Datei heißt im NIS-Jargon Map (Karte).
NIS-Server vorbereiten
Server: NIS mit Kerberos 5 sichern
Lassen Sie zuerst den NIS-Server »ypserv « automatisch starten, indem Sie ihn mittels Yast in die Runlevel 3 und 5 eintragen. Legen Sie anschließend einen Namen für die NIS-Domäne fest. Wir benutzen mit »netzanmeld.de« einen von der DNS-Domain verschiedenen Namen, um die NIS-Domain eindeutig abzugrenzen:
domainname netzanmeld.de
Der Name, den Sie mit dem Befehl »domainname« setzen, ist nur so lange gültig, bis der Server neu startet, und reicht für einen Test. Dauerhaft tragen Sie diesen in die Datei »/etc/defaultdomain« ein. Legen Sie auf dem NIS-Server und dem -Client den gleichen Testbenutzer an. Dazu können Sie das Verwaltungs- Tool der Distribution benutzen oder einen der Befehle »useradd« oder »adduser« (je nach Distribution verschieden). Notieren Sie sich die User-ID (UID) und die Group-ID (GID). Diese benötigen Sie gleich für die Konfiguration des NIS-Servers.
NIS-Server konfigurieren
Der NIS-Server muss hauptsächlich wissen, welche Dateien er verwalten soll. Wir hatten schon angesprochen, dass »passwd«, »group« und »hosts« die wichtigsten sind. NIS kann auch Mail-Aliase und Netgroups verwalten. Sie konfigurieren den NIS-Server in der Datei »/var/yp/Makefile«. Suchen Sie die Zeilenanfänge nach dem Schlüsselwort »all« ab. Dahinter tragen Sie die Dateien ein, die NIS verwalten soll:
all: passwd group hosts rpc
Auf Suse 9.1 legen Sie eine Standardkonfiguration des NIS-Servers auch bequem mit Yast an. Die Feinheiten stellen Sie jedoch in der Datei »Makefile« ein. Maps erzeugen Nun ist das Makefile so weit konfiguriert, dass Sie die Maps mit dem Befehl »make« generieren können:
make -C /var/yp
Die Option »C« löscht alte Daten, die sich eventuell im Cache befinden. Diesen Befehl müssen Sie jedes mal verwenden, falls sich eine Map ändert, etwa wenn ein neuer Benutzer hinzukommt. Sie automatisieren dies, indem Sie folgende Zeile in die Datei »/etc/crontab« einfügen:
*/15 * * * * make -s -C /var/yp
Das Programm »cron« ruft alle 15 Minuten den Befehl »make« mit den jeweilgen Optionen und Argumenten auf.
NIS-Client konfigurieren
Server: NIS mit Kerberos 5 sichern
Auch auf dem Client beginnt die NISKonfiguration damit, dem System die NISDomäne mitzuteilen:
domainname netzanmeld.de
Öffnen Sie danach im Verzeichnis »/etc« die Datei »yp.conf« und tragen Sie die IP-Adresse des NIS-Servers ein:
ypserver 192.168.1.100
Nun lassen Sie den NIS-Client »ypbind « in den Runlevels 3 und 5 automatisch starten. Damit der Client auch brav die Daten vom NIS-Server verwendet und nicht auf die lokalen Dateien zugreift, konfigurieren Sie auf jedem Client die Datei »/etc/nsswitch.conf«. Darin legen Sie die Reihenfolge der Dateien fest, die Linux auf der Suche nach Informationen abfragt. Der Client soll Rechnernamen über die »hosts«-Datei vom NIS-Server auflösen. Sollte kein NIS verfügbar sein, soll der Client in der lokalen Datei »/etc/hosts« nachsehen. Kann er den Hostnamen danach immer noch nicht ermitteln, soll er den DNS-Server befragen. Der Eintrag hat also folgende Reihenfolge:
hosts: nis files dns
Das Wörtchen »files« steht dabei für die lokale Datei. Achten Sie darauf, dass »files« bei den Maps »passwd« und »group« eingetragen ist. Sonst können Sie sich nicht mehr lokal einloggen, falls der NIS-Server nicht läuft. Hier funktioniert auch die Option »compat«. Ein Eintrag wie »[NOTFOUND=return]« nach einer Option stoppt die Suche, falls der Eintrag nicht im NIS gespeichert ist. Ist jedoch der NIS-Server ausgefallen, probiert es der Client mit dem nächsten Eintrag (etwa mit »files«).
passwd: compat
group: compat
hosts: nis files dns
rpc: nis files
Alle weiteren Einträge in »nsswitch. conf« sollten an erster Stelle die Option »files« verwenden.
Benutzer registrieren
Damit Linux auf der Workstation weiß, dass es auf diesem System auch NIS-Benutzer gibt, fügen Sie am Ende der Dateien »passwd« und »group« ein Magic- Cookie ein, das aus Pluszeichen am Anfang und sechs Doppelpunkten besteht:
+::::::
Mit der Option »compat« in der »nsswitch. conf« erreichen Sie, dass nur bei einem vorhandenen Magic Cookie NIS befragt wird. Dies ist die Standardeinstellung. Falls Sie die Suchreihenfolge in »nsswitch. conf« lieber selbst festlegen möchten, verzichten Sie auf das Magic Cookie. Nach dem gleichen Schema geben Sie NIS nur für bestimmte Benutzer oder Netgroups frei (»+alfred:::::«) respektive schließen diese aus (»-@buchhaltung::::: «). Netgroups stellen Sie in der Datei »/etc/netgroups« ein. Für NIS existieren zwei Typen von Dateien: solche mit lokaler Priorität und solche mit globaler Priorität. Bei Dateien mit lokaler Priorität überschreibt die Information der lokalen Maschine die NIS-Kopie. Bei Dateien mit globaler Priorität ist es umgekehrt. Die einzigen Dateien mit lokaler Priorität sind »/etc/passwd« und »/etc/group«. Lokale Kopien von Dateien mit globaler Priorität ignoriert NIS mit Ausnahme von »/etc/hosts«, die das System zur Bootzeit auswertet. Die Files »hosts«, »network«, »protocols«, »services« und »netgroup« haben globale Priorität.
Windows und KDC
Auch Windows-2000-Clients können den KDC für die Authentifizierung nutzen. Dazu trägt der Administrator für die betreffenden Maschinen Host-Principals in der Kerberos-Datenbank ein. Die Windows- Clients müssen außerdem den KDC, den Realm und das Host-Passwort wissen. Diese Informationen geben Sie mit dem Programm »Ksetup« ein, das im Windows- 2000-Ressource-Kit enthalten ist. Damit dies funktio
niert, müssen die Windows-Clients alle Benutzerinformationen von einem Verzeichnisdienst wie zum Beispiel LDAP beziehen. NIS ist ungeeignet, da es ein reiner Unix-Dienst ist, der wichtige Informationen wie die User- ID oder das Home-Verzeichnis nicht für Windows-Clients bereitstellen kann.