Kerberos-Authentifizierung

Allgemeines

Je weiter man in sicherheitsrelevante Netzwerke eintaucht, um so öfter begegnet man der Anforderung einer zentralen Benutzer-Authentifizierung. Klar man kann sich jetzt einen eigenen LDAP-Server mit openLDAP aufbauen, Schemata einrichten und mit Inhalten füllen. Wenn aber, wie in vielen Firmen, bereits ein Active Directory vorhanden ist, kann man ja auch gleich diese Möglichkeiten verwenden, oder? Also Kerberos-Utilities installiert, konfiguriert, Benutzer angelegt und los.

Ok, eine vollständige Integration, bei der neue Benutzer automatisch angelegt werden ist das nicht. Aber für die Administration von Linux-Servern über SSH wird das auch nicht unbedingt benötigt. Die Personen, die das System betreuen sind meistens überschaubar oder können z.B. durch Software-Verwaltungen wie Puppet angelegt werden.

Ich beschreibe hier die Einrichtung der Kerberos-Authentifizierung für Ubuntu/Debian. Für RPM-basierte Systeme müssen ggf. die notwendigen Pakete bzw. die Pfade angepasst werden.

Benötigte Pakete

Für Kerberos ist eine Zeitsynchronisation essentiell. Daher ist NTP Pflicht. Zusätzlich natürlich die Kerberos-Utilities:

Konfiguration

NTP

Die Standard-Werte helfen uns in diesem Fall nicht weiter, da es darauf ankommt die gleiche Zeit wie der Kerberos-Server zu haben. Also müssen die vorhandenen Domain-Controller „herhalten“. Das ganze habe ich als sed-Statements zusammengeschrieben, damit ich es jedes Mal einfach auf die NTP-Konfigurationsdatei /etc/ntp.conf anwenden kann.

Backup der ntp.conf anlegen:

Domain-Controller angeben:

NTP-Sed für Debian:

NTP-Sed für Ubuntu:

Kerberos

Nun muss noch die Verbindung zu den Domain-Controllern konfiguriert werden. Die notwendigen Schreibweisen habe ich durch die entsprechenden Umformatierungen bereits eingebaut. Es müssen nur die Werte für WORKGROUP, DOMAIN und DOMAIN-CONTROLLER angegeben werden:

Benutzer anlegen

Wie oben bereits erwähnt wurde lediglich die Verbindung zum Kerberos-Server konfiguriert, damit bestehende Benutzer authentifiziert werden können. Die Benutzer müssen aber weiterhin manuell angelegt werden. Dies muss mit dem Kontonamen aus der Domäne erfolgen:

Um das zu testen, kann man sich jetzt ein Kerberos-Ticket ausstellen lassen:

Fallstricke

Zeitunterschied zu groß

Bei Kerberos darf der Zeitunterschied zwischen Client und Server maximal 5 Minuten sein. Sollte die Anmeldung mal nicht funktionieren unbedingt die Zeitsynchronisation prüfen und ggf. manuell synchronisieren:

Installations-Benutzer kann Passwort nicht ändern

In der Standard-Konfiguration kann der Benutzer, der bei der Installation angelegt wurde, sein Passwort nicht mehr ändern. Grund dafür ist die PAM-Konfiguration, die die Passwortänderung für alle Benutzer aber UID>=1000 an Kerberos weiterleitet. Da der Installationsbenutzer dort aber wahrscheinlich nicht existiert, schlägt die Änderung fehl.

Dies lässt sich aber sehr leicht durch das Austauschen der entsprechenden Zeile ändern:

Damit werden in allen common-Dateien unterhalb von /etc/pam.d/ die uid von 1000 auf 1001 hochgesetzt.

Dadurch wird der Installationsbenutzer wieder nur noch lokal authentifiziert.

Debian in ein Active Directory integrieren

Quelle

Diese Dokumentation ist zu großen Teilen dem Artikel Debian Linux in eine Active Directory Domäne integrieren auf www.administrator.de entnommen. Eine sehr gute Anleitung, die ich hier nur für mich spezialisiert und erweitert habe.

Vorraussetzungen

Zeitsynchronisation (NTP)

Da das Kerberos Protokoll, das der Debian Server nutzen soll um mit dem Active Directory zu kommunizieren, stark von einer exakten Systemzeit abhängt, muss der Debian Server als NTP Client und der Windows Server als NTP Client als auch NTP Server konfiguriert sein, damit die Zeitsynchronität gewährleistet werden kann. Der Windows Server bezieht in unserem Szenario die Systemzeit von einem externen NTP Server, während der Debian Server als NTP Client die Systemzeit vom Windows Server bezieht.

