PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kerberos - Authentifizierung und Authorisierung



_maddin
15.08.08, 19:21
Hallo zusammen.

Ich bin zur Zeit auf der Suche nach Lösungen für eine zentrale Benutzerverwaltung, wobei die Homeverzeichnisse ebenfalls zentral auf einem Server liegen sollen.

Momentan beschäftige ich mich daher mit Kerberos, LDAP und NFSv4. Prinzipiell funktioniert auch alles. Login, mounts, etc.

Jetzt kommt aber das Problem an der Sache. Es müssen verschiedene Gruppen existieren - natürlich mit verschiedenen Befugnissen. Da Kerberos aber keine Gruppen kennt, kann ich ja nur auf andere Quellen (z.B. ein LDAP-Verzeichnis) zurückgreifen.

Sehe ich das richtig, dass ein Dienst (beispielsweise ein SSH-Server) zum einen Kerberos fragen muss, ob die Identität des Benutzers korrekt ist, und andererseits dann selber noch zusätzlich Informationen aus dem LDAP-Verzeichnis holen muss, um zu entscheiden, ob der Benutzer den Dienst auch benutzen darf?

Also: Authentifizierung (extern mittels Anfrage) an Kerberos und Authorisierung eigenständig mit zusätzlichen Benutzerinformationen aus dem LDAP-Verzeichnis.

Wirklich schön ist das ja nicht. Gibt es keine Möglichkeit die Vergabe der Service-Tickets auf Seite des KDC einzuschränken?



Welche (besseren) Lösungen würdet ihr für das gegebene Szenario einsetzen?

hessijens
18.08.08, 10:17
Na ja, das Problem mit Kerberos ist, das es nur zu Authentifizierung dient. Kerberos bestätigt nur, das der User X auch User X (oder das der Ldap-Server auch der Ldap-Server) ist. Es ist keine Benutzerverwaltung und erst recht keine Gruppenverwaltung.

Diese findet, da hast Du recht an anderer Stelle statt. Im einfachsten Fall mittels /etc/passwd und /etc/group, oder in Deinem Fall eben mittels Ldap (Stichworte nsswitch.conf nss_ldap). Schön ist dies nicht unbeding, da gebe ich Dir recht.

Das führt nun leider dazu, dass Du die Benutzer immer zweimal administrieren musst. Einmal in Kerberos und zum zweiten in Ldap. Am Beispiel shh sehe das dann so aus:

Der "User X" meldet am Client sich im Kerbeors an und erhält sein Ticket. Mit diesem Ticket weist er sich beim ssh Server als "User X" aus. Der ssh Server weist sich gegenüber "User X" aus "Server" aus (Stichwort Service Tickets). Ist die Prüfung beider Tickets am KDC erfolgreich erfolt der Login auf Server mit "User X". Die User- und Guppendaten werden dann mittels Ldap (oder local) auf dem Server gelesen und der User kann arbeiten.

Was nun die Beschränkung von Service-Tickets am KDC angeht, diese musst Du sowieso im KDC anlegen. Im obrigen Beispiel host/server.domain.org@REALM.ORG und per Keytab dem Dienst SSH auf dem Server zur Verfügung stellen. Was willst Du nun beschränken?

Eine bessere Lösung als Kerberos/Ldap kenne ich für eine zentrale Benutzerverwaltung nicht. Natürlich kann man nur Ldap einsetzen, dann ist die Eingabe des Passwortes aber bei jedem Dienst notwendig.

Eine Verbesserung hätte ich vielleicht. Ldap kann die Passwörter von Kerberos benutzen. Das findest Du hier http://www.tfh-wildau.de/steinert/ldap_kerb.html ganz nett beschrieben.

_maddin
18.08.08, 15:31
OK, Service Ticket war wohl der falsche Begriff. Wikipedia nennt es "Client-to-server ticket" (http://en.wikipedia.org/wiki/Kerberos_(protocol)), also das Ticket, das der Client an den Serverdienst schickt.

Konkretes Beispiel: Es gibt Mitarbeiter- und Gastrechner. Mitarbeiter sollen sich an beiden anmelden dürfen, Gäste logischerweise nur an den Gastrechnern.

Ich bin eigentlich davon ausgegangen, dass man nun auf Seiten des KDC festlegen kann, welcher Benutzer für welchen Dienst "Client-to-server tickets" bekommt. Sprich, ich kann zentral festlegen, wer was benutzen darf. Ohne diese Funktion finde ich Kerberos nicht mehr wirklich praktisch (abgesehen vom single-sign-on).

hessijens
21.08.08, 17:54
Ich kenne keine Möglichkeit das Ticket anhand des User zu beschränken. Jeder Kerberos User bekommt meines Wissens auch ein Service Ticket. Es ist Sache des Servers zu entscheiden was er mit dem Service Ticket macht. Der Server muss den User ablehnen nicht der KDC.

Zu Deinem Problem könnstest Du vielleicht nur die Mitarbeiter in der Datenbank anlegen und dann per pam_krb5 und sufficient entscheiden ob der Benutzer am KDC als Mitarbeiter oder einfach nur local als Gast anmeldet. Zweites wäre am Mitarbeiterechner zu verbieten. Oder Du müsstest mit Cross Realms für Benutzer arbeiten.

MiGo
21.08.08, 23:13
Sehe ich das richtig, dass ein Dienst (beispielsweise ein SSH-Server) zum einen Kerberos fragen muss, ob die Identität des Benutzers korrekt ist, und andererseits dann selber noch zusätzlich Informationen aus dem LDAP-Verzeichnis holen muss, um zu entscheiden, ob der Benutzer den Dienst auch benutzen darf?
Wenn ich dich richtig verstanden habe, kannst du dir den Kerberos komplett sparen und zur Userverwaltung nur Ldap verwenden.

Die Dienste wenden sich dann entweder direkt an Ldap (Das kann dir ja auch sagen, ob das eingegebene Passwort zum Benutzer passt) oder aber halt an pam - was ebenfalls via Ldap nachfragen kann.