I det här inlägget kommer vi att utveckla en procedur för nödåtkomst till SSH-värdar med hjälp av hårdvarusäkerhetsnycklar offline. Detta är bara ett tillvägagångssätt och du kan anpassa det efter dina behov. Vi kommer att lagra SSH-certifikatutfärdaren för våra värdar på hårdvarans säkerhetsnyckel. Detta schema kommer att fungera på nästan alla OpenSSH, inklusive SSH med enkel inloggning.
Vad är allt detta till för? Tja, detta är en sista utväg. Detta är en bakdörr som gör att du kan få tillgång till din server när inget annat av någon anledning fungerar.
Varför använda certifikat istället för offentliga/privata nycklar för nödåtkomst?
- Till skillnad från offentliga nycklar kan certifikat ha en mycket kort livslängd. Du kan generera ett certifikat som är giltigt i 1 minut eller till och med 5 sekunder. Efter denna period kommer certifikatet att bli oanvändbart för nya anslutningar. Detta är idealiskt för nödtillgång.
- Du kan skapa ett certifikat för vilket konto som helst på dina värdar och vid behov skicka sådana "engångscertifikat" till kollegor.
Vad du behöver
- Säkerhetsnycklar för maskinvara som stöder inbyggda nycklar.
Residentnycklar är kryptografiska nycklar som helt och hållet lagras i säkerhetsnyckeln. Ibland skyddas de av en alfanumerisk PIN-kod. Den offentliga delen av den inhemska nyckeln kan exporteras från säkerhetsnyckeln, valfritt tillsammans med den privata nyckeln. Till exempel stöder USB-nycklar i Yubikey 5-serien inbyggda nycklar. Det är tillrådligt att de endast är avsedda för nödåtkomst till värden. För det här inlägget kommer jag bara att använda en nyckel, men du bör ha ytterligare en för säkerhetskopiering. - En säker plats att förvara nycklarna.
- OpenSSH version 8.2 eller högre på din lokala dator och på de servrar du vill ha nödåtkomst till. Ubuntu 20.04 levereras med OpenSSH 8.2.
- (valfritt, men rekommenderas) Ett CLI-verktyg för att kontrollera certifikat.
Utbildning
Först måste du skapa en certifieringsmyndighet som kommer att finnas på hårdvarans säkerhetsnyckel. Sätt i nyckeln och kör:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]
Som en kommentar (-C) angav jag [e-postskyddad]så att du inte glömmer vilken säkerhetsnyckel denna certifikatutfärdare tillhör.
Förutom att lägga till nyckeln till Yubikey, kommer två filer att genereras lokalt:
- sk-user-ca, ett nyckelhandtag som refererar till den privata nyckeln lagrad i säkerhetsnyckeln,
- sk-user-ca.pub, som kommer att vara den publika nyckeln för din certifikatutfärdare.
Men oroa dig inte, Yubikey lagrar en annan privat nyckel som inte kan hämtas. Därför är allt pålitligt här.
På värdar, som root, lägg till (om du inte redan har gjort det) följande till din SSHD-konfiguration (/etc/ssh/sshd_config):
TrustedUserCAKeys /etc/ssh/ca.pub
Lägg sedan till den publika nyckeln (sk-user-ca.pub) på värden till /etc/ssh/ca.pub
Starta om demonen:
# /etc/init.d/ssh restart
Nu kan vi försöka komma åt värden. Men först behöver vi ett certifikat. Skapa ett nyckelpar som kommer att kopplas till certifikatet:
$ ssh-keygen -t ecdsa -f emergency
Certifikat och SSH-par
Ibland är det frestande att använda ett certifikat som ersättning för ett offentligt/privat nyckelpar. Men ett certifikat enbart är inte tillräckligt för att autentisera en användare. Varje certifikat har också en privat nyckel kopplad till sig. Det är därför vi måste generera detta "nödnyckelpar" innan vi utfärdar ett certifikat till oss själva. Det viktiga är att vi visar det signerade certifikatet till servern, vilket indikerar nyckelparet som vi har en privat nyckel för.Så offentligt nyckelutbyte lever fortfarande och mår bra. Detta fungerar även med certifikat. Certifikat eliminerar helt enkelt behovet för servern att lagra publika nycklar.
Skapa sedan själva certifikatet. Jag behöver ubuntu-användarbehörighet inom 10 minuters intervall. Du kan göra det på ditt sätt.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency
Du kommer att bli ombedd att underteckna certifikatet med ditt fingeravtryck. Du kan lägga till ytterligare användarnamn separerade med kommatecken, till exempel -n ubuntu,carl,ec2-user
Det var allt, nu har du ett certifikat! Därefter måste du ange rätt behörigheter:
$ chmod 600 emergency-cert.pub
Efter detta kan du se innehållet i ditt certifikat:
$ step ssh inspect emergency-cert.pub
Så här 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
Här är den publika nyckeln nödnyckeln vi skapade, och sk-user-ca är associerad med certifieringsmyndigheten.
Äntligen är vi redo att köra SSH-kommandot:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$
- Du kan nu skapa certifikat för alla användare på en värd som litar på din certifikatutfärdare.
- Du kan ta bort nödsituation. Du kan spara sk-user-ca, men du behöver inte eftersom det också finns på säkerhetsnyckeln. Du kanske också vill ta bort den ursprungliga offentliga PEM-nyckeln från dina värdar (till exempel i ~/.ssh/authorized_keys för ubuntu-användaren) om du använde den för nödåtkomst.
Nödtillgång: Handlingsplan
Klistra in säkerhetsnyckeln och kör kommandot:
$ ssh-add -K
Detta kommer att lägga till certifikatutfärdarens publika nyckel och nyckelbeskrivning till SSH-agenten.
Exportera nu den publika nyckeln för att skapa ett certifikat:
$ ssh-add -L | tail -1 > sk-user-ca.pub
Skapa ett certifikat med ett utgångsdatum på till exempel högst en timme:
$ 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
Och nu SSH igen:
$ ssh -i emergency username@host
Om din .ssh/config-fil orsakar vissa problem vid anslutning, kan du köra ssh med alternativet -F none för att kringgå den. Om du behöver skicka ett certifikat till en kollega är det enklaste och säkraste alternativet
Det jag gillar med det här tillvägagångssättet är hårdvarustödet. Du kan lägga dina säkerhetsnycklar i ett kassaskåp och de går ingenstans.
Om reklamens rättigheter
Episka servrar - Är
Källa: will.com