Einrichten der Secure Shell (OpenSSH)

Wichtung: 4

Beschreibung: Die Kandidaten sollen in der Lage sein, OpenSSH zu installieren und zu konfigurieren.

Wichtigste Wissensgebiete:
Einfache OpenSSH-Installation und -Problemlösung durchführen.
sshd für den automatischen Start beim Booten konfigurieren.

Liste wichtiger Dateien, Verzeichnisse und Anwendungen:
/etc/hosts.allow
/etc/hosts.deny
/etc/nologin
/etc/ssh/sshd_config
/etc/ssh_known_hosts
/etc/sshrc
sshd
ssh-keygen

SSH - Grundlagen

SSH steht für Secure Shell und ermöglicht das Einloggen auf entfernte Rechner. SSH bringt einen wichtigen Sicherheitsaspekt mit, welche bei telnet und rlogin (ebenfalls Programme für Remote-Login) fehlen: Verschlüsselung der Verbindung und der zu übertragenen Daten.

SSH-Verbindungen werden in der Regel über den Port 22 abgewickelt. Für eine SSH-Verbindung muss auf dem Server der SSH-Dämon sshd gestartet sein. Auf dem Client ist es dann möglich, sich mit dem Programm ssh auf dem entfernten Rechner einzuloggen:

// SSH-Verbindung aufbauen

# ssh root@192.168.2.1

Nachdem man nach einem Passwort gefragt wird (in diesem Fall das Root-Passwort des entfernten Rechners), kann man wie gewohnt über die Bash den entfernten Rechner administrieren. So als ob man direkt davor sitzen würde.

RSA und DSA - Digitale Signatur der Rechner

RSA und DSA sind Digitale Signaturen, welche einen Rechner eindeutig identfizieren. Ähnlich der MAC-Adresse einer Netzwerkkarte kann so sicherstellen, dass es sich wirklich um den Rechner handelt, bei dem man sich authentifizieren möchte.

Authentifizierung
Der Server identifiziert sich gegenüber dem Client mit der RSA-Signatur. So kann sich kein anderer Rechner als denjenigen SSH-Server ausgeben.

Der Client kann sich entweder mit einem öffentlichen Schlüssel (Pubkey-Authentifizierung, keine Passwortabfrage), der auf dem Server hinterlegt ist, oder einem normalen Textpasswort anmelden.

Sobald der Client eine Verbindung mit dem Server aufbauen möchte, schickt der Server ihm seine beiden Public-Keys (Server und Host Schlüssel). Der Client überprüft nun den Hostschlüssel mit dem lokalen Schlüssel, um einen falschen Server auszuschließen. Anschließend erzeugt der Client eine Zufallszahl und verschlüsselt sie mit den beiden Schlüsseln des Servers. Diese verschlüsselte Zahl wird an den Server geschickt. Nur dieser Server, der den passenden Secret-Key hat, kann die Zahl wieder entschlüsseln.

/etc/ssh/sshd_config - SSH-Server (sshd) konfigurieren

Der sshd wird über die Datei /etc/ssh/sshd_config konfiguriert. Hier eine Beispielkonfiguration:

Port 22
IdleTimeout 0
RhostsAuthentication no
PasswordAuthentication no
RhostsRSAAuthentication yes
KeyRegenerationInterval 0
PermitRootLogin no

Wichtige Optionen
Port 22 = Angabe des Ports
HostKey Dateiname = Spezifiziert die Datei, in der der Host-Schlüssel des Servers abgelegt ist. Normalerweise ist das die Datei /etc/ssh/ssh_host_key.
ServerKeyBits = Hier wird die Breite des Server-Schlüssels angegeben. Normalerweise 768.
KeyRegenerationInterval Zeit = Bestimmt, ab welcher Zeit der Server-Schlüssel neu generiert wird
PermitRootLogin no = Verbieten, dass Root sich über ssh einloggen kann
IgnoreRhosts yes|no = Sollen die Dateien ~/.rhosts und ~/.shosts ignoriert werden?
RhostsRSAAuthentication = sowohl Logins mit Paßwort als auch ohne dürfen von bekannten Remote-Hosts entgegengenommen werden.

