
In diesem Beitrag entwickeln wir ein Verfahren für den Notzugriff auf SSH-Hosts unter Verwendung von Sicherheits-Hardware-Schlüsseln im Offline-Modus. Dies ist nur einer der Ansätze, den Sie anpassen können. Wir werden die SSH-Zertifizierungsstelle für unsere Hosts auf dem Sicherheits-Hardware-Schlüssel speichern. Dieses Schema funktioniert praktisch auf jedem OpenSSH, einschließlich SSH mit Single Sign-On.
Warum das Ganze? Nun, es ist eine Notlösung. Es ist ein Hintertürchen, das Ihnen den Zugriff auf Ihren Server ermöglicht, wenn aus irgendeinem Grund nichts anderes mehr hilft.
Warum Zertifikate anstelle von öffentlichen/privaten Schlüsseln für den Notzugriff verwenden?
- Im Gegensatz zu öffentlichen Schlüsseln kann die Gültigkeitsdauer von Zertifikaten sehr kurz sein. Sie können ein Zertifikat generieren, das eine Minute oder sogar fünf Sekunden gültig ist. Nach Ablauf dieser Frist wird das Zertifikat für neue Verbindungen unbrauchbar. Dies ist ideal für den Notzugriff.
- Sie können ein Zertifikat für jedes Benutzerkonto auf Ihren Hosts erstellen und solche "Einmal"-Zertifikate bei Bedarf an Kollegen senden.
Was Sie benötigen
- Sicherheits-Hardware-Schlüssel, die resident keys unterstützen.
Resident Keys sind kryptografische Schlüssel, die vollständig im Sicherheitsschlüssel gespeichert werden. Manchmal sind sie durch einen alphanumerischen PIN-Code geschützt. Der öffentliche Teil des resident keys kann, wenn nötig, zusammen mit dem Descriptor des privaten Schlüssels aus dem Sicherheitsschlüssel exportiert werden. Unterstützung für resident keys bieten beispielsweise USB-Schlüssel der Yubikey 5-Serie. Es ist wünschenswert, dass sie ausschließlich für den Notzugriff auf den Host bestimmt sind. Für diesen Beitrag werde ich nur einen Schlüssel verwenden, aber Sie sollten einen zusätzlichen als Backup haben. - Einen sicheren Ort zur Aufbewahrung dieser Schlüssel.
- OpenSSH Version 8.2 oder höher auf Ihrem lokalen Computer und auf den Servern, auf die Sie Notzugriff benötigen. Ubuntu 20.04 wird mit OpenSSH 8.2 geliefert.
- (optional, aber wünschenswert) CLI-Tool zur Überprüfung von Zertifikaten.
Vorbereitung
Zunächst müssen Sie eine Zertifizierungsstelle erstellen, die sich auf dem Sicherheitsschlüssel befindet. Stecken Sie den Schlüssel ein und starten Sie:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]Als Kommentar (-C) habe ich yubikey-9-512-742@smallstep.com angegeben, um nicht zu vergessen, zu welchem Sicherheitsschlüssel dieses Zertifizierungszentrum gehört.
Neben der Hinzufügung des Schlüssels zu Yubikey werden lokal zwei Dateien generiert:
- sk-user-ca, ein Schlüsseldescriptor, der auf den privaten Schlüssel verweist, der im Sicherheitsschlüssel gespeichert ist,
- sk-user-ca.pub, der der öffentliche Schlüssel für Ihr Zertifizierungszentrum sein wird.
Aber keine Sorge, auf Yubikey befindet sich noch ein weiterer privater Schlüssel, der nicht extrahiert werden kann. Daher ist hier alles sicher.
Fügen Sie auf Hosts im Namen des Benutzers root (sofern noch nicht geschehen) die folgende Zeile in die Konfiguration Ihres SSHD (\/etc\/ssh\/sshd_config) ein:
TrustedUserCAKeys \/etc\/ssh\/ca.pubFügen Sie dann den öffentlichen Schlüssel (sk-user-ca.pub) zu \/etc\/ssh\/ca.pub auf dem Host hinzu.
Starten Sie den Dienst neu:
# /etc/init.d/ssh restartJetzt können wir versuchen, auf den Host zuzugreifen. Aber zuerst benötigen wir ein Zertifikat. Erstellen Sie ein Schlüsselpaar, das mit dem Zertifikat verbunden ist:
$ ssh-keygen -t ecdsa -f emergencyZertifikate und SSH-Paare
Manchmal hat man das Bedürfnis, ein Zertifikat als Ersatz für ein Paar aus öffentlichem/privatem Schlüssel zu verwenden. Aber für die Benutzerauthentifizierung reicht ein einzelnes Zertifikat nicht aus. Jedes Zertifikat hat auch einen zugehörigen privaten Schlüssel. Deshalb müssen wir dieses «Notfall»-Schlüsselpaar generieren, bevor wir uns ein Zertifikat ausstellen. Wichtig ist, dass wir dem Server das signierte Zertifikat zusammen mit dem Schlüsselpaar zeigen, für das wir den privaten Schlüssel besitzen.So bleibt der Austausch öffentlicher Schlüssel weiterhin lebendig. Das funktioniert sogar mit Zertifikaten. Zertifikate befreien den Server einfach von der Notwendigkeit, öffentliche Schlüssel zu speichern.
Erstellen Sie nun das Zertifikat selbst. Ich benötige die Authentifizierung des Benutzers ubuntu in einem Zeitraum von 10 Minuten. Sie können es nach Ihrem eigenen Geschmack machen.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergencySie werden aufgefordert, das Zertifikat mit Fingerabdrücken zu signieren. Sie können zusätzliche Benutzernamen angeben, die durch Kommas getrennt sind, z. B. -n ubuntu,carl,ec2-user.
Das ist es, jetzt haben Sie ein Zertifikat! Jetzt müssen die richtigen Berechtigungen festgelegt werden:
$ chmod 600 emergency-cert.pubDanach können Sie den Inhalt Ihres Zertifikats einsehen:
$ step ssh inspect emergency-cert.pubSo sieht mein Zertifikat aus:
emergency-cert.pub
Typ: ecdsa-sha2-nistp256-cert-v01@openssh.com Benutzerzertifikat
Öffentlicher Schlüssel: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
Signierende CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
Schlüssel ID: "test-key"
Seriennummer: 0
Gültig: von 2020-06-24T16:53:03 bis 2020-06-24T17:03:03
Prinzipale:
ubuntu
Kritische Optionen: (keine)
Erweiterungen:
permit-X11-forwarding
permit-agent-forwarding
permit-port-forwarding
permit-pty
permit-user-rcHier ist der öffentliche Schlüssel – der von uns erstellte Schlüssel emergency, verbunden mit der Zertifizierungsstelle sk-user-ca.
Endlich sind wir bereit, den SSH-Befehl auszuführen:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$- Jetzt können Sie Zertifikate für jeden Benutzer auf dem Host erstellen, der Ihrer Zertifizierungsstelle vertraut.
- Sie können emergency entfernen. Sie können sk-user-ca behalten, aber Sie benötigen es nicht, da es sich auch auf dem Sicherheitsschlüssel befindet. Möglicherweise möchten Sie auch den ursprünglichen PEM-öffentlichen Schlüssel von Ihren Hosts entfernen (z. B. in ~/.ssh/authorized_keys für den Benutzer ubuntu), falls Sie ihn für den Notzugang verwendet haben.
Notzugang: Aktionsplan
Stecken Sie den Sicherheitsschlüssel ein und führen Sie den Befehl aus:
$ ssh-add -KSo fügen Sie den öffentlichen Schlüssel der Zertifizierungsstelle und den Schlüsseldeskriptor zum SSH-Agenten hinzu.
Exportieren Sie nun den öffentlichen Schlüssel, um das Zertifikat zu erstellen:
$ ssh-add -L | tail -1 > sk-user-ca.pubErstellen Sie ein Zertifikat mit einer Gültigkeitsdauer, zum Beispiel nicht länger als eine Stunde:
$ ssh-keygen -t ecdsa -f emergency
$ ssh-keygen -Us sk-user-ca.pub -I test-key -n [username] -V -5m:+60m emergency
$ chmod 600 emergency-cert.pubUnd nun wieder SSH:
$ ssh -i emergency username@hostWenn Ihre Datei .ssh/config bei der Verbindung Probleme verursacht, können Sie ssh mit dem Parameter -F none ausführen, um sie zu umgehen. Wenn Sie das Zertifikat einem Kollegen senden müssen, ist die einfachste und sicherste Option . Dafür benötigt man nur zwei Dateien – in unserem Fall sind das emergency und emergency-cert.pub.
Was mir an diesem Ansatz gefällt, ist die Hardwareunterstützung. Sie können Sicherheitsschlüssel im Safe aufbewahren, und sie gehen nirgendwohin.
Als Werbung
Epische Server sind mit leistungsstarken AMD-Prozessoren, CPU-Kernfrequenz bis zu 3,4 GHz. Die maximale Konfiguration kann nahezu jede Aufgabe lösen – 128 CPU-Kerne, 512 GB RAM, 4000 GB NVMe. Machen Sie mit!
Quelle: habr.com
