Japp, då har vi kommit till kärnan av säkerhet, utvecklaren och dess arbetsmiljö.
En utvecklare arbetar ju vanligen med flera verktyg, kanske i flera olika miljöer och vips är det en single-point-of-failure på många sätt. Ställ frågan till dig själv eller en utvecklare du känner, ”Hur lång tid tar det att få tillbaka din utvecklingsmiljö, som du hade den om något kraschar din dator”.
Backup?
Rätt svar är självklart, ”Jag har backup, det fixar sig över lunchen” men så är det oftast inte alls i verkligheten. Det brukar bli ”Det löser IT avdelningen då de har tid” eller ”Jag har ju hela helgen på mig…”
Det finns enorma risker att lita på backupen eftersom under tiden du jobbar en vecka med ett projekt så pajjas successivt din utvecklingmiljö för något annat projekt och det märker du inte, då.
Då du sedan måste ta hand om något i ett annat projekt, ja då blir det kris. Din dagliga backup har då infekterats successivt, inställningar och plugin ändrats och du vet helt enkelt inte när du hade en bra miljö längre och backupen blir värdelös och katastrofen närmar sig med stormsteg. Därför kan du inte lita på en normal backuplösning.
Så här gör jag
- Jag kör normalt ubuntu emot den fysiska arbetsmaskinen, det ger mig en enorm driftstabilitet. Jag har även Windows och Mac hostar uppsatta på motsvarande sätt.
- Jag har Windows och ubuntu i en virtualiserad miljö, vmware, hyperV, virtualbox eller motsvarande beroende på hosten.
- Ifrån hosten mappar jag ut en mapp per projekt eller kund som då motsvarar $home
inuti de virtualiserade miljöerna vilket gör det enkelt för hosten att göra backup på alla virtualiserade jobbdata, dvs skapade alster. hosten kan du även virusscanna de filerna då dessa är tillgängliga. - Jag kör även alla linux system för utveckling i egna virtualiserade miljöer, på samma sätt. Docker körs inifrån en virtualiserad linuxmiljö.
- Varje virtualiserad miljö har brandväggar, dels mot accesser, dels mot världen men även dataövervakning om nödvändigt.
- Hårddisk är jättebilligt!!!
Varför då?
Dels kan inte Visual Studio eller andra utvecklingmiljöer krascha min host, bara det tar åtskilliga dagar att sätta upp igen, att ta den ifrån en backup går mycket snabbare.
Min host får alltså inte gå ner, någonsin. Jag kan ifrån en usbsticka få upp maskinen, vilket skapar oberoende. Det gör även att jag kan ta upp projekt och utvecklingmiljöer på andra maskiner vid hårdvarufel, detta för att dessa finns separat backup på.
Dels kan jag i ett enskilt projekt köra både windows verktyg och ubuntu vilket ger mig valfrihet men även säkerhet.
Alla credentials, ssh nycklar osv ligger lagrade i den utmappade hostens mapp (typ Mina Dokument\projekt) säkrade med mig som användare. Det medför att ett lyckat hack via exvis VSCode plugins kan enbart nå det projektets credentials och dessa har jag via git/bitbucket gjort olika för varje projekt. Environment variabler som sätts tex i .bashrc påverkar även det enbart det projektet i den virtuella miljön.
Kryptering
Den utmappade projektmappen är självklart krypterad av hosten, jag kör med veracrypt.
Backup görs regelbundet på filerna i hostens mapp men dessa ju krypterade så det är inget problem. De virtuella maskinerna läser data ifrån den uppmappade mappen som veracrypt skapat.
Varför då?
Jo om någon skulle få fysisk access till maskinen då den är avstängd, då kan man med lätthet tanka ut allt viktigt ur maskinen. Är då projektmapparna krypterade ges ingen access till datat förrän dessa mappats upp, manuellt med usb sticka och tillika lösenord eller biometri, om det nu känns bättre.
Att sedan göra backup på dessa virtuella maskiner/containers är en relativ smalsak och går snabbt att återställa om något skulle bli skakigt. Om tex VSCode får för sig att uppdatera något så pajjar det inte alla andra projekt eller utvecklingmiljöer.
Men…
Någon invänder säkert nu med ”Varför krypterar du inte hela hostens maskin och slipper göra något mer”. Viss kan man tänka så men exempelvis dropbox kan ju användas för att göra backup till, känns bra och tryggt men den gör ju i så fall backup på hosten då den är igång och då skickas ju okrypterade filer upp till dropbox med credentials och annat.
Stora organisationer
Om man nu jobbar i större team så är det lätt att distribuera de virtuella miljöerna mellan utvecklarna och då kör alla likadant, lika säkert men ändå riktigt flexibelt. Docker miljöer är även de distribuerbara mellan utvecklare och gemensamt lyfts utvecklingmiljön för alla utan större besvär.
Repositories
Lägger man nu på en egen repository (jfrog) som agerar proxy emot världen kan man dessutom ha versionskontroll både på paket och ramverk men även på utvecklingsverktyg och dess eventuella plugins.
Resultatet
Därmed har man minskat risken att dels lägga dagar på stillestånd, dels förhindrat att säkerhetsluckor sprids mellan projekt och dessutom säkerställt att man enbart kör med sånt som granskats och godkänts samt har en backuplösning som klarar jobbet på rätt sätt.
Overheaden för mig då jag börjar jobba är att, mounta upp den mapp projektet kräver med verakrypt manuellt, därefter starta de virtuella miljöerna som behövs. Detta sker under tiden kaffepannan jobbar.