201 lines
12 KiB
TeX
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}
|