Single-Sign-On mit Kerberos V
Transcrição
Single-Sign-On mit Kerberos V
Single-Sign-On mit Kerberos V Jörg Rödel <[email protected]> 21. Oktober 2005 Jörg Rödel Single-Sign-On mit Kerberos V 21. Oktober 2005 Was ist Single-Sign-On? • oft nur verstanden als ein Nutzer/Passwort-Paar für alle Dienste eines Netzwerkes • so wird es dann auch häufig implementiert, z.B. mit LDAP als Backend • bei echtem Single-Sign-On meldet man sich allerdings nur einmal am Netzwerk an und ist damit gegenüber allen Diensten authentifiziert • Implementierungen des Kerberos 5 Protokolles (RFC 4120) stellen einen solchen Dienst im Netzwerk zur Verfügung Jörg Rödel 1 Single-Sign-On mit Kerberos V 21. Oktober 2005 Was ist Kerberos? • ein dreiköpfiger Hund aus der griechischen Mythologie, welcher den Eingang zum Hades bewacht • heute ein hauptsächlich am MIT entwickelter Authentifizierungsstandard • erste öffentliche Version war Kerberos 4, Versionen 1 bis 3 waren nur experimentell • aktuell ist die Version 5, zuerst standardisiert in RFC 1510, aktualisiert in RFC 4120 • arbeitet nach dem Trusted-Third-Party-Prinzip und symetrischer Verschlüsselung Jörg Rödel 2 Single-Sign-On mit Kerberos V 21. Oktober 2005 Wie funktioniert Kerberos - Begriffe • eine Authentifizierungszone wird als Realm bezeichnet; alle Nutzer und angebotenen Dienste sind Teil dieses Realms • ein Principal ist entweder ein Nutzer oder ein Dienst; jeder Principal hat einen eideutigen Namen und eine Reihe geheimer Schlüssel • ein Ticket ist ein verschlüsseltes Datenpaket, mit dem sich ein Principal gegenüber einem Dienst ausweisen kann • als KDC (Key Distribution Center) wird der eigentliche Kerberos-Server bezeichnet Jörg Rödel 3 Single-Sign-On mit Kerberos V 21. Oktober 2005 Wie funktioniert Kerberos - Authentifizierung 1 • um einen Dienst mit Kerberos zu nutzen, benötigt man ein Ticket Granting Ticket (TGT) • das TGT bekommt man vom Authentication Service (AS) • das TGT wird von einem Principal angefordert und ist mit dessen Schlüssel kodiert • der Nutzer auf der Clientseite berechnet den Schlüssel zum dekodieren aus einem Passwort oder der Schlüssel ist direkt auf der Festplatte hinterlegt Jörg Rödel 4 Single-Sign-On mit Kerberos V 21. Oktober 2005 Wie funktioniert Kerberos - Authentifizierung 2 • will ein Nutzer einen Dienst (z.B. HTTP) nutzen, so fordert er vom Ticket Granting Service (TGS, Teil des KDC) ein Ticket für genau diesen Dienst an • die Authentifikation erfolgt dabei mit dem TGT • dieses Ticket ist kodiert mit dem Schlüssel des Dienst-Prinicipals und enthält unter anderem die Identität des Clients • der Client schickt dieses Ticket an den Dienst, den er nutzen möchte • der Dienst entschlüsselt das Ticket und verfiziert die Indentität des Clients Jörg Rödel 5 Single-Sign-On mit Kerberos V 21. Oktober 2005 Wie funktioniert Kerberos - Das Bild Bei der Anmeldung holt sich der Nutzer ein Ticket Granting Ticket vom Authentication Server 1. Kerberos Server 2. Mit dem Ticket Granting Ticket holt der Nutzer beim TGS ein Ticket fuer den Service Client Der Nutzer schickt dieses Service Ticket an den Server und ist damit authentifiziert Jörg Rödel 3. Webserver LDAP Server usw. 6 Single-Sign-On mit Kerberos V 21. Oktober 2005 Implementierungen • MIT-Kerberos ist die Referenzimplementierung und wird auch häufig genutzt • Heimdal-Kerberos ist eine weitere Implementierung aus Europa • Microsoft Kerberos ist fester Bestandteil seit Windows 2000 Ich werde an dieser Stelle nur auf Heimdal-Kerberos eingehen. Die MIT-Version ist in der Konfiguration ähnlich, allerdings hat Heimdal einige Vorteile. Heimdal ist einfacher zu benutzen, unterstützt inkrementelle Updates bei mehreren Servern und hat auch eine bessere Client-Implementierung. Doch dazu mehr beim Thema Webserver. Jörg Rödel 7 Single-Sign-On mit Kerberos V 21. Oktober 2005 Dienstprogramme von Heimdal-Kerberos • kinit: wird verwendet, um sich ein TGT vom AS zu besorgen • klist: zeigt alle vorhandenen Tickets an • kdestroy: löscht alle vorhandenen Tickets • kpasswd: ermöglicht einem Principal sein Passwort und damit seinen Key zu ändern • kadmin: Administrationsshell für Heimdal-Kerberos; setzt ein Admin-Ticket voraus und ist Scripting-fähig Jörg Rödel 8 Single-Sign-On mit Kerberos V 21. Oktober 2005 Installation von Heimdal-Kerberos (1/6) Als Beispiel soll hier ein Kerberos-Server mit dem Realm ZLUG.ORG installiert werden. Nach der Installation der Binaries ist zunächst die Datei /etc/krb5.conf zu bearbeiten. Es sollte mindestens folgendes enthalten sein: [libdefaults] default realm = ZLUG.ORG [realms] ZLUG.ORG = { kdc = kdc1.zlug.org:88 } [domain realm] .zlug.org = ZLUG.ORG Jörg Rödel 9 Single-Sign-On mit Kerberos V 21. Oktober 2005 Installation von Heimdal Kerberos (2/6) Im nächsten Schritt ist der Master-Key der Kerberos-Datenbank zu erstellen. Mit diesem Key wird die komplette Datenbank verschlüsselt. Daher ist er entsprechend wichtig und sollte nicht verloren gehen. # kstash Master key: Verifying - Master key: kstash: writing key to ‘/var/lib/heimdal-kdc/m-key’ # Von der Datei /var/lib/heimdal-kdc/m-key sowie der heimdal.db im gleichen Verzeichniss sollten unbedingt regelmäßig Backups angelegt werden. Jörg Rödel 10 Single-Sign-On mit Kerberos V 21. Oktober 2005 Installation von Heimdal Kerberos (3/6) Jetzt kann die Datenbank mit den Principals initialisiert werden. Das erfolgt mit dem Programm kadmin. Die Option -l gibt dabei an, dass kadmin direkt auf der Datenbank arbeitet und nicht über einen Admin-Server. # kadmin -l kadmin> init ZLUG.ORG Realm max ticket life [unlimited]: Realm max renewable ticket life [unlimited]: kadmin> Damit wurde der Realm ZLUG.ORG initialisiert und die ersten Principals angelegt, welche für den Betrieb von Kerberos erforderlich sind. Diese sind auf der nächsten Folie zu sehen. Jörg Rödel 11 Single-Sign-On mit Kerberos V 21. Oktober 2005 Installation von Heimdal Kerberos (4/6) Die Principals kadmin/* werden von dem kadmin-Dienst verwendet. Darüber lässt sich die Principal-Datenbank administrieren. Am wichtigsten ist der krbtgt/ZLUG.ORG-Principal. Dieser gehört zum TGS-Dienst. kadmin> list * [email protected] kadmin/[email protected] kadmin/[email protected] kadmin/[email protected] krbtgt/[email protected] changepw/[email protected] kadmin> Damit ist der Kerberos-Server einsatzbereit, wenn auch noch nicht fertig. Jörg Rödel 12 Single-Sign-On mit Kerberos V 21. Oktober 2005 Installation von Heimdal Kerberos (5/6) Als nächstes ist es empfehlenswert, einen Admin-Principal für kadmin anzulegen. kadmin> add admin/admin Max ticket life [1 day]: Max renewable life [1 week]: Principal expiration time [never]: Password expiration time [never]: Attributes []: admin/[email protected]’s Password: Verifying - admin/[email protected]’s Password: kadmin> Jörg Rödel 13 Single-Sign-On mit Kerberos V 21. Oktober 2005 Installation von Heimdal Kerberos (6/6) Nun muss man diesem Principal noch die entsprechenden Rechte geben. Dies wird in der Datei kadmin.acl konfiguriert. Diese sollte folgenden Inhalt haben: #principal admin/admin [priv1,priv2,...] all [glob-pattern] Der kadmin-Dienst selbst wird über den inetd gestartet. In /etc/inetd.conf sollte deshalb folgende Zeile enthalten sein: kerberos-adm stream tcp nowait root /usr/sbin/tcpd /usr/lib/heimdal-servers/kadmind Damit ist auch der kadmin-Dienst einsatzbereit. kadmin kann nun ohne die -l Option verwendet werden, ein TGT für admin/admin vorausgesetzt. Jörg Rödel 14 Single-Sign-On mit Kerberos V 21. Oktober 2005 PAM-Konfiguration Damit die Nutzer direkt beim anmelden ihr TGT erhalten, kann man das PAMModul pam krb5.so verwenden: account account auth auth auth password session session Jörg Rödel sufficient sufficient sufficient sufficient required required required optional pam pam pam pam pam pam pam pam unix.so krb5.so unix.so debug nullok nodelay krb5.so debug use first pass deny.so unix.so nullok obscure min=4 max=8 md5 unix.so krb5.so 15 Single-Sign-On mit Kerberos V 21. Oktober 2005 Anbindung an den Apache-Webserver Nun soll der erste Dienst angebunden werden, der Webserver Apache. Dazu muss zunächst ein Service-Principal erstellt und in eine Keytab-Datei exportiert werden: kadmin> add -r HTTP/triton Max ticket life [1 day]: Max renewable life [1 week]: Principal expiration time [never]: Password expiration time [never]: Attributes []: kadmin> ext -k /etc/apache2/apache.keytab HTTP/triton kadmin> Die Option -r gibt an, dass ein zufälliger Schlüssel generiert werden soll. Deshalb erfolgt keine Passworteingabe. Jörg Rödel 16 Single-Sign-On mit Kerberos V 21. Oktober 2005 Anbindung an den Apache-Webserver Für den Webserver muss nun das Modul mod auth kerb bereit gestellt werden. Der Debian-Distribution liegt es bereits bei. Geschützt wird ein Verzeichniss dann wie folgt: <Location /geheim> AuthType Kerberos AuthName "Kerberos 5" Krb5Keytab /etc/apache2/apache.keytab KrbAuthRealms ZLUG.ORG KrbMethodK5Passwd on KrbMethodNegotiate on require valid-user </Location> Jörg Rödel 17 Single-Sign-On mit Kerberos V 21. Oktober 2005 SASL-Konfiguration Applikationen die den Simple Authentication and Security Layer (SASL) unterstützen sind von Haus aus Kerberos fähig. Als Voraussetzung hierfür muss der SASL-spezifische Dienst saslauthd gestartet werden. Weiterhin muss das entsprechende SASL-Modul für GSSAPI-Authentifikation installiert sein. Dann kann man den saslauthd wie folgt starten: # /usr/sbin/saslauthd -a kerberos5 Der Parameter gibt an, dass als Authentifizierungsbackend Kerberos 5 zum Einsatz kommen soll. Damit ist die Vorbereitung für Dienste wie z.B. OpenLDAP oder den Cyrus-IMAP-Server fertig. Jörg Rödel 18 Single-Sign-On mit Kerberos V 21. Oktober 2005 OpenLDAP-Konfiguration Der OpenLDAP-Server benötigt, wie jeder andere Dienst auch, einen eigenen Principal. Dessen Key muss in die Datei /etc/krb5.keytab exportiert werden: kadmin> add -r ldap/triton Max ticket life [1 day]: Max renewable life [1 week]: Principal expiration time [never]: Password expiration time [never]: Attributes []: kadmin> ext -k /etc/krb5.keytab ldap/triton kadmin> Jörg Rödel 19 Single-Sign-On mit Kerberos V 21. Oktober 2005 OpenLDAP-Konfiguration Im nächsten Schritt sind noch Einstellungen in der slapd.conf vorzunehmen. Folgende Zeilen sollten enthalten sein: sasl-realm sasl-host ZLUG.ORG triton sasl-regexp "uid=(.*)/admin,cn=ZLUG.ORG,cn=gssapi,cn=AUTH" "uid=$1,ou=ldap,ou=techadmin,dc=zlug,dc=org" sasl-regexp "uid=([^/]*),cn=ZLUG.ORG,cn=gssapi,cn=AUTH" "uid=$1,ou=People,dc=zlug,dc=org" Nach einem Neustart des slapd sollte die Kerberos-Authentifizierung funktionieren. Jörg Rödel 20 Single-Sign-On mit Kerberos V 21. Oktober 2005 Weitere Kerberos-fähige Dienste • der Cyrus-IMAP-Server ist Kerberos fähig. Mit einem entsprechenden Client (z.B. Mozilla Thunderbird) kann man diesen auch für Single-Sign-On verwenden • das AFS-Filesystem basiert auf Kerberos (eigentlich auf Kerberos 4, aber Version 5 lässt sich ebenfalls verwenden • eine bedauernswerte Ausnahme bildet der CUPS-Daemon. Dieser ist leider nicht Kerberos-fähig Jörg Rödel 21 Single-Sign-On mit Kerberos V 21. Oktober 2005 Vielen Dank für ihre Aufmerksamkeit Fragen? Die Vortragsfolien sind in Kürze unter der URL http://www-user.tu-chemnitz.de/~roej/ zu finden. Jörg Rödel 22