Vi foreskriver en procedure for nødadgang til SSH-værter med hardwarenøgler

Vi foreskriver en procedure for nødadgang til SSH-værter med hardwarenøgler

I dette indlæg vil vi udvikle en procedure for nødadgang til SSH-værter ved hjælp af hardwaresikkerhedsnøgler offline. Dette er kun én tilgang, og du kan tilpasse den, så den passer til dine behov. Vi gemmer SSH-certifikatautoriteten for vores værter på hardwaresikkerhedsnøglen. Denne ordning vil fungere på næsten alle OpenSSH, inklusive SSH med single sign-on.

Hvad er det hele til for? Nå, dette er en sidste udvej mulighed. Dette er en bagdør, der giver dig mulighed for at få adgang til din server, når intet andet virker.

Hvorfor bruge certifikater i stedet for offentlige/private nøgler til nødadgang?

  • I modsætning til offentlige nøgler kan certifikater have en meget kort levetid. Du kan generere et certifikat, der er gyldigt i 1 minut eller endda 5 sekunder. Efter denne periode bliver certifikatet ubrugeligt til nye forbindelser. Dette er ideelt til nødadgang.
  • Du kan oprette et certifikat for enhver konto på dine værter og om nødvendigt sende sådanne "engangs"-certifikater til kolleger.

Hvad du har brug for

  • Hardwaresikkerhedsnøgler, der understøtter indbyggede nøgler.
    Residentnøgler er kryptografiske nøgler, der er gemt udelukkende i sikkerhedsnøglen. Nogle gange er de beskyttet af en alfanumerisk PIN-kode. Den offentlige del af den residente nøgle kan eksporteres fra sikkerhedsnøglen, eventuelt sammen med den private nøglehåndtag. For eksempel understøtter Yubikey 5-seriens USB-nøgler residente nøgler. Det anbefales, at de kun er beregnet til nødadgang til værten. Til dette indlæg vil jeg kun bruge én nøgle, men du bør have en ekstra til backup.
  • Et sikkert sted at opbevare disse nøgler.
  • OpenSSH version 8.2 eller nyere på din lokale computer og på de servere, du vil have nødadgang til. Ubuntu 20.04 leveres med OpenSSH 8.2.
  • (valgfrit, men anbefalet) Et CLI-værktøj til kontrol af certifikater.

Træning

Først skal du oprette en certificeringsmyndighed, der vil være placeret på hardwaresikkerhedsnøglen. Indsæt nøglen og kør:

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

Som en kommentar (-C) angav jeg [e-mail beskyttet]så du ikke glemmer, hvilken sikkerhedsnøgle denne certifikatmyndighed tilhører.

Ud over at tilføje nøglen til Yubikey, vil to filer blive genereret lokalt:

  1. sk-user-ca, et nøglehåndtag, der refererer til den private nøgle, der er gemt i sikkerhedsnøglen,
  2. sk-user-ca.pub, som vil være den offentlige nøgle til din certifikatmyndighed.

Men bare rolig, Yubikey gemmer en anden privat nøgle, som ikke kan hentes. Derfor er alt pålideligt her.

På værter, som root, skal du tilføje (hvis du ikke allerede har gjort det) følgende til din SSHD-konfiguration (/etc/ssh/sshd_config):

TrustedUserCAKeys /etc/ssh/ca.pub

Tilføj derefter den offentlige nøgle (sk-user-ca.pub) til /etc/ssh/ca.pub på værten

Genstart dæmonen:

# /etc/init.d/ssh restart

Nu kan vi prøve at få adgang til værten. Men først skal vi have et certifikat. Opret et nøglepar, der vil blive knyttet til certifikatet:

$ ssh-keygen -t ecdsa -f emergency

Certifikater og SSH-par
Nogle gange er det fristende at bruge et certifikat som erstatning for et offentligt/privat nøglepar. Men et certifikat alene er ikke nok til at autentificere en bruger. Hvert certifikat har også en privat nøgle tilknyttet. Det er derfor, vi skal generere dette "nødnøglepar", før vi udsteder et certifikat til os selv. Det vigtige er, at vi viser det signerede certifikat til serveren, hvilket angiver det nøglepar, som vi har en privat nøgle til.

Så offentlig nøgleudveksling lever stadig i bedste velgående. Dette fungerer selv med certifikater. Certifikater eliminerer simpelthen behovet for, at serveren skal gemme offentlige nøgler.

Dernæst skal du oprette selve certifikatet. Jeg har brug for ubuntu-brugerautorisation i 10 minutters interval. Du kan gøre det på din måde.

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

Du vil blive bedt om at underskrive certifikatet med dit fingeraftryk. Du kan tilføje yderligere brugernavne adskilt af kommaer, for eksempel -n ubuntu,carl,ec2-user

Det er det, nu har du et certifikat! Dernæst skal du angive de korrekte tilladelser:

$ chmod 600 emergency-cert.pub

Herefter kan du se indholdet af dit certifikat:

$ step ssh inspect emergency-cert.pub

Sådan ser min ud:

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

Her er den offentlige nøgle den nødnøgle, vi har oprettet, og sk-user-ca er tilknyttet certificeringsmyndigheden.

Endelig er vi klar til at køre SSH-kommandoen:


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

  1. Du kan nu oprette certifikater for enhver bruger på en vært, der har tillid til din certifikatmyndighed.
  2. Du kan fjerne nødsituationer. Du kan gemme sk-user-ca, men det behøver du ikke, da det også er på sikkerhedsnøglen. Du vil måske også fjerne den originale PEM offentlige nøgle fra dine værter (for eksempel i ~/.ssh/authorized_keys for ubuntu-brugeren), hvis du brugte den til nødadgang.

Nødadgang: Handlingsplan

Indsæt sikkerhedsnøglen og kør kommandoen:

$ ssh-add -K

Dette vil tilføje certifikatmyndighedens offentlige nøgle og nøglebeskrivelse til SSH-agenten.

Eksporter nu den offentlige nøgle for at lave et certifikat:

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

Opret et certifikat med en udløbsdato på for eksempel ikke mere end en time:

$ 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

Og nu SSH igen:

$ ssh -i emergency username@host

Hvis din .ssh/config-fil forårsager nogle problemer ved tilslutning, kan du køre ssh med -F none-indstillingen for at omgå den. Skal du sende et certifikat til en kollega, er den nemmeste og sikreste mulighed Magisk ormehul. For at gøre dette behøver du kun to filer - i vores tilfælde nødsituation og nød-cert.pub.

Det, jeg godt kan lide ved denne tilgang, er hardwaresupporten. Du kan lægge dine sikkerhedsnøgler i et pengeskab, og de vil ingen steder gå.

Om reklamernes rettigheder

Episke servere - Er billig VPS med kraftfulde processorer fra AMD, CPU-kernefrekvens op til 3.4 GHz. Den maksimale konfiguration giver dig mulighed for at løse næsten ethvert problem - 128 CPU-kerner, 512 GB RAM, 4000 GB NVMe. Kom med os!

Vi foreskriver en procedure for nødadgang til SSH-værter med hardwarenøgler

Kilde: www.habr.com

Tilføj en kommentar