Foliensatz 7 Kerberos, LDAP und SSSDpraxis/sosem16/vorlesung/folien_07.pdf · LDAP-Teil des AD...

24
Foliensatz 7 Kerberos, LDAP und SSSD Inhalt Kerberos LDAP (Lightweight Directory Access Protocol) SSSD (System Security Services Daemon) Die Grafik „Kerberos Protokoll“ steht unter der CC BY-SA 3.0 Lizenz. Kerberos Kerberos ist ein Netzwerkauthentifizierungsprotokoll, das für das Athena-Projekt des MIT entwickelt wurde. Die aktuelle Version 5 ist in RFC4120 definiert. Mittels Kerberos kann man eine sichere Authentifizierung in einem ungesicherten Netzwerk auf sicheren Rechnern anbieten, wobei die Authentifizierung durch eine dritte Partei, dem Kerberos-Server, übernommen wird. Der Kerberos-Server authentifiziert den Client gegenüber dem Server, den Server gegenüber dem Client und sich selbst gegenüber dem Client und den Server. Dabei werden sogenannte Tickets verwendet, um die Identität nachzuweisen. Diese Tickets erlauben auch ein Single-Sign-On, d.h. Passwörter müssen nur einmal eingegeben werden. Zudem kann die Kommunikation zwischen den Parteien verschlüsselt werden. Bekannte Implementierung sind MIT Kerberos (diese betrachten wir genauer), Heimdal Kerberos und Microsoft Active Directory. Links: Designing an Authentication System: a Dialogue in Four Scenes, Kerberos Tutorial Kerberos - Realm Ein Kerberos-Server verwaltet genau ein Realm. Innerhalb dieses Realms kann der Server Benutzer, Rechner und Dienste authentifizieren. D.h. ein Benutzer/Rechner/Dienst gehört zu dem Realm, wenn er ein Geheimnis, nämlich einen Schlüssel, mit dem Kerberos-Server teilt. Das bedeutet aber nicht, dass ein Benutzer und ein Dienst, an dem sich der Benutzer authentifizieren will, zum selben Realm gehören müssen. Falls sie zu verschiedenen Realms gehören und es eine Vertrauensstellung zwischen den Realms gibt, findet eine sogenannte Cross-Realm Authentifizierung statt. Beim Namen eines Realms muss auf die Groß- und Kleinschreibung geachtet werden. Üblich ist die Verwendung des DNS-Domainnamens in Großbuchstaben als Name für ein Realm. ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 1 von 24

Transcript of Foliensatz 7 Kerberos, LDAP und SSSDpraxis/sosem16/vorlesung/folien_07.pdf · LDAP-Teil des AD...

Foliensatz 7

Kerberos, LDAP und SSSD

Inhalt• Kerberos• LDAP (Lightweight Directory Access Protocol)• SSSD (System Security Services Daemon)

Die Grafik „Kerberos Protokoll“ steht unter der CC BY-SA 3.0 Lizenz.

Kerberos• Kerberos ist ein Netzwerkauthentifizierungsprotokoll, das für das Athena-Projekt des MIT

entwickelt wurde. Die aktuelle Version 5 ist in RFC4120 definiert.

• Mittels Kerberos kann man eine sichere Authentifizierung in einem ungesicherten Netzwerkauf sicheren Rechnern anbieten, wobei die Authentifizierung durch eine dritte Partei, demKerberos-Server, übernommen wird.

• Der Kerberos-Server authentifiziert den Client gegenüber dem Server, den Server gegenüber demClient und sich selbst gegenüber dem Client und den Server. Dabei werden sogenannte Ticketsverwendet, um die Identität nachzuweisen. Diese Tickets erlauben auch ein Single-Sign-On, d.h.Passwörter müssen nur einmal eingegeben werden. Zudem kann die Kommunikation zwischen denParteien verschlüsselt werden.

• Bekannte Implementierung sind MIT Kerberos (diese betrachten wir genauer), Heimdal Kerberosund Microsoft Active Directory.

Links: Designing an Authentication System: a Dialogue in Four Scenes, Kerberos Tutorial

Kerberos - Realm• Ein Kerberos-Server verwaltet genau ein Realm. Innerhalb dieses Realms kann der Server Benutzer,

Rechner und Dienste authentifizieren. D.h. ein Benutzer/Rechner/Dienst gehört zu dem Realm, wenner ein Geheimnis, nämlich einen Schlüssel, mit dem Kerberos-Server teilt.

• Das bedeutet aber nicht, dass ein Benutzer und ein Dienst, an dem sich der Benutzerauthentifizieren will, zum selben Realm gehören müssen. Falls sie zu verschiedenen Realms gehörenund es eine Vertrauensstellung zwischen den Realms gibt, findet eine sogenannte Cross-RealmAuthentifizierung statt.

• Beim Namen eines Realms muss auf die Groß- und Kleinschreibung geachtet werden. Üblich ist dieVerwendung des DNS-Domainnamens in Großbuchstaben als Name für ein Realm.

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 1 von 24

Kerberos - Schlüssel• Kerberos verwendet symmetrische Kryptographie, um die verschiedenen, über das unsichere

Netzwerk geschickten Nachrichten zu ver- bzw. entschlüsseln und erlaubt dabei die Verwendungmehrerer Algorithmen (z.B. DES, 3DES, AES256, …).

• Damit verschiedene Kerberos-Implementierungen miteinander interagieren können, müssen siezumindest einen Verschlüsselungsalgorithmus gemeinsam haben.

• Jedem Benutzer/Rechner/Dienst ist ein Schlüssel zugeordent, der für die unterschiedlichenVerschlüsselungsalgorithmen verwendet wird.

• Dienste verwenden üblicherweise per Zufall generierte Schlüssel, während der Schlüssel einesBenutzers mit Hilfe seines Passworts reproduzierbar erzeugt werden kann.

• Zusätzlich hat jeder Schlüssel eine Versionnummer (kvno), die erhöht wird, wenn sich derSchlüssel/das Passwort ändert.

Kerberos - Principal• Jedem Schlüssel am Kerberos-Server ist ein Name zugeordnet, der Principal. Dieser Principal hat

die Form Komponente1/Komponente2/...@REALM.

• Für Benutzer werden üblicherweise ein oder zwei Komponenten, Name/Instanz@REALM, verwendet,wobei der Name dem Benutzernamen entspricht und die Instanz eine zusätzliche Funktionbeschreibt, z.B. ob der Benutzer Administrator ist.

• Bei Diensten hat der Principal die Form Dienstname/FQDN@REALM. Oft wird als Dienstname „host“verwendet, um den generischen Zugriff auf den Rechner selbst zu beschreiben.

Kerberos - KDC, AS, TGS, Tickets• Der Kerberos-Server wird als Key Distribution Center (KDC) bezeichnet und besteht aus zwei

logisch separaten Diensten: dem Authentication Server (AS) und dem Ticket Granting Server (TGS).

• Der Authentication Server wird benutzt, um einen Benutzer über sein Passwort zu authentifizierenund ein Ticket Granting Ticket (TGT) auszustellen. Danach kann der Benutzer das TGT benutzenund braucht sein Passwort nicht mehr einzugeben.

• Mit dem TGT können über den Ticket Granting Server spezielle Servicetickets für Diensteangefordert und über diese Tickets die Authentifizierung gegenüber den Diensten erledigt werden.Der Principal für den TGS hat die Form krbtgt/REALM@REALM.

• Jedes Ticket, sowohl das TGT als auch ein Serviceticket, ist mit dem Schlüssel des Principalsverschlüsselt, für den das Ticket vorgesehen ist.

• Weiters besitzt jedes Ticket auch ein Ablaufdatum, nach dem es nicht mehr gültig ist, damit es nichtewig verwendet werden kann.

Kerberos - Funktionsweise

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 2 von 24

