Raspberry Pi – SSH Zugriff einschränken – Teil 3
Im letzten Teil haben wir mit denyhosts Hacker daran gehindert unser Benutzerpasswort durch simples probieren zu erraten. Damit ist nun fast nicht mehr möglich ins System über SSH einzubrechen. Was passiert aber, wenn der Hacker aus einer anderen Quelle bereits unser Passwort besitzt? Stehen ihm dann alle Türen offen? Ich zeige euch im letzten Schritt die vermutlich sicherste Art, um unerlaubten Zugriff zu verhindern.
Authentifizerung mit Schlüsseln
Die Authentifizierung an Systemen mit Benutzername und Passwort hat sich etabliert, weil es für Benutzer einfach ist. Leider ist diese Art der Sicherheitskontrolle aufgrund der in den beiden vorigen Teilen meiner Artikelserie genannten Risiken nicht sicher genug. Sobald man also ein wirklich sicheres System betreiben will bleibt einem keine andere Wahl. Man muss die Authentifizierungsmethode ändern.
Funktionsweise
Bei der Authentifizierung mit Schlüsseln erstellt jeder Benutzer der mit dem System arbeiten will lokal auf seinem System ein Schlüsselpaar:
- privater Schlüssel
dieser Schlüssel bleibt lokal auf dem System liegen und darf nicht weitergegeben werden! - öffentlicher Schlüssel
den öffentlichen Schlüssel kann man an alle Systeme weitergeben, an die man sich mit diesem Schlüsselpaar authentifizieren.
Schlüssel erstellen
Mit folgendem Kommando kann man sich auf seinem lokalen System ein Schlüsselpaar erstellen:
ssh-keygen
startet nun eine kurze interaktive Abfrage in der man zuerst den Speicherplatz des Keys eingeben kann (oder den Standardpfad bestätigt) und optional ein Passwort eingeben kann.
Ein Passwort ist immer eine gute Idee. Beim Anmelden über SSH mit Schlüsseln wird dann dieses abgefragt und nicht das vom Benutzer. Gibt man keines an, so kann man sich vom lokalen Computer ohne Passworteingabe anmelden. Wie in der Ausgabe zu lesen ist wurde im Benutzerordner unter .ssh (versteckter Ordner!) ein öffentlicher Schlüssel mit der Dateiendung *.pub erstellt. Diese kopieren wir nun auf den Raspberry Pi:
scp .ssh/id_rsa.pub pi@192.168.1.4:key
Scp funktioniert wie cp und kopiert eine Datei. Als Ziel geben wir hier den Benutzer, die IP Adresse und nach dem Doppelpunkt einen Dateinamen an. Nun liegt unser öffentliche Schlüssel im home Ordner vom Benutzer pi im Dateinamen key.
Konfiguration
Der letzte Schritt ist nun, dass wir am Raspberry Pi den Schlüssel in den richtigen Ordner kopieren und die Datei korrekt benennen. Wir melden uns also zB: über SSH am Raspberry Pi an und kopieren den Inhalt der Datei key in die korrekte Datei:
mkdir -p .ssh cat key >> .ssh/authorized_keys
Von nun an kann man sich vom Client Rechner mit Schlüsseln über SSH Authentifizieren. Achtung: es wird nun nicht mehr das Passwort vom Benutzer pi abgefragt, sondern jenes, dass bei der Schlüsselerstellung eingegeben wurde (oder gar keines).
Passwort Authentifizierung deaktivieren
Wenn man sich mit den Schlüsseln anmelden kann und soweit alles funktioniert ist es an der Zeit, die Passwort Authentifizierung, also das Anmelden über SSH mit dem Benutzer pi und seinem Passwort zu deaktivieren. Dazu muss man lediglich 2 Zeilen in /etc/ssh/sshd_config ändern:
sudo nano /etc/ssh/sshd_config PasswordAuthentication no UsePAM no
Hat man diese 2 Werte geändert muss man nur noch speichern und neu starten. Achtung! Nach dem Neustart kann man sich nur mehr über die Schlüssel anmelden. Sollte man diesen verlieren, hat man sich aus dem System ausgesperrt. Ohne Schlüssel kommt man also nicht mehr ins System. Es schadet also nicht unbedingt ein Backup seiner Schlüssel zu erstellen.
Netter Artikel, aber den public Key zu kopieren und an die authorized_keys Datei anzuhägen geht mit ssh-copy-id wesetlich bequemer: https://wiki.debian.org/SSH#Using_shared_keys