Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Über die Autoren
Über dieses Buch
Linux vs. BSD
1 Der Kernel
2 Die Grundlagen aus Anwendersicht
3 Die Shell
4 Reguläre Ausdrücke
5 Tools zur Dateibearbeitung
6 Die Editoren
7 Shellskriptprogrammierung
8 Benutzerverwaltung
9 Grundlegende Verwaltungsaufgaben
10 Netzwerk-Grundlagen
11 Anwendersoftware für das Netzwerk
12 Netzwerkdienste
13 Mailserver unter Linux
14 LAMP
15 DNS-Server
16 Secure Shell
17 Die grafische Oberfläche
18 Window-Manager und Desktops
19 X11-Programme
20 Multimedia und Spiele
21 Softwareentwicklung
22 Crashkurs in C und Perl
23 Sicherheit
24 Prozesse und IPC
25 Bootstrap und Shutdown
26 Dateisysteme
27 Virtualisierung und Emulatoren
A Die Installation
B Lösungen zu den einzelnen Aufgaben
C Kommandoreferenz
D X11-InputDevices
E MBR
F Die Buch-DVDs
G Glossar
H Literatur

Download:
- ZIP, ca. 6,3 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Linux von Johannes Plötner, Steffen Wendzel
Das distributionsunabhängige Handbuch
Buch: Linux

Linux
2., aktualisierte und erweiterte Auflage
1119 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1090-4
gp 16 Secure Shell
  gp 16.1 Das Protokoll
    gp 16.1.1 SSH-Protokoll 1
    gp 16.1.2 SSH-Protokoll 2
  gp 16.2 Konfiguration eines OpenSSH-Servers
    gp 16.2.1 Die /etc/ssh/sshd_config
  gp 16.3 SSH nutzen
    gp 16.3.1 Remote-Login
    gp 16.3.2 Secure Copy
    gp 16.3.3 Authentifizierung über Public-Key-Verfahren
    gp 16.3.4 Secure File Transfer
    gp 16.3.5 X11 Forwarding
    gp 16.3.6 SSH-Port-Forwarding
  gp 16.4 Zusammenfassung
  gp 16.5 Aufgaben


Galileo Computing

16.3 SSH nutzen  downtop

Nachdem wir unseren Server konfiguriert haben, wollen wir einen Blick auf die vielfältigen Möglichkeiten werfen, die uns SSH bietet.


Galileo Computing

16.3.1 Remote-Login  downtop

Eines der wichtigsten, aber bei Weitem nicht das einzige Feature ist natürlich das Remote-Login. Dazu gibt es zwei Möglichkeiten: Einmal kann man unter Unix-Systemen natürlich den Kommandozeilenclient ssh nutzen, unter Windows-Systemen dagegen bietet sich ein Tool wie PuTTY an.

In Aktion: ssh

Das ssh-Tool gehört zum Inventar eines jeden Unix-Administrators, und Sie müssen es einfach kennen.

Der Aufruf des Programms selbst ist sehr einfach:

ploetner@elbs:~$ ssh root@192.168.128.171 
Password: 
Last login: Mon Apr 26 16:57:14 2004 
ldap-server:~#

Listing 16.8    Kommandozeilen-ssh unter Unix

In diesem Beispiel haben wir uns also von unserem aktuellen System »elbs« aus, auf dem wir mit der Benutzerkennung ploetner eingeloggt sind, mit dem Rechner mit der IP-Adresse 192.168.128.171 verbunden und uns dort als der Superuser root eingeloggt.

Auch wurde hier im Beispiel die uns von der Serverkonfiguration her bekannte PasswordAuthentication genutzt, die jedem Unix-Benutzer vom »normalen« Login-Vorgang her geläufig sein sollte. Zudem musste beim Server für diese Aktion die Option PermitRootLogin auf »yes« gesetzt sein, damit wir uns erfolgreich als Superuser einloggen konnten.


Galileo Computing

16.3.2 Secure Copy  downtop