DNS Namensauflösung (Forward Lookup und Reverse Lookup)

Ermitteln der verschiedenen Namen die der Domaincontroller trägt (Netbios, Workgroup, Domänen-Name, Kerberos-Realm) Man kann die NETBIOS- und Workgroup Namen auf dem Server2003 mit dem Befehl

ermitteln. Der Debian Server muss einen Reverse DNS Lookup auf den Domaincontroller machen können, also die IP Adresse in den DNS Namen auflösen können. Testen mit:

In aller Regel gilt z. B. bei einem Domaincontroller namens DC.FIRMA.DE

  • der NETBIOS Name ist „DC“
  • der Workgroup Name ist „FIRMA“
  • der DNS Name ist „DC.FIRMA.DE“
  • der Kerberos Realm ist „FIRMA.DE“
  • der Domänen-Name ist „FIRMA.DE“

Damit die AD-Integration des Linux Servers einwandfrei funktioniert ist es wichtig dass..

  • beide Server (Debian und DC) den Namen des anderen auflösen können
  • Forward-Lookup (nslookup debian.firma.de bzw. nslookup dc.firma.de) als auch
  • Reverse-Lookup (nslookup 192.168.178.140 bzw. nslookup 192.168.178.150)

einwandfrei auf beiden Servern funktionieren!

Debian IP Konfiguration

IP-Konfiguration: /etc/network/interfaces

DNS Konfiguration: /etc/resolv.conf

Interface resetten (nur bei Konsolenverbindung machen!!!)

Berechtigungen im Active Directory

Man benötigt für die AD-Integration ein AD-Benutzerkonto mit entsprechenden Berechtigungen. Dies kann ein Domänenadministrator sein. Es kann jedoch auch ein spezielles Benutzerkonto erstellt werden das die Berechtigung bekommt Objekte im AD anzulegen. Das ist notwendig da der Debian Server selbst ein Computerkonto im Active Directory anlegen muss und auch Berechtigungen braucht um Anfragen an das AD stellen zu können.

Debian Server Konfiguration

Installation Samba, Winbind, NTP, ntpdate, Kerberos und SSH

Installation für Windows Server 2003 Domänen

Unter Ubuntu (10.04 LTS) heißt das Paket libkrb53

Installation für Windows Server 2008 Domänen

Für die Integration des Servers in einen W2k8 Domäne ist zum aktuellen Zeitpunkt (20.05.2010) die Samba-Version des aktuell stabilen Debian Lenny zu alt, da ab Windows Server 2008 nur noch Kerberos und nicht mehr NTLM als Authentifizierung genutzt werden kann. Diese wird aber in der Samba-Version (3.2.5) noch nicht unterstützt. Deswegen müssen für eine Integration in W2k8-Domänen die Pakete aus dem Backport Repository installiert werden.

Dazu die folgende Zeile in die Datei /etc/apt/sources.list einfügen:

Danach ein …

… und mann kann mit dem angepassten Install-Befehl die neueren Versionen installieren:

Die Konfiguration ist die gleiche, wie in 2003-Domänen.

Dienste beenden

Unter Ubuntu (10.04 LTS) heißt der Samba-Dienst anders:

Die Warnmeldung bzgl. upstart kann ignoriert werden.

Backup der Linux Config Dateien

Es ist ratsam zunächst alle Config Dateien auf dem Debian System zu sichern bevor man anfängt sie zu editieren. Wenn man beispielsweise bei der PAM Konfiguration die Config zerschießt ist u. U. keine Anmeldung am System mehr möglich.

Konfiguration der Dienste

Kerberos

Hier eine detailierte Beschreibung möglicher Parameter der krb5.conf

Datei: /etc/krb5.conf

NTP

In der Datei /etc/ntp.conf den Domänencontroller als Zeitserver eintragen:

ntpdate

NTP Dienst starten

Zeitsynchronisation testen

Bei Bedarf Zeitzone ändern

Ich verwende Europe/Berlin.

Winbind

Datei: /etc/samba/smb.conf

Hier eine detailliertere Beschreibung des winbind Dienstes

Hintergrundwissen „idmap“:

Das Linux System hat auch eine lokale Benutzerverwaltung (/etc/passwd). Jeder Benutzer und jede Gruppe benötigt eine eindeutige Kennung.

Im Active Directory sind dies die „SIDs“. Die SID besteht aus dem Domänen-Identifikator und einer RID (Relative Identifier). Jedes Benutzerkonto und jede Gruppe hat eine SID, eine eindeutige Sicherheitskennung.

