Es ist für einen Administrator wichtig, sich aus der Ferne mit einem Rechner verbinden zu können. Server, die in ihrem eigenen Raum eingeschlossen sind, sind selten dauerhaft mit Tastaturen und Bildschirmen ausgestattet - aber sie sind mit dem Netzwerk verbunden.
9.2.1. Sicheres Anmelden aus der Ferne: SSH
Das SSH-Protokoll (Secure SHell) wurden Sicherheit und Zuverlässigkeit bereits im Entwurf berücksichtigt. Verbindungen auf der Basis von SSH sind sicher: der Partner ist authentifiziert und jeglicher Datenverkehr erfolgt verschlüsselt.
SSH bietet auch zwei Dateiübertragungsdienste an. scp
ist ein Befehlszeilenprogramm, das wie cp
benutzt werden kann, nur dass jedem Pfad zu einem anderen Rechner der Name dieses Rechners gefolgt von einem Doppelpunkt vorangestellt wird.
$
scp datei rechner:/tmp/
sftp
ist ein interaktiver Befehl, ähnlich wie ftp
. In einer einzigen Sitzung kann sftp
mehrere Dateien übertragen, und es ist möglich, mit ihm Dateien auf einem entfernten Rechner zu bearbeiten (löschen, umbenennen, Berechtigungen ändern usw.).
Debian verwendet OpenSSH, eine freie Version von SSH, die vom OpenBSD
-Projekt betreut wird (einem freien Betriebssystem, das auf dem BSD-Kernel aufbaut und seinen Schwerpunkt auf Sicherheit setzt), und eine Abspaltung der ursprünglich vom finnischen Unternehmen SSH Communications Security Corp. entwickelten SSH-Software. Dieses Unternehmen entwickelte SSH ursprünglich als freie Software, entschied sich jedoch schließlich, seine Entwicklung unter einer proprietären Lizenz fortzusetzen. Das OpenBSD-Projekt schuf daraufhin OpenSSH, um eine freie Version von SSH zu bewahren.
OpenSSH ist in zwei Pakete aufgeteilt: der Client-Teil befindet sich im Paket openssh-client und der Server-Teil im Paket openssh-server. Das Metapaket ssh ist von beiden Teilen abhängig und erleichtert die Installation beider (apt-get install ssh
).
9.2.1.1. Schlüsselbasierte Authentifizierung
Jedes Mal, wenn sich jemand über SSH anmeldet, fragt der entfernte Server nach einem Passwort zur Authentifizierung des Benutzers. Dies kann problematisch sein, wenn man eine Verbindung automatisieren möchte, oder wenn man ein Hilfsprogramm verwendet, das häufige Verbindungen über SSH benötigt. Daher bietet SSH ein schlüsselbasiertes Authentifizierungssystem.
Der Benutzer erzeugt auf dem Client-Rechner mit dem Befehl ssh-keygen -t rsa
ein neues Schlüsselpaar; der öffentliche Schlüssel wird in der Datei ~/.ssh/id_rsa.pub
gespeichert und der dazugehörige private Schlüssel in ~/.ssh/id_rsa
. Der Benutzer verwendet dann den Befehl ssh-copy-id server
, um seinen öffentlichen Schlüssel auf dem Server zur Datei ~/.ssh/authorized_keys
hinzuzufügen. Falls der private Schlüssel zur Zeit seiner Erzeugung nicht mit einer „Passphrase“ geschützt wurde, funktionieren alle nachfolgenden Anmeldungen auf dem Server ohne Eingabe eines Passworts. Anderenfalls muss der private Schlüssel jedes Mal erneut unter Eingabe der Passphrase entschlüsselt werden. Glücklicherweise ermöglicht es das Programm ssh-agent
, private Schlüssel im Speicher zu halten, so dass das Passwort nicht ständig neu eingegeben werden muss. Hierzu verwendet man einfach (einmal pro Sitzung) den Befehl ssh-add
, wobei Voraussetzung ist, dass die Sitzung bereits einer funktionsfähigen Instanz von ssh-agent
zugeordnet ist. Debian aktiviert dieses Programm standardmäßig beim Start einer grafischen Sitzung, es kann jedoch durch eine Änderung der Datei /etc/X11/Xsession.options
deaktiviert sein. In einer Konsolensitzung kann es manuell mit dem Befehl eval $(ssh-agent)
gestartet werden.
9.2.1.2. Entfernte X11-Anwendungen benutzen
Das SSH-Protokoll ermöglicht die Weiterleitung grafischer Daten („X11“-Sitzung, nach dem Namen des am weitesten verbreiteten grafischen Systems in Unix); der Server stellt hierbei einen besonderen Kanal für diese Daten bereit. Konkret bedeutet dies, dass ein aus der Ferne ausgeführtes, grafisches Programm vom X.org-Server auf dem lokalen Bildschirm dargestellt werden kann, und dass die gesamte Sitzung (Eingabe und Anzeige) abgesichert ist. Da entfernte Anwendungen durch diese Funktion das lokale System beeinträchtigen können, ist sie standardmäßig deaktiviert. Sie kann aktiviert werden, indem man in der Serverkonfigurationsdatei (/etc/ssh/sshd_config
) die Option X11Forwarding yes
einstellt. Schließlich muss der Benutzer diese Funktion anfordern, indem er die Option -X
zur Befehlszeile ssh
hinzufügt.
9.2.1.3. Verschlüsselte Tunnel mit Port-Weiterleitung einrichten
Die Optionen
-R
und
-L
des Befehls
ssh
ermöglichen es, „verschlüsselte Tunnel“ zwischen zwei Rechnern zu erstellen, und so einen lokalen TCP-Port (siehe
ZURÜCK ZU DEN GRUNDLAGEN TCP/UDP in der Seitenleiste) sicher an einen entfernten Rechner weiterzuleiten und umgekehrt.
ssh -L 8000:server:25 intermediary
eröffnet eine SSH-Sitzung mit dem Host
intermediary
und nimmt am lokalen Port 8000 Verbindungen an (siehe
Abbildung 9.2, „Einen lokalen Port mit SSH weiterleiten“). Für jede Verbindung, die an diesem Port hergestellt wird, baut
ssh
eine Verbindung vom Rechner
intermediary
zum Port 25 des
server
auf und verknüpft beide Verbindungen.
ssh -R 8000:server:25 intermediary
eröffnet auch eine SSH-Sitzung zum Rechner
intermediary
, aber
ssh
nimmt dann auf diesem Rechner an Port 8000 Verbindungen an (siehe
Abbildung 9.3, „Einen entfernten Port mit SSH weiterleiten“). Jede Verbindung, die an diesem Port hergestellt wird, veranlasst
ssh
, eine Verbindung vom lokalen Rechner zum Port 25 des
server
zu öffnen und beide Verbindungen miteinander zu verknüpfen.
In beiden Fällen werden Verbindungen zu Port 25 auf dem Host server
hergestellt, die durch den SSH-Tunnel laufen, der zwischen dem lokalen Rechner und dem Rechner intermediary
hergestellt wurde. Im ersten Fall ist der Eingang zum Tunnel der lokale Port 8000, und die Daten laufen zum Rechner intermediary
, bevor sie zum server
im „öffentlichen“ Netzwerk geleitet werden. Im zweiten Fall sind Ein- und Ausgang im Tunnel vertauscht: der Eingang ist Port 8000 auf dem Rechner intermediary
, der Ausgang ist auf dem lokalen Host, und die Daten werden dann zum server
geleitet. In der Praxis ist der Server normalerweise entweder der lokale Rechner oder der intermediäre. Auf diese Weise sichert SSH die Verbindung von einem Ende zum anderen.
9.2.2. Entfernte grafische Arbeitsflächen benutzen
VNC (Virtual Network Computing) ermöglicht aus der Ferne Zugriff auf grafische Arbeitsflächen.
Dieses Hilfsprogramm wird vor allem zur technischen Unterstützung eingesetzt; der Administrator kann die Fehler sehen, denen ein Benutzer gegenübersteht, und ihm die richtige Vorgehensweise zeigen, ohne vor Ort sein zu müssen.
Zunächst muss der Benutzer den Zugriff auf seine Sitzung erlauben. Die grafischen Arbeitsumgebungen GNOME und KDE enthalten vino
beziehungsweise krfb
, die eine grafische Schnittstelle bereitstellen, über die der Zugriff auf eine bestehende Sitzung mittels VNC möglich ist (beide werden bezeichnet als Entfernter Bildschirm sowohl in der Anwendungsübersicht von GNOME als auch im KDE Menü). Bei anderen grafischen Arbeitsumgebungen dient der Befehl x11vnc
(aus dem gleichnamigen Debian-Paket) diesem Zweck; man kann ihn für den Benutzer über ein besonderes Icon verfügbar machen.
Wenn die grafische Sitzung durch VNC freigeschaltet wurde, muss sich der Administrator über einen VNC-Client mit ihr verbinden. GNOME verfügt zu diesem Zweck über vinagre
und remmina
, während KDE krdc
enthält (im Menü unter → → ). Es gibt weitere VNC-Clients, die die Befehlszeile verwenden, wie zum Beispiel xvnc4viewer
im gleichnamigen Debian-Paket. Sobald die Verbindung hergestellt ist, kann der Administrator sehen, was vorgeht, kann aus der Ferne auf dem Rechner arbeiten und dem Benutzer zeigen, wie er vorgehen soll.
VNC funktioniert auch für mobile Anwender oder für Angestellte, die sich gelegentlich von zu Hause aus anmelden müssen, um auf einen entfernten Bildschirm ähnlich dem an ihrem Arbeitsplatz zuzugreifen. Die Konfiguration eines derartigen Dienstes ist komplizierter: zunächst installieren Sie das Paket vnc4server, passen die Konfiguration des Display Managers dahingehend an, dass er Anfragen an XDMCP Query
annimmt (für gdm3
kann dies durch Hinzufügen von Enable=true
im Abschnitt “xdmcp” von /etc/gdm3/daemon.conf
) und starten schließlich den VNC-Server mit inetd
, so dass eine Sitzung automatisch beginnt, wenn ein Benutzer sich anzumelden versucht. Sie können zum Beispiel folgende Zeile zu /etc/inetd.conf
hinzufügen:
5950 stream tcp nowait nobody.tty /usr/bin/Xvnc Xvnc -inetd -query localhost -once -geometry 1024x768 -depth 16 securitytypes=none
Das Umleiten ankommender Verbindungen zum Display Manager löst das Problem der Legitimierung, weil nur Benutzer mit einem lokalen Konto den Anmeldeschirm von gdm
passieren können (oder in gleicher Weise kdm
, xdm
usw.). Da dieses Verfahren problemlos mehrere gleichzeitige Anmeldungen ermöglicht (vorausgesetzt, dass der Server ausreichend leistungsfähig ist), kann es sogar dazu verwendet werden, vollständige Arbeitsflächen für mobile Benutzer bereitzustellen (oder für weniger leistungsstarke Arbeitsplatzrechner, die als Thin Clients konfiguriert sind). Benutzer melden sich einfach mit vncviewer server
:50
beim Bildschirm des Servers an, da der verwendete Port 5950 ist.