Noi prescriem o procedură pentru accesul de urgență la gazdele SSH cu chei hardware

Noi prescriem o procedură pentru accesul de urgență la gazdele SSH cu chei hardware

În această postare, vom dezvolta o procedură pentru accesul de urgență la gazdele SSH folosind cheile de securitate hardware offline. Aceasta este doar o abordare și o puteți adapta în funcție de nevoile dvs. Vom stoca autoritatea de certificare SSH pentru gazdele noastre pe cheia de securitate hardware. Această schemă va funcționa pe aproape orice OpenSSH, inclusiv SSH cu conectare unică.

Pentru ce este toate acestea? Ei bine, aceasta este o opțiune de ultimă instanță. Aceasta este o ușă din spate care vă va permite să obțineți acces la serverul dvs. atunci când, din anumite motive, nimic altceva nu funcționează.

De ce să folosiți certificate în loc de chei publice/private pentru acces de urgență?

  • Spre deosebire de cheile publice, certificatele pot avea o durată de viață foarte scurtă. Puteți genera un certificat care este valabil timp de 1 minut sau chiar 5 secunde. După această perioadă, certificatul va deveni inutilizabil pentru noile conexiuni. Acesta este ideal pentru acces de urgență.
  • Puteți crea un certificat pentru orice cont de pe gazdele dvs. și, dacă este necesar, puteți trimite astfel de certificate „unică” colegilor.

Ce ai nevoie

  • Chei de securitate hardware care acceptă cheile rezidente.
    Cheile rezidente sunt chei criptografice care sunt stocate în întregime în cheia de securitate. Uneori sunt protejate de un PIN alfanumeric. Porțiunea publică a cheii rezidente poate fi exportată din cheia de securitate, opțional împreună cu handle-ul cheii private. De exemplu, cheile USB din seria Yubikey 5 acceptă chei rezidente.Este recomandabil ca acestea să fie destinate doar accesului de urgență la gazdă. Pentru această postare voi folosi o singură cheie, dar ar trebui să aveți una suplimentară pentru backup.
  • Un loc sigur pentru a păstra acele chei.
  • OpenSSH versiunea 8.2 sau o versiune ulterioară pe computerul local și pe serverele la care doriți să aveți acces de urgență. Ubuntu 20.04 este livrat cu OpenSSH 8.2.
  • (opțional, dar recomandat) Un instrument CLI pentru verificarea certificatelor.

Pregătire

Mai întâi, trebuie să creați o autoritate de certificare care va fi localizată pe cheia de securitate hardware. Introduceți cheia și rulați:

$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]

Ca comentariu (-C) am indicat [e-mail protejat]astfel încât să nu uitați cărei chei de securitate îi aparține această autoritate de certificare.

Pe lângă adăugarea cheii la Yubikey, două fișiere vor fi generate local:

  1. sk-user-ca, un handle de cheie care se referă la cheia privată stocată în cheia de securitate,
  2. sk-user-ca.pub, care va fi cheia publică pentru autoritatea dvs. de certificare.

Dar nu vă faceți griji, Yubikey stochează o altă cheie privată care nu poate fi recuperată. Prin urmare, totul este de încredere aici.

Pe gazde, ca root, adăugați (dacă nu ați făcut deja) următoarele la configurația SSHD (/etc/ssh/sshd_config):

TrustedUserCAKeys /etc/ssh/ca.pub

Apoi, pe gazdă, adăugați cheia publică (sk-user-ca.pub) la /etc/ssh/ca.pub

Reporniți demonul:

# /etc/init.d/ssh restart

Acum putem încerca să accesăm gazda. Dar mai întâi avem nevoie de un certificat. Creați o pereche de chei care va fi asociată cu certificatul:

$ ssh-keygen -t ecdsa -f emergency

