Hopp til innhold
NorscodeNorscode

Hvorfor kjøretiden sier nei

ArtikkelAv Norscode-prosjektet

En kort forklaring av kapabilitetsmodellen, og hvorfor den er slått på fra første stund.

Det vanligste spørsmålet nye brukere har, er hvorfor et program stopper med manglar capability når det åpenbart bare skal lese en fil eller åpne en port. Svaret er at Norscode snur en standardinnstilling de fleste andre språk tar for gitt — og når du først forstår det, blir feilmeldingen en hjelper, ikke et hinder.

Programmet starter uten tilgang

I de fleste språk arver et program tilgangen til brukeren som starter det: hele disken, hele nettverket, alle miljøvariabler. En avhengighet dypt nede i treet kan lese nøklene dine uten at noen legger merke til det. I Norscode får programmet ingenting før du gir det — og feilmeldingen manglar capability betyr rett og slett at koden ba om noe den ikke har fått.

Slik gir du tilgang

Du oppgir evnene når du starter programmet, gjennom miljøvariabler:

NORSCODE_VM_CAPABILITIES="disk.read,net.tcp" NORSCODE_VM_DISK_ROOT="/srv/data" nc run rapport.no

Her kan programmet lese under /srv/data og bruke nettverket — ikke skrive til disk, ikke lese miljøet. De vanligste evnene er disk.read, disk.write, net.tcp, env.read og env.write. I tillegg kan du snevre inn hvor tilgangen gjelder: NORSCODE_VM_DISK_ROOT begrenser disktilgangen til bestemte kataloger, og NORSCODE_VM_NET_SCOPE hvilke verter programmet får snakke med.

Grensen kan ikke forhandles bort

Det viktige er at programmet ikke kan be om mer tilgang mens det kjører. Grensen settes én gang, av den som starter det. Det betyr at du kan kjøre kode du ikke har lest hver linje av — en tredjepartsmodul, et eksempel du fant på nett — og likevel vite nøyaktig hva den maksimalt kan gjøre.

Litt ekstra arbeid, mye igjen

Modellen koster noen linjer når du starter tjenesten. Til gjengjeld har du en kortfattet, ærlig liste over hva programmet får lov til — lesbar for et menneske, ikke gjemt i tusen linjer kode. I en verden der de fleste sikkerhetshull handler om at noe fikk gjøre mer enn det trengte, er det en billig forsikring.

Les også

Tilbake til oversikten