Hvordan Best Administrer krypteringsnøklene på Linux

Lagring SSH-kryptering? Nøklene? og memorere passord kan være en hodepine. Men dessverre i dagens verden av ondsinnede hackere og utnytter, grunnleggende sikkerhetsregler er en viktig praksis. For mange vanlige brukere, utgjør dette bare memorere passord og kanskje finne et godt program for å lagre passord, så vi minner slike brukere å ikke bruke det samme passordet for hvert område. Men for de av oss i ulike IT-felt, må vi ta dette opp et nivå. Vi har avtale med krypteringsnøkler som SSH nøkler, ikke bare passord

Her er et scenario:. Jeg har en server som kjører på en sky som jeg bruker for min hoved git repository. Jeg har flere datamaskiner jeg jobber fra. Alle disse maskinene må logge inn som sentral server for å skyve til og trekke fra. Jeg har git satt opp til å bruke SSH. Når git bruker SSH, logger git hovedsak inn i serveren på samme måte som du ville gjort hvis du var å lansere en kommandolinje inn på serveren med SSH kommandoen. For å konfigurere alt, jeg opprettet en config fil i min .ssh katalogen som inneholder en Host oppføring forutsatt et navn for serveren, vertsnavn, brukeren å logge inn som, og veien til en viktig fil. Da kan jeg teste denne konfigurasjonen ut ved å skrive kommandoen

 ssh gitserver 

Og snart jeg presentert med serverens bash shell. Nå kan jeg konfigurere git å bruke samme inngang for å logge inn med den lagrede tasten. Enkelt nok, med unntak av ett problem: For hver maskin jeg bruker til å logge inn som server, må jeg ha en nøkkel-fil. Det betyr at mer enn én nøkkel-fil flyter rundt. Jeg har flere slike taster på denne datamaskinen, og flere slike taster på mine andre datamaskiner. På samme måte daglige brukere har en gazillion passord, er det lett for oss er det folk til å ende opp med en gazillion viktige filer. Hva gjør jeg?


Rengjøring Up

Før du starter ut med et program for å hjelpe deg med å håndtere nøklene, må du legge noen grunnarbeidet på hvordan nøklene skal håndteres, og om de spørsmålene vi spør selv fornuftig. Og det krever først og fremst at du forstår hvor offentlige nøkler gå og hvor private nøkler gå. Jeg kommer til å anta at du vet:

1. Forskjellen mellom en offentlig nøkkel og privat nøkkel

2. Hvorfor du ikke kan generere en privat nøkkel fra en offentlig nøkkel, men kan du gjøre det motsatte

3. Formålet med authorized_keys filen og hva som går i det

4. Hvordan du bruker privatnøkler til å logge på en server som har den tilsvarende offentlige nøkkelen i sin authorized_keys filen.

Her er et eksempel. Når du oppretter en sky server på Amazon Web Services, må du gi en SSH-nøkkel som du skal bruke for å koble til serveren din. Hver tast har en offentlig del og en privat del. Fordi du ønsker din server å bo trygt, ved første øyekast kan det virke du setter den private nøkkelen på denne serveren, og at du tar den offentlige nøkkelen med deg. Tross alt, trenger du ikke vil at serveren skal være offentlig tilgjengelig, ikke sant? Men det er faktisk bakover.

Du setter offentlig nøkkel
på AWS server, og du holde på din private nøkkel for å logge inn på serveren. Du vokte at private nøkkelen og holde den ved din side, ikke på noen ekstern server, som vist i figuren ovenfor

Her er hvorfor:. Hvis den offentlige nøkkelen skulle bli kjent for andre, det ikke ville de 't være i stand til å logge inn på serveren, siden de ikke har den private nøkkelen.
Videre, hvis noen klarer å bryte seg inn i serveren din, alt de ville finne er en offentlig nøkkel. Du kan ikke lage et privat nøkkel fra en offentlig nøkkel. Og så hvis du bruker den samme tasten på andre servere, ville de ikke være i stand til å bruke den til å logge inn i de andre datamaskiner.

Og det er derfor du setter den offentlige nøkkelen på serverne for å logge inn dem gjennom SSH. De private nøkler bo hos deg. Du trenger ikke la de private nøklene ut av hendene dine.

Men det er fortsatt problemer. Vurdere saken på min git server. Jeg hadde noen beslutninger å gjøre. Noen ganger jeg er logget inn i en utvikling server som er vert andre steder. Mens på at dev boksen, jeg trenger å koble til min git server. Hvordan kan dev boksen kobles til git server? Ved hjelp av private
nøkkel. Og deri ligger trøbbel. Dette scenariet krever jeg satte en privat nøkkel på en server som er vert andre steder, noe som er potensielt farlig