Da Active Directory und Linux verschiedene Techniken für die Zuordnung von User- und Gruppennamen zu SIDs bzw. UID/GIDs benutzen, ist eine der Aufgaben von winbind, ein Mapping von Active Directory SIDs zu Linux UIDs/GIDs durchzuführen. Diese Zuordnung (welche SID ist zu welcher UID/GID zugeordnet) wird auf dem Linux Server in einer lokalen Datenbank unter /var/lib/samba/winbindd_idmap.tib gespeichert.

Durch den Eintrag „idmap uid = 10000-20000“ wird definiert, dass der Bereich von UID 10000 bis 20000 nicht von der internen Benutzerverwaltung verwendet wird, also für das Mapping von Active Directory SIDs zu Linux UIDs bzw. GIDs verwendet werden soll.

Testen der winbind Config mit

NSSWITCH

Datei: /etc/nsswitch.conf

Hier eine detailliertere Beschreibung der nsswitch Funktionalität

PAM

Datei: /etc/pam.d/common-auth

Hier eine detailliertere Beschreibung der pam.d Konfigurationsdateien

Datei: /etc/pam.d/common-session

Damit bei der ersten Anmeldung am Rechner ein lokales Home-Verzeichnis angelegt wird, kann als erster Eintrag die Zeile

eingetragen werden.

Direkt dahinter sollte noch

stehen, damit der gdm bereits beim ersten Anmeldeversuch beim AD nachfragt.

Die vollständige Datei sieht dann bei mir so aus:

Debian Server in die Domäne integrieren

Checkliste

  • host 192.168.178.140 (Funktioniert der Reverse Lookup?)
  • nslookup dc.firma.de (Funktioniert die DNS Namensauflösung?)
  • ping dc.firma.de (Ist der Domaincontroller erreichbar?)
  • telnet dc.firma.de 445 (Port TCP445 erreichbar?)
  • telnet dc.firma.de 139 (Port TCP139 erreichbar?)
  • ntpq –p (Läuft die Zeitsynchronisation?)
  • dpkg-reconfigure tzdata (Stimmt die Zeitzone?)
  • ps –ef | grep mbd (Testen ob der Dienst läuft – wenn ja, stoppen!)
  • ps –ef | grep winbind (Testen ob der Dienst läuft – wenn ja, stoppen!)
  • /etc/init.d/winbind stop (winbindd stoppen!)
  • /etc/init.d/samba stop (smbd / nmbd stoppen!)
  • rm –rf /var/lib/samba/* (eventuell vorhandene winbind cache DB löschen!)

net join

Dienste starten

Unter Ubuntu (10.04 LTS) heißt der Samba-Dienst anders:

Die Warnmeldung bzgl. upstart kann ignoriert werden.

Kontrollieren ob SMBD, NMBD und WINBIND Dienste gestartet sind:

Funktionalität testen

Fehlersuche

Was tun wenn es nicht funktioniert, oder wenn es „in der Regel“ funktioniert und plötzlich nicht mehr funktioniert?

Es wird dann Zeit für das wofür man eigentlich bezahlt wird – Fehlersuche und Fehlerbeseitigung.

Teste die grundsätzliche Erreichbarkeit auf Netz- und Portebene

  • ping IP-Adresse (beidseitig)
  • telnet 192.168.178.140 445
  • telnet 192.168.178.140 139

Teste die DNS Namensauflösung auf beiden Servern

Debian Server:
  • host 192.168.178.140 (funktioniert Reverse-Lookup?)
  • host dc.firma.de (funktioniert Forward-Lookup?)
  • ping dc.firma.de (funktioniert Layer3 Konnektivität?)
Windows Server:
  • nslookup 192.168.178.150
  • nslookup debian.firma.de
  • ping debian.firma.de

Logfiles checken

Debian Server:
  • /var/log/samba/log.winbindd
  • /var/log/messages
Windows Server:
  • Ereignisanzeige

Active Directory checken

  • Ist das Computerkonto des Debian Servers deaktiviert? Wenn ja – aktivieren.
  • Ist das Computerkonto des Debian Servers gelöscht? Wenn ja – neu anlegen mit „net ads join -U Administrator“ auf dem Debian-Server. Computerkonto nicht manuell auf dem DC anlegen!

Wiederherstellung der Funktionalität

Siehe oben in der Anleitung ab Backup der Linux Config Dateien.

Informationen aus dem AD anzeigen

Benutzerinformationen zu einem Benutzer

AD-Gruppen eines Benutzers abfragen