Vernetztes Arbeiten erfordert oft auch den Zugriff auf entfernte Systeme. Hierbei muss sich der Benutzer über sein Login und ein Passwort authentifizieren. Unverschlüsselt im Klartext versandt, könnten diese sensiblen Daten jederzeit von Dritten mitgeschnitten und missbraucht werden, um zum Beispiel den Zugang des Benutzers ohne sein Wissen nutzen. Abgesehen davon, dass die Angreifer so sämtliche privaten Daten des Benutzers einsehen können, können sie den erworbenen Zugang nutzen, um von dort aus andere Systeme anzugreifen, oder Administrator- bzw. Rootrechte auf dem betreffenden System zu erlangen. Früher wurde zur Verbindungsaufnahme zwischen zwei entfernten Rechnern Telnet verwendet, das keinerlei Verschlüsselungs- oder Sicherheitsmechanismen gegen ein Abhören der Verbindungen vorsieht. Ebensowenig geschützt sind einfache FTP- oder Kopierverbindungen zwischen entfernten Rechnern.
Die SSH-Software liefert den gewünschten Schutz. Die komplette Authentifizierung, in der Regel Benutzername und Passwort, und Kommunikation erfolgen hier verschlüsselt. Zwar ist auch hier weiterhin das Mitschneiden der übertragenen Daten möglich, doch kann der Inhalt mangels Schlüssel durch einen Dritten nicht wieder entschlüsselt werden. So wird sichere Kommunikation über unsichere Netze wie das Internet möglich. SUSE Linux bietet das Paket OpenSSH an.
Standardmäßig wird unter SUSE Linux das Paket OpenSSH installiert. Es stehen Ihnen daher die Programme ssh, scp und sftp als Alternative für telnet, rlogin, rsh, rcp und ftp zur Verfügung. In der Standardkonfiguration ist der Zugriff auf ein SUSE Linux-System nur mit den OpenSSH-Programmen möglich, und nur wenn dies die Firewall erlaubt.
Mit ssh können Sie Verbindung zu einem entfernten
System aufnehmen und dort interaktiv arbeiten. Es ist somit gleichermaßen
ein Ersatz für telnet und
rlogin. Aufgrund der Verwandtschaft zu
rlogin zeigt der zusätzliche symbolische Name
slogin ebenfalls auf
ssh. Zum Beispiel kann man sich mit dem Befehl
ssh sun auf dem
Rechner sun anmelden. Anschließend wird man nach seinem Passwort
auf dem System sun gefragt.
Nach erfolgreicher Authentifizierung kann dort auf der Kommandozeile oder
interaktiv, zum Beispiel mit YaST, gearbeitet werden. Sollten sich der
lokale Benutzername und der auf dem entfernten System unterscheiden, kann
ein abweichender Name angegeben werden, zum Beispiel ssh -l augustine
sun oder ssh augustine@sun.
Darüber hinaus bietet ssh die von
rsh bekannte Möglichkeit, Kommandos auf einem
anderen System auszuführen. Im nachfolgenden Beispiel wird das Kommando
uptime auf dem Rechner sun ausgeführt und ein
Verzeichnis mit dem Namen tmp angelegt. Die
Programmausgabe erfolgt auf dem lokalen Terminal des Rechners
earth.
ssh sonne "uptime; mkdir tmp" tux@sonne's password: 1:21pm up 2:17, 9 users, load average: 0.15, 0.04, 0.02
Anführungszeichen sind hier zum Zusammenfassen der beiden Anweisungen in einem Kommando erforderlich. Nur so wird auch der zweite Befehl auf dem Rechner "sun" ausgeführt.
Mittels scp kopieren Sie Dateien auf einen
entfernten Rechner. scp ist der sichere,
verschlüsselte Ersatz für rcp. Zum Beispiel
kopiert scp MeinBrief.tex
sun: die Datei MeinBrief.tex vom
Rechner "earth" auf den Rechner "sun". Insoweit sich die
beteiligten Nutzernamen auf "earth" und "sun"
unterscheiden, geben Sie bei scp die Schreibweise
Nutzername@Rechnername an. Eine Option
-l existiert nicht.
Nachdem das Passwort
eingegeben wurde, beginnt scp mit der
Datenübertragung und zeigt dabei den Fortschritt anhand eines von links nach
rechts anwachsenden Balkens aus Sternen an. Zudem wird am rechten Rand die
geschätzte Restübertragungszeit (engl. estimated time of
arrival) angezeigt. Jegliche Ausgabe kann durch die Option
-q unterdrückt werden.
scp bietet neben dem Kopieren einzelner Dateien
ein rekursives Verfahren zum Übertragen ganzer Verzeichnisse:
scp -r src/
sun:backup/ kopiert den kompletten Inhalt des
Verzeichnisses src/ inklusive aller Unterverzeichnisse
auf den Rechner "sun" und dort in das Unterverzeichnis
backup/. Dieses wird automatisch angelegt wenn es
fehlt.
Mittels der Option -p kann scp
die Zeitstempel der Dateien erhalten. -C sorgt für eine
komprimierte Übertragung. Dadurch wird einerseits das zu übertragende
Datenvolumen minimiert, andererseits aber ein höherer Rechenaufwand
erforderlich.
Alternativ kann man zur sicheren Datenübertragung sftp verwenden. sftp bietet innerhalb der Sitzung viele der von ftp bekannten Kommandos. Gegenüber scp mag es vor allem beim Übertragen von Daten, deren Dateinamen unbekannt sind, von Vorteil sein.
Damit ssh und scp, die
Clientprogramme des SSH-Paketes, eingesetzt
werden können, muss im Hintergrund der
SSH-Daemon, ein Server, laufen. Dieser erwartet
seine Verbindungen auf TCP/IP Port 22.
Während des ersten Starts generiert der Daemon drei Schlüsselpaare. Die
Schlüsselpaare bestehen aus einem privaten und einem öffentlichen
(engl. public) Teil. Deshalb bezeichnet man dies als
ein public-key basiertes Verfahren. Um die Sicherheit der Kommunikation
mittels SSH zu gewährleisten, darf ausschließlich
der Systemadministrator die Dateien der privaten Schlüssel einsehen können.
Die Dateirechte werden per Voreinstellung entsprechend restriktiv gesetzt.
Die privaten Schlüssel werden lediglich lokal vom
SSH-Daemon benötigt und dürfen an niemanden
weitergegeben werden. Demgegenüber werden die öffentlichen
Schlüsselbestandteile (an der Namensendung .pub
erkennbar) an Kommunikationspartner weitergegeben und sind entsprechend für
alle Benutzer lesbar.
Eine Verbindung wird vom SSH-Client eingeleitet. Der wartende SSH-Daemon und der anfragende SSH-Client tauschen Identifikationsdaten aus, um die Protokoll- und Softwareversion abzugleichen und die Verbindung zu einem falschen Port auszuschließen. Da ein Kindprozess des ursprünglichen SSH-Daemons antwortet, sind gleichzeitig viele SSH-Verbindungen möglich.
OpenSSH unterstützt zur Kommunikation zwischen SSH-Server und SSH-Client das
SSH-Protokoll in den Versionen 1 und 2. Nach einer Neuinstallation von
SUSE Linux wird automatisch die aktuelle Protokoll-Version 2 eingesetzt.
Möchten Sie nach einem Update weiterhin SSH 1 beibehalten, folgen Sie den
Anweisungen in
/usr/share/doc/packages/openssh/README.SuSE. Dort ist
ebenfalls beschrieben, wie Sie in wenigen Schritten eine SSH 1-Umgebung in
eine funktionierende SSH 2-Umgebung umwandeln.
Bei Verwendung der SSH Protokoll-Version 1 sendet der Server sodann seinen
öffentlichen host key und einen stündlich vom
SSH-Daemon neu generierten server
key. Mittels beider verschlüsselt
(engl. encrypt) der
SSH-Client einen von ihm frei gewählten
Sitzungsschlüssel (engl. session key) und sendet ihn
an den SSH-Server. Er teilt dem Server zudem die
gewählte Verschlüsselungsmethode (engl. cipher)
mit.
Die SSH Protokoll-Version 2 kommt ohne den
server key aus. Stattdessen wird ein Algorithmus
nach Diffie-Hellman verwendet, um die Schlüssel auszutauschen.
Die zur Entschlüsselung des Sitzungsschlüssels zwingend erforderlichen
privaten host und server keys, können nicht aus den öffentlichen Teilen
abgeleitet werden. Somit kann allein der kontaktierte
SSH-Daemon mit seinen privaten Schlüsseln den
Sitzungsschlüssel entziffern (vgl. man
/usr/share/doc/packages/openssh/RFC.nroff). Diese
einleitende Phase der Verbindung kann man mittels der Fehlersuchoption
-v des SSH-Clientprogramms gut
nachvollziehen. Per Default wird SSH Protokoll-Version 2 verwendet, man kann
jedoch mit dem Parameter -1 auch die SSH
Protokoll-Version 1 erzwingen. Indem der Client alle öffentlichen host keys
nach der ersten Kontaktaufnahme in ~/.ssh/known_hosts
ablegt, können so genannte man-in-the-middle
Angriffe unterbunden werden. SSH-Server, die
versuchen, Name und IP-Adresse eines anderen vorzutäuschen, werden durch
einen deutlichen Hinweis enttarnt. Sie fallen entweder durch einen gegenüber
~/.ssh/known_hosts abweichenden host-Schlüssel auf,
oder können mangels passendem privaten Gegenstück den vereinbarten
Sitzungsschlüssel nicht entschlüsseln.
Es empfiehlt sich, die in /etc/ssh/ abgelegten privaten
und öffentlichen Schlüssel extern und gut geschützt zu archivieren. So
können Änderungen der Schlüssel festgestellt und nach einer Neuinstallation
die alten wieder eingespielt werden. Dies erspart den Benutzern die
beunruhigende Warnung. Ist es sichergestellt, dass es sich trotz der Warnung
um den korrekten SSH-Server handelt, muss der
vorhandene Eintrag zu diesem System aus
~/.ssh/known_hosts entfernt werden.
Jetzt erfolgt die eigentliche Authentifizierung, die in ihrer einfachsten
Weise aus der Eingabe eines Passwortes besteht, wie es in den oben
aufgezeigten Beispielen erfolgte. Ziel von SSH
war die Einführung einer sicheren, aber zugleich einfach zu nutzenden
Software. Wie bei den abzulösenden Programmen rsh
und rlogin muss deshalb auch
SSH eine im Alltag einfach zu nutzende
Authentifizierungsmethode bieten. SSH realisiert
dies mittels eines weiteren hier vom Nutzer erzeugten Schlüsselpaares. Dazu
liefert das SSH-Paket das Hilfsprogramm
ssh-keygen mit. Nach der Eingabe von
ssh-keygen -t rsa oder
ssh-keygen -t dsa wird das
Schlüsselpaar generiert und der Basisdateiname zur Ablage der Schlüssel
erfragt.
Bestätigen Sie die Voreinstellung und beantworten Sie die Frage nach einer
Passphrase. Auch wenn die Software eine leere Passphrase nahelegt, sollte
bei der hier vorgeschlagenen Vorgehensweise ein Text von zehn bis
30 Zeichen Länge gewählt werden. Verwenden Sie möglichst keine kurzen
und einfachen Worte oder Sätze. Nach erfolgter Eingabe wird zur Bestätigung
eine Wiederholung der Eingabe verlangt. Anschließend wird der Ablageort des
privaten und öffentlichen Schlüssels, in unserem Beispiel der Dateien
id_rsa und id_rsa.pub, ausgegeben.
Verwenden Sie ssh-keygen -p -t rsa
bzw. ssh-keygen -p -t dsa, um Ihre
alte Passphrase zu ändern. Kopieren Sie den öffentlichen Teil des Schlüssels
(in unserem Beispiel id_rsa.pub) auf den entfernten
Rechner und legen Sie ihn dort als
~/.ssh/authorized_keys ab. Zur Authentifizierung werden
Sie beim nächsten Verbindungsaufbau nach Ihrer Passphrase gefragt. Sollte
dies nicht der Fall sein, überprüfen Sie bitte Ort und Inhalt der zuvor
erwähnten Dateien.
Auf Dauer ist diese Vorgehensweise mühsamer, als die Eingabe eines
Passwortes. Entsprechend liefert das SSH-Paket ein weiteres Hilfsprogramm,
den ssh-agent, der für die Dauer einer X-session private Schlüssel bereit
hält. Dazu wird das gesamte X als Kindprozess des ssh-agents gestartet.
Sie erreichen dies am einfachsten,
indem Sie am Anfang der Datei .xsession die Variable
usessh auf yes setzen und sich über
einen Displaymanager, zum Beispiel KDM oder XDM, anmelden. Alternativ können
Sie ssh-agent startx verwenden.
Nun können Sie wie gewohnt ssh oder scp nutzen. Insoweit Sie Ihren öffentlichen Schlüssel wie zuvor verteilt haben, sollten Sie jetzt nicht mehr nach dem Passwort gefragt werden. Achten Sie beim Verlassen Ihres Rechners darauf, dass Sie Ihre X-session beenden oder mittels einer passwortgeschützten Bildschirmsperre, zum Beispiel xlock, verriegeln.
Alle wichtigen Änderungen die sich mit der Einführung von SSH
Protokoll-Version 2 ergeben haben, sind auch in der Datei
/usr/share/doc/packages/openssh/README.SuSE noch einmal
dokumentiert.
Über die bisher beschriebenen sicherheitsrelevanten Verbesserungen hinaus
erleichtert ssh auch die Verwendung von
entfernten X-Anwendungen. Insoweit Sie ssh mit der Option
-X aufrufen, wird auf dem entfernten System automatisch die
DISPLAY-Variable gesetzt und alle X-Ausgaben werden durch die bestehende
ssh-Verbindung auf den Ausgangsrechner weitergeleitet. Diese bequeme
Funktion unterbindet gleichzeitig die bisher bestehenden Abhörmöglichkeiten
bei entfernt aufgerufenen und lokal betrachteten X-Anwendungen.
Durch setzen der Option -A wird der Mechanismus zur
Authentifizierung des ssh-agent auf den nächsten
Rechner mit übernommen. Man kann so von einem Rechner zum anderen gehen,
ohne ein Passwort eingeben zu müssen. Allerdings nur, wenn man zuvor seinen
öffentlichen Schlüssel auf die beteiligten Zielrechner verteilt und korrekt
abgelegt hat.
Beide Mechanismen sind vorsichtshalber in der Voreinstellung deaktiviert,
können jedoch in der systemweiten Konfigurationsdatei
/etc/ssh/ssh_config oder der nutzereigenen
~/.ssh/config permanent eingeschaltet werden.
Man kann ssh auch zur beliebigen Umleitung von TCP/IP-Verbindungen benutzen. Als Beispiel sei hier die Weiterleitung des SMTP- und POP3-Ports aufgeführt:
ssh -L 25:sun:25 earth
Hier wird jede Verbindung zu "earth" Port 25, SMTP auf den SMTP-Port von "sun" über den verschlüsselten Kanal weitergeleitet. Dies ist insbesondere für Nutzer von SMTP-Servern ohne SMTP-AUTH oder POP-before-SMTP-Fähigkeiten von Nutzen. Mail kann so von jedem beliebigen Ort mit Netzanschluss zur Auslieferung durch den heimischen Mailserver übertragen werden. Analog können mit folgendem Befehl alle POP3-Anfragen (Port 110) an "earth" auf den POP3-Port von "sun" weitergeleitet werden:
ssh -L 110:sun:110 earth
Beide Beispiele müssen Sie als Benutzer root ausführen, da auf privilegierte, lokale
Ports verbunden wird. Bei bestehender
SSH-Verbindung wird Mail wie gewohnt als normaler
Benutzer versandt und abgeholt. Der SMTP- und POP3-Host muss dabei auf
localhost konfiguriert werden. Zusätzliche Informationen
entnehmen Sie den Manualpages der einzelnen Programme und den Dateien unter
/usr/share/doc/packages/openssh.