% <#>-----------------------------------------------------------------------<#> \section{SSH}% \label{sec:ssh} Genau so wie eine Anmeldung am Linux-Rechner über ein Terminal (\textit{tty}), ist auch die Anmeldung eines Benutzers über das Netzwerk möglich. Das gleichnamige Programm und Protokoll \acrfull{acr:telnet} wurde durch das gleichnamige Programm und Protokoll \acrfull{acr:ssh} in laufe der Zeit ersetzt. Bei der ersten Implementierung von \acrshort{acr:ssh} wird eine unverschlüsselte Verbindung zwischen den beteiligten Rechnern aufgebaut und die Identifizierung des Benutzers erfolgt nur durch dessen Namen und Passwort. Beim der zweiten Implementierung von \acrshort{acr:ssh}, wird eine verschlüsselte Verbindung aufgebaut, die sowohl das Abhören der Login-Daten, als auch der später gesendeten Daten, nahezu unmöglich macht. Es wird sowohl ein rechnerspezifischer Schlüssel als auch ein benutzerspezifischer Schlüssel zur Verschlüsselung und Idenzifizierung verwendet. Zu Testzwecken können die nachfolgenden Aufgaben über eine Verbindung zu dem lokal laufenden \acrshort{acr:ssh}-Server gelöst werden. % #>------------------------------------------------------------------------<# \subsection{Relevante Befehle für die weiteren Übungen}% \label{sec:ssh.relevante_befehle_fuer_die_weiteren_uebungen} \begin{itemize}[label={},itemsep=0pt] \item \textit{ssh:} Stellt eine verschlüsselte Verbindung zwischen zwei Rechnern her, über die neben der Shell auch andere Programme angesprochen werden können. \item \textit{scp:} Ermöglicht das bidirektionale kopieren von Dateien und Verzeichnissen zwischen zwei Rechnern über eine \acrshort{acr:ssh}-Verbindung. \end{itemize} % #>------------------------------------------------------------------------<# \subsection{Relevante Konfigurationsdateien}% \label{sec:ssh.relevante_konfigurationsdateien} \begin{itemize}[label={}] \item \textit{/etc/ssh/sshd\_config:} Konfigurationsdatei des \acrshort{acr:ssh}-Servers. \item \textit{/etc/ssh/ssh\_config:} Systemweite \acrshort{acr:ssh}-Client Konfiguration. \item \textit{\textasciitilde/.ssh:} Enthält Benutzerspezifische \acrshort{acr:ssh}-Client Konfigurationen und Metainformationen. \end{itemize} \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 2a:} Erkundigen Sie sich nach ihren \acrshort{acr:ssh}-Zugangsdaten, um sich am \acrshort{acr:ssh}-Server der Hochschule Trier anmelden zu können. \item \textbf{Aufgabe 2b:} Melden Sie sich mit ihren \acrshort{acr:ssh}-Zugangsdaten per \acrshort{acr:ssh} an dem \acrshort{acr:ssh} -Server der Hochschule Trier an. \end{itemize} % #>------------------------------------------------------------------------<# \subsection{Authentifizierungsverfahren}% \label{sec:ssh.authentifizierungsverfahren} Bei \acrshort{acr:ssh} werden asymetrische Verschlüsselungsverfahren (Public-Key Verfahren) eingesetzt. Wie Sie bei der ersten Verbindung bereits festgestellt haben, werden die SSH-Server durch ein Schlüsselpaar identifiziert (\textit{Sie mussten den öffentlichen Schlüssel des Servers bei der ersten Verbindung akzeptieren}). In einer Umgebung mit erhöhtem Sicherheitsbedarf würde man den angezeigten Fingerabdruck des Schlüssels mit einem vorher über einen anderen Kanal übermittelten Fingerabdruck vergleichen, um eine sichere Verbindung zu einem gefälschten Server zu vermeiden. Die akzeptierten öffentlichen Schlüssel des Servers werden zur Abwehr von Man-in-the-Middle Attacken in der Datei \textit{known\_hosts} gespeichert. Diese befindet sich im Unterverzeichnis \textit{.ssh} des Heimatverzeichnis des verwendeten Benutzers. Solange der private Schlüssel nicht abhanden kommt und auf dritten Server repliziert und konfiguriert wird, ist bei der aktuellen Protokollversion 2 keine umbemerkte Man-in-the-Middle Attacke möglich. Passt der auf dem Client gespeicherte öffentliche Schlüssel nicht zu dem öffentlichen Schlüssel, den der Server beim Verbindungsaufbau übermittelt, wird der weitere Verbindungsaufbau mit einer entsprechenden Warnung abgebrochen. \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 3a:} Nachdem Sie sich das erste mal per \textit{ssh} mit dem \acrshort{acr:ssh}-Server der Hochschule Trier erfolgreich verbunden haben. Überprüfen Sie die Dateiberechtigungen für den Ordner \textit{\textasciitilde/.ssh} auf ihrer lokalen VM. Was fällt Ihnen in Vergleich zu anderen Verzeichnissen auf? \end{itemize} Sie haben sich an ihrem lokal laufenden SSH-Server oder den der Hochschule Trier mit Benutzername und Passwort angemeldet. Die Daten werden zwar verschlüsselt übertragen und können daher auch nicht abgehört werden, aber ein Angreifer kann beliebig viele Passwörter per Brute-Force-Attacke an ihrem oder dem Server der Hochschule Trier ausprobieren. Bei schwachen Passwörtern wird es daher nicht allzu lange dauern, bis ein ernsthafter Angreifer erfolg hat. Bei einer frisch in Betrieb genommenen virtuellen Maschine in einem Rechenzentrum dauert es meist nur wenige Stunden, bis der erste derartige Angriff erfolgt! Daher sollte man so schnell wie möglich auf ein besseres Verfahren umstellen. Ähnlich wie die Authentifizierung der Rechner kann auch die Authentifizierung der Benutzer per Public-Key Verfahren konfiguriert werden. Der Benutzer, der sich unter einem entfernten Benutzer anmelden möchte, muss auf seinem lokalen Rechner ein Schlüsselpaar generieren und den öffentlichen Schlüssel im Heimatverzeichnis des entfernt liegenden Benutzer hinzufügen. Bei einem späteren Login wir dann mit Hilfe des privaten Schlüssels des Client authentifiziert und der Login gewährt. Die Schlüssel werden ebenfalls im Verzeichnis \textit{\textasciitilde/.ssh} gespeichert. Ändert man bei der Erzeugung des Schlüsselpaares den dazugehörigen Dateinamen, muss dieser bei jeder Verwendung angegeben werden! Alternativ kann auch die Konfigurationsdatei \textit{\textasciitilde/.ssh/config} erstellt werden, um dort den zugehörigen Schlüssel explizit anzugeben. Das Schlüsselpaar kann optional mit einer Passphrase (Passwort) gesichert werden. Falls man jedoch automatische Logins z.B. für Backups benötigt, sollte man auf diese zusätzliche Sicherung verzichten, da dies sonst nicht mehr automatisch (non-interactive) durch Jobs möglich ist. \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 3b:} Generieren Sie für ihren lokalen Benutzer eine Schlüsselpaar mit dem \textit{ed25519} Algorithmus. Der Befehl \textit{ssh-keygen} erzeugt Schlüsselpaare. Informieren Sie sich über \textit{ssh-keygen} per \textit{man ssh-keygen}. \item \textbf{Aufgabe 3c:} Ermitteln Sie mit Hilfe der man-page via \textit{man ssh-keygen} den Namen der Datei, in der der öffentliche Schlüssel auf dem entfernten Rechner hinterlegt werden muss. \item \textbf{Aufgabe 3d:} Mit dem Befehl \textit{scp} können Dateien über ein \acrshort{acr:ssh}-Tunnel von einem Rechner zu einem anderen kopiert werden. Die Syntax lautet: \textit{scp quelle ziel}. Beide Adressen enthalten einen Pfad an dem die Ressourcen zu finden bzw. zu kopieren sind. Nur die entfernte Adresse benötigt zusätzlich noch weitere Informationen wie Benutzername und Rechnername bzw. IP des entfernten Systems. Die Adresse würde folgendem Schema entsprechen \textit{user@rechner:pfad}. Kopieren Sie mit Hilfe von \textit{scp} ihren öffentlichen Schlüssel in das Heimatverzeichnis ihres entfernten Benutzers. \item \textbf{Aufgabe 3e:} Der kopierte Schlüssel auf dem entfernten System muss der Datei aus Aufgabe 3c hinzugefügt werden. \item \textbf{Aufgabe 3f:} Nachdem der öffentliche Schlüssel erfolgreich kopiert und konfiguriert wurde, öffnen Sie eine zweite \acrshort{acr:ssh}-Verbindung ohne Eingabe des Passworts. \end{itemize} % #>------------------------------------------------------------------------<# \subsection{Absicherung des SSH-Servers}% \label{sec:ssh.absicherung_des_ssh-servers} Nachdem die Authentifizierung mit dem Public-Key-Verfahren erfolgreich getestet wurde, kann im nächsten Schritt die unsichere Passwort-Authentifizierung auf dem Server abgeschaltet werden. Dabei ist zu beachten, dass bei einem Neustart des \acrshort{acr:ssh}-Servers bestehende Verbindungen gehalten werden. Vor dem Logout sollte daher nach einer Konfigurationsänderung immer getestet werden, ob der Login noch möglich ist. Falls man sich bei dieser Gelegenheit selbst vom Server aussperrt, sind "Helping Hands" vom Provider meist nicht billig zu haben. \begin{info-popup} Dies ist für den Server \textit{ssh.hochschule-trier.de} nicht möglich, mangels Berechtigungen. Führen Sie daher die Abschaltung an ihrem lokalen \acrshort{acr:ssh}-Server durch. \end{info-popup} \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 4a:} Wie heißt der Eintrag in der Konfigurationsdatei des Server, mit dem der Zugang für den Benutzer \textit{root} eingestellt werden kann? Genaueres Betrachten der Konfigurationsdatei sollte schon zum Ergebnis führen. \item \textbf{Aufgabe 4b:} Stellen Sie diesen Eintrag so ein, dass für \textit{root} nur noch der Zugang per Public-Key-Authentifizierung möglich ist. Lesen Sie die Dokumentation für weitere Informationen. \item \textbf{Aufgabe 4c:} Mit welchem Konfigurationswert kann das Verhalten aus Aufgabe 4b auch für normale Benutzer erreicht werden? Informieren Sie sich auch hier über die Dokumentation. \item \textbf{Aufgabe 4d:} Stellen Sie das Verhalten so ein, dass für normale Benutzer nur noch Zugang per Public-Key-Authentifizierung möglich ist. \item \textbf{Aufgabe 4e:} Nach dem Speichern dieser Änderungen muss der \acrshort{acr:ssh}-Dienst mit \textit{systemctl restart ssh} neu gestartet werden \item \textbf{Aufgabe 4f:} Testen Sie die korrekte Funktionsfähigkeit dieser Änderung mit einer zweiten \acrshort{acr:ssh}-Verbindung. \end{itemize} % #>------------------------------------------------------------------------<# \subsection{Client-Konfiguration}% \label{sec:ssh.client-konfiguration} Da Sie nun den Server erfolgreich auf Public-Key-Authentifizierung umgestellt haben, kann im nächsten Schritt die \acrshort{acr:ssh}-Client Konfiguration angepasst werden. Dazu ist die Datei \textit{\textasciitilde/.ssh/config} notwendig. Der \acrshort{acr:ssh}-Client liest die Datei ein und setzt die Konfiguration, welcher für den Verbindungsaufbau notwendig ist, rekursiv und abhängig von dem DNS-Namen, zusammen. Möchte man Beispielsweise eine Verbindung zu \textit{verwaltung.example.local} aufbauen. Werden zuerst alle Konfigurationsoptionen, welche für \textit{verwaltung.example.local} definiert wurden, angewendet. Als nächstes sucht der \acrshort{acr:ssh}-Client nach Konfigurationsoptionen, welche für \textit{*.example.local} definiert wurden, anschließend für \textit{*.local} und zum Schluss für \textit{*}. Konfigurationsoptionen, welche einmal definiert wurden, können nicht mehr durch andere Optionen, welche in einem höhren Scope definiert wurden, übersteuert werden. \begin{itemize}[label={}] \item \textbf{Aufgabe 5a:} Erstellen Sie die Datei \textit{\textasciitilde/.ssh/config} und setzen Sie die entsprechenden Berechtigungen. \item \textbf{Aufgabe 5b:} Erstellen Sie einen Eintrag in der Konfiguration für alle Verbindungen. Definieren Sie dort, welcher Schlüssel zur Authentifizierung verwendet werden soll. \item \textbf{Aufgabe 5c:} Erstellen Sie einen Eintrag in der Konfiguration für alle Verbindungen, welche gegen die Domain \textit{*.hochschule-trier.de} aufgebaut werden. Für die Domain \textit{*.hochschule-trier.de} soll der Port 22 verwendet werden. Die Authentifizierung per Passwort und der Verbindungsaufbau über IPv6 soll nicht verwendet werden. \item \textbf{Aufgabe 5d:} Erstellen Sie einen Eintrag in der Konfiguration für die Verbindung \textit{ssh.hochschule-trier.de}. Geben Sie dort den Benutzernamen an unter welchen Sie sich anmelden möchten. \end{itemize}