Spring til indhold

Styresystem

softwaren, der styrer maskinen for alle andre programmer

Hvad det er

Et styresystem er den software, der starter først på en computer og bliver ved med at køre under alt andet, fordeler processoren, hukommelsen, lageret og netværket mellem programmerne og giver dem alle de samme måder at læse filer, bruge enheder og nå netværket på. Det kaldes også operativsystem og forkortes OS. Windows, macOS, Android, iOS og Linux-distributionerne som Debian og Ubuntu er styresystemer.

NIST’s ordliste har to beskrivelser, der passer sammen. Den ene kalder det det overordnede styringsprogram, der driver computeren: det første program, der indlæses, når computeren tændes, hvis hoveddel, kernen, altid ligger i hukommelsen, og som sætter standarden for alle applikationsprogrammer, for eksempel webserveren. Den anden, fra NIST’s vejledning om sikkerhed i driftsteknologi, kalder det en samlet række servicerutiner, der styrer rækkefølgen af programmer, kan stå for input og output, planlægning af ressourcer og håndtering af data, og giver applikationsprogrammerne de grundlæggende kommandoer til at styre computeren.

Kernen er midten, men et styresystem er mere end sin kerne. Omkring den ligger de systembiblioteker, programmerne kalder, skallen og de daglige kommandolinjeværktøjer, en tilsynsproces, der starter tjenester ved opstart og genstarter dem, en pakkehåndtering, der installerer og opdaterer software, og en stor mængde standardkonfiguration, der afgør, hvad der er slået til, hvor logs ender, og hvem der må logge ind. En Linux-distribution samler alt det omkring Linux-kernen, og derfor kan to systemer med samme kerne opføre sig meget forskelligt.

Det meste af det, et styresystem tilbyder et program, er en kort liste af abstraktioner, der træder i stedet for hardwaren. POSIX, standarden bag Unix-lignende systemer, definerer dem præcist. En proces er et adresserum med én eller flere tråde, der kører i det, plus de systemressourcer, trådene har brug for. En fil er et objekt, der kan skrives til, læses fra eller begge dele, med adgangsrettigheder og en type: almindelig fil, mappe, symbolsk link, FIFO, socket eller en tegn- eller blokspecialfil, der står for en enhed. En blokspecialfil giver adgang til en enhed på en måde, der holder dens hardwareegenskaber ude af syne. En enhed er selv defineret som en ydre computerenhed eller et objekt, der for applikationen ser ud som sådan en. POSIX' erklærede formål er at gøre applikationer flytbare på kildekodeniveau, så et program, der er skrevet til de grænseflader, kan oversættes på et andet system, der følger standarden, og køre der.

Hukommelsen får samme behandling. Linux-kernens dokumentation tager udgangspunkt i, at fysisk hukommelse er en begrænset ressource, og beskriver virtuel hukommelse som det lag, der skjuler dens detaljer for applikationssoftwaren. Hvert program ser sit eget adresserum, og styresystemet afgør øjeblik for øjeblik, hvilke dele af hvilke programmer der holdes i den rigtige hukommelse, og hvilke der komprimeres, skrives ud på disken eller smides væk for at blive læst ind igen senere.

Hvorfor det betyder noget

Valget af styresystem afgør meget på én gang: hvilken software der kan køre, hvilke værktøjer de folk, der driver det, allerede kender, hvem der leverer sikkerhedsrettelser og hvor længe, og hvad en eventuel supportaftale vil koste. At skifte det senere betyder at flytte hvert program og hver vane, der er bygget på det, så valget overlever som regel den hardware, det først blev truffet på.

Det er også den vigtigste tillidsgrænse inde i én maskine. Brugere, grupper, filrettigheder og adskillelsen mellem processer er alle funktioner i styresystemet, og de afgør, hvor langt en fejl i ét program kan nå. En maskine, hvor hver tjeneste kører med fulde rettigheder, har én mur tilbage, nemlig netværkets kant.

Dets standarder er beslutninger, som en anden har truffet. En frisk installation kommer med tjenester slået til, filer på aftalte steder og indstillinger, der allerede er valgt. De fleste er fornuftige; nogle få passer ikke til arbejdet, og ingen får at vide, hvilke. At drive en maskine godt omfatter at vide, hvilke standarder man har accepteret.

