TACACS
Inhaltsverzeichnis |
Was ist TACACS
TACACS ist ein sogenanntes AAA Protkoll. AAA steht für Authentication, Authorisation and Accounting. Frei auf Deutsch übersetzt heisst das so etwa Benutzerüberprüfung, Berechtigungsüberprüfung und Aufzeichnung. Auf dem TACACS-Server werden also Benutzer mit ihren Passwörtern und ihre Berechtigungen erfasst. Weiter kann auch jeder Schritt eines Benutzers auf einem System aufgezeichnet werden für einen späteren Audit.
TACACS Versionen
Es gibt momentan drei verschiene Versionen dieses Protokolls:
Die Erste Version ist das "normale" TACACS und wurde über Jahre nur von Cisco-Geräten unterstützt und benutzt.
Die Zweite Version war eine Erweiterung und wurde deshalb "Extended TACACS" oder einfach XTACACS genannt und wurde ca. 1990 eingeführt.
Die Dritte Version nennt sich TACACS+ (auch bekannt als T+ oder tac_plus). TACACS+ int nicht mit seinen Vorgängern kompatibel bringt dafür aber viele Feature mit die man sich lange gewünscht hatte. TACACS+ wurde ca. 1995 eingeführt und ist heute die gängige Version.
Installation
FreeBSD hat freundlicherweise bereits einen Port des gebräuchlichsten (freien) TACACS+ Servers. Die Software heisst tac_plus (von hier an nur noch mit TP bezeichnet) und wurde an der Gazi-Universität in der Türkei entwickelt. Den Port installiert man wie gewohnt ganz simpel mit
-bash-2.05b$ cd /usr/ports/net/tac_plus-libradius -bash-2.05b$ make install -bash-2.05b$ cp /usr/ports/net/tac_plus-libradius/work/tac_plus.F5.0.0.alpha/generate_passwd /usr/local/bin -bash-2.05b$ make clean
Konfiguration des Servers
Vorgaben
Zuerst kopieren wir das Vorgaben-File an die Stelle des Konfigurations-File:
-bash-2.05b$ cp /usr/local/etc/tac_plus/tac_plus.cfg /usr/local/etc/tac_plus/tac_plus.conf
TP wird konfiguriert über die Konfigurationsdatei unter /usr/local/etc/tac_plus/tac_plus.cfg. Das Sample-File enthält schon die wichtigsten Informationen:
key="your key"
Damit nicht jeder einfach Brute-Force gegen den TP-Server Authentifizierungsrequests senden kann bis er einen funktionierenden User gefunden hat werden die Requests mit einem Key versehen der Bei allen Clients gleich sein muss wie beim Server. Eine Änderung dieses Keys ist eine ziemliche PITA da jedes Gerät (wirklich jedes) umkonfiguriert werden muss. Darum die Empfehlung: choose wisely Luke...
accounting file = /var/log/tac-plus/tac_plus.log
In dieser Logdatei werden alle Aktionen eines Benutzers geloggt wenn der Client die nötigen Informationen an den Server zurückliefert. Warnung: die Datei kann auf Dauer ziemlich gross werden!
default authentication = ldap "ldap://<your LDAP Server>"
Solltet Ihr eure Benutzer in einem LDAP-Server verwalten werdet Ihr euch sicher freuen zu hören, dass hier bereits eine Schnittstelle vorhanden ist. Weiter gibt es auch die Möglichkeit auf einen MySQL/PostgreSQL-Datenbankserver zurückzugreiffen, die /etc/passwd-Datei (oder ähnlichen) zu nutzen, über PAM oder einfach die User im Konfigfile zu erfassen. In der ersten Version dieses Dokuments werden wir uns mit der letzen MMöglichkeit auseinandersetzen. Dehalb könnt Ihr diese Zeile gleich löschen. :)
user=DEFAULT {
service = ppp protocol = ip {
}
}
Da TACACS häuptsächlich zur Authentifikation von Dialup-Usern entwickelt wurde wird hier gleich eine PPP-Session gestartet nach dem erfolgreichen Login. Da dies in unserem Fall nicht von Interesse ist können Diese Zeilen auch gleich gelöscht werden.
User und Gruppen
Gruppen
Hier ein Beispiel wie Gruppen konfiguriert werden:
group = staff {
# Gruppe 'staff'
}
group = admin {
# Gruppe 'admin' ist Mitglied von Gruppe 'staff'
member = staff
}
User
Hier ein Beispiel wie User eingerichtet werden:
user = lily {
# User lily
# gehört zu keiner Gruppe und hat auch sonst nichts konfiguriert
global = cleartext "lilys password"
}
user = fred {
# User fred
# gehört zur Gruppe 'admin'
member = admin
login = des XQj4892fjk
}
Lily hat ein sogenanntes "globales" Klartextpasswort für alle Dienste. Andere Dienste wären arap, chap, pap, opap oder wie fred login. Freds Passwort ist DES verschlüsselt. Es empfiehlt sich alle Passwörter nur als DES-Hash in der Configdatei abzulegen. DES-Hashes können mit dem Programm /usr/local/bin/generate_passwd kreiert werden.
Anstelle des Passworts wären auch noch folgende Möglichkeiten denkbar:
- 'nopassword' (dürfte wohl klar sein was das meint... :)
- 'file /etc/tac_plus_passwords' (hier wird das Password aus einer passwd-ähnliche Datei genommen)
- 'skey' (S/Key ist ein One Time Password-System)
Spezielle Konfigurationen
Eine Gruppe kann auch ein Passwort haben. Sollte ein User kein Passwort haben greifft das Passwort der Gruppe.
Account expiry
Es ist auch möglich einem Useraccount ein "Verfallsdatum" zu konfigurieren nach folgendem Beispiel:
user = lol {
expires = "MMM DD YYYY"
password = cleartext "bite me"
}
Enable-Passwort
Auch das sogenannte 'enable-Passwort' eines Cisco-Geräts kann über TP gesetzt werden. Dafür ist folgender Spezial-User zu konfigurieren:
user = $enab15$ {
login = des bsoF4OivQCY8Q
}
Die '15' im Benutzernamen auch gegen andere Privigelevels ausgetauscht werden.
Services
Es ist möglich einen User auf bestimmte Kommandos zu beschränken mit Konfigurationen wie folgender:
user=fred {
cmd = telnet {
# permit specified telnets
permit 131\.108\.13\.[0-9]+
permit 128\.[0-9]+\.12\.3
}
cmd = show {
# permit show commands
permit .*
}
}
Damit ist User fred auf folgende Kommandos eingeschränkt:
- telnet 131.108.13.<jede nummer>
- telnet 128.<jede nummer>.12.3
- show <alles>
Das funktioniert natürlich auch umgekehrt (alles ausser Befehl X):
user=fred {
default service = permit
cmd = telnet {
# allow all fred's telnet commands except to 131.108.13.*
deny 131\.108\.13\.[0-9]+
permit .*
}
}
Hier darf User fred alles Kommandos ausser "telnet 131.108.13.<jede nummer>" ausführen. Der geneigte Leser wird bereits folgende Zeile bemerkt haben:
default service = permit
Hier wird dem User erlaube jegliche Services (sprich Kommandos) auf dem Gerät auszuführen. Dies wird in den meisten Fällen das gewünschte Verhalten sein.
Beispiel
Bis jetzt haben wir also etwa folgende Konfiguration für die weiteren Schritte:
key="this_is_your_key"
accounting file = /var/log/tac-plus/tac_plus.log
group = staff {
# Gruppe 'staff'
default service = deny
}
group = admin {
# Gruppe 'admin' ist Mitglied von Gruppe 'staff'
member = staff
# default service = permit ist DEFAULT!
}
user = snoopy {
# User snoopy
member = admin
login = des XQj4892fjk
}
user = charlie {
# User snoopy
member = stuff
global = cleartext "charlies_password"
}
user = $enab15$ {
login = des bsoF4OivQCY8Q
}
Damit der Server gestartet werden kann (und auch in Zukunft nach dem booten) muss das Startup-File mit dem Korrekten Name versehen werden:
-bash-2.05b$ bash-2.05$ mv /usr/local/etc/rc.d/tac_plus.sh.sample /usr/local/etc/rc.d/tac_plus.sh
Konfiguration eines Cisco-Device
Folgende Schritte sind nötig um ein Cisco-Device dazu zu bewegen für AAA-Requests einen TACACS-Server anzufragen.
Authentication
aaa new-model
Da wir mit mit dem TACACS+ Protokoll arbeiten teilen wir dies dem so Device mit.
aaa group server tacacs+ TACSERV server 192.168.0.1 exit
Hier geben wir unsere TP-Server an. Mit der Group-Konfiguration ist es möglich mehrere TP-Server anzugeben. Aus Redundanzgründen macht das Sinn.
tacacs-server host 192.168.0.1 key this_is_your_key
Zu jedem Server muss man auch den Key konfigurieren.
username notfall-user-wenn-tacacs-tot secret <notfall-passwort>
Hier konfigurieren wir einen lokalen User. Sollte der TP-Server mal nicht verfügbar sein (Service down, Netzwerk zum TP-Server down, etc.) kann man sich immernoch mit diesem User auf dem Device einloggen.
aaa authentication login default group TACSERV local line aaa authentication enable default group TACSERV enable line
Hier konfigurieren wir die normale Abfolge zur Authentisierung von Benutzern und Enable-Requests:
- TP-Server in der Gruppe TACSERV
- Lokale Benutzer resp. lokales Enable-Passwort
- Line-Passwort
ACHTUNG: Es scheint, als ab Cisco-Devices je nach IOS-Version ein bisschen unterschiedlich reagieren. Teilweise kann man sich auf einem Device auch mit dem Emergency-User anmelden auch wenn der TP-Server verfügbar ist!
banner motd # Access to unauthorized people prohibited! Trying to hack this device will be prosecuted. dns-name.of.device#
Diese Kommandos passen das telnet-Banner an. Aus rechtlichen Gründen sollte man jedem der auf das Device zugreiffen will klar machen, dass er, wenn er nichts auf der Kiste verloren hat, bis an sein Lebensende verfolgt wird mit allen verfügbaren Waffen (inlusive Baseballschläger, Uzis, Atombomben und dem schlimmsten: Anwälten! :).
Authorization
Wenn es jemand braucht soll er sich bei mir melden. :)
Accounting
Accounting ist ein nettes Feature. Wenn man nicht alleine auf einem Gerät arbeitet will man vielleicht im Nachhinein wissen wer gerade die Konfiguration verbockt hat... :)
Konfiguriert wird es mit folgenden Kommandos:
aaa accounting commands 0 default start-stop group TACSERV aaa accounting commands 1 default start-stop group TACSERV aaa accounting commands 2 default start-stop group TACSERV aaa accounting commands 3 default start-stop group TACSERV aaa accounting commands 4 default start-stop group TACSERV aaa accounting commands 5 default start-stop group TACSERV aaa accounting commands 6 default start-stop group TACSERV aaa accounting commands 7 default start-stop group TACSERV aaa accounting commands 8 default start-stop group TACSERV aaa accounting commands 9 default start-stop group TACSERV aaa accounting commands 10 default start-stop group TACSERV aaa accounting commands 11 default start-stop group TACSERV aaa accounting commands 12 default start-stop group TACSERV aaa accounting commands 13 default start-stop group TACSERV aaa accounting commands 14 default start-stop group TACSERV aaa accounting commands 15 default start-stop group TACSERV
Jede Zeile konfiguriert, dass Accounting-Informationen an die TP-Server der Gruppe TACSERV gesendet werden für das jeweilige Privilge-Level (0-15). Simpel, was? :)