Informasjonssikkerhet i en komplisert verden
Hver dag rapporteres det om nye angrep mot alt fra kritisk infrastruktur til vanlige nettsider. Å bli "hacket" er blitt dagligdags nok til at man ikke alltid engang hører om det, selv når ofrene er store multinasjonale bedrifter. Wikipedia har flere lister som dokumenterer de mest signifikante tilfellene, men mørketallene er antagelig store.
Del opp dine applikasjoner
Det første man tenker er ofte "Hva kan jeg gjøre for å beskytte mine applikasjoner?". Som så mye annet i informasjonsteknologi er det beste grepet å dele opp problemet i mindre deler.
Ved å dele opp dine applikasjoner i mindre applikasjoner, som kun gjør det helt nødvendige for å gjennomføre en oppgave, kan en følge det minste privilegiums prinsipp. Detter betyr å påse at applikasjonen kun har rettigheter og tilganger til det minst mulige sett av eksterne tjenester og data. Som et eksempel på dette, bør man utvikle separate applikasjoner for bedriftens websider (f. eks. en CMS) og kunderelasjonshåndtering (CRM): Dette sikrer at sikkerhetshull i websidesystemet ikke også gir en angriper tilgang til sensitive opplysninger om kunder eller liknende.
Husk drift
Det minste privilegiums prinsipp gleder ikke kun når det utvikles applikasjoner. Dette er noe en må ha i bakhodet hele veien fra utvikling til drift og bruk. En tradisjonelt mye brukt måte å drifte websider bygd med CGI-baserte språk, som for eksempel PHP, er delt hosting. Dette betyr at en drifter mange websider på samme fysiske eller virtuelle maskin og ruter trafikk til de forskjellige websidene basert på hvilket domene som en bruker besøker (spesifikt basert på Host headeren). Avhengig av hvordan denne serveren er satt opp kan det bety at et sikkerhetsbrudd på en av disse websidene også eksponerer tilgang til alle de andre websidene på samme maskin.
For å forebygge slike indirekte angrep kan man i Linux passe på å kjøre hver enkelt webside som separate brukere, og påse at alle filer og andre ressurser for hver webside kun er tilgjengelig fra den aktuelle websiden sin bruker.
Å til enhver tid være sikker på at dette er tilfelle og at ingen med uhell har eksponert ressurser på tvers av websider er en omfattende oppgave. I noen tilfeller er det heller ikke støttet til å kjøre hver webside som forskjellige brukere, som for eksempel i det populære valget Apache + mod_php.
Må jeg ha mange maskiner?
Betyr dette at vi må drifte separate maskiner for hver applikasjon? Neida, en mye lettere og universell løsning er å ta i bruk Linux kernelen sin støtte for "jails" og "namespaces". Dette er funksjoner som lar en separere applikasjoner på samme maskin slik at de for alle praktiske formål oppfører seg som om de var på forskjellige maskiner.
Disse teknologiene har til varierende grad eksistert siden før Linux, men ble først popularisert av Docker under samlebetegnelsen "container". I dag er containere standarisert og fungerer på kryss og tvers av rammeverk som Docker, cri-o, containerd, med flere.
Containere består av et komplett filsystem med alt av nødvendige biblioteker og verktøy for å kjøre en gitt applikasjon, samt en oppstartskommando som automatisk kjøres for å starte containeren. En startet container får også tildelt sine helt egne virtuelle nettverkskort, prosesstre, og andre ressurser som kan namespaces i Linux kernelen. Containere kan også begrenses til å ikke overskride en gitt mengde minne og en gitt andel av tilgjengelig prosessortid. Kombinasjonen av disse oppdelingsmulighetene gjør det mulig å drifte en "virtuell maskin" per applikasjon, uten de ekstra driftskostnadene det innebærer å drifte et helt operativsystem med tilhørende systemprosesser per applikasjon.
Det å drifte applikasjoner i containere åpner også døren til helt nye muligheter innen redundans, lastbalansering, med mer.