Nå er en ytterligere scenario:. Hva om jeg skulle bruke en enkelt tast for å logge inn flere servere? Hvis en inntrenger fikk tak i denne private nøkkelen, ville han eller hun har den private nøkkelen og få tilgang til hele virtuelle nettverk av servere, klar til å gjøre noen alvorlig skade. Ikke bra i det hele tatt

Og det er selvfølgelig bringer opp andre spørsmål:. Skal jeg virkelig bruke den samme nøkkelen for de andre servere? Det er kan være farlig på grunn av det jeg nettopp har beskrevet.

Til slutt, dette høres rotete, men det finnes noen enkle løsninger. La oss få organisert.

(Merk at det er mange steder du trenger å bruke tastene i tillegg til bare å logge på servere, men jeg presenterer dette som ett scenario for å vise deg hva du står overfor når du arbeider med nøkler .)

Angåpassordsetningene

Når du oppretter nøklene dine, har du muligheten til å inkludere et passord som er nødvendig når du bruker den private nøkkelen. Med denne passphrase, er den private nøkkelfilen selv kryptert med passordet. For eksempel, hvis du har en offentlig nøkkel som er lagret på en server, og du bruker den private nøkkelen til å logge inn på denne serveren, vil du bli bedt om å angi et passord. Uten passord, kan nøkkelen ikke brukes. Alternativt kan du konfigurere din nøkkel uten et passord til å begynne med. Så alt du trenger er nøkkelfilen til å logge inn på serveren

Vanligvis går uten et passord er lettere på brukerne, men en grunn til at jeg anbefaler på det sterkeste å bruke passordet i mange situasjoner er dette:. Hvis den private nøkkelen fil blir stjålet, personen som stjeler det fortsatt ikke kan bruke den før han eller hun er i stand til å finne ut passordet. I teorien vil dette spare deg for tid når du tar den offentlige nøkkelen fra serveren før angriperen kan oppdage passordet, og dermed beskytte systemet. Det er andre grunner til å bruke et passord, men dette alene gjør det verdt det for meg i mange situasjoner. (Som et eksempel har jeg VNC programvare på en Android-tablet. Tabletten har min private nøkkel. Hvis min tablet blir stjålet, vil jeg umiddelbart tilbakekalle den offentlige nøkkelen fra serveren den logger inn, treffer sin private nøkkel ubrukelig, med eller uten passphrase.) Men i noen tilfeller jeg ikke bruker den, fordi serveren jeg logger inn ikke kan ha mye verdifulle data på den. Det kommer an på situasjonen.

Server Infrastructure

Hvordan du designe din infrastruktur av servere vil påvirke hvordan du klarer nøklene. For eksempel, hvis du har flere brukere logger inn, må du bestemme om hver bruker får en egen nøkkel. (Generelt sett bør de,. Du ønsker ikke brukere dele private nøkler På den måten hvis en bruker forlater organisasjonen eller mister tillit, kan du oppheve brukerens nøkkel uten å generere nye nøkler for alle andre Og på samme måte, ved å dele. tastene de kunne logge inn som hverandre, noe som også er dårlig.) Men en annen sak er hvordan du fordele dine servere. Har du fordele mange servere ved hjelp av verktøy som for eksempel Puppet, for eksempel? Og du opprette flere servere basert på dine egne bilder? Når du gjenskape dine servere, trenger du ikke å ha samme nøkkel for hver? Annen sky serverprogramvaren kan du konfigurere dette er hvordan du velger; du kan ha serverne får samme tast, eller ha en ny en generert for hver.

Hvis du arbeider med replikert servere, kan det bli forvirrende hvis brukerne må bruke forskjellige nøkler til å logge i to forskjellige servere som ellers er like. ? Men på den annen side, kan det være en sikkerhetsrisiko ved at serverne deler de samme nøklene. Eller, på den tredje side, hvis nøklene trengs for noe annet enn å logge deg inn (for eksempel montering av en kryptert stasjon), så du vil trenge den samme nøkkelen på flere steder. Som du kan se, om du trenger å bruke de samme tastene på tvers av ulike servere er ikke en beslutning jeg kan gjøre for deg; det er handel offs, og du må bestemme selv hva som er best

Til slutt, vil du sannsynligvis ha:

- flere servere som må være logget inn

- Flere brukere logger inn i ulike servere, hver med sin egen nøkkel

-. Flere taster for hver bruker som de logger seg inn i ulike servere

(Hvis du bruker tastene på andre situasjoner, som du sannsynligvis er, vil de samme generelle konsepter gjelder om hvordan tastene er brukt, hvor mange nøkler er nødvendig, uansett om de er delt, og hvordan du håndterer private og offentlige deler av nøkler.)

Metode for sikkerhet

