linux_ws2122/chapters/01-ssh.tex
Markus Pesch fed26c8bbd
All checks were successful
continuous-integration/drone Build is passing
Initial Commit
2021-10-13 19:25:16 +02:00

201 lines
12 KiB
TeX

% <#>-----------------------------------------------------------------------<#>
\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.
Beim ersten Implementierung \acrshort{acr:ssh} von 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, also auch der später
gesendeten Daten nahezu unmöglich macht. Es wird sowohl ein rechnerspezifischer
Schlüssel als auch ein benutzerspezifischer Schlüssel verwendet. Zu Testzwecken
ist natürlich auch eine Verbindung zu dem eigenen Rechner (localhost) möglich.
% #>------------------------------------------------------------------------<#
\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 der
\acrshort{acr:gui} 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 der Hochschule Trier.
\item \textbf{Aufgabe 2b:} Melden Sie sich mit ihren
\acrshort{acr:ssh}-Zugangsdaten per \acrshort{acr:ssh} an dem Rechner
\textit{ssh.hochschule-trier.de} 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
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}
Bisher melden Sie sich an ihrem virtuellen Server oder den der Hochschule Trier
mit Benutzername und Passwort an. 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 festgestellt,
dass der Anfragende tatsächlich der berechtigte Benutzer ist.
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 wünscht, sollte man auf diese zusätzliche
Sicherung verzichten.
\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 mir 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
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}