Probleme mit dem SSH-Service (und dem Typen, der vor meinem Rechner hockt und meinen Kaffe trinkt ;) )

Hallo,

nach längerer Abwesenheit habe ich endlich mal wieder Zeit (und vor allem auch Lust) gefunden einen Beitrag zu schreiben 😉 In nächster Zeit wird es denke ich wieder etwas mehr zu lesen geben. Ich will mich hier nicht festlegen, aber ein Beitrag pro Monat sollte möglich sein.

Aber nun zum eigentlichen Thema:

Wie vielleicht einige meiner Leser wissen betreibe ich einen kleinen Server bei mir zu Hause. Gestern Abend wollte ich mich via. SSH anmelden, um nach dem Rechten zu sehen. Ich bekam ein „Server refused our key“ – gut, probieren wir es nochmal…wieder das gleiche. Tja.

Hier an dieser Stelle sei gesagt, dass ich mich einen Tag vorher auf dem Server angemeldet habe, um eine wenig am SSH-Server herumzuspielen, währenddessen habe ich das „authorized_keys2“ File aus meinem Home-Verzeichniss verschoben und später als root wieder zurückkopiert. Merkt ihr was? Ich war zu dieser Zeit jedenfalls nicht geistig in der Lage zu kapieren warum ich nicht auf den Server kam… (Wenn ihr an dieser Stelle schon wisst, warum, dann schreibt es in eine Kommentar – nicht schummeln 😉 )

Als ich nun nach ein paar Versuchen nicht auf den Server kam dachte ich an das „worst case szenario“. Da mein Server auch aus dem Internet erreichbar ist, kam die Vermutung auf, dass sich wohl ein Angreifer eingeschlichen hat (obwohl das eigentlich dank public-private-key Authentifizierung nicht möglich ist – aber der Angreifer hätte ja theoretisch eine Sicherheitslücke ausnutzen können…). Als erstes schaltete ich den Server aus und machte mit dd (für Windows-User empfehle ich Win32-DiskImager) ein Festplattenimage. Dieses konvertierte ich in mit dem Befehl

 VboxManage convertfromraw –format VDI [fileIn].img [fileout].vdi

und importierte es als virtuelle Festplatte in eine Ubuntu-VM. Dannach fiel mir ein, dass vlt. die externe Firewall etwas gemerkt haben könnte, allerdings fand ich nur das übliche „weiße Rauschen“ d.h. Bots, die verschiedene User-Accounts durchprobierten. Also zurück zu unserem Image: Zuerst inspizierte ich das keyfile in meinem Home-Verzeichniss und fand es leer vor, allerdings fand ich, als ich es als root öffnete, den key vor (auch hier habe ich noch nicht kapiert, was los war).

Ein paar logs, bash_historys und eine Kaffe später beschloss ich mich aufs Ohr zu hauen und einfach eine Nacht darüber zu schlafen. Als ich mich am nächsten Tag mit jemand anderem über das Problem unterhielt, viel es mir wie Schuppen von den Augen…

Zur Erinnerung ich war root, als ich die Datei in mein Home-Verzeichnis schob! Na? Genau, das heißt, dass nach dem kopieren auch root Besitzer der Datei war und der ssh-Service die Datei nicht mehr lesen durfte… Also änderte ich die Zugriffsrechte baute die Festplatte wieder ein und voilá, es klappt wieder 😉

Ich hoffe euch hat die kleine Story gefallen und ihr könnt im Nachhinein ebenso darüber lachen wie ich 😉 Wie auch immer, ich habe meinen Server zurück und ihr habt eine Story. Ende gut, alles gut.

Vielen Dank fürs Lesen! Anmerkungen? Fragen? Schreibt sie gerne in die Kommentare.

Liebe Grüße,

splix

2 Faktor Authentifizierung für ssh mit Google Authenticator

Hallo,

