❤️ Hjem Meetups Blogg Ressurser Om

op cli ftw

Hemmeligheter på kommandolinja med 1Password 🤐

Passord på gul lapp

Innledning

Utviklere er over snittet glade i terminalen sin og kommandolinja, og alle produkter og skyleverandører med et snev av respekt for seg selv tilbyr minst ett "Command Line Interface" eller "CLI". Mange av disse CLI-ene har behov for å lagre hemmeligheter i form av API keys eller tokens som trengs for å aksessere tjenesten de er tilknyttet. Det er varierende praksis på hvordan disse hemmelighetene lagres, men ofte ender de opp i klartekst et eller annet sted i brukerens hjemmekatalog. Utviklere trenger også å kunne kjøre tingene sine lokalt, og da ender ofte passord til tilknyttede databaser og tjenester opp i klartekst i .env-filer som man kanskje eller kanskje ikke husker å legge i .gitignore slik at de ikke sjekkes inn ved et uhell.

Etterhvert som utviklermaskiner blir stadig mer attraktive angrepsmål trenger vi å gjøre det enkelt å håndtere hemmeligheter på en trygg måte. De fleste av oss bruker (håper jeg) en passord-manager, og flere av dem har nå fått egne CLI-er som skal gjøre hverdagen på kommandolinja litt enklere og sikrere. De følgende eksemplene er med bruk av 1Password fordi det er den jeg bruker og kjenner, tilsvarende ting kan sikkert gjøres i andre passord-managere også. CLI-et samarbeider med desktop-appen for å autentisere deg med bl.a. biometri og/eller Apple Watch.

Uthenting av hemmeligheter

op item get Tullekonto --vault=demo --fields password
veldighemmelig

Hemmeligheter i miljøvariabler

Referansen til en hemmelighet er på formen op://vault/item/[section/]field, feks. op://demo/Tullekonto/password. Istedenfor å legge legge den hemmelige verdien rett i miljøvariabelen

MYTHING="veldighemmelig"

så legger man inn referansen verdien i 1Password.

MYTHING="op://demo/Tullekonto/password"

Programmet som bruker miljøvariabelen må da startes opp via 1Password for å få fylt inn verdien. Istedenfor å kjøre

myprogram

kjører man da

op run -- myprogram

Bruk av .env-filer

Env-filer lar deg definere flere miljøvariabler på formen KEY=value separert av linjeskift. Opplegget er derfor det samme som i forrige avsnitt, istedenfor å legge verdier direkte i miljøvariablene legger man inn referansen i 1Password.

MYTHING="op://demo/Tullekonto/password"
MYOTHERTHING="op://demo/Tullekonto2/password"

For å bruke disse verdiene starter man programmet sitt med

op run --env-file="./filnavn.env" -- myprogram

Disse env-filene kan sjekkes inn i git uten å utgjøre en sikkerhetsrisiko, og hvis alle utviklerne bruker 1Password er det enkelt å dele disse hemmelighetene slik at nye på teamet kan komme raskt i gang.

Bruk av Shell Plugins

1Password sitt CLI tilbyr også integrasjon med andre CLI-er vha Shell Plugins. Disse dekrypterer og legger hemmelighetene inn i de andre CLI-ene når de trengs. Shell Plugins er støttet i Bash, Zsh og fish.

For å sette opp for eksempel integrasjon med GitHub's gh kjører man følgende kommando:

op plugin init gh

Etter å ha svart på et par enkle spørsmål er pluginet klart til bruk. Nødvendige alias mm. legges automatisk inn i konfigurasjonen til ditt shell, og neste gang du skriver feks. gh pr list må du "vise fingeren".

SSH og Git

1Password kan også hjelpe deg med å håndtere nøkler for SSH og signering av Git commits. Den kan generere nøkler og fylle dem automatisk inn i GUI-en til GitHub og flere av de store skyplattformene i tillegg til å automatisk konfigurere dine SSH og/eller Git-klienter. Sjekk lista over hvilke klienter som støttes her.

Oppsummering

Dette var en kort intro til 1Password sitt CLI. Verktøy som dette gjør det vesentlig enklere å håndtere hemmeligheter på en trygg måte også på kommandolinja. Sjekk dokumentasjonen for detaljer og oversikt over all funksjonalitet.

Happy (litt sikrere) coding!


Denne nettsiden er laget med 11ty, og kildekoden ligger åpent på GitHub: Security-Champions-Norway/securitychampions.no. Send gjerne inn pull requester, eller be om bli lagt inn i organisasjonen.