Markus Pesch
7d74b1a0db
All checks were successful
continuous-integration/drone/push Build is passing
206 lines
12 KiB
TeX
206 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.
|
|
|
|
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} |