Kerberos - Funktionsweise Schritt 1• Der Benutzer (der Client) schickt eine Authentifizierungsanfrage an den Server. Die Anfrage enthält

seinen Principal, die IP-Adressen, für denen das TGT gültig sein soll, als auch die gewünschteLebenszeit des TGT.

• All diese Informationen werden unverschlüsselt übertragen, da diese nicht geheim sind.

• Der AS erzeugt einen zufälligen Sitzungsschlüssel für den Client und den TGS. DieserSitzungsschlüssel zusammen mit dem Client-Principal, dem TGS-Principal, den IP-Adressen, demaktuellen Zeitstempel und der Lebenszeit werden in ein Ticket verpackt (das TGT) und mit demSchlüssel des TGS verschlüsselt.

• Zusätzlich wird der TGS-Principal, der Zeitstempel, die Lebenszeit und der Sitzungsschlüssel mitdem Schlüssel des Benutzers verschlüsselt. Dieses Paket sowie das TGT werden an den Clientzurückgesandt.

• Gibt der Benutzer das richtige Passwort ein, so kann der Client den Teil, der mit demBenutzerschlüssel verschlüsselt ist, öffnen und ist somit authentifiziert, da er nun denSitzungschlüssel besitzt.

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 3 von 24

Kerberos - Funktionsweise Schritt 2• Der Client fordert ein Serviceticket für einen Dienst an, in dem er folgende Informationen an den

TGS schickt:

• Das TGT• Den Principal des Dienstes, für den das Serviceticket gewünscht ist, sowie die gewünschte

Lebenszeit des Servicetickets• Einen Authenticator bestehend aus dem Benutzerprincipal und dem aktuellen Zeitstempel,

verschlüsselt mit dem Sitzungsschlüssel für das TGS

• Der TGS prüft die Anfrage auf Richtigkeit, z.B. Lebenszeit des TGT noch nicht vorbei, IP-Adresse derAnfrage passt auf die im TGT gespeicherten, Authenticator kann entschlüsselt werden und Inhaltpasst zum TGT, …

• Passt alles, so wird analog zum Ausstellen des TGT ein Serviceticket ausgestellt (i.e. Situngsschlüsselerzeugen, nötige Informationen hineinpacken, mit Schlüssel des Services verschlüsseln) undgenauso auch ein entsprechendes Antwortpaket geschickt.

Kerberos - Funktionsweise Schritt 3• Der Client erzeugt wieder einen Authenticator, dieses Mal verschlüsselt mit dem Sitzungsschlüssel

für den Dienst, und schickt diesen gemeinsam mit dem Serviceticket an den Dienst.

• Kann der Dienst das Serviceticket entschlüsseln, so kann der darin enthaltene Sitzungschlüssel fürdas Entschlüsseln des Authenticators verwendet und damit der Benutzer authentifiziert werden.

• Um auch den Dienst gegenüber den Client zu authentifizieren, schickt der Dienst als Antwort denZeitstempel des Authenticators verschlüsselt mit dem Sitzungsschlüssel zurück an den Client. Kannder Client die Antwort entschlüsseln und passt der Zeitstempel, so wurde der richtigeSitzungsschlüssel verwendet und damit ist auch der Dienst gegenüber den Client authentifiziert.

Kerberos - Vertrauensstellungen• Wie erwähnt, können zwischen zwei Realms A und B Vertrauensstellungen aufgebaut werden. Diese

können unidirektional sein (Benutzer von A können auf Dienste von B zugreifen) oder bidirektional.

• Weiters gibt es neben den direkten Vertrauensstellungen auch transitive und hierarchische.

• Bei einer unidirektionalen Vertrauensstellung hat der KDC von B Vertrauen in den KDC von A. DiesesVertrauen wird über einen geteilten Schlüssel für den Principal krbtgt/B@A (Remote TGT)bewerkstelligt.

• Bei bidirektionalen Vertrauensstellungen wird zusätzlich noch ein geteilter Schlüssel für krbtgt/A@Bgebraucht.

Kerberos - Vertrauensstellungen - Beispiel• Zum besseren Verständnis ein Beispiel, in dem der Benutzer [email protected] auf den SSH-Dienst auf

ssh.beta.at zugreifen möchte:

• Der Benutzer „ict“ authentifiziert sich an seinem AS und bekommt ein TGT.

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 4 von 24

• Er verbindet sich nun mit dem Server ssh.beta.at. Der SSH-Client sieht anhand der Domain,dass der Server nicht zum Realm ALPHA.AT gehört. Daher fragt er den TGS von ALPHA.AT nachdem Remote TGT krbtgt/[email protected].

• Mit dem Remote TGT fragt der SSH-Client den TGS von BETA.AT nach dem Servicetickethost/[email protected]. Der TGS überprüft, ob das Remote TGT mit dem lokalgespeicherten zusammenpasst und falls dem so ist, wird das Serviceticket an den SSH-Clientgeschickt.

• Der SSH-Client kann nun das Serviceticket zum Authentifizieren beim SSH-Dienst verwenden.

Kerberos - Vor- und NachteileVorteile:

• Kerberos-Nachrichten sind gegen Lauschangriffe und Replay-Attacken geschützt.• Die Kommunikation zwischen Client und Server kann verschlüsselt werden.• Der Client und der Server können gegenseitig ihre Identität verifizieren.• Single-Sign-On wird unterstützt.• Das Protokoll funktioniert über ungesicherte Netzwerke hinweg.• Benutzerpasswörter müssen nicht über das Netzwerk übertragen werden.

Nachteile:

• Ohne Kerberos-Server funktioniert die Authentifizierung von Benutzern und Diensten nicht mehr(beheben durch Verwenden mehrerer Kerberos-Servern).

• Die Uhren aller Rechner müssen wegen der Benutzung von Zeitstempeln unbedingt synchrongehalten werden (z.B. durch Verwendung von NTP).

• Wird ein Server geknackt, auf dem ein Kerberos-Dienst läuft, so ist dessen privater Schlüssel nichtmehr sicher (beheben durch Erzeugen eines neues Schlüssels).

• Wird der Kerberos-Server geknackt, sind alle Schlüssel potentiell kompromitiert.• Läuft das TGT ab, muss es vom Benutzer durch Eingabe seines Passworts erneuert werden.

Kerberos - Microsoft Active Directory• Microsoft Active Directory (AD) verwendet für die Authentifizierung von Rechnern, Diensten und

Benutzern auch Kerberos v5.

• Jeder AD Server fungiert dabei als KDC, die Kerberos-Datenbank wird automatisch auf alle ADServer verteilt.

• Die nötigen Schlüssel für Rechner, Dienste und Benutzer werden im entsprechenden Objekt imLDAP-Teil des AD gespeichert.

• Hat man eine gemischte Systemumgebung bestehend aus Windows- und Linux-Rechnern, so ist esmeistens am einfachsten, das AD zum Speichern der Benutzerdaten zu verwenden und dann dieBenutzerdaten auf den Linux-Rechnern über LDAP vom AD abzufragen bzw. die Benutzer überKerberos zu authentifizieren.

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 5 von 24

Kerberos - Installation• Wichtig: Damit Kerberos richtig funktioniert, müssen alle Domainnamen aufgelöst werden können!

• Die für den Kerberos-Server nötigen Pakete sind krb5-admin-server und krb5-kdc. Bei derInstallation wird man nach einigen Daten gefragt:

• „Voreingestellter Realm für Kerberos Version 5“• „Kerberos-Server für Ihren Realm“• „Administrations-Server für Ihren Kerberos-Realm“

• Der Administrationsserver ist üblicherweise der gleiche wie der Kerberos-Server und wird zumVerwalten der Kerberos-Datenbank verwendet.

• Danach muss der Realm mit Hilfe von krb5_newrealm angelegt und mit einem Passwort geschütztwerden. Die Kerberos-Datenbank selbst wird dabei unter /var/lib/krb5kdc/ abgelegt und die Dateimit dem Master-Passwort in der Datei /etc/krb5kdc/stash.