Og det afgør, hvor langt kode kan rejse. Et program, der holder sig til de flytbare grænseflader, flytter til et andet system med en ny oversættelse. Et program eller script, der læner sig op ad ét systems udvidelser, flytter kun så langt, som de udvidelser gør.

Sådan ser det ud i praksis

På en bærbar fyldte en applikation hukommelsen, indtil styresystemet slog den ihjel. Styresystemet lod forbruget stige med omkring 41 MB i sekundet, indtil de komprimerede sider fyldte 111 GB på en maskine, der selv har 36 GB, og det viser, hvor langt et styresystem strækker hukommelsen, før det griber ind. Siden tilføjer, at nedlukningen kommer, efter at swap allerede har fået alt andet på skrivebordet til at holde op med at svare. Årsagen blev rettet i applikationen med afgrænsede hændelsesstrømme, abonnement efter hændelsestype og et ratebudget på logningen, og én sessions 610.996 loglinjer blev til 1.411.

På virksomhedens vært havde en automatiseringsrolle skrevet sine SSH-indstillinger ved hver kørsel i måneder, da en adgangsrapport læste dæmonens egne effektive indstillinger og fandt to af dem i uoverensstemmelse. Beretningen om at hærde SSH med validering i tre trin giver årsagen: styresystemet leverer sine egne standardværdier som aktive linjer over det sted, hvor en drop-in-fil lander, og for de to indstillinger vinder den første forekomst. Rettelsen var et filnavnspræfiks, der sorterer foran leverandørens, og nu efterprøves 24 direktiver mod det, dæmonen selv melder tilbage.

Den samme vært mødte et andet af systemets valg, da dens tjeneste til blokering af indtrængningsforsøg blev sat op. Logbackenden er sat til detektion, fordi styresystemet leveres uden en traditionel autentificeringslog, og det forkerte valg fejler tavst ved at holde øje med en fil, der aldrig dukker op.

Hvor det går galt

Et script bærer vanerne fra det system, det blev skrevet på. Et shellscript, der er skrevet på en Mac og køres på en Linux-server, eller omvendt, møder de samme kommandonavne med andre tilvalg. POSIX’ sed accepterer -E og -n; at redigere en fil på stedet med -i er en udvidelse, og de to almindelige udgaver tager den forskelligt:

sed -i 's/old/new/' notes.txt     # GNU sed, på de fleste Linux-systemer
sed -i '' 's/old/new/' notes.txt  # BSD sed, på macOS

Hver form går i stykker på det andet system. Hold dig til det, POSIX definerer, hvor det er nok, kør scriptet på det system, der skal køre det i produktion, og installér det samme værktøj begge steder, når en udvidelse er værd at have.

To maskiner med samme styresystem er forskellige. »Debian« er navnet på en familie af udgivelser, og to værter, der begge beskrives som Debian-maskiner, kan ligge år fra hinanden i udgivelse, kerne og pakkeversioner, med forskellige pakker installeret og forskellige lokale ændringer. Læs, hvad hver maskine faktisk er, før de sammenlignes:

cat /etc/os-release
uname -srm

Den første skriver distributionens navn og udgivelse, den anden kernens navn og udgivelse og hardwarearkitekturen. Byg hver vært ud fra den samme skrevne beskrivelse, og hold udgivelsen i inventaret.

Tjenester kører som administrator. En tjeneste, der kører som root på et Unix-lignende system, kan læse hver fil og ændre hver indstilling, så enhver fejl i den er en fejl i hele maskinen. Giv hver tjeneste sin egen bruger uden særlige rettigheder, med skriveadgang kun der, hvor den skriver, og tildel ekstra rettigheder én ad gangen, når tjenesten viser, at den har brug for dem.

En udgivelse overlever sin sikkerhedssupport. Hver udgivelse holder op med at få rettelser efter en offentliggjort plan. Debians sikkerhedsteam understøtter for eksempel en stabil distribution i tre år efter dens udgivelse. En vært, der bliver stående på en gammel udgivelse, bliver ved med at virke, og netop derfor bliver den glemt. Skriv hver værts slutdato for support ned ved siden af dens andre fornyelsesdatoer, og planlæg opgraderingen i god tid før.

Læs mere

Ordliste