Oft muss man zwischen Servern auch Dateien austauschen, was ohne entsprechende Dienste schon recht aufwendig und schnell auch unsicher werden kann. Aus diesem Grund kann man für diese Aufgabe sinnvollerweise auch den SSH-Zugang nutzen, sodass man nicht zu viele selten benötige Dienste pflegen muss und die Daten auch sicher kopieren kann.

Dateien über SSH kopieren

Egal von welchem Unix-System aus Sie arbeiten, die benötigten Clientprogramme werden in 99 % aller Fälle bereits installiert sein. Das gilt auch für scp, das ähnlich wie das bekannte cp-Kommando Dateien kopieren kann. Zusätzlich können sinnvollerweise Dateien per SSH von Servern geholt beziehungsweise auf Server kopiert werden. Dazu muss nur die Syntax von cp bezüglich Quelle beziehungsweise Ziel entsprechend angepasst werden:

$ scp user@host:quelle ziel

Listing 16.9    Dateien holen

$ scp quelle [quelle2 ...] user@host:ziel

Listing 16.10    Dateien senden

Genauso wie cp kann scp auch rekursiv Verzeichnisse kopieren oder Wildcards wie »*« oder »?« nutzen, die dann remote aufgelöst werden.

$ scp jploetner@172.20.2.1:~/Projekte/*.PNG . 
Password: 
pscp.PNG                100%   53KB  53.2KB/s   00:00 
PuTTYgen.PNG            100%   61KB  61.4KB/s   00:00 
PuTTY_term.PNG          100%   53KB  52.7KB/s   00:00 
PuTTY_X11.PNG           100%   63KB  62.8KB/s   00:00 
$

Listing 16.11    Dateien kopieren mit Wildcards


Galileo Computing

16.3.3 Authentifizierung über Public-Key-Verfahren  downtop

RSA in der Praxis

Im Folgenden wollen wir uns mit den bereits angesprochenen Public-Key-Verfahren zur Authentifizierung beim SSH-Server beschäftigen. Bevor man irgendwelche öffentlichen und privaten Schlüssel nutzen kann, muss man diese erst einmal erstellen.

Dazu dient das Kommando ssh-keygen, dem man über den Parameter »-t« noch den Algorithmus angeben muss, mit dem wir das Schlüsselpaar später nutzen wollen.

cvs@ploetner:~$ ssh-keygen -t rsa 
Generating public/private rsa key pair. 
Enter file in which to save the key (~/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in ~/.ssh/id_rsa. 
Your public key has been saved in ~/.ssh/id_rsa.pub. 
The key fingerprint is: 
df:4e:09:cc:33:02:0a:7f:30:9b:10:79:24:3d:e3:86 
  cvs@ploetner 
cvs@ploetner:~$

Listing 16.12    Erstellung eines Schlüsselpaares mittels ssh-keygen

Im Allgemeinen wird diese Entscheidung wohl zwischen RSA und DSA fallen, und hier im Beispiel haben wir uns für das Ihnen bereits bekannte RSA-Verfahren entschieden. Nach der Erzeugung des Schlüsselpaares fragt das Programm, in welcher Datei der erzeugte Schlüssel gespeichert werden soll. Meistens ist die Vorgabe /.ssh/id_rsa beziehungsweise /.ssh/id_dsa sinnvoll, es sei denn, man möchte den Schlüssel nicht für den aktuellen User auf diesem System generieren.

Als Nächstes wird nach einer Passphrase gefragt. Diese Passphrase wäre das Äquivalent zu einem ganz normalen Benutzerkennwort, da der private Schlüssel mit ihr verschlüsselt wäre. Sie müsste also bei jeder Benutzung des Schlüssels angegeben werden. Da wir uns aber gänzlich ohne Passwort einloggen möchten – und demzufolge ganz auf die Sicherheit und Integrität des privaten Schlüssels vertrauen –, geben wir keine Passphrase an.

Die Schlüsseldateien

Im Folgenden haben wir also zwei wichtige Dateien erstellt bekommen:

  • /.ssh/id_rsa
  • In dieser Datei liegt der private Schlüssel. Normalerweise ist dieser – sofern nichts anderes angegeben wurde -- bei RSA und DSA 1024 Bit lang, kann aber durch die »-b« Option auch verlängert werden. Wurde der Schlüssel nicht über eine Passphrase mit 3DES verschlüsselt, sollte man strengstens darauf achten, dass diese Datei von niemandem gelesen werden kann.
cvs@ploetner:~$ ls -l .ssh/id_rsa 
-rw-------  1 cvs  cvs  887 Jul 3 11:28 .ssh/id_rsa

Listing 16.13    Der private Schlüssel bei RSA: id_rsa

  • Im Falle einer Kompromittierung wären nämlich alle Systeme, auf die man von diesem User-Account aus über den Schlüssel Zugriff hätte, ebenfalls offen.
  • /.ssh/id_rsa.pub
  • Diese Datei enthält den öffentlichen Schlüssel unseres Schlüsselpaares, den wir im Folgenden auf den Servern verteilen müssen, auf denen wir uns später ohne Passwort einloggen wollen.

Dazu kopieren wir beispielsweise mit scp die id_rsa.pub in die Datei authorized_keys im .ssh-Verzeichnis des Benutzer-Accounts auf dem Server, auf dem wir uns nachher so problemlos einloggen möchten. In vielen Fällen müssen wir vorher aber erst noch besagtes Verzeichnis auf dem Rechner anlegen, bevor wir die Datei schließlich kopieren können:

cvs@ploetner:~$ ssh root@192.168.128.171 
The authenticity of host 'ldap-server 
  (192.168.128.171)' can't be established. 
RSA key fingerprint is 
  9e:00:79:9f:de:53:c2:27:2a:9b:4d:b6:eb:1e:b3:cc. 
Are you sure you want to continue connecting 
(yes/no)? yes 
Warning: Permanently added '192.168.128.171' (RSA) 
  to the list of known hosts. 
Password: 
Last login: Wed Jun 30 10:48:50 2004 from elbs 
ldap-server:~# mkdir .ssh 
ldap-server:~# scp cvs@ploetner:~/.ssh/id_rsa.pub . 
Password: 
id_rsa.pub              100%  222     0.2KB/s  00:00 
ldap-server:~# cat id_rsa.pub >> .ssh/authorized_keys 
ldap-server:~# exit 
logout

Listing 16.14    Den öffentlichen Schlüssel aktivieren

Dazu loggen wir uns zuerst per SSH auf dem Server ein und erstellen per mkdir das entsprechende Verzeichnis. Schließlich kopieren wir per scp den Schlüssel zuerst in das aktuelle Verzeichnis.

Da ja durchaus mehrere öffentliche Schlüssel »autorisierte Schlüssel« sein können, wollen wir die /.ssh/authorized_keys nicht einfach überschreiben, sondern hängen den Inhalt der Schlüsseldatei mittels cat und Ausgabeumleitung an die Datei an.

Sicheres Login ohne Passwort

Im Folgenden testen wir, ob die Authentifizierung ohne Passwort funktioniert:

cvs@ploetner:~$ ssh root@192.168.128.171 
Last login: Wed Jun 30 11:58:03 2004 from ploetner 
ldap-server:~#

Listing 16.15    Passwortloses Login über Public-Key-Authentifizierung

So eine Authentifizierung über Public-Key-Verfahren ist besonders beim Einsatz von Diensten und Skripts sinnvoll, die sich ohne Benutzermitwirkung automatisch auf fremden Systemen einloggen können sollen.

Achtung auf fremden Systemen

Damit das Ganze so schön funktioniert wie in dem eben vorgestellten Beispiel, muss auf dem Server die bereits erläuterte PubkeyAuthentication-Option gesetzt sein. <Wir haben also bisher immer implizit das SSH-Protokoll Version 2 genutzt, wie Sie vielleicht bereits an dem genutzten Verfahren (DSA) gemerkt haben.> Außerdem ist zu beachten, dass die Sicherheit bei einem Schlüssel ohne Passphrase allein darauf beruht, dass niemand außer dem betreffenden Benutzer auf ihn Zugriff hat.

Sicherheitsprobleme

Daraus ergeben sich natürlich Implikationen für Systeme, auf denen Sie kein Vertrauen in den Systemadministrator haben können – und dazu gehören unter Umständen auch Benutzer mit eingeschränkten sudo-Rechten. Schließlich kann root uneingeschränkt auf alle Dateien zugreifen, selbst wenn er formal in der Unix-Rechtemaske eben keine Rechte hat.

Achten Sie also darauf, von unsicheren Systemen aus niemals mit privaten Schlüsseln ohne Passphrase zu arbeiten.

Diese Anmerkungen haben natürlich nichts mit der authorized_keys und den öffentlichen Schlüsseln zu tun. Wenn Sie das Prinzip der asymmetrischen Kryptographie verstanden haben, dann ist Ihnen dieser Fakt auch ganz klar: Die Authentifizierung gelingt nämlich immer nur in einer Richtung, sie ist nicht bidirektional. Mit anderen Worten: Sie müssen zwei Schlüsselpaare erstellen, wenn Sie mittels Public-Key-Authentifizierung von System A auf System B und von System B auf System A zugreifen wollen.

Die authorized_keys-Datei sollte allerdings immer nur für den Besitzer der Datei schreibbar sein, da sich sonst jeder User, der Schreibrechte auf diese Datei besitzt, Zugriff zu dem Account verschaffen kann.


Galileo Computing

16.3.4 Secure File Transfer  downtop

Ersatz für FTP

Ist das sftp-Subsystem auf dem SSH-Server aktiviert, so kann man auch »normales« FTP über eine SSH-Verbindung laufen lassen. Man braucht dazu nichts weiter als das sftp-Programm, das Bestandteil der Open-SSH-Distribution ist. Einmal verbunden, kann man alle bereits vom normalen Konsolen-ftp bekannten Befehle nutzen:

$ sftp ploetner@comrades.are-crazy.org 
Connecting to comrades.are-crazy.org... 
sftp> ls 
.       ..       .alias   .bash_history  .bash_profile 
.bashrc .cshrc   .ssh 
sftp> get .bash_profile 
Fetching /home/ploetner/.bash_profile to .bash_profile 
~/.bash_profile             100%  704  0.7KB/s  00:01 
sftp> exit

Listing 16.16    Secure-FTP-Sitzung mit Public-Key-Authentication


Galileo Computing

16.3.5 X11 Forwarding  downtop

Entfernte Fenster

Damit die Administration von Unix-Servern perfekt wird, wollen wir noch die Benutzung des X11 Forwarding erläutern. Mit diesem Feature können ja bekanntermaßen auf dem Server ausgeführte X-Anwendungen auf dem Client in einem Fenster dargestellt werden.

Damit dies serverseitig überhaupt funktionieren kann, muss die Option X11Forwarding in der /etc/ssh/sshd_config aktiviert (»yes«) sein.

Auf der Clientseite benötigt man nur einen laufenden X-Server, also reicht zum Beispiel eine ganz normale KDE- oder Gnome-Sitzung als der Benutzer, der auch den ssh-Befehl ausführt, <Normalerweise kann nur der Benutzer auf den X-Server zugreifen, der ihn auch gestartet hat. Wollen Sie zum Beispiel als root ein Fenster auf einem Display öffnen, das jploetner geöffnet hat, so wird das ohne Weiteres nicht funktionieren. Demzufolge würde auch in diesem Fall ein von root versuchtes ssh mit X11 Forwarding fehlschlagen, da er keinen Zugriff auf den Desktop bekommt.> vollkommen aus.

Clientseitig kann man das Forwarding entweder über die /.ssh/config ähnlich wie in der sshd_config anschalten oder es explizit über die Kommandozeilenoption »-X« aktivieren.

Anschließend kann man auf dem Server einfach über ein »xterm &« versuchen, ein grafisches Terminal zu starten. Ist die Applikation auf dem Server installiert, sollte nun auf dem Desktop ein Fenster mit der Applikation aufgehen. Dieses kann nun ohne Einschränkungen bedient werden.

Vor allem für grafische Administrationstools wie YaST2 auf SuSE-Linux-Servern ist dieses Feature äußerst sinnvoll, da es nun wirklich keinen Grund mehr gibt, einen Server permanent mit Bildschirm und Tastatur auszustatten.


Galileo Computing

16.3.6 SSH-Port-Forwarding  toptop

Wie Sie bisher gesehen haben, stellt SSH schon selbst eine ganze Reihe nützlicher Dienste für die Remote-Administration von Unix-Servern bereit. Aber es gibt natürlich auch den Fall, dass man eine unverschlüsselte Kommunikation über eine unsichere Leitung übertragen muss oder aufgrund von Firewall-Regeln an bestimmte Ports nicht direkt herankommt.

Dienste tunneln

Um so ein Problem zu lösen, gibt es die sogenannten SSH-Tunnel. Dazu verbindet man sich ganz normal mit einem SSH-Server, der dann zu Ihrem gewünschten Kommunikationspartner eine Verbindung aufbaut.

Diese Verbindung wird anschließend über die von Ihnen gestartete SSH-Sitzung zu einem Port auf Ihrem lokalen Rechner weitergeleitet. Verbinden Sie sich nun zum Beispiel mittels Webbrowser oder einem beliebigen anderen Programm mit eben diesem lokalen Port auf Ihrem Rechner, so kommunizieren Sie indirekt über die verschlüsselte SSH-Verbindung – also über den Umweg über den SSH-Server – mit Ihrem Kommunikationspartner.

Einen Tunnel richtet man unter Linux wie folgt ein:

$ ssh -f -N -C -L 8888:rechner:6667 -l user ssh-server

Listing 16.17    Einen Tunnel aufbauen

Dieser Aufruf bewirkt Folgendes:

  • -f
  • Nach dem erfolgreichen Verbindungsaufbau forkt sich SSH in den Hintergrund, sodass die Shell nicht weiter blockiert wird.
  • -N
  • SSH führt nach einer erfolgreichen Verbindung auf der Gegenseite kein Kommando aus – wir wollen ja nur die Port-Weiterleitung.
  • -C
  • Die Verbindung wird komprimiert, damit der Datentransfer beschleunigt wird.
  • -L 8888:rechner:6667
  • Dies öffnet uns den lokalen Port 8888, der dann über den Tunnel mit dem Port 6667 auf rechner verbunden ist. Die Strecke zwischen den beiden Systemen wird mit SSH bis zu unserem SSH-Server getunnelt und läuft ab dort unverschlüsselt weiter.
  • -l user
  • Wir loggen uns auf dem SSH-Server mit dieser Benutzerkennung ein.
  • ssh-server
  • Wir verbinden uns, um den Tunnel aufzubauen, mit dem SSH-Port dieses Systems. Von dort wird dann die Verbindung zu dem im »-L«-Parameter spezifizierten System aufgebaut.

Jetzt müssen wir, um die verschlüsselte Verbindung zu nutzen, unserem Client-Programm nur noch sagen, dass wir statt mit rechner:6667 mit localhost:8888 sprechen wollen. Ein netstat --tcp sollte uns dann eine Verbindung zum localhost-Port 8888 und eine Verbindung zum ssh-server auf den SSH-Port anzeigen.

Als normaler Benutzer können Sie unter Unix keine der sogenannten »privilegierten« Ports unterhalb von 1024 belegen, da diese root vorbehalten sind. Wählen Sie lieber einen noch nicht belegten höheren Port.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: Linux






 Linux
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: Einstieg in Linux






 Einstieg in Linux


Zum Katalog: Debian GNU/Linux






 Debian GNU/Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-
 Programmierung


Zum Katalog: Praxisbuch Netzwerk-Sicherheit






 Praxisbuch
 Netzwerk-Sicherheit


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de