Links: Ubuntu Kerberos Seite, Kerberos Installation von Spinlock Solutions

Kerberos - Server-Konfiguration• Im Verzeichnis /etc/krb5kdc finden sich die folgenden Dateien:

• kdc.conf → Konfigurationsdatei für die Server• kadm5.acl → Enthält ACLs für den Zugriff auf die Kerberos-Datenbank• stash → Enthält den Schlüssel für die Kerberos-Datenbank

• In der Datei kdc.conf wird der Kerberos-Server sowie der Administrationsserver konfiguriert. Hierwird z.B. eingetragen, wo für welches Realm die Kerberos-Datenbank liegt und wie bzw. woInformationen geloggt werden.

• Damit Administratoren (Principals der Form Benutzername/admin@REALM) Vollzugriff auf dieKerberos-Datenbank haben, muss folgender Eintrag zu kadm5.acl hinzugefügt und danach derkrb5-admin-server neu gestartet werden:

*/admin *

Achtung: Beim Starten des Administrationsservers werden Zufallszahlen gebraucht, falls derEntropy-Speicher leer ist, hängt der Server bis genügend Entropy wieder vorhanden ist!

Kerberos - Allgemeine Konfiguration• Die Clientprogramme für Kerberos sind im Paket krb5-user enthalten. Zusätzlich empfiehlt sich die

Installation von krb5-doc, um die restlichen Manpages und die Kerberos-Dokumentation lokalverwenden zu können.

• In der Datei /etc/krb5.conf sind Daten für die Grundkonfiguration von Kerberos eingetragen.

• Diese Datei wird sowohl auf dem Serverrechner gebraucht als auch auf den Clientrechnern.

• Es ist u.a. definiert, welche Realms es gibt und wie deren Server heißen. Zudem kann ein Realmals Standard-Realm festgelegt werden.

• Weiters kann festgelegt werden, wie das Mapping von DNS-Domain bzw. Rechnername auf

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 6 von 24

Kerberos-Realm funktionieren soll.

• Eine weitere, wichtige Option is k5login_authoritative (default: yes), die angibt, dassstandardmäßig nur dem Benutzer NAME@DEFAULT_REALM der Login erlaubt wird, falls die Datei$HOME/.k5login nicht existiert bzw. falls sie existiert nur den Principals, die darin zeilenweisegelistet sind.

Kerberos - Administration der Datenbank - kadmin• Es gibt zwei Programme zur Administration der Kerberos-Datenbank: kadmin und kadmin.local.

Letzters kann als Administrator nur lokal am Administrationsserver, dafür ohne Authentifizierungausgeführt werden, das andere auf jedem Rechner im Realm, da es die Kerberos-Authentifizierungverwendet.

• Mit diesen Programmen können u.a. Principals aufgelistet (listprincs), erstellt (addprinc),gelöscht (delprinc), umbenannt (renprinc) oder ausgegeben (getprinc) werden.

• Weiters können die zu einem Principal gehörenden Schlüssel in einer sogenannten keytab-Dateigespeichert (ktadd) oder von dieser gelöscht (ktremove) werden. Dies wird gebraucht, um Dienstenden entsprechenden Schlüssel zur Verfügung stellen zu können.

• Damit man als Administrator von überall die Kerberos-Datenbank administrieren kann, empfiehlt essich, einen Principal root/admin@REALM anzulegen.

Kerberos - Clientprogramme - kinit, kdestroy, klistkinit - Holt Ticket Granting Tickets.

» Wird benutzt, um ein TGT vom KDC zu holen und lokal zu speichern.» $ kinit root/admin

Password for root/[email protected]:

kdestroy - Zerstört zwischengespeicherte Tickets.» Die Tickets werden durch Löschen der Datei mit den Tickets zerstört.» $ kdestroy

klist - Zeigt zwischengespeicherte Tickets an.» Zeigt entweder die Principals und Tickets des Benutzers-Caches an oder den Inhalt einer keytab-

Datei.» Optionen: -f → zeige zusätzlich Flags an, -k → muss angegeben werden bei Verwendung mit einer

keytab-Datei.» $ klist -f

Ticket cache: FILE:/tmp/krb5cc_0Default principal: root/[email protected]

Valid starting Expires Service principal2016-04-23 16:45:23 2016-04-24 02:45:23 krbtgt/[email protected]        renew until 2016-04-24 16:45:10, Flags: FPRIA

Kerberos - Clientprogramme - kpasswd, ktutilkpasswd - Ändert das Kerberos-Passwort eines Benutzers.

» $ kpasswd [email protected] for [email protected]:

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 7 von 24

Enter new password:Enter it again:Password changed.

ktutil - Verwaltet keytab-Dateien.» Dient zum Hinzufügen bzw. Löschen von Einträgen in einer keytab-Datei.» $ ktutil

ktutil: lslot KVNO Principal---- ---- ---------------------------------------------------------------------ktutil: rkt /etc/krb5.keytabktutil: lslot KVNO Principal---- ---- ---------------------------------------------------------------------   1 1 host/[email protected]   2 1 host/[email protected]   3 1 host/[email protected]   4 1 host/[email protected]

Kerberos - Konfiguration eines Dienstes am Beispiel SSH• Damit man per Kerberos über OpenSSH einloggen kann, muss man einen Principal host/FQDN@REALM

mit zufälligem Schlüssel erzeugen.

• Dieser Schlüssel muss dann in eine keytab-Datei exportiert werden, damit OpenSSH ihn verwendenkann. Die Standard-keytab-Datei, die Applikationen verwenden, wenn nichts anderes angegeben ist,ist /etc/krb5.keytab.

• Anschließend muss der SSH-Server noch umkonfiguriert werden, damit die Authentifikation viaKerberos auch erlaubt ist. Dies wird mittels der Optionen KerberosAuthentication undGSSAPIAuthentication bewerkstelligt.

Die erste Option sollte eigentlich nicht verwendet werden, weil hier das Passwort über die Leitungan den SSH-Server geschickt wird und der SSH-Server versucht, den Benutzer mit dem Passwort amKerberos-Server zu authentifizieren.

Bei der zweiten Option muss sich der Benutzer lokal am Kerberos-Server authentifizieren und dasTGT wird dann benutzt, um ein entsprechendes Serviceticket für den SSH-Server zu bekommen.

• Mittels der ssh-Option -K können die Tickets vom Client-Cache auch am Server verwendet werden.

Kerberos - Konfiguration einer Vertrauensstellung• Um Dienste eines anderen Realms benutzen zu können, muss eine Vertrauensstellung hergestellt

werden.

• Wie erwähnt, müssen für eine bidirektionale Vertrauensstellung Principals der Form krbtgt/A@B undkrbtgt/B@A in beiden Realms angelegt werden.

• Zum Anlegen dieser Principals verwendet man auf beiden KDCs am besten kadmin.local undmöglichst lange, zufällige Passwörter (aber nicht die Option -randkey).

• Sobald beide KDCs konfiguriert sind, funktioniert das Verwenden der Dienste im jeweils anderenRealm.

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 8 von 24

Kerberos - Zusammenfassung Konfiguration• Pakete für die Serverdienste installieren, entsprechende Werte bei der Installation eingeben

• Realm mittels krb5_newrealm erzeugen

• In /etc/krb5kdc/kadm5.acl eine Zeile */admin * für die Administration über kadmin hinzufügenund Administrationsserver neu starten

• In /etc/krb5.conf für alle beteiligten Realms im Abschnitt „[realms]“ die Adressen der Serverhinterlegen und im Abschnitt „[domain_realm]“ die nötigen Mappings Domain-Realm eintragen

• Principals für Benutzer, Hosts und Dienste anlegen sowie für etwaige Vertrauensstellungen

Kerberos - Einbindung in die Authentifizierung• Bis jetzt haben wird die Kerberos-Authentifizierung immer alleine betrachtet. D.h. um ein TGT zu