Certificate și perechi SSH
Uneori este tentant să folosiți un certificat ca înlocuitor pentru o pereche de chei publice/private. Dar un certificat în sine nu este suficient pentru a autentifica un utilizator. Fiecare certificat are, de asemenea, asociată o cheie privată. Acesta este motivul pentru care trebuie să generăm această pereche de chei „de urgență” înainte de a ne emite un certificat. Important este că arătăm serverului certificatul semnat, indicând perechea de chei pentru care avem o cheie privată.

Deci, schimbul de chei publice este încă viu. Acest lucru funcționează chiar și cu certificate. Certificatele elimină pur și simplu necesitatea ca serverul să stocheze cheile publice.

Apoi, creați certificatul în sine. Am nevoie de autorizarea utilizatorului Ubuntu la interval de 10 minute. O poți face în felul tău.

$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency

Vi se va cere să semnați certificatul folosind amprenta dvs. Puteți adăuga nume de utilizator suplimentare separate prin virgule, de exemplu -n ubuntu,carl,ec2-user

Gata, acum ai certificat! În continuare, trebuie să specificați permisiunile corecte:

$ chmod 600 emergency-cert.pub

După aceasta, puteți vizualiza conținutul certificatului dvs.:

$ step ssh inspect emergency-cert.pub

Cam asa arata al meu:

emergency-cert.pub
        Type: [email protected] user certificate
        Public key: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
        Signing CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
        Key ID: "test-key"
        Serial: 0
        Valid: from 2020-06-24T16:53:03 to 2020-06-24T17:03:03
        Principals:
                ubuntu
        Critical Options: (none)
        Extensions:
                permit-X11-forwarding
                permit-agent-forwarding
                permit-port-forwarding
                permit-pty
                permit-user-rc

Aici cheia publică este cheia de urgență pe care am creat-o, iar sk-user-ca este asociat cu autoritatea de certificare.

În cele din urmă suntem gata să rulăm comanda SSH:


$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$

  1. Acum puteți crea certificate pentru orice utilizator pe o gazdă care are încredere în autoritatea dvs. de certificare.
  2. Puteți elimina situația de urgență. Puteți salva sk-user-ca, dar nu este nevoie, deoarece se află și pe cheia de securitate. De asemenea, poate doriți să eliminați cheia publică PEM originală de pe gazde (de exemplu în ~/.ssh/authorized_keys pentru utilizatorul ubuntu) dacă ați folosit-o pentru acces de urgență.

Acces de urgență: Plan de acțiune

Lipiți cheia de securitate și executați comanda:

$ ssh-add -K

Aceasta va adăuga cheia publică și descriptorul de cheie ale autorității de certificare la agentul SSH.

Acum exportați cheia publică pentru a face un certificat:

$ ssh-add -L | tail -1 > sk-user-ca.pub

Creați un certificat cu o dată de expirare, de exemplu, nu mai mare de o oră:

$ 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.pub

Și acum din nou SSH:

$ ssh -i emergency username@host

Dacă fișierul dvs. .ssh/config cauzează unele probleme la conectare, puteți rula ssh cu opțiunea -F none pentru a o ocoli. Dacă trebuie să trimiteți un certificat unui coleg, cea mai ușoară și mai sigură opțiune este Gaură de vierme magică. Pentru a face acest lucru, aveți nevoie doar de două fișiere - în cazul nostru, emergency și emergency-cert.pub.

Ceea ce îmi place la această abordare este suportul hardware. Puteți pune cheile de securitate într-un seif și nu vor merge nicăieri.

Despre drepturile de publicitate

Servere epice - E VPS ieftin cu procesoare puternice de la AMD, frecvența de bază a procesorului de până la 3.4 GHz. Configurația maximă vă permite să rezolvați aproape orice problemă - 128 de nuclee CPU, 512 GB RAM, 4000 GB NVMe. Alăturaţi-ne!

Noi prescriem o procedură pentru accesul de urgență la gazdele SSH cu chei hardware

Sursa: www.habr.com

Adauga un comentariu