dieses mal geht es um die 2-Faktor-Auhtentifizierung für den ssh Service. Ein Passwort alleine ist heutzutage fast schon wieder überholt, aber eine sonst übliche Authentifizierung über einen ssh-Schlüssel ist umständlich, denn jedes Gerät, das auf den Server zugreifen soll braucht diesen Schlüssel. Nun ist es auch keine Option, den Schlüssel einfach auf einen öffentlichen Server hochzuladen und sich bei Bedarf zu besorgen, denn sonst könnte man ja gleich drauf verzichten, wenn jeder Zugang zu dem Schlüssel hätte.

Ein möglicher Lösungsansatz ist die sogenannte 2-Faktor-Auhtentifizierung. Hierbei braucht man zusätzlich zu dem Benutzernamen und Passwort noch ein Einmalpasswort. Eine tolle Möglichkeit um dieses Konzept umzusetzen ist die Google-Authenticator App. Dabei generiert der Server auf dem der ssh Dienst läuft und das Smartphone ein Einmalpasswort. Das tolle daran ist, dass hierbei keinerlei Verbindung zwischen dem Server und dem Smartphone bestehen muss, d.h. man kann auch auf einem Gerät ohne mobile Datenverbindung jederzeit funktionsfähige Passwörter generieren (nützlich wenn man sich von einem fremden Rechner aus anmelden muss).

Wie geht das?

Am Anfang tauschen Server und Smartphone einmalig einen gemeinsamen Schlüssel aus. Mithilfe diesem und der aktuellen Uhrzeit (die auf beiden Geräten gleich sein muss) wird dann das Einmalpasswort generiert. Toll oder? 😉

Also, wie richte ich das jetzt ein…?

Ihr seit so weit gekommen? Super 😉 Die folgende Schritt für Schritt Anleitung zeit euch, wie ihr die 2-Faktor-Auhtentifizierung auf einem Debian/Ubuntu u.Ä einrichtet:

Als erstes braucht ihr das Google Authenticator Paket, installiert wird natürlich als root:

Vorher stellen wir mit einem update nochmal sicher, dass eure lokale Paketliste auf dem aktuellen Stand ist, dann wir installiert.

apt-get update
apt-get install libpam-google-authenticator

Also Nächstes müsst ihr noch ein paar Dateien anpassen, ich benutze dazu bevorzugt den Editor nano, weil er Syntax Highliting beherrscht und einfach zu bedienen ist.

nano /etc/pam.d/sshd

Dort fügt ihr folgende Zeile hinzu und verlasst mir Strg+x

auth required pam_google_authenticator.so

Nurnoch eine Datei, dann seit ihr auch schon fast fertig 😉

nano /etc/ssh/sshd_config

Hier müsst ihr folgende Zeile finden und das aktuelle no durch ein yes ersetzen:

ChallengeResponseAuthentication yes

Ob ihr es glaubt oder nicht, der großteil ist schon erledigt. Wechselt zu einem Benutzer eurer Wahl, der sich mit der 2-Faktor-Auhtentifizierung anmelden soll und führt folgende Befehl aus:

google-authenticator

Es werden euch ein paar Fragen gestellt, beantwortet die ersten beiden mit „y“. Den Rest könnt ihr wählen, wie ihr wollt. Ich empfehle die nächste mit „y“ und die folgenden beiden mit „n“ zu beantworten. Noch eine kleine Anmerkung zur letzten Frage, bei der ihr gefragt werdet, ob ihr ein Einlogglimit einrichten wollt: Das kann man auch sehr schön mit fail2ban machen, dazu wird es in Zukunft vielleicht auch einen Blog geben.

Wie auch immer, zu den Einstellungen: Installiert euch die Google-Authenticator App aus dem Playstore und scannt den Barcode. Zum Schluss solltet ihr noch die Notfallcodes an einem Sicheren Ort verwahren, denn solltet ihr, aus welchem Grund auch immer keinen Zugriff auf euer Hany haben, habt ihr auch keinen Zugriff auf euren Server. Diese Codes können euch dann den Hals retten.

Wechselt zu root und macht einen Neustart des ssh Service:

sudo su
/etc/init.d/ssh restart

Bleibt zur Sicherheit noch mit root eingeloggt, bis ihr sicher seit, dass es klappt.Herzlichen Glückwunsch, ihr habt jetzt eine funktionierende 2-Faktor-Auhtentifizierung! 😉

Liebe Grüße,

splix