I dette innlegget vil vi utvikle en prosedyre for nødtilgang til SSH-verter som bruker maskinvaresikkerhetsnøkler offline. Dette er bare én tilnærming, og du kan tilpasse den til dine behov. Vi vil lagre SSH-sertifikatautoriteten for våre verter på maskinvaresikkerhetsnøkkelen. Denne ordningen vil fungere på nesten alle OpenSSH, inkludert SSH med enkel pålogging.
Hva er alt dette for noe? Vel, dette er en siste utvei. Dette er en bakdør som lar deg få tilgang til serveren din når ingenting annet fungerer.
Hvorfor bruke sertifikater i stedet for offentlige/private nøkler for nødtilgang?
- I motsetning til offentlige nøkler kan sertifikater ha svært kort levetid. Du kan generere et sertifikat som er gyldig i 1 minutt eller til og med 5 sekunder. Etter denne perioden vil sertifikatet bli ubrukelig for nye tilkoblinger. Dette er ideelt for nødtilgang.
- Du kan opprette et sertifikat for en hvilken som helst konto på vertene dine og, om nødvendig, sende slike "engangssertifikater" til kolleger.
Hva du trenger
- Maskinvaresikkerhetsnøkler som støtter innbyggernøkler.
Residentnøkler er kryptografiske nøkler som er lagret utelukkende innenfor sikkerhetsnøkkelen. Noen ganger er de beskyttet av en alfanumerisk PIN-kode. Den offentlige delen av den fastboende nøkkelen kan eksporteres fra sikkerhetsnøkkelen, eventuelt sammen med den private nøkkelhåndtaket. For eksempel støtter USB-nøkler i Yubikey 5-serien hjemmenøkler. Det anbefales at de kun er beregnet på nødtilgang til verten. For dette innlegget vil jeg bare bruke én nøkkel, men du bør ha en ekstra for sikkerhetskopiering. - Et trygt sted å oppbevare disse nøklene.
- OpenSSH versjon 8.2 eller høyere på din lokale datamaskin og på serverne du vil ha nødtilgang til. Ubuntu 20.04 leveres med OpenSSH 8.2.
- (valgfritt, men anbefalt) Et CLI-verktøy for å sjekke sertifikater.
Trening
Først må du opprette en sertifiseringsinstans som vil være plassert på maskinvaresikkerhetsnøkkelen. Sett inn nøkkelen og kjør:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]
Som en kommentar (-C) antydet jeg [e-postbeskyttet]slik at du ikke glemmer hvilken sikkerhetsnøkkel denne sertifiseringsinstansen tilhører.
I tillegg til å legge til nøkkelen til Yubikey, vil to filer bli generert lokalt:
- sk-user-ca, et nøkkelhåndtak som refererer til den private nøkkelen som er lagret i sikkerhetsnøkkelen,
- sk-user-ca.pub, som vil være den offentlige nøkkelen for sertifiseringsmyndigheten.
Men ikke bekymre deg, Yubikey lagrer en annen privat nøkkel som ikke kan hentes. Derfor er alt pålitelig her.
På verter, som root, legg til (hvis du ikke allerede har gjort det) følgende til SSHD-konfigurasjonen din (/etc/ssh/sshd_config):
TrustedUserCAKeys /etc/ssh/ca.pub
Så på verten legger du til den offentlige nøkkelen (sk-user-ca.pub) til /etc/ssh/ca.pub
Start demonen på nytt:
# /etc/init.d/ssh restart
Nå kan vi prøve å få tilgang til verten. Men først trenger vi et sertifikat. Opprett et nøkkelpar som skal knyttes til sertifikatet:
$ ssh-keygen -t ecdsa -f emergency
Sertifikater og SSH-par
Noen ganger er det fristende å bruke et sertifikat som erstatning for et offentlig/privat nøkkelpar. Men et sertifikat alene er ikke nok til å autentisere en bruker. Hvert sertifikat har også en privat nøkkel knyttet til seg. Dette er grunnen til at vi må generere dette "nødnøkkelparet" før vi utsteder et sertifikat. Det viktige er at vi viser det signerte sertifikatet til serveren, og indikerer nøkkelparet som vi har en privat nøkkel for.Så offentlig nøkkelutveksling lever fortsatt i beste velgående. Dette fungerer selv med sertifikater. Sertifikater eliminerer ganske enkelt behovet for at serveren skal lagre offentlige nøkler.
Deretter oppretter du selve sertifikatet. Jeg trenger ubuntu-brukerautorisasjon innen 10 minutters intervall. Du kan gjøre det på din måte.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency
Du vil bli bedt om å signere sertifikatet med fingeravtrykket ditt. Du kan legge til flere brukernavn atskilt med komma, for eksempel -n ubuntu,carl,ec2-user
Det er det, nå har du et sertifikat! Deretter må du spesifisere de riktige tillatelsene:
$ chmod 600 emergency-cert.pub
Etter dette kan du se innholdet i sertifikatet ditt:
$ step ssh inspect emergency-cert.pub
Slik ser min ut:
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økkelen nødnøkkelen vi opprettet, og sk-user-ca er tilknyttet sertifiseringsmyndigheten.
Endelig er vi klare til å kjøre SSH-kommandoen:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$
- Du kan nå opprette sertifikater for enhver bruker på en vert som stoler på sertifiseringsinstansen din.
- Du kan fjerne nødstilfelle. Du kan lagre sk-user-ca, men det trenger du ikke siden det også er på sikkerhetsnøkkelen. Det kan også være lurt å fjerne den originale PEM offentlige nøkkelen fra vertene dine (for eksempel i ~/.ssh/authorized_keys for ubuntu-brukeren) hvis du brukte den for nødtilgang.
Nødtilgang: Handlingsplan
Lim inn sikkerhetsnøkkelen og kjør kommandoen:
$ ssh-add -K
Dette vil legge til sertifiseringsmyndighetens offentlige nøkkel og nøkkelbeskrivelse til SSH-agenten.
Eksporter nå den offentlige nøkkelen for å lage et sertifikat:
$ ssh-add -L | tail -1 > sk-user-ca.pub
Opprett et sertifikat med en utløpsdato på for eksempel ikke mer enn 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 nå SSH igjen:
$ ssh -i emergency username@host
Hvis .ssh/config-filen din forårsaker noen problemer når du kobler til, kan du kjøre ssh med alternativet -F none for å omgå den. Hvis du trenger å sende et sertifikat til en kollega, er det enkleste og sikreste alternativet
Det jeg liker med denne tilnærmingen er maskinvarestøtten. Du kan legge sikkerhetsnøklene dine i en safe, og de vil ikke gå noen vei.
Om rettighetene til annonsering
Episke servere - Er
Kilde: www.habr.com