Å vite din infrastruktur og unik situasjon, må du sette sammen en nøkkel forvaltningsplan som vil hjelpe veilede deg om hvordan du distribuerer og lagre nøklene. For eksempel tidligere nevnte jeg at hvis min tablet blir stjålet, vil jeg tilbakekalle den offentlige nøkkelen fra min server, forhåpentligvis før tabletten kan brukes til å få tilgang til serveren. Som sådan, kan jeg tillate følgende i min generelle plan:

1. Private nøkler er greit på mobile enheter, men de må inneholde en passphrase

2. Det må finnes en måte å raskt inndra offentlige nøkler fra en server

I din situasjon, kan du bestemme deg du bare ikke ønsker å bruke passfraser for et system du logge inn med jevne mellomrom.; for eksempel, kan systemet være en test maskin som utviklerne logge inn mange ganger om dagen. Det er greit, men da må du justere reglene litt. Du kan inkludere en regel som at maskinen ikke er å være logget inn fra mobile enheter. Med andre ord, må du bygge dine protokoller basert på din egen situasjon, og ikke anta en størrelse passer alle.

Programvare

På til programvare. Overraskende nok er det ikke mange gode, solide programvareløsninger for lagring og håndtering av private nøkler. Men skulle det være? Tenk på dette: Hvis du har et program som lagrer alt taster for alle dine servere, og at programmet er låst ned av en rask passord, er dine nøkler virkelig sikkert? Eller, på samme måte, hvis de private nøklene sitter på harddisken for rask tilgang ved SSH-programmet, er en nøkkel programvare virkelig gir noen beskyttelse?

Men for generell infrastruktur og opprette og administrere offentlige nøkler, der er noen løsninger. Jeg har allerede nevnt Puppet. I Puppet verden, skaper du moduler for å administrere serverne på forskjellige måter. Tanken er at serverne er dynamisk og ikke nødvendigvis nøyaktig duplikater av hverandre. Her er en smart tilnærming som bruker de samme tastene på forskjellige servere, men bruker en annen Puppet modul for hver bruker. Denne løsningen kan eller ikke kan gjelde for deg.

Eller, er et annet alternativ for å skifte gir helt. I en verden av Docker, kan du ta en annen tilnærming, som beskrevet i denne bloggen om SSH og Docker.

Men hva med å håndtere de private nøklene? Hvis du søker, er du ikke kommer til å finne mange programvare alternativer, av de grunner jeg nevnte tidligere; de private nøkler sitter på harddisken din, og et lederprogram kan ikke gi mye ekstra sikkerhet. Men jeg klarer mine nøkler ved hjelp av denne metoden:

Først må jeg flere Host oppføringer i min .ssh /config fil. Jeg har en oppføring for vertene som jeg logger inn, men noen ganger har jeg mer enn én oppføring for en enkelt vert. Det skjer hvis jeg har flere innlogginger. Jeg har to ulike pålogginger for server hosting min git repository; en er strengt for git, og den andre er for generell bash tilgang. Den ene for git har sterkt begrenset rettigheter på den maskinen. Husk hva jeg sa tidligere om mine git nøkler som lever på eksterne utviklingsmaskiner? Det vi går. Selv om disse tastene kan logge inn i en av mine servere, regnskapet brukes er sterkt begrenset.

For det andre, de fleste av disse private nøkler inkluderer et passord. (For å håndtere å måtte skrive inn passphrase flere ganger, vurderer å bruke ssh-agent.)

For det tredje, jeg har noen servere som jeg ønsker å vokte litt mer nøye, og jeg har ikke innreise inn i min Host filen. Dette er mer en social engineering aspektet, fordi de viktigste filene er fortsatt til stede, men det kan ta en inntrenger litt lengre tid å finne nøkkelen filen og finne ut hvilken maskin de går med. I disse tilfellene, jeg bare skriver ut det lange ssh kommandoen manuelt. (Det er egentlig ikke så ille.)

Og du kan se at jeg ikke bruker noen spesiell programvare for å håndtere disse private nøkler.


One Size Passer ikke alle

Det hender at vi får spørsmål på linux.com for råd om god programvare for håndtering av nøkler. Men la oss ta et skritt tilbake. Spørsmålet faktisk trenger å bli re-innrammet, fordi det ikke er en one-size-fits-all løsning. De spørsmålene du stiller bør være basert på din egen situasjon. Er du bare prøver å finne et sted å lagre dine viktige filer? Er du ute etter en måte å håndtere flere brukere hver med sin egen offentlige nøkkel som må settes inn i authorized_keys fil?

I denne artikkelen, jeg har dekket det grunnleggende om hvordan alt dette henger sammen, og forhåpentligvis på dette punktet vil du se at hvordan du administrere dine nøkler, og hva programvaren du se etter (hvis du selv trenger ekstra programvare i det hele tatt), skal bare skje etter at du stiller de riktige spørsmålene. Anmeldelser