
I dette indlæg vil vi udvikle en procedure til nødaggang til SSH-værter ved hjælp af sikkerhedsnøgler offline. Dette er blot en tilgang, og du kan tilpasse den til dine behov. Vi vil opbevare certifikationscentret for vores værter på sikkerhedsnøglen. Dette skema vil fungere på stort set enhver OpenSSH, inklusive SSH med enkelt login.
Hvorfor alt dette? Nå, det er en nødløsning. Det er en bagdør, der giver dig adgang til din server, hvis der af en eller anden grund ikke er nogen andre muligheder.
Hvorfor bruge certifikater i stedet for åbne/lukkede nøgler til nødaggang?
- I modsætning til åbne nøgler kan certifikaters gyldighedsperiode være meget kort. Du kan generere et certifikat, der kun er gyldigt i 1 minut eller endda 5 sekunder. Efter udløb vil certifikatet ikke længere være anvendeligt til nye forbindelser. Dette er ideelt til nødaggang.
- Du kan oprette et certifikat for enhver konto på dine værter og om nødvendigt sende sådanne "engangscertifikater" til kolleger.
Hvad du skal bruge
- Sikkerhedsnøgler, der understøtter residente nøgler.
Residente nøgler er kryptografiske nøgler, der fuldt ud opbevares inden i sikkerhedsnøglen. De er nogle gange beskyttet af en alfanumerisk PIN-kode. Den åbne del af den residente nøgle kan eksporteres fra sikkerhedsnøglen, om nødvendigt sammen med en descriptor af den lukkede nøgle. For eksempel har USB-nøglerne i Yubikey 5-serien understøttelse for residente nøgler. Det er ønskeligt, at de er designet udelukkende til nødaggang til værten. Til dette indlæg vil jeg bruge kun é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 højere på din lokale computer og på de servere, du ønsker at have nødaggang til. Ubuntu 20.04 leveres med OpenSSH 8.2.
- (valgfrit, men ønskeligt) Et CLI-værktøj til at kontrollere certifikater.
Forberedelse
For at komme i gang skal du oprette et certifikationscenter, som vil være placeret på sikkerhedsnøglen. Indsæt nøglen og kør:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]Som kommentar (-C) angav jeg yubikey-9-512-742@smallstep.com for ikke at glemme, hvilken sikkerhedsnøgle dette certifikatcenter henviser til.
Udover at tilføje nøglen til Yubikey, vil der blive genereret to filer lokalt:
- sk-user-ca, en nøglebeskrivelse, der refererer til den private nøgle gemt i sikkerhedsnøglen,
- sk-user-ca.pub, som vil være den offentlige nøgle til dit certifikatcenter.
Men vær ikke bekymret, der er en anden privat nøgle gemt på Yubikey, som ikke kan udtrækkes. Så her er alt sikkert.
På værter under brugernavnet 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.pubTilsæt derefter den offentlige nøgle (sk-user-ca.pub) til /etc/ssh/ca.pub på værten
Genstart demon:
# /etc/init.d/ssh restartNu kan vi prøve at få adgang til værten. Men først har vi brug for et certifikat. Opret et nøglepar, der vil være knyttet til certifikatet:
$ ssh-keygen -t ecdsa -f emergencyCertifikater og SSH-par
Nogle gange fristes man til at bruge et certifikat som en erstatning for et åbent/privat nøglepar. Men til brugerautentifikation er et enkelt certifikat ikke tilstrækkeligt. Hvert certifikat har også en privat nøgle knyttet til det. Derfor skal vi generere dette 'nød’-nøglepar, før vi udsteder et certifikat til os selv. Det vigtige er, at det underskrevne certifikat vises til serveren, sammen med det nøglepar, for hvilket vi har den private nøgle.Dermed er udvekslingen af offentlige nøgler stadig livlig. Det gælder også med certifikater. Certifikater fjerner blot serverens behov for at opbevare offentlige nøgler.
Dernæst skal du oprette selve certifikatet. Jeg har brug for brugerautorisering af ubuntu inden for et 10-minutters interval. Du kan gøre det på din egen måde.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergencyDu vil blive bedt om at underskrive certifikatet med fingeraftryk. Du kan tilføje flere brugernavne adskilt med kommaer, f.eks. -n ubuntu,carl,ec2-user
Sådan, nu har du et certifikat! Næste skridt er at angive de korrekte rettigheder:
$ chmod 600 emergency-cert.pubEfter dette kan du se indholdet af dit certifikat:
$ step ssh inspect emergency-cert.pubHer er, hvordan mit ser ud:
emergency-cert.pub
Type: ecdsa-sha2-nistp256-cert-v01@openssh.com bruger certifikat
Offentlig nøgle: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
Signerings CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
Nøgle ID: "test-key"
Serienummer: 0
Gyldig: fra 2020-06-24T16:53:03 til 2020-06-24T17:03:03
Principals:
ubuntu
Kritiske muligheder: (ingen)
Udvidelser:
tillad-X11-videresendelse
tillad-agent-videresendelse
tillad-port-videresendelse
tillad-pty
tillad-brugerskrcHer er den offentlige nøgle—det er den nøgle, vi har oprettet, emergency, og den er forbundet til certifikat Centeret sk-user-ca.
Endelig er vi klar til at køre SSH-kommandoen:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$- Nu kan du oprette certifikater til enhver bruger på hosten, der stoler på dit certifikationscenter.
- Du kan slette emergency. Du kan beholde sk-user-ca, men det er ikke nødvendigt, da det også findes på sikkerhedsnøglen. Du ønsker muligvis også at slette den originale offentlige PEM-nøgle fra dine værter (for eksempel i ~/ .ssh/authorized_keys for brugeren ubuntu), hvis du har brugt den til nødtilladelse.
Nødtilladelse: handlingsplan
Indsæt sikkerhedsnøglen og kør kommandoen:
$ ssh-add -KDermed tilføjer du den offentlige nøgle fra certifikationscentret og nøgledescriptoren til SSH-agenten.
Eksportér nu den offentlige nøgle for at oprette certifikatet:
$ ssh-add -L | tail -1 > sk-user-ca.pubOpret et certifikat med en udløbsdato, 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.pubOg nu igen SSH:
$ ssh -i emergency username@hostHvis din fil .ssh/config forårsager problemer ved tilslutning, kan du starte ssh med parameteren -F none for at undgå den. Hvis du skal sende certifikatet til en kollega, er den enkleste og sikreste mulighed at . Dette kræver kun to filer — i vores tilfælde emergency og emergency-cert.pub.
Det, jeg kan lide ved denne tilgang, er den hardwarebaserede støtte. Du kan lægge sikkerhedsnøglerne i en bankboks, og de vil forblive der.
Annoncering
Episk servere — det er med kraftige AMD-processorer, kernefrekvens op til 3.4 GHz. Den maksimale konfiguration kan løse næsten enhver opgave — 128 kerner CPU, 512 GB RAM, 4000 GB NVMe. Tilmeld dig!
Kilde: habr.com
