# Styresystem

## 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](/da/portfolio/stopped-an-application-filling-memory-at-41mb-a-second-155/).
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](/da/portfolio/hardened-ssh-with-three-stage-validation-111/)
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](/da/portfolio/proved-the-intrusion-banning-path-on-every-converge-112/),
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:

```sh
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:

```sh
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

- [operating system — NIST CSRC Glossary](https://csrc.nist.gov/glossary/term/operating_system)
  — begge definitioner, fra det overordnede styringsprogram til samlingen af
  servicerutiner.
- [POSIX.1-2024, Base Definitions: Definitions](https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap03.html)
  — den præcise ordlyd for proces, fil, enhed og de andre ord, et styresystem er
  bygget af.
- [POSIX.1-2024: sed](https://pubs.opengroup.org/onlinepubs/9799919799/utilities/sed.html)
  — de tilvalg, enhver `sed`, der følger standarden, accepterer, som mål for,
  hvad et flytbart script kan bruge.
- [Linux kernel documentation: Concepts overview](https://docs.kernel.org/admin-guide/mm/concepts.html)
  — virtuel hukommelse, sidecachen og genindvinding, som kernen selv beskriver
  dem.
- [Debian security FAQ](https://www.debian.org/security/faq) — hvordan Debian
  håndterer sikkerhedsrettelser, og hvor længe en stabil udgivelse får dem.

<https://engineer.company/da/glossary/operating-system/>