Wichtige Dateien und Einstellungen

/etc/nologin

Wenn die Datei exisistiert, wird der Login für alle Nutzer außer Root verweigert. In dieser Datei kann der Systemverwalter noch angeben, warum die Login gesperrt ist.

PermitRootLogin

Wird diese Einstellung in der Datei /etc/ssh/sshd_config aud yes gesetzt, so wird root grundsätzlich der Login verwehrt.

IgnoreRhosts

Ebenfalls eine wichtige Einstellung in der Datei /etc/ssh/sshd_config. Hiermit kann festgelegt werden, ob die Konfigurationsdateien der alten (und unsicheren) r-Familie (rlogin, rcp, etc) ausgewertet sollen. Die Dateien lauten ~/.rhosts und ~/.shosts.

/etc/hosts.allow und /etc/hosts.deny

SSH wertet auch die Einträge in den Dateien /etc/hosts.allow und /etc/hosts.deny aus, greift dementsprechend auf die Funktionen des TCP-Wrappers zurück. In diesen Dateien kann man den Zugriff von bestimmten Rechnern steuern (erlauben oder verbieten).

~/.ssh/id_dsa und ~/.ssh/id_dsa.pub

Standardmäßig wird man nach einem Passwort gefragt, wenn man mit ssh user@server eine SSH-Verbindung startet. Dieses kann man bequem abstellen, indem man die Authorisierung Schlüssel abwickelt. Mit dem Programm ssh-keygen ist es möglich, einen eigenen Schlüssel zur Authentifizierung zu erstellen:

# ssh-keygen -t dsa

Hiermit werden Schlüssel generiert, welche in den Dateien ~/.ssh/id_dsa (Privat/Secret Key) und ~/.ssh/id_dsa.pub (Public Key) hinterlegt werden. Dieser Public Key muss letztendlich noch in das Verzeichnis ~/.ssh/authorized_keys kopiert werden, damit dieser dem Server auch bekannt ist. Anschließend erfolgt keine Passwortabfrage mehr.

Übersicht
ssh-keygen = Tool zum Erstellen der Keys auf dem Client
~/.ssh/id_dsa = Privat/Secret Key auf dem Client
~/.ssh/id_dsa.pub = Public Key auf dem Client
~/.ssh/authorized_keys = Public Key des Clients muss in das Verzeichnis auf dem Server kopiert werden

/etc/ssh_known_hosts

Die Dateien /etc/ssh/ssh_known_hosts und $HOME/.ssh/known_hosts enthalten die Public-Keys aller bekannten Rechner. Die globale Datei wird vom Systemverwalter administriert, die userbezogene wird automatisch angelegt und erweitert, sobald der User sich von einem bisher unbekannten Rechner einloggt.

scp - Kopieren von Daten über SSH

Mit scp ist es möglich, über die verschlüsselte Verbindung via ssh Daten zwischen zwei Rechnern zu kopieren. Hier macht sich oben genannte Möglichkeit bezüglich der Authorisierung mittels Schlüsseln positiv bemerkbar, denn dann muss nicht bei jeder Kopieraktion ein Passwort eingeben.

 // Kopieren auf Remote-Host
# scp /home/peter/ich.jpg sandra@sandrasPC:/home/sandra

// Kopieren von Remote-Host
# scp sandra@sandrasPC:/home/sandra/neu.txt /tmp

Weitere Informationen

http://www.openbsd.org/cgi-bin/man.cgi?query=sshd
http://www.openssh.com/
http://de.wikipedia.org/wiki/Secure_Shell
http://www.pro-linux.de/t_netzwerk/ssh.html
http://www.linux-fuer-alle.de/doc_show.php?docid=209&catid=16