Überlegen Sie kurz, was passieren würde, wenn Sie morgen nicht mehr in eine Ihrer Maschinen hineinkämen. Der SSH-Schlüssel lag auf dem Laptop von jemandem, der nicht mehr da ist; das Administrator-Passwort hat ein Techniker geändert und niemand hat es notiert; eine Änderung an der SSH-Konfiguration ging schief, und die Tür fiel zu, mit Ihnen draußen. Die Maschine läuft weiter und die Website ist weiter erreichbar, aber Sie haben nichts mehr zu sagen, und in AWS öffnet Ihnen niemand: Es gibt kein „Passwort vergessen“ und keinen Support, der für Sie hineingeht. Lightsail hilft Ihnen unter Linux aus der Klemme (seine Web-Konsole meldet sich mit einem temporären Schlüssel an), unter Windows aber nur, wenn niemand je das Passwort angefasst hat, und in EC2 führt der offizielle Weg über das Stoppen der Maschine. Wenn das nicht hilft, bleiben Stunden mit Snapshots und neuen Maschinen, im ungünstigsten Moment. Diese Anleitung zeigt Ihnen, wie Sie eine Notfalltür vorbereiten, bevor Sie sie brauchen, so gebaut, dass nur Sie sie benutzen können.
Bevor Sie anfangen: was die Begriffe bedeuten
- Rettungsbenutzer
- Ein zusätzlicher Administratorbenutzer auf der Maschine, der nicht zum Arbeiten benutzt wird: nur, um den Zugang zu den übrigen wiederherzustellen.
- SSH-Zertifikat
- Ein „Schlüssel mit Ablaufdatum“, signiert von einer Autorität, der die Maschine vertraut. Anders als ein normaler Schlüssel muss er nicht auf die Maschine kopiert werden und kann nur fünf Minuten gültig sein.
- Zertifizierungsstelle (CA)
- Der Schlüssel, der diese Zertifikate signiert. Die Maschine lässt jeden herein, der ein von ihr signiertes Zertifikat mitbringt; ohne die CA lässt sich keines herstellen.
- from=
- Eine Bedingung in der SSH-Konfiguration: Dieser Benutzer darf nur von einer bestimmten IP-Adresse aus hinein.
- sudo / Administrators
- Die Art, Administrator zu sein unter Linux (sudo) und unter Windows (Gruppe Administrators).
Schritt für Schritt
Entscheiden Sie, wie die Notfalltür aussehen soll
Ein schlecht gemachter Rettungsbenutzer ist schlimmer als keiner: Ein in einem geteilten Dokument notiertes Passwort ist die erste Tür, die ein Angreifer ausprobiert. Was wir wollen: dass er kein Passwort hat, dass er nur von Ihnen signierte Zertifikate mit kurzer Gültigkeit akzeptiert, und möglichst, dass er Verbindungen nur von einer festen IP von Ihnen annimmt. So hat jemand, selbst wenn er den Benutzernamen kennt, nichts, was er ausprobieren könnte.
Legen Sie eine Zertifizierungsstelle an (nur einmal)
Auf Ihrem Rechner, nicht auf der Maschine:
ssh-keygen -t ed25519 -f ca_rescate -C "CA de rescate"Bewahren Sie
ca_rescate(den privaten) an einem sicheren Ort auf: in einem Passwort-Manager oder auf einer verschlüsselten Festplatte. Kopieren Sie ihn niemals auf die Maschinen. Die Dateica_rescate.pubist die, die auf jede Maschine kommt.Bereiten Sie die Linux-Maschine vor
Melden Sie sich wie immer per SSH an (noch können Sie) und, mit sudo:
sudo useradd -m -s /bin/bash -c "Usuario de rescate" rescate sudo usermod -p "*" rescate # sin contraseña valida, sin bloquear echo "rescate ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/90-rescate sudo chmod 440 /etc/sudoers.d/90-rescate sudo cp ca_rescate.pub /etc/ssh/ca_rescate.pub echo 'from="TU.IP.FIJA" rescate' | sudo tee /etc/ssh/principales_rescateUnd in
/etc/ssh/sshd_config(oder einer Datei in/etc/ssh/sshd_config.d/), am Anfang:TrustedUserCAKeys /etc/ssh/ca_rescate.pub AuthorizedPrincipalsFile /etc/ssh/principales_rescatePrüfen und neu laden:
sudo sshd -t && sudo systemctl reload ssh. Der Benutzerrescatehat kein Passwort und akzeptiert nur Zertifikate Ihrer CA, und nur von Ihrer IP, wenn Siefrom=gesetzt haben.Bereiten Sie die Windows-Maschine vor
Windows Server 2019 und neuer bringen OpenSSH als optionales Feature mit. In PowerShell als Administrator:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0, starten Sie den Dienstsshdund öffnen Sie Port 22 in der Windows-Firewall und in der von Lightsail oder EC2 (nur für Ihre IP). Legen Sie den Benutzer mit einem langen zufälligen Passwort an, das Sie nirgends notieren (legen Sie ihn nicht ohne Passwort an: Windows blockiert standardmäßig den Netzwerkzugriff von Konten mit leerem Passwort, und OpenSSH zählt als Netzwerkzugriff), nehmen Sie ihn in Administrators auf, kopieren Sieca_rescate.pubund die Principals-Datei nachC:\ProgramData\ssh\und setzen Sie in dersshd_configdesselben Ordners dieselben zwei Zeilen wie unter Linux (die Pfade mit__PROGRAMDATA__/ssh/). Ein Detail, das Stunden kostet: OpenSSH unter Windows lehnt Authentifizierungsdateien ab, die andere Benutzer lesen können, also entfernen Sie die Vererbung der Berechtigungen und lassen Sie nur Administrators und SYSTEM:icacls FICHERO /inheritance:r /grant Administrators:F /grant SYSTEM:F. Starten Siesshdneu. Wenn beim Anmelden PowerShell statt cmd erscheinen soll, setzen Sie den RegistrierungsschlüsselHKLM:\SOFTWARE\OpenSSH\DefaultShellaufpowershell.exe.Testen Sie die Tür, bevor Sie sie brauchen
Erzeugen Sie einen normalen Schlüssel und signieren Sie ihn mit der CA für fünf Minuten:
ssh-keygen -t ed25519 -f temporal -N "" ssh-keygen -s ca_rescate -I "prueba" -n rescate -V +5m temporal.pub ssh -i temporal rescate@IP.DE.LA.MAQUINA sudo -n true && echo OKWenn Sie OK sehen, funktioniert die Tür. Nach fünf Minuten verliert das Zertifikat von selbst seine Gültigkeit: Es gibt nichts zu widerrufen oder zu löschen.
Wenn Sie den Zugang schon verloren haben: was Sie mit der offenen Tür tun
Melden Sie sich mit einem neuen Zertifikat an und reparieren Sie den Administrator: unter Linux
sudo passwd ubuntu(oder der jeweilige Benutzer) oder fügen Sie Ihren neuen öffentlichen Schlüssel seiner~/.ssh/authorized_keyshinzu; unter Windowsnet user Administrator NUEVA-CONTRASEÑA. Wenn das Konto gesperrt war,sudo passwd -u usuarioodernet user usuario /active:yes.Und wenn Sie keine Notfalltür hatten
Linux in Lightsail: Die Web-Konsole von Lightsail meldet sich mit einem temporären Schlüssel an, also können Sie von dort aus das aus dem vorherigen Schritt tun. Windows in Lightsail: Die Konsole gibt Ihnen das Administrator-Passwort nur, wenn niemand es geändert hat; sonst müssen Sie einen Snapshot und eine neue Maschine anlegen. EC2: Das offizielle Verfahren AWSSupport-ResetAccess von Systems Manager setzt Passwort oder Schlüssel zurück, indem es die Maschine stoppt und startet.
Und wenn es auch keinen Snapshot gibt
Das ist das Ende der Kette, und man sollte es nüchtern betrachten: Wenn man nicht hineinkommt und keine Kopie der Maschine existiert, geht alles verloren, was darin ist. Die Anwendung, die Datenbank, die Dateien, die Konfigurationen. AWS kann nicht für Sie hineingehen und nicht wiederherstellen, was nicht kopiert wurde, und es gibt keinen technischen Dienst, den man anrufen könnte. Deshalb sind die Notfalltür und die automatischen Snapshots keine zwei Optionen, zwischen denen man wählt: Es sind die beiden Dinge, die einen einstündigen Schreck vom Verlust des Geschäfts eines Kunden trennen.
Was schiefgehen kann
„Permission denied“, obwohl das Zertifikat korrekt ist
Fast immer ist es das from=: Sie kommen von einer anderen IP. Oder das Passwortfeld des Benutzers ist mit ! gesperrt (so lässt es useradd auf manchen Systemen standardmäßig): Setzen Sie * mit usermod -p "*".
„Certificate invalid: not yet valid“ im Protokoll von sshd
Die Uhr der Maschine geht nach. Ein Zertifikat für Minuten hat eine Startzeit, und wenn der Server glaubt, sie sei noch nicht erreicht, lehnt er es mit einem Permission denied ab, das nichts erklärt: Man sieht es nur mit LogLevel DEBUG. Unter Linux sagt Ihnen timedatectl, ob die Zeit synchronisiert ist, und chronyc makestep korrigiert sie; unter Windows w32tm /resync. Lassen Sie beim Signieren immer einen Spielraum nach hinten (-V -15m:+5m): Ein früherer Beginn verlängert nichts Gefährliches, denn das Ablaufdatum bleibt dasselbe.
Die Maschine verwendete schon TrustedUserCAKeys
Das ist bei allen Lightsail-Maschinen der Fall: Ihre Web-Konsole arbeitet mit einer eigenen Autorität, und es kann nur eine Direktive TrustedUserCAKeys geben. Ändern Sie sie nicht, sonst verlieren Sie die Lightsail-Konsole. Legen Sie die Autorität stattdessen in die authorized_keys des Rettungsbenutzers selbst, die neben jeder anderen bestehen kann: cert-authority,principals="rescate",from="TU.IP.FIJA" ssh-ed25519 AAAA… (der Inhalt von ca_rescate.pub hinter den Optionen).
Jemand hat den Rettungsbenutzer gelöscht
Wer Administrator ist, kann ihn entfernen, das lässt sich nicht verhindern. Die Verteidigung ist, es jeden Tag zu prüfen (eine Testverbindung) und zu warnen, wenn es fehlschlägt, um ihn neu anzulegen, solange Sie noch Zugang haben.
Und wenn mir die CA gestohlen wird?
Wer die CA hat, kann Zertifikate für alle Ihre Maschinen herstellen. Deshalb gehört sie in einen Passwort-Manager und nicht in eine E-Mail, und deshalb ist das from= wichtig: Ohne Ihre IP nützt die CA allein nichts. Wenn Sie einen Verdacht haben, erzeugen Sie eine andere CA und wiederholen Sie den Vorbereitungsschritt auf jeder Maschine.
In Simplio
In Simplio heißt das Ersatzschlüssel: Jede Maschinenkarte hat diese Schaltfläche. „Ersatzschlüssel erstellen“ richtet auf der Maschine den Benutzer simplio-rescate ohne nutzbares Passwort ein, der nur von Simplio signierte Fünf-Minuten-Zertifikate und nur von der IP von Simplio akzeptiert; unter Linux macht Simplio das per SSH, unter Windows gibt es Ihnen ein Skript zum einmaligen Einfügen. Wenn Sie den Zugang verlieren, „Mit dem Ersatzschlüssel retten“: Mit Ihrem Code des zweiten Faktors (auch wenn Sie Administrator sind) wählen Sie den wiederherzustellenden Benutzer (oder lassen sich anzeigen, welche Benutzer es gibt) und was zu tun ist: ein neues Passwort, das nur einmal angezeigt und nicht gespeichert wird, Ihren öffentlichen Schlüssel hinzufügen, ihn entsperren oder eine Konsole als simplio-rescate. Simplio prüft jeden Tag, ob der Schlüssel noch öffnet, und benachrichtigt Sie, wenn jemand ihn entfernt hat. Wie der Ersatzschlüssel funktioniert und wie sicher er ist.
Dasselbe, in AWS und in Simplio
| In der AWS-Konsole | In Simplio | |
|---|---|---|
| Die Tür vorbereiten | CA, Benutzer, sudo, die zwei Dateien und die SSH-Direktiven auf jeder Maschine von Hand anlegen | Eine Schaltfläche „Ersatzschlüssel erstellen“ in der Karte: Simplio macht es per SSH (Linux) oder gibt Ihnen das Skript zum einmaligen Einfügen (Windows) |
| Die CA aufbewahren | Sie, in einem Passwort-Manager | Auf dem Simplio-Server, in der Secrets-Datei; die Maschinen akzeptieren den Rettungsbenutzer nur von der IP von Simplio |
| Sie benutzen | Ein Zertifikat von Hand signieren und per SSH anmelden | Zweiter Faktor, automatisches Fünf-Minuten-Zertifikat und geführte Aktionen: neues Passwort (wird einmal angezeigt), öffentlicher Schlüssel, entsperren |
| Wissen, dass sie noch funktioniert | Daran denken, sie zu testen | Tägliche Prüfung und Benachrichtigung, wenn der Ersatzschlüssel nicht mehr funktioniert |
| Nicht wissen, welchen Benutzer man wiederherstellen soll | Anmelden und in /home oder die Windows-Konten sehen | „Benutzer auf der Maschine anzeigen“: Liste mit Ordner, Administrator und letztem Zugriff |