bekommen, musste immer kinit verwendet werden.

• Ist Kerberos aber einmal konfiguriert, so können die Benutzer natürlich auch über ihr Kerberos-Passwort authentifiziert werden.

• Die einfachste Möglichkeit, dies zu bewerkstelligen, ist mittels des PAM-Moduls pam_krb5, welchesdurch das Paket libpam-krb5 installiert werden kann. Nach der Installation wird automatisch diePAM-Konfiguration aktualisiert und pam_krb5 aktiviert, wodurch die Authentifizierung über dasKerberos-Passwort möglich gemacht wird.

• Loggt sich dann ein Benutzer mit seinem Kerberos-Passwort ein, so wird dann auch einentsprechender Ticket-Cache erstellt, so, wie wenn kinit aufgerufen worden wäre.

• Wird pam_krb5 verwendet, so ist auch die Aktivierung von „KerberosAuthentication“ im SSH-Daemon nicht mehr nötig, da beide die selbe Aufgabe erfüllen.

LDAP• Das Leightweight Directory Access Protocol (LDAP) ist ein Protokoll zur Abfrage von Daten eines

Verzeichnisdienstes. Die aktuelle Version LDAPv3 ist in den RFCs 4510 bis 4519 definiert.

• Ein LDAP-Server ist ein Verzeichnisdienst (Directory Server), der über LDAP abgefragt werden kannund dessen interne Struktur der LDAP-Spezifikation entspricht.

• Das LDAP-Protokoll erlaubt auch die Anmeldung (LDAP-Bind) über ein Passwort oder mittels SASLan einen LDAP-Server sowie Suchabfragen bzw. Änderungsanfragen.

• Bekannte Implementierungen von LDAP-Servern sind OpenLDAP, Apache Directory Server, 389Directory Server (von RedHat) und Microsoft Active Directory.

LDAP - DIT und DN• Ein LDAP-Server speichert zusammengehörige Daten in LDAP-Objekten, die ihrerseits hierarchisch

in einer Baumstruktur, dem Directory Information Tree (DIT), angeordnet sind.

• Die LDAP-Objekte können über den sogenannten Distinguished Name (DN) eindeutig referenziertwerden.

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 9 von 24

Jedes Objekt besitzt einen auf seiner Hierarchieebene eindeutigen Relative Distinguished Name(RDN). Die Zusammensetzung des RDNs eines Objekts mit dem DN seines übergeordneten Objekts(getrennt durch einen Beistrich) ist dann der eindeutig DN des Objekts.

Ein Beispiel für einen DN ist cn=admin,dc=ict, wobei cn=admin der RDN ist und dc=ict der DN desübergeordneten Objekts.

LDAP - Schema• Die Struktur des DIT wird durch ein genormtes, erweiterbares LDAP-Schema festgelegt.

Erweiterbar bedeutet, dass auch im Nachhinein neue Schema zum DIT hinzugefügt werden können.

• In einem Schema werden Objekt-Klassen und deren Attribute definiert.

• Eine Objekt-Klasse fasst eine Menge von Attributen zusammen und definiert auch, welche Attributezwingend vorhanden sein müssen bzw. welche optional sind. Weiters ist über Objekt-Klassenfestgelegt, wie die Hierarchie aussehen muss, i.e. welche Objekte welche Sub-Objekte haben dürfen.

• Für jedes Attribut einer Objekt-Klasse ist festgelegt, welcher Syntax es folgen muss (z.B. ob der Werteine Ganzzahl oder eine Zeichenfolge sein muss), wie es verglichen werden kann und ob es ein odermehr Werte haben darf.

• Jedem LDAP-Objekt ist eine strukturelle Objekt-Klasse zugeordnet (die „Hauptklasse“) und eventuellzusätzliche Hilfsklassen. Diese Objekt-Klassen bestimmen, welche Attribute das Objekt haben mussbzw. welche es zusätzlich haben kann.

LDAP - Schema - Beispiel Attribut und Objekt-Klasseattributetype ( 2.5.4.35 NAME 'userPassword'       DESC 'RFC2256/2307: password of user'       EQUALITY octetStringMatch       SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{128} )

objectclass ( 2.5.6.6 NAME 'person'        DESC 'RFC2256: a person'        SUP top STRUCTURAL        MUST ( sn $ cn )        MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )

• Die Zeichenfolgen „2.5.4.35“, „2.5.6.6“ und „1.3.6.1.4.1.1466.115.121.1.40“ sind Object Identifier(OIDs), die eindeutig ein Attribut, eine Attributsyntax oder eine Objekt-Klasse beschreiben.

• Beim Attribut „userPassword“ ist angegeben, welcher Syntax es folgen muss und wie es mit Wertenverglichen werden kann. Wäre zusätzlich noch ‚SINGLE-VALUE‘ angegeben, so dürfte das Attributenur einmal in einem Objekt vorkommen.

• Die Objekt-Klasse „person“ ist von „top“ abgeleitet. Objekte dieser Klasse müssen die Attribute „sn“und „cn“ besitzen, können optional aber auch noch ein paar andere besitzen.

LDAP - Wichtige Objekt-Klassen und Attribute• Die folgenden Objekt-Klassen und Attribute trifft man häufig an:

• dcObject: Domain-Komponente mit dem Attribut „dc“

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 10 von 24

• organization: Organisation mit den Attributen „o“ (Name), „street“ (Straßenname), „postalCode“ (PLZ), …

• organizationalUnit: Organisationseinheit mit den Attributen „ou“ (Name) und sonst dengleichen Attributen wie für Organisationen

• person → organizationalPerson → inetOrgPerson (Hierarchie von Objekt-Klassen): Person mitden Attributen „sn“ (Nachname), „cn“ (Common Name), „userPassword“ (Anmeldepasswort),„mail“ (E-Mailadresse), …

• posixAccount: POSIX-Benutzerkonto mit den Attributen „uid“ (Benutzername), „uidNumber“(UID), „gidNumber“ (GID), „loginShell“ (Shell), …

• posixGroup: POSIX-Gruppe mit den Attributen „cn“, „gidNumber“ (GID der Gruppe) und„memberUid“ (Benutzername eines Gruppenmitglieds)

LDAP - LDAP Data Interchange Format (LDIF)• Objekte eines LDAP-Verzeichnisses können mittels LDAP Data Interchange Format (LDIF) als

ASCII-Text dargestellt werden.

• LDIF-Dateien können zwei Arten von Informationen darstellen: Entweder eine Menge von LDAP-Objekten oder eine Menge von Änderungseinträgen.

• Die Syntax von LDIF ist relativ einfach: Attribute werden durch Doppelpunkte getrennt von denWerten geschrieben, Kommentare beginnen mit einem Hash-Zeichen und eine Leerzeile trennteinzelne Einträge.

• Achtung: Die Werte dürfen nur ASCII-Zeichen (ohne NUL, CR und LF) enthalten und nicht mit „<“oder „:“ anfangen, damit sie direkt verwendet werden können. Ansonsten müssen statt einemDoppelpunkt zwei Doppelpunkte verwendet und der Wert Base64-kodiert werden.

LDAP - LDIF - Beispieldatei mit Objekten# ictdn: dc=ictobjectClass: topobjectClass: dcObjectobjectClass: organizationo: ictdc: ict

# admin, ictdn: cn=admin,dc=ictobjectClass: simpleSecurityObjectobjectClass: organizationalRolecn: admindescription: LDAP administrator

LDAP - LDIF - Änderungseinträge• Bei Änderungseinträgen im LDIF-Format wird zuerst das Objekt, das geändert werden soll, über den

DN angegeben und dann über das Attribut „changetype“ die Aktion.

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 11 von 24

• Die Aktion „add“ fügt einen neuen Eintrag zum DIT hinzu. Die Attribute des Eintrags folgen direkt inden nächsten Zeilen:

dn: ou=users,dc=ictchangetype: addobjectclass: organizationalUnitou: usersdescription: Bereich für die Benutzer

• Die Aktion „delete“ löscht einen Eintrag aus dem DIT:

dn: ou=users,dc=ictchangetype: delete

LDAP - LDIF - Änderungseinträge Fortseztung• Mittels der Aktion „modify“ kann ein Eintrag modifiziert und Attribute hinzugefügt, geändert oder

gelöscht werden. Was gemacht werden soll, wird über die Attribute „add“, „delete“ und „replace“angegeben, wobei der Wert immer der Name des Attributs ist, auf den sich die Aktion bezieht.

Mehrere Anweisungen für ein Objekt können durch eine Zeile bestehend aus einem Bindestrich voneinander getrennt werden.

dn: ou=users,dc=ictchangetype: modifyadd: telephoneNumbertelephoneNumber: +43 1 4277 50639telephoneNumber: +43 664 60277 50639-replace: descriptiondescription: Neue Beschreibung-delete: postalCode

LDAP - Suchanfragen• Für das Durchführen von Suchanfragen wird eine spezielle Filtersyntax, die in RFC4515 definiert

ist, benutzt.

• Ein einfacher Filter hat die Form (Attribut Operator Wert).

• Wird das Attribut weggelassen, so trifft der Filter auf alle Attribute zu.

• Der Operator kann „=“, „>=“, „<=“ oder „~=“ (ungefähr gleich) sein.

• Wird als Operator „=“ verwendet, so kann im Wert das Zeichen „*“ als Platzhalter benutztwerden.

• Weiters können die Filter logisch verknüpft werden:

• (!(Filter)) → negierter Filter muss zutreffen• (&(Filter)(Filter)(...)) → alle Filter müssen zutreffen• (|(Filter)(Filter)(...)) → einer der Filter muss zutreffen

• Die Filtersyntax ist noch mächtiger als hier gezeigt, aber meistens kommt man mit dem

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 12 von 24

Beschriebenen aus.

LDAP - Beispiele für Suchanfragen• (givenName=Thomas)

Objekte, bei denen das Attribut „givenName“ den Wert „Thomas“ hat

• (!(givenName=Thomas))Objekte, bei denen das Attribut „givenName“ nicht den Wert „Thomas“ hat

• (sn=*)Objekte, bei denen das Attribut „sn“ irgendeinen Wert hat

• (givenName=*ris*)Objekte, bei denen im Attribut „givenName“ irgendwo der Wert „ris“ vorkommt

• (&(objectClass=posixAccount)(|(uid=leitner)(sn=*leitner*)))Objekte, deren Attribut „objectClass“ den Wert „posixAccount“ hat und entweder „uid“ den Wert„leitner“ hat oder „sn“ den Wert „leitner“ enthält.

OpenLDAP• Der Standard-LDAP-Server für Linux ist OpenLDAP. Dieser LDAP-Server wird schon seit fast 20

Jahren entwickelt, ist schnell, weit verbreitet und sehr stabil/gut getestet.

• OpenLDAP kann zum Speichern der Daten sehr viele verschiedene Backends verwenden (z.B.Berkeley DB, LDIF, SQL, LMDB, LDAP, …). Standardmäßig wird derzeit LMDB verwendet.

• Die eingebaute Replikation erlaubt den Betrieb mehrer LDAP-Server mit den gleichen Daten, was dieVerfügbarkeit erhöht. Dabei können verschiedene Replikationsarten verwendet werden, z.B. eineMaster/Slave- oder eine Multi-Master-Konfiguration.

• OpenLDAP hat noch weitere Funktionalitäten, z.B. können Anfragen an den Server über Moduledurch sogenannte Overlays dynamisch geändert werden.

Links: OpenLDAP Administrationshandbuch, Ubuntu OpenLDAP Server Installation/Konfiguration,OpenLDAP Installation von Spinlock Solutions

OpenLDAP - Clientprogramme• Die CLI-Programme von OpenLDAP zur Kommunikation mit einem LDAP-Server können mittels des

Pakets ldap-utils installiert werden. Diese Programme werden auch zur Konfiguration einesOpenLDAP-Servers gebraucht.

• Die wichtigsten dieser Programme sind ldapmodify (Hinzufügen, Ändern oder Löschen vonObjekten), ldapsearch (Durchsuchen des Verzeichnisses), ldapadd (Hinzufügen eines Objekts) undldapdelete (Löschen eines Objekts).

• Die folgenden Optionen werden von all diesen Programmen unterstützt:

• -H → Server-URI (z.B. „ldapi://“ oder „ldap://host95.ict“)• -Y EXTERNAL → Externe SASL-Authentifizierung verwenden, nötig für „ldapi://“• -x → Einfache Authentifizierung mit Passwort statt SASL verwenden• -D Bind-DN → DN zur Authentifizierung am Server

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 13 von 24

• -W → Passwort für Authentifizierung• -Z → Verwendung von StartTLS (bei -ZZ wird StartTLS erzwungen)• -f Datei → Verwenden der Datei anstatt der Standardeingabe

OpenLDAP - Clientprogramme - ldapadd, ldapmodifyldapadd - Erstellt ein neues Objekt am LDAP-Server.

» Ist eigentlich nur eine Aufrufform von ldapmodify mit der Option -a.» Eine über -f angegebene LDIF-Datei muss eine Liste von LDAP-Objekten beinhalten.» $ ldapadd -D cn=admin,dc=ict -W << EOF

> dn: ou=users,dc=ict> objectClass: organizationalUnit> ou: users> EOFEnter LDAP Password: PASSWORT EINGEBENadding new entry "ou=users,dc=ict"

ldapmodify - Modifiziert ein Objekt am LDAP-Server.» Eine über -f angegebene LDIF-Datei muss eine Liste von Änderungsanfragen beinhalten.» $ ldapmodify -D cn=admin,dc=ict -W << EOF

> dn: ou=users,dc=ict> changetype: modify> add: description> description: Bereich fuer Benutzer> EOFEnter LDAP Password: PASSWORT EINGEBENmodifying entry "ou=users,dc=ict"

OpenLDAP - Clientprogramme - ldapdelete, ldapsearchldapdelete - Löscht ein Objekt vom LDAP-Server.

» Als Argument muss der DN des zu löschenden Objekts übergeben werden.» $ ldapdelete -D cn=admin,dc=ict -W ou=users,dc=ict

Enter LDAP Password: <PASSWORT EINGEBEN>

ldapsearch - Sucht am LDAP-Server nach Objekten.» Als Argumente können ein Suchfilter und danach die auszugebenden Attribute angegeben werden.» Optionen: -b → Suchbasis (Angabe erforderlich)» $ ldapsearch -b dc=ict -x -LLL

dn: dc=ictobjectClass: topobjectClass: dcObjectobjectClass: organizationo: ictdc: ict

dn: cn=admin,dc=ictobjectClass: simpleSecurityObjectobjectClass: organizationalRolecn: admindescription: LDAP administrator

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 14 von 24

OpenLDAP - Clientprogramme - Konfiguration• Über die Datei /etc/ldap/ldap.conf können einige Standardwerte für die Clientprogramme gesetzt

werden (diese Datei wird üblicherweise auch von anderen Programme respektiert):

• URI: Die abzufragenden Server (analog zur Option -H)• BASE: Die Standardsuchbasis (analog zur Option -b)• BINDDN: Der Standard-DN für die Authentifizierung (analog zur Option -D)• TIMEOUT: Anzahl an Sekunden, nachdem eine Anfrage abbrechen soll• TLS_CACERT: Die Datei mit den CA-Zertifikaten• TLS_REQCERT: Legt fest, ob das Zertifikat des Server überprüft werden soll:

• never: Das Zertifikat wird nicht angefragt und auch nicht überprüft.• allow: Das Zertifikat wird angefragt, aber ein fehlendes oder ungültiges Zertifikat wird

ignoriert.• try: Das Zertifikat wird angefragt und ein fehlendes wird ignoriert, aber bei einem ungültigen

wird abgebrochen.• demand: Das Zertifikat wird angefragt und bei einem fehlenden oder ungültigen wird

abgebrochen.

OpenLDAP - Installation• OpenLDAP kann unter Ubuntu mittels des Pakets slapd (stand-alone LDAP daemon) installiert

werden.

• Bei der Installation wird ein DIT mit der Domain des Rechners als Wurzel angelegt (z.B. dc=ict) undein zugehöriges Administratorkonto (z.B. cn=admin,dc=ict), dessen Passwort bei der Installationeingegeben werden muss. Dieser DIT kann dann über dieses Konto administriert werden.

• Die Konfigurationsdateien für den Server befinden sich in /etc/ldap/slapd.d im LDIF-Format.Obwohl es so aussieht, als könnte man diese direkt dort ändern, darf das nicht gemacht werden! Esist gedacht, die Konfiguration mittels LDAP-Anfragen durchzuführen!

• Früher gab es auch die Möglichkeit, den LDAP-Server über die Datei /etc/ldap/slapd.conf zukonfigurieren. Diese Art der Konfiguration sollte aber nicht mehr verwendet werden.

OpenLDAP - Konfiguration• Detailierte Informationen zur Konfiguration finden sich im Administrationshandbuch.

• Die Schema-Definitionen core, cosine, nis und inetorgperson sind standardmäßig aktiviert.Weitere können bei Bedarf hinzugefügt werden (siehe Dateien im Verzeichnis /etc/ldap/schema/).

• Die Konfiguration des Servers wird in einem speziellen DIT mit der Wurzel cn=config durchgeführt(siehe man 5 slapd-config).

• Im DN cn=config wird die allgemeine Serverkonfiguration festgelegt.• In Einträgen unterhalb von cn=schema,cn=config befinden sich die benutzten Schema-

Definition.• Einträge der Form olcDatabase=BACKEND,cn=config definieren je einen DIT und legen dessen

Konfiguration fest.

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 15 von 24

• Bei Änderungsanfragen über LDAP werden die Änderungen automatisch aktiv und zusätzlich nach/etc/ldap/slapd.d gesichert.

• Wichtig: Konfigurationsänderungen müssen als Benutzer root und den CLI-Optionen -Y EXTERNAL-H ldapi:/// gemacht werden, da standardmäßig kein Passwort für den Konfigurations-DIT gesetztist!

OpenLDAP - Beispiel für DIT-Konfiguration$ ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config olcDatabase=mdbSASL/EXTERNAL authentication startedSASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=authSASL SSF: 0dn: olcDatabase={1}mdb,cn=configobjectClass: olcDatabaseConfigobjectClass: olcMdbConfigolcDatabase: {1}mdbolcDbDirectory: /var/lib/ldapolcSuffix: dc=ictolcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou s auth by * noneolcAccess: {1}to dn.base="" by * readolcAccess: {2}to * by * readolcLastMod: TRUEolcRootDN: cn=admin,dc=ictolcRootPW: {SSHA}gA82cCLDItWFzpXz4Ujt/8TVwUCnlrpRolcDbCheckpoint: 512 30olcDbIndex: objectClass eqolcDbIndex: cn,uid eqolcDbIndex: uidNumber,gidNumber eqolcDbIndex: member,memberUid eqolcDbMaxSize: 1073741824

OpenLDAP - Konfiguration von TLS• Standarmäßig läuft der Server ohne Verschlüsselung auf Port 389 (Zugriff via ldap://-URL).

Außerdem ist er lokal am Server auch mittels IPC erreichbar (Zugriff via ldapi://-URL).

• Um LDAPS auf Port 636 oder STARTTLS verwenden zu können, müssen zuerst die nötigenZertifikate erstellt bzw. angefordert werden. Anschließend müssen im Konfigurations-DIT unter demDN „cn=config“ folgende Attribute gesetzt werden:

• olcTLSCACertificateFile: Der Pfad zum CA-Zertifikat

• olcTLSCertificateFile: Der Pfad zum Zertifikat des Servers, das gegenüber den Clients verwendetwird

• olcTLSCertificateKeyFile: Der Pfad zum privaten Schlüssel für das Zertifikat des Servers

• Weiters muss in /etc/default/slapd bei SLAPD_SERVICES den Wert ldaps:/// hinzugefügt und derServer neu gestartet werden.

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 16 von 24

OpenLDAP - Konfiguration von TLS - Fortsetzung• Um die Verwendung von TLS zu erzwingen, kann die Konfigurationsoption olcSecurity mit dem Wert

„tls=1“ verwendet werden. Dann können sich Clients nur mehr per TLS mit dem Server verbinden.Achtung: Diese Option sollte nicht direkt auf „cn=config“ angewendet werden, sondern auf den DNeiner DIT-Datenbank!

• Zum Konfigurieren von TLS kann folgende LDIF-Datei verwendet werden (Werte entsprechendanpassen):

dn: cn=configadd: olcTLSCACertificateFileolcTLSCACertificateFile: /etc/ssl/certs/ca-certificate.pem-add: olcTLSCertificateFileolcTLSCertificateFile: /etc/ssl/certs/ldap-certificate.pem-add: olcTLSCertificateKeyFileolcTLSCertificateKeyFile: /etc/ssl/private/ldap-certificate.key-

• Zusätzlich könnte man den Server so konfigurieren, dass er auch Client-Zertifikate verlangt(Attribute olcTLSVerifyClient, olcTLSCRLFile und olcTLSCRLCheck).

OpenLDAP - Zugriffskontrolle• Die Standardkonfiguration erlaubt recht breiten Zugriff auf den während der Installation erstellten

DIT. Ohne Authentifizierung können z.B. alle Attribute bis auf userPassword und shadowLastChangegelesen werden.

• Im Produktivbetrieb sollte der Zugriff eingeschränkt werden, um größtmögliche Sicherheit undDatenschutz zu gewähren.

• Die Zugriffskontrolle wird über das Attribut olcAccess gesteuert, welches mehrfach vorkommenkann. Für die vollständige Syntax und alle Möglichkeiten siehe man 5 slapd.access.

• Da die Reihenfolge wichtig ist, sollten die Werte mit dem Präfix {Nummer} versehen werden (beiLDAP-Objekten gibt es keine festgelegte Attributordnung).

• Der Wert von olcAccess hat vereinfacht die Form to <Was> [ by <Wem> <Zugriffsrechte> ]+.

• Beim Überprüfen der Zugriffsrechte werden die Attribute nach dem Präfix sortiert und sobaldsowohl <Was> als auch <Wer> zutrifft, werden die entsprechenden Zugriffsrechte angewandt.

OpenLDAP - Zugriffskontrolle - Was• Über <Was> wird festgelegt, auf welche Objekte sich die Zugriffsrechte beziehen.

• Mögliche Werte dafür sind:

• dn.<Bereich>=<Pattern>

Die Objekte werden auf Grund des DNs ausgewählt. <Pattern> ist ein Ausdruck, in dem auch dieWildcard ‚*‘ vorkommen kann. <Bereich> gibt an, ob genau das Objekt ausgewählt wird (dn.base), alle direkten Einträge unterhalb (dn.one), alle Einträge im Unterbaum (dn.subtree)

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 17 von 24

oder alle Einträge unterhalb (dn.children).

• filter=<Filter>

Die Objekte werden auf Grund des LDAP-Filters ausgewählt.

• attrs=<Attributlist>

Die Zugriffsrechte beziehen sich auf die kommaseparierte Liste von Attributen.

OpenLDAP - Zugriffskontrolle - Wem• Über <Wem> wird festgelegt, auf welche Clients, meist Benutzer, sich die Zugriffsrechte beziehen.

• Einige mögliche Werte dafür sind:

• dn.<Bereich>=DN

Funktioniert analog zur ähnlichen Angabe bei <Was> und wählt einen Client über einen DN aus.

• *

Wählt alle Clienten aus.

• anonymous

Wählt alle Clienten aus, die sich nicht authentifiziert haben.

• users

Wählt alle Clienten aus, die sich authentifiziert haben.

• self

Wählt das Objekt selbst aus, das über <Was> festgelegt wurde.

OpenLDAP - Zugriffskontrolle - Zugriffsrechte• Über <Zugriffsrechte> werden schließlich die Zugriffsrechte festgelegt.

• Mögliche Werte dafür sind:

• none: Kein Zugriff, auch keine Fehlermeldung (=0)• disclose: Kein Zugriff, aber Fehlermeldung (=d)• auth: Erlaubnis zum Zugriff während der Authentifizierung (=dx)• compare: Erlaubnis zum Vergleichen (=dxc)• search: Erlaubnis zum Verwenden von Suchfiltern (=dxcs)• read: Erlaubnis zum Lesen von Einträgen (=dxcsr)• write: Erlaubnis zum Schreiben (=dxcsrw)• manage: Vollzugriff (=dxcsrwm)

• Wie man an den Rechten sieht, erlauben höhere Rechte automatisch alle niederen Rechte, d.h. readerlaubt auch automatisch search, compare, auth und disclose.

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 18 von 24

OpenLDAP - Zugriffskontrolle - Beispiele• to * by * read

Alle haben Lesezugriff.

• to attr=userPassword by self write by anonymous auth by * none

Clients, die als das Objekt authentifiziert sind, können das Attribut userPassword schreiben,anonyme Benutzer können sich gegen das Attribut authentifizieren, alle anderen haben keinenZugriff.

• to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage

Ein über -Y EXTERNAL authentifizierter Benutzer mit der UID=0 und GID=0 hat Vollzugriff auf alleEinträge.

OpenLDAP - Integration mit Kerberos• Um Clients via Kerberos am LDAP-Server zu authentifizieren, muss das Paket libsasl2-modules-

gssapi-mit installiert werden. Dieses stellt die GSSAPI/Kerberos-Authentifizierung für SASL zurVerfügung.

• Als nächstes muss ein Principal ldap/FQDN@REALM für das LDAP-Service angelegt werden und in die/etc/krb5.keytab exportiert werden (Achtung: Darauf achten, dass der Server Zugriff hat – er läuftunter dem Benutzer „openldap“).

• Anschließend wird der LDAP-Server neugestartet. Hat alles geklappt, so sollte nun GSSAPI alsunterstützte SASL-Methode in der Root DSE auftauchen:

$ ldapsearch -x -b '' -s base -LLL supportedSASLMechanismsdn:supportedSASLMechanisms: SCRAM-SHA-1supportedSASLMechanisms: GS2-IAKERBsupportedSASLMechanisms: GS2-KRB5supportedSASLMechanisms: GSSAPIsupportedSASLMechanisms: GSS-SPNEGOsupportedSASLMechanisms: DIGEST-MD5supportedSASLMechanisms: CRAM-MD5supportedSASLMechanisms: NTLM

OpenLDAP - Integration mit Kerberos - Fortsetzung• Zum Zwecke der Authentifizierung wird der Principal BENUTZER/INSTANZ@REALM auf einen DN

uid=BENUTZER/INSTANZ,cn=REALM,cn=gssapi,cn=auth abgebildet. Achtung: Der Teil cn=Realm wirdweggelassen, falls es das Standard-Realm ist.

• Mit Hilfe des Befehls ldapwhoami kann geprüft werden, welcher DN aktuell zugeordnet ist.

• Um über Kerberos angemeldete Clients entsprechenden Zugriff auf Objekte zu geben, muss manderen DNs entweder direkt via olcAccess den Zugriff erlauben oder man bildet sie auf andere DNsab, die bereits Zugriff haben.

• Die Abbildung auf einen DN erfolgt über die Konfigurationsoption olcAuthzRegexp. Der Wert hat dieForm REGEX ERSETZUNG. Im Ersetzungsstring können auch Gruppenreferenzen $1, $2, etc. verwendet

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 19 von 24

werden. Nach Änderungen muss der Server neu gestartet werden.

Beispiel für die Abbildung aller */[email protected] Principals auf das bei der Installationangelegte DIT-Administrator-Objekt:

olcAuthzRegexp: uid=.*?/admin(,cn=HOST95.ICT)?,cn=gssapi,cn=auth cn=admin,dc=ict

OpenLDAP - Kerberosdatenbank, Sudoers, Autofs• Möchte man zur Authentifizierung Kerberos anstatt LDAP verwenden, so kann man einfach das

entsprechende PAM-Modul dafür verwenden. Allerdings muss man dann weiterhin zwei getrennteDatenbanken (LDAP und Kerberos) vorhalten bzw. synchronisieren.

• Die bessere Methode ist für Kerberos als Datenbankbackend LDAP zu verwenden. Dann können dieSchlüssel für Benutzer, Computer und Services im LDAP-Verzeichnis direkt bei den entsprechendenLDAP-Objekten gespeichert werden. Eine Anleitung für die Einrichtung findet sich im UbuntuKerberos and LDAP Guide und im Kerberos Admin Guide von MIT Kerberos.

• Weiters ist es möglich, sowohl die sudo-Konfiguration als auch die autofs-Konfiguration in das LDAP-Verzeichnis zu verlagern. Dazu müssen die entsprechenden Schema-Dateien in den LDAP-Servergeladen und dann die nötigen Objekte angelegt werden.

SSSD - System Security Services Daemon• SSSD ist ein Daemon, der Zugang zu auf entfernten Ressourcen gespeicherten

Identitätsinformationen und Authentifizierungsmöglichkeiten ermöglicht. Üblicherweise ist das dieAnbindung an einen LDAP- bzw. Kerberos-Server.

• Es ist auch möglich, SSSD so zu konfigurieren, dass diese Informationen am lokalen Systemgecached werden und damit auch bei Ausfall des Netzwerkes gearbeitet werden kann.

• Weiters können mehrer Verwaltungsdomains verwendet werden, sprich, Informationen aus z.B.mehreren LDAP-Servern.

• Damit kann SSSD statt den Paketen libpam-krb5, libnss-ldap und libpam-ldap verwendet werden undhat den Vorteil, dass alles über einen Daemon läuft und an einer Stelle konfiguriert werden kann.

• Zur Verwendung muss das Paket sssd installiert werden. Zusätzlich sollten auch noch die Paketesssd-ldap (für die LDAP-Anbindung) bzw. sssd-krb5 (für die Kerberos-Anbindung) installiert werden.

SSSD - Konfiguration - Allgemein• SSSD wird über die Datei /etc/sssd/sssd.conf konfiguriert (siehe man 5 sssd.conf). Damit SSSD

diese Datei akzeptiert, müssen der Besitzer und der Gruppenbesitzer „root“ und die Rechte „0600“sein.

• Die Syntax orientiert sich am INI-Format, d.h. Sektionen werden mit „[Name]“ eingeleitet, darauffolgen Schlüssel-Wert-Paare im Format „Schlüssel = Wert“. Kommentarzeilen sind alle Zeilen, die miteinem Hash-Zeichen beginnen.

• In der Sektion „[sssd]“ werden die globalen Einstellungen konfiguriert:

• config_file_version: Gibt die Version der Datei an und muss vorhanden sein mit dem Wert „2“.

• services: Gibt die Services an, die verwaltet werden sollen. Für uns interessant sind „pam“ und

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 20 von 24

„nss“, es gäbe z.B. auch noch „sudo“ und „ssh“.

• domains: Enthält die Namen der zu verwenden Domains. Jede Domain muss in einer eigenenSektion konfiguriert werden.

• In den Sektionen „[nss]“ und „[pam]“ können allgemeine Einstellungen zu diesen Serviceskonfiguriert werden. Bei „[nss]“ könnte hier z.B. der Wert des Home-Verzeichnisses eines Benutzersmodifiziert werden.

SSSD - Konfiguration - Domains• In den Domain-Sektionen können die einzelnen Verwaltungsdomains konfiguriert werden. Diese

Sektionen haben als Namen „[domain/DOMAIN_NAME]“.

• Wichtige Optionen sind:

• id_provider: Gibt an, von wo die Identitätsinformationen geholt werden. Mögliche Werte sind z.B.„proxy“ (über einen NSS-Provider) und „ldap“ (aus einem LDAP-Verzeichnis).

• auth_provider: Gibt an, wie die Authentifizierung gemacht wird. Mögliche Werte sind z.B. „proxy“(für die Weiterleitung an ein PAM-Modul), „ldap“ (LDAP-Authentifizierung) und „krb5“ (Kerberos-Authentifizierung).

• chpass_provider: Gibt an, wie Passwortänderungen gemacht werden. Mögliche Werte sind z.B.„proxy“ (für die Weiterleitung an ein PAM-Ziel), „ldap“ (um ein LDAP-Passwort zu ändern) und„krb5“ (um ein Kerberos-Passwort zu ändern).

• Die einzelnen Provider müssen natürlich noch entsprechend konfiguriert werden.

• An Benutzernamen einer Domain kann optional „@DOMAIN_NAME“ angehängt werden, damit SSSDnur diese eine Domain benutzt. Ansonsten wird die erste Domain, in der der Benutzernamevorkommt, verwendet.

SSSD - Konfiguration - LDAP• SSSD kann LDAP für Identitätsinformationen, Authentizifierung und Passwortänderungen benutzen.

• Die Informationen im LDAP müssen entweder dem RFC2703, RFC2703bis oder dem Active DirectorySchema folgen. Allerdings können über Optionen alle benötigten Attribute auf andere Attributeabgebildet werden. Damit könnten z.B. das Problem umgangen werden, wenn der Benutzernamenicht wie erwartet im Attribut „uid“, sondern im Attribut „username“ gespeichert ist.

• Die wichtigsten Optionen sind (siehe man 5 sssd-ldap):

• ldap_uri: Der oder die URIs der LDAP-Server.• ldap_search_base: Die Suchbasis (meist die Wurzel des abzufragenden DIT)• ldap_default_bind_dn: Der DN, mit dem sich SSSD gegen den LDAP-Server authentifizieren soll• ldap_default_authtok: Das Passwort für den DN

• Wichtig: SSSD verweigert die Authentifizierung, wenn die Verbindung zum LDAP-Server nichtgeschützt ist, z.B. durch TLS.

• Es ist natürlich auch möglich, SSSD über GSSAPI (Kerberos) am LDAP-Server zu authentifizieren.

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 21 von 24

SSSD - Konfiguration - Kerberos, Proxy• SSSD kann Kerberos für Authentifizierung verwenden.

Die wichtigsten Optionen sind (siehe man 5 sssd-krb5):

• krb5_server: Der oder die Kerberos-Server• krb5_realm: Der Name des Kerberos-Realms• krb5_keytab: Die keytab-Datei, die zur Validierung der Tickets verwendet wird (Default ist

/etc/krb5.keytab; SSSD muss Zugriff darauf haben)

• Der „proxy“-Provider für SSSD erlaubt die Kombination mit beliebigen NSS- bzw. PAM-Ziele. Es gibtnur zwei Optionen:

• proxy_lib_name: Der Name einer NSS-Bibliothek (z.B. „files“)• proxy_pam_target: Ein PAM-Target, an das die Authentifizierung delegiert wird

SSSD - Beispiel: Reine LDAP-Anbindung[sssd]services = nss, pamdomains = ICTconfig_file_version = 2

[domain/ICT]enumerate = trueid_provider = ldapauth_provider = ldapchpass_provider = ldapldap_uri = ldap://localhostldap_search_base = dc=ict

In dieser Konfiguration wird alles über den LDAP-Server abgewickelt.

SSSD - Beispiel: Kerberos mit lokalen Benutzern[sssd]services = nss, pamdomains = HOST95.ICTconfig_file_version = 2

[domain/HOST95.ICT]id_provider = proxyproxy_lib_name = filesauth_provider = krb5krb5_server = host95.ictkrb5_realm = HOST95.ICT

In dieser Konfiguration werden die Identitätsinformationen von den lokalen Dateien geholt und dieAuthentifizierung über Kerberos erledigt.

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 22 von 24

OpenLDAP - Beispielszenario• Der LDAP-Server ist in einer Grundkonfiguration fertig und nun kann das LDAP-Verzeichnis

organisiert, i.e. hierarchisch gegliedert, und mit Objekten befüllt werden. Zum Beispiel könnte manÄste für Organisationseinheiten erstellen und darunter Objekte speichern, die Computer, Benutzerund Gruppen innerhalb dieser Organisationseinheiten beschreiben.

• Im Beispielszenario werden wir zwei Organisationseinheiten, eine für Personen und eine fürGruppen, definieren und dann einen Beispielbenutzer und eine Beispielgruppe hinzufügen.

• Zum Abschluss wird SSSD so eingerichtet, dass sich ein LDAP-Benutzer am System einloggen kann.

OpenLDAP - Beispielszenario - Benötigte Objektedn: ou=users,dc=ictou: usersobjectClass: organizationalUnit

dn: ou=groups,dc=ictou: groupsobjectClass: organizationalUnit

dn: cn=ict-group,ou=groups,dc=ictcn: ict-groupgidNumber: 20000objectClass: posixGroup

dn: cn=ict,ou=users,dc=ictuid: ictuidNumber: 20000gidNumber: 20000cn: ictsn: NesciogivenName: Nomengecos: Nomen NescioobjectClass: inetOrgPersonobjectClass: posixAccountobjectClass: shadowAccountloginShell: /bin/bashhomeDirectory: /home/ict

OpenLDAP - Beispielszenario - Benötigte Objekte• Die Einträge werden mit folgendem Befehl dem Verzeichnis hinzugefügt:

$ ldapadd -x -D cn=admin,dc=ict -W -f /tmp/daten.ldif

• Jetzt muss noch das Passwort für den Benutzer gesetzt werden:

$ ldappasswd -D cn=admin,dc=ict -x -W -S "cn=ict,ou=users,dc=ict"

Achtung: Zuerst wird das zu setzende Passwort zweimal abgefragt, dann erst dasAuthentifizierungspasswort!

• Nun können die Einträge auch abgefragt werden:

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 23 von 24

$ ldapsearch -xLLL -b dc=ict '(uid=ict)'dn: cn=ict,ou=users,dc=ictuid: ictuidNumber: 20000gidNumber: 20000cn: ictsn: NesciogivenName: Nomengecos: Nomen NescioobjectClass: inetOrgPersonobjectClass: posixAccountobjectClass: shadowAccountloginShell: /bin/bashhomeDirectory: /home/ict

OpenLDAP - Beispielszenario - Systemeinbindung• Nachdem im LDAP-Verzeichnis Benutzer und Gruppen definiert sind, werden wir das System so

anpassen, dass diese auch am System aufscheinen (NSS) und Benutzer sich authentifizieren können(PAM).

• Dazu verwenden wir SSSD und passen die Datei /etc/sssd/sssd.conf entsprechend an. FolgenderAbschnitt muss hinzugefügt werden:

[domain/ICT]enumerate = trueid_provider = ldapauth_provider = ldapchpass_provider = ldapldap_uri = ldap://localhostldap_search_base = dc=ict

Anschließend muss noch im Abschnitt „[sssd]“ die Domain aktiviert und der SSSD neu gestartetwerden.

• Zum Testen, ob alles funktioniert hat, kann getent verwendet bzw. das Einloggen getestet werden.

ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-24 22:48 Seite 24 von 24