DARJA RIHLA/LINUX LAB
MODULE 00 · SESSION PROTOCOLLES 1 / 31ALLEEN LEZEN
Linux Learning Console
Eén leeromgeving voor de Linux- en securityleerlijn van Darja Rihla. Links staat het curriculum, in het midden de actieve les, rechts wat die les wel en niet bewijst. De volgorde is niet willekeurig: elke module rust op de module eronder.
Hoe deze pagina werkt
1 · Kies een les
Links staat de hele lijst. Klik op een les en die komt in het midden te staan. Onderaan kun je met Vorige en Volgende door de lijst lopen. Begin gewoon bij 00.01 en werk naar beneden.
2 · Lees de les
Elke les is op dezelfde manier opgebouwd, zodat je nooit hoeft te zoeken:
- Vraag — wat je te weten wilt komen
- Context — waarom dat ertoe doet
- Commando — wat je typt
- Voorbeelduitvoer — wat je ongeveer terugkrijgt
- Interpretatie — wat dat antwoord betekent
- Dit bewijst niet — waar je conclusie moet stoppen
- Verifieer — hoe je nagaat of je het goed hebt
3 · Typ het zelf
Onder de les staat een oefenterminal. Dat is een nagemaakte Linux-computer in je browser. Er zit geen echt netwerk achter en je kunt er niets stukmaken — ook niet als je expres iets raars typt.
Je hebt drie manieren om te oefenen:
- Alleen hier — klik op Probeer in de oefenterminal. Veilig, en je ziet meteen wat een commando doet.
- Alleen op je eigen computer — klik op Kopieer voor je eigen terminal en plak het in je echte terminal. Dan zie je jouw eigen machine, niet een verzonnen machine.
- Allebei — dat werkt het beste. Eerst hier oefenen tot je snapt wat je ziet, daarna hetzelfde op je eigen machine en de twee vergelijken. Waar ze verschillen, leer je het meest.
Zit je vast in de oefenterminal? Typ help. Met Tab vult hij woorden aan en met pijl omhoog haal je je vorige commando terug — net als in een echte terminal.
4 · Houd bij wat je hebt aangetoond
Rechts van elke les staat wat die les wel en niet bewijst. Daaronder kun je zelf aanvinken of je een les hebt geoefend of geverifieerd. Dat vinkje zet jijzelf: de pagina kan niet zien of je het commando echt hebt gedraaid. Het staat alleen in deze browser, op dit apparaat.
Eén regel die altijd geldt. De commando’s uit module 05 tot en met 07 kijken naar netwerken. Op je eigen computer en je eigen wifi mag dat. Op het netwerk van school, van de buren of van een winkel mag het niet — dat is strafbaar, ook als je alleen maar nieuwsgierig was. De oefenterminal weigert daarom zelf ook alles buiten zijn eigen netwerk.
Drie vragen voor je begint
Geen strikvragen. Ze gaan over de drie dingen waar het in deze leerlijn steeds om draait: weet waar je bent, weet wat je gemeten hebt, en weet waar je mag kijken.
Zonder JavaScript staan de antwoorden hierboven gewoon te lezen. Dat is geen fout: deze vragen zijn een leermoment, geen slot. Wie de lessen wil lezen, kan dat altijd.
Methode
UNDERSTAND → PRACTICE → APPLY → VERIFY → SECURE → HARDEN
Beginnerslessen doorlopen understand, practice en verify. Securitylabs voegen scope, evidence en harden toe. Geen enkele les eindigt bij “het werkt”; elke les eindigt bij “dit heb ik aangetoond, en dit nog niet”.
Toegestane scope
Eigen apparaat, eigen thuisnetwerk, of een netwerk waarvoor je expliciete toestemming hebt. Dezelfde gereedschappen die je hier defensief gebruikt, zijn op andermans netwerk strafbaar. Alle adressen, MAC-adressen en namen in deze lessen zijn geanonimiseerd; er staat geen enkel gegeven uit een werkelijke scan in.
Wat de leerlijn oplevert
- 04
host-baseline.mdVastgelegde normale toestand van één machine. - 05
host-security-review.mdBeoordeling van rechten, diensten en firewall op die machine. - 06
network-assets.mdWat er op je eigen netwerk staat en wat het aanbiedt. - 07
router-review.mdWat je router aanbiedt aan de binnenkant en wat hij over zichzelf zegt. - —
home-security-report.mdEindrapport: de vier documenten hierboven samengebracht.
Deze documenten schrijf je zelf, in je eigen werkmap. De console genereert ze niet.
Bepaal je scope voordat je iets aanraakt
Scope is geen formaliteit. Het is het verschil tussen oefenen en inbreken.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Op welke machines en op welk netwerk mag jij vanavond werken?
Context
In module 05 tot en met 07 leer je gereedschap kennen dat op je eigen netwerk normaal is en op andermans netwerk strafbaar. Hetzelfde commando, andere plek, ander gevolg. Daarom begint elke sessie met opschrijven waar je grens ligt — vóór het eerste commando, niet erna.
Commando
echo "SCOPE $(date +%F): eigen laptop + eigen thuisnetwerk" >> ~/linux-scope.txtVoorbeelduitvoer (geanonimiseerd)
(geen uitvoer — het bestand groeit met één regel)Interpretatie
Je hebt een regel op schijf gezet met een datum eraan. Dat is geen bureaucratie: als je over drie weken een logbestand terugleest, staat er nu bij wat je toen als toegestaan beschouwde.
Dit bewijst niet
Dit bewijst niet dat je toestemming hebt. Het legt alleen vast wat jij als scope hebt aangenomen. Voor apparaten van huisgenoten, werkgevers of buren heb je hun toestemming nodig, niet je eigen regel.
Verifieer
Open het bestand met cat ~/linux-scope.txt. Staat er precies één regel per sessie, met datum?
Neem je sessie op
Wat je niet hebt opgenomen, kun je later niet nakijken.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Hoe bewaar je alles wat er tijdens deze les over je scherm gaat?
Context
script schrijft je hele terminalsessie naar een bestand: wat jij typte én wat de machine antwoordde. Je gebruikt het niet omdat je iets fout verwacht, maar omdat je bij een verrassing wilt kunnen terugkijken naar wat er werkelijk stond in plaats van naar wat je je herinnert.
Commando
script -q -f ~/linux-les-$(date +%Y-%m-%d_%H-%M-%S).logVoorbeelduitvoer (geanonimiseerd)
(de prompt komt terug; vanaf nu wordt alles meegeschreven)Interpretatie
-q onderdrukt de begin- en eindmelding. -f schrijft na elke regel weg, zodat het bestand ook bruikbaar is als de sessie onverwacht stopt. De datum in de naam maakt van elk logbestand een uniek moment.
Dit bewijst niet
Een logbestand bewijst niet dat een commando gelukt is. Het bewijst alleen wat er op het scherm stond. Uitvoer lezen blijft jouw werk.
Verifieer
Typ ls ~/linux-les-*.log in een tweede terminal. Groeit het bestand terwijl je typt?
Sluit af en bewaar het bewijs
Observe first, change later, verify — en pas dan het log dichtdoen.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Hoe sluit je een sessie af zodat het log compleet en leesbaar is?
Context
Een sessie die je wegklikt in plaats van afsluit, laat een half log achter. exit sluit de opname netjes. Daarna controleer je of het bestand er staat en hoe groot het is, want een leeg log heeft niemand iets aan.
Commando
exit
ls -l ~/linux-les-*.log | tail -3In de oefenterminal draait dit met de adressen van de oefenmachine (192.168.2.0/24). Op je eigen machine vul je je eigen waarden in.
Voorbeelduitvoer (geanonimiseerd)
-rw------- 1 [user] [user] 14231 [datum] /home/[user]/linux-les-[timestamp].logInterpretatie
De rechten -rw——- betekenen dat alleen jij het bestand kunt lezen. Dat hoort zo: in een sessielog staan hostnamen, gebruikersnamen en soms interne adressen.
Dit bewijst niet
Dit bewijst niet dat het log veilig staat. Het staat op je home-partitie, in leesbare tekst. Wat je ermee doet — bewaren, versleutelen, verwijderen — is een aparte beslissing.
Verifieer
Open het log met less en zoek je eerste commando terug. Staat het er letterlijk?
De terminal
Een plek waar je één zin typt en één antwoord krijgt.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Wat is een terminal eigenlijk, en hoe weet je dat hij naar je luistert?
Context
De terminal is geen programma dat iets doet. Het is een plek waar je één regel intypt en de machine één antwoord teruggeeft. Drie commando's zijn genoeg om te merken dat het werkt.
Commando
pwd
whoami
dateVoorbeelduitvoer (geanonimiseerd)
/home/[user]
[user]
[huidige datum en tijd]Interpretatie
pwd vertelt waar je staat, whoami wie je bent, date hoe laat de machine denkt dat het is. Alle drie veranderen niets. Ze rapporteren alleen.
Verifieer
Sluit de terminal, open hem opnieuw en typ pwd. Sta je weer op dezelfde plek?
Waar je bent
Alles op de machine hangt aan één punt.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Hoe zie je wat er op deze plek staat, en hoe ga je ergens anders heen?
Context
Linux heeft geen losse schijven met letters. Alles hangt aan één punt: /. Elke map is een aftakking. ls laat zien wat er is, cd verplaatst je, en punten aan het begin van een naam betekenen verborgen.
Commando
ls
cd Documents
cd ..
ls -aIn de oefenterminal draait dit met de adressen van de oefenmachine (192.168.2.0/24). Op je eigen machine vul je je eigen waarden in.
Voorbeelduitvoer (geanonimiseerd)
Documents Downloads Pictures
(geen uitvoer)
(geen uitvoer)
. .. .bashrc .config Documents DownloadsInterpretatie
ls -a toont ook de namen die met een punt beginnen. Dat zijn geen geheime bestanden; het is een afspraak dat configuratie niet in de weg hoort te zitten. cd .. gaat één niveau omhoog.
Dit bewijst niet
Dat je iets niet ziet met ls, bewijst niet dat het er niet is. Het bewijst dat het niet in deze map staat, of dat het verborgen is, of dat je het niet mag zien.
Verifieer
Typ pwd na elke cd. Klopt je verwachting met wat er staat?
In een bestand kijken
Lezen is niet veranderen.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Hoe lees je een bestand zonder het per ongeluk te wijzigen?
Context
cat, head en wc raken de inhoud niet aan. Ze lezen. Dat onderscheid — lezen tegenover schrijven — is de basis onder alles wat je in module 05 en verder gaat doen.
Commando
cat notes.txt
head shopping-list.txt
wc -l shopping-list.txt
cat /etc/os-releaseIn de oefenterminal draait dit met de adressen van de oefenmachine (192.168.2.0/24). Op je eigen machine vul je je eigen waarden in.
Voorbeelduitvoer (geanonimiseerd)
(inhoud van het bestand)
(eerste tien regels)
14 shopping-list.txt
NAME="[distributie]"
VERSION="[versie]"Interpretatie
/etc/os-release is het eerste systeembestand dat je leest. Het staat buiten je eigen map en je mag het gewoon lezen: het is bedoeld om te vertellen welk systeem dit is.
Dit bewijst niet
De inhoud van /etc/os-release is wat het systeem over zichzelf zegt. Bij een aangepaste of verouderde installatie hoeft dat niet overeen te komen met wat er werkelijk draait.
Verifieer
Voer cat notes.txt twee keer uit. Is de uitvoer identiek? Dan heb je niets veranderd.
Wat er draait
De machine doet veel meer dan jij gevraagd hebt.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Welke processen draaien er op dit moment, en van wie zijn ze?
Context
Je hebt drie programma's geopend en er draaien er honderd. De rest is het systeem zelf. ps laat zien wat er is; top laat zien hoe het verandert.
Commando
ps
ps aux
topVoorbeelduitvoer (geanonimiseerd)
PID TTY TIME CMD
2841 pts/0 00:00:00 bash
[user] 2841 0.0 0.1 bash
root 1 0.0 0.1 /sbin/initInterpretatie
De eerste kolom in ps aux is de eigenaar. Processen van root zijn systeemprocessen. Processen met jouw naam heb jij gestart, direct of via je bureaublad.
Dit bewijst niet
ps toont wat er draait op het moment dat je kijkt. Een proces dat één seconde geleden stopte of één seconde later start, staat er niet in. Eén ps is een momentopname, geen bewaking.
Verifieer
Voer ps aux | wc -l twee keer uit met een paar seconden ertussen. Verschilt het aantal?
Wie je bent
Toestemming is geen instelling. Het is wie je bent.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Wat mag jouw account wel en niet, en waar zie je dat aan?
Context
id laat zien in welke groepen je zit. Die groepen bepalen wat je mag. ls -l laat per bestand zien wie de eigenaar is en wat anderen ermee mogen. Samen vormen ze het rechtenmodel.
Commando
id
ls -l
cd /root
sudo ls /rootVoorbeelduitvoer (geanonimiseerd)
uid=1000([user]) gid=1000([user]) groups=1000([user]),27(sudo),...
-rw-r--r-- 1 [user] [user] 220 notes.txt
bash: cd: /root: Toegang geweigerd
(inhoud van /root)Interpretatie
De weigering bij cd /root is geen storing. Het is het systeem dat zichzelf beschermt. Met sudo doe je hetzelfde als root, en dan mag het wél — dat is precies waarom sudo gevaarlijk is.
Dit bewijst niet
Dat jij in de groep sudo zit, bewijst niet dat je alles mag. sudo -l (module 05) laat pas zien wat je werkelijk mag draaien.
Verifieer
Vergelijk de groepen uit id met de uitvoer van groups. Komen ze overeen?
Programma's die blijven
Sommige dingen draaien omdat iemand besloot dat ze altijd moeten draaien.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Wat is het verschil tussen een programma dat nu draait en een programma dat altijd start?
Context
systemd beheert diensten. Een dienst kan actief zijn (draait nu) en enabled (start bij het opstarten). Dat zijn twee verschillende dingen, en dat verschil komt in module 05 terug als securityvraag.
Commando
systemctl status ssh
systemctl is-active ssh
systemctl is-enabled docker
systemctl list-unitsVoorbeelduitvoer (geanonimiseerd)
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (...; enabled)
Active: active (running)
active
enabledInterpretatie
Onthoud de ketting: geïnstalleerd is niet hetzelfde als draaiend, draaiend is niet hetzelfde als enabled, en enabled is niet hetzelfde als actief op dit moment.
Dit bewijst niet
is-enabled zegt iets over de volgende keer opstarten, niet over nu. is-active zegt iets over nu, niet over straks. Je hebt beide antwoorden nodig.
Verifieer
Voer voor dezelfde dienst is-active én is-enabled uit. Kun je uitleggen waarom ze kunnen verschillen?
Op het netwerk
Je machine heeft meer dan één adres.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Welke netwerkadressen heeft deze machine, en waar gaat verkeer naartoe?
Context
Een laptop heeft bijna altijd meer dan één interface: loopback, wifi, soms ethernet of een VPN. Elk daarvan heeft een eigen adres en een eigen betekenis.
Commando
ip -brief address
ip route
hostnameVoorbeelduitvoer (geanonimiseerd)
lo UNKNOWN 127.0.0.1/8
wlp3s0 UP 192.168.x.x/24
default via 192.168.x.1 dev wlp3s0
[hostname]Interpretatie
127.0.0.1 is de machine zelf en verlaat nooit het apparaat. Het adres op wlp3s0 is je plek in het lokale netwerk. De regel met default via wijst de gateway aan: alles wat niet lokaal is, gaat daarheen.
Dit bewijst niet
Dit adres is wat je machine denkt te hebben. Het bewijst niet dat je vanaf buiten bereikbaar bent, en ook niet dat dit je publieke IP-adres is.
Verifieer
Zoek in ip route de regel die met default begint. Komt dat adres overeen met je router?
Wat er luistert
Sommige programma's zitten te wachten tot er geklopt wordt.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Welke programma's op deze machine staan open voor binnenkomende verbindingen?
Context
Een luisterende socket is een programma dat op een poort wacht. Zonder sudo zie je de poorten maar niet altijd welk programma erachter zit; met sudo wel. Dat verschil is de kern van deze les.
Commando
ss -tulpn
sudo ss -tulpnVoorbeelduitvoer (geanonimiseerd)
tcp LISTEN 0 128 127.0.0.1:631 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=...))Interpretatie
Let op het adres vóór de dubbele punt. 127.0.0.1:631 luistert alleen naar de machine zelf. 0.0.0.0:22 luistert naar élke interface — dus ook naar je thuisnetwerk.
Dit bewijst niet
Een luisterende poort bewijst niet dat iemand erbij kan. Een firewall of NAT kan ertussen zitten. Wat je hier ziet is de bedoeling van het programma, niet de werkelijke bereikbaarheid.
Verifieer
Zoek voor elke regel met 0.0.0.0 het programma op. Weet je waarom het draait?
Wie erbij kan
Je eerste echte veiligheidsafweging.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Van de dingen die luisteren: welke horen daar, en welke staan er alleen omdat niemand ze heeft uitgezet?
Context
Nu combineer je drie commando's die je los al kent. De vraag is niet meer wat er staat, maar of het er hoort te staan. Dat is de eerste keer dat je een oordeel velt in plaats van een lijst leest.
Commando
sudo ss -tulpn
ip -brief address
systemctl is-enabled cupsVoorbeelduitvoer (geanonimiseerd)
tcp LISTEN 0.0.0.0:631 users:(("cupsd"))
wlp3s0 UP 192.168.x.x/24
enabledInterpretatie
Een printerdienst die op 0.0.0.0 luistert, is bereikbaar voor iedereen op je wifi. Als je niet print vanaf andere apparaten, is dat aanbod zonder afnemer.
Dit bewijst niet
Dit bewijst niet dat je gehackt bent of dat er misbruik is gemaakt. Het toont aanvalsoppervlak, niet een aanval. Die twee door elkaar halen is de meest gemaakte beginnersfout in security.
Verifieer
Kun je voor élke luisterende poort in één zin zeggen waarom hij open staat? Kan dat niet, dan is dat je volgende vraag, niet je conclusie.
Schrijf het op
Een baseline is pas een baseline als hij op schijf staat.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Hoe zag normaal eruit op de dag dat er nog niets aan de hand was?
Context
Een baseline is de vastgelegde normale toestand. Zonder baseline kun je later niet zien dat er iets veranderd is — je hebt dan alleen een gevoel. Dit is het eerste artifact dat je oplevert.
Commando
sudo ss -tulpn > ~/baseline-poorten.txt
ip -brief address > ~/baseline-adressen.txt
systemctl list-unit-files --state=enabled > ~/baseline-diensten.txtIn de oefenterminal draait dit met de adressen van de oefenmachine (192.168.2.0/24). Op je eigen machine vul je je eigen waarden in.
Voorbeelduitvoer (geanonimiseerd)
(drie bestanden, elk met de uitvoer van het commando ervoor)Interpretatie
Drie bestanden met een datum eromheen zijn samen je host-baseline. Over een maand voer je dezelfde drie commando's uit en vergelijk je met diff. Verschil is dan zichtbaar in plaats van vermoed.
Dit bewijst niet
Een baseline bewijst niet dat de machine schoon was toen je hem maakte. Hij legt vast wat de toestand wás. Als er op dat moment al iets mis was, leg je dat mee vast.
Verifieer
Voer de drie commando's morgen opnieuw uit en vergelijk met diff. Is het verschil nul?
Levert op
Deze module werkt toe naar het document host-baseline.md.
Systeemidentiteit
Voor je iets beoordeelt, stel je vast wát je beoordeelt.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Welk systeem is dit precies, en welke kernel draait eronder?
Context
Een securitycontrole zonder systeemidentiteit is niet reproduceerbaar. Advies dat klopt voor de ene versie kan onzin zijn voor de andere. hostnamectl is één commando dat alles in één keer geeft.
Commando
hostnamectlVoorbeelduitvoer (geanonimiseerd)
Static hostname: [hostname]
Icon name: computer-laptop
Operating System: [distributie] [versie]
Kernel: Linux [versie]
Architecture: x86-64Interpretatie
Distributie plus kernelversie bepalen welke adviezen op jouw machine van toepassing zijn. Noteer ze boven aan je host-security-review; anders is die review over een half jaar onbruikbaar.
Dit bewijst niet
De kernelversie hier is de draaiende kernel. Als er een update is geïnstalleerd maar nog niet herstart, staat de nieuwe versie op schijf en de oude in het geheugen.
Verifieer
Vergelijk de kernel uit hostnamectl met uname -r. Zijn ze gelijk?
Wat jouw account mag
Groepslidmaatschap is stille macht.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
In welke groepen zit je, en welke daarvan geven feitelijk beheerderrechten?
Context
Niet elke groep is onschuldig. sudo is de bekende. docker is de onbekende: wie in de groep docker zit, kan een container starten die de hele schijf koppelt. Dat is beheerderstoegang zonder dat er sudo staat.
Commando
idVoorbeelduitvoer (geanonimiseerd)
uid=1000([user]) gid=1000([user]) groups=1000([user]),27(sudo),135(docker),...Interpretatie
Lees deze regel groep voor groep. sudo en docker zijn allebei paden naar root. adm en systemd-journal geven leestoegang tot logs. De rest is meestal hardware of bureaublad.
Dit bewijst niet
Lidmaatschap van de groep sudo bewijst niet wat je daarmee mag. Sudo-regels kunnen per commando beperkt zijn. De volgende les kijkt daarnaar.
Verifieer
Noem voor elke groep in je eigen uitvoer waarom je erin zit. Kun je er één niet verklaren, dan is dat een bevinding.
Sudo-oppervlak
Wat je mag draaien als root, en zonder wachtwoord.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Welke commando's mag jij als root uitvoeren, en welke daarvan zonder wachtwoord?
Context
sudo -l leest de sudo-regels die op jou van toepassing zijn. Regels met NOPASSWD zijn het interessantst: daar staat een pad naar root dat geen wachtwoord meer vraagt.
Commando
sudo -lVoorbeelduitvoer (geanonimiseerd)
Gebruiker [user] mag de volgende commando's uitvoeren op [hostname]:
(ALL : ALL) ALL
(root) NOPASSWD: /usr/local/bin/[script]Interpretatie
(ALL : ALL) ALL betekent: alles, met wachtwoord. Een NOPASSWD-regel voor een specifiek script betekent: dat script draait als root zonder verdere vraag. Wie dat script kan wijzigen, wordt daarmee root.
Dit bewijst niet
Deze lijst bewijst niet dat er misbruik van gemaakt is. Hij toont wat mogelijk is. Of het een risico is, hangt af van wie het genoemde bestand kan aanpassen — dat controleer je in de volgende les.
Verifieer
Schrijf elk NOPASSWD-pad letterlijk over. Je hebt ze in les 05.04 nodig.
Eigendom van een NOPASSWD-doel controleren
Een pad naar root is pas veilig als niemand anders eraan kan komen.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Wie is de eigenaar van het bestand dat zonder wachtwoord als root mag draaien, en wie mag het wijzigen?
Context
Als een script als root draait zonder wachtwoord, en jouw eigen gebruiker mag dat script wijzigen, dan is de wachtwoordvraag zinloos geworden. Je zet er dan gewoon een regel bij. Dit is de klassieke fout.
Commando
stat -c '%A %U:%G %n' /usr/local/bin/[script-uit-05-03]In de oefenterminal draait dit met de adressen van de oefenmachine (192.168.2.0/24). Op je eigen machine vul je je eigen waarden in.
Voorbeelduitvoer (geanonimiseerd)
-rwxr-xr-x root:root /usr/local/bin/[script]Interpretatie
root:root met -rwxr-xr-x is de gezonde situatie: alleen root kan schrijven, iedereen mag uitvoeren. Staat er jouw eigen gebruikersnaam als eigenaar, of een w in de laatste drie tekens, dan is het pad open.
Dit bewijst niet
Correct eigendom van het script bewijst niet dat het script veilig is. Een root-script dat zelf een ander bestand uitvoert, verplaatst het probleem alleen. Bekijk ook wat het script aanroept.
Verifieer
Herhaal stat voor elk NOPASSWD-pad uit 05.03. Is er één regel die niet root:root is?
Luisterende diensten beoordelen
Het adres vóór de dubbele punt bepaalt het risico.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Welke diensten luisteren, en op welk adres precies?
Context
In module 03 leerde je poorten lezen. Hier leer je het bindadres beoordelen. Hetzelfde programma op dezelfde poort is ongevaarlijk op 127.0.0.1 en relevant op 0.0.0.0.
Commando
sudo ss -tulpnVoorbeelduitvoer (geanonimiseerd)
tcp LISTEN 127.0.0.1:631 users:(("cupsd"))
tcp LISTEN 0.0.0.0:22 users:(("sshd"))
tcp LISTEN [::]:5432 users:(("postgres"))
tcp LISTEN 100.x.x.x:8080 users:(("[app]"))Interpretatie
127.0.0.1 = alleen deze machine. 0.0.0.0 = elke IPv4-interface, dus ook je wifi. [::] = elke IPv6-interface, en dat wordt vaak over het hoofd gezien. Een specifiek LAN-adres = alleen dat netwerk. Een adres uit een VPN- of Tailscale-bereik = alleen binnen dat overlaynetwerk.
Dit bewijst niet
Luisteren op 0.0.0.0 bewijst niet dat de dienst van buiten bereikbaar is. De firewall in de volgende les kan hem blokkeren. Oppervlak en bereikbaarheid zijn twee verschillende metingen.
Verifieer
Maak een tabel met vier kolommen: poort, programma, bindadres, reden. Is de kolom reden overal ingevuld?
Host-firewall
Een firewall die uit staat, telt niet mee.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Staat de host-firewall aan, welke regels gelden er, en geldt dat ook voor IPv6?
Context
ufw is de eenvoudige laag boven de firewall van de kernel. Drie commando's geven je de status, de genummerde regels om over te praten, en het antwoord op de vraag die het vaakst wordt overgeslagen: IPv6.
Commando
sudo ufw status verbose
sudo ufw status numbered
grep '^IPV6=' /etc/default/ufwVoorbeelduitvoer (geanonimiseerd)
Status: active
Default: deny (incoming), allow (outgoing)
[ 1] 22/tcp ALLOW IN 192.168.x.0/24
IPV6=yesInterpretatie
deny (incoming) als standaard is de gezonde stand. Elke ALLOW-regel is een bewuste uitzondering die je moet kunnen uitleggen. IPV6=yes betekent dat je regels ook op IPv6 worden toegepast.
Dit bewijst niet
Status active bewijst niet dat je beschermd bent. Een ALLOW-regel voor 0.0.0.0/0 op een gevoelige poort maakt een actieve firewall alsnog open. Lees de regels, niet alleen de status.
Verifieer
Kun je bij elke genummerde regel zeggen wanneer hij is toegevoegd en waarom? Zo niet: noteer als open punt.
Docker-aanvalsoppervlak
Geïnstalleerd is niet draaiend, draaiend is niet enabled, enabled is niet actief.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Draait Docker op deze machine, start het automatisch, en wie kan het aansturen?
Context
Docker is securityrelevant om twee redenen: de daemon draait als root, en de socket kan door de groep docker worden aangesproken. Ook een gestopte Docker met een actieve socket is een pad, want de socket start de daemon alsnog.
Commando
systemctl status docker --no-pager
systemctl status docker.socket --no-pager
systemctl is-enabled docker docker.socketVoorbeelduitvoer (geanonimiseerd)
● docker.service Loaded: loaded (...; disabled) Active: inactive (dead)
● docker.socket Loaded: loaded (...; enabled) Active: active (listening)
disabled
enabledInterpretatie
Dit is precies het geval dat mensen verkeerd lezen: de service is inactief én disabled, maar de socket luistert. Wie in de groep docker zit, wekt de daemon met één commando. Het oppervlak is dus open.
Dit bewijst niet
inactive (dead) bewijst niet dat Docker niet gebruikt kan worden. Alleen als zowel service als socket disabled én inactive zijn, is dat pad dicht.
Verifieer
Combineer met les 05.02: staat er docker in je groepen én is de socket active? Noteer dat als bevinding.
Levert op
Deze module werkt toe naar het document host-security-review.md.
Vind je werkelijke netwerk
Scan nooit blind 192.168.1.0/24.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Welk subnet is jouw thuisnetwerk werkelijk, en welk adres is de gateway?
Context
192.168.1.0/24 is een aanname, geen feit. Veel routers gebruiken 192.168.0.0/24, 192.168.178.0/24 of 10.0.0.0/24. Scannen op een subnet dat niet het jouwe is, betekent scannen op een netwerk waarvoor je geen toestemming hebt. Dit is daarom de poort naar de rest van deze module.
Commando
ip -br -4 addr
ip -4 routeVoorbeelduitvoer (geanonimiseerd)
lo UNKNOWN 127.0.0.1/8
wlp3s0 UP 192.168.x.x/24
default via 192.168.x.1 dev wlp3s0
192.168.x.0/24 dev wlp3s0 proto kernel scope linkInterpretatie
Het achtervoegsel /24 vertelt je hoe groot het netwerk is: 254 bruikbare adressen. De regel met default via wijst je router aan. Die twee gegevens samen zijn je scope voor deze hele module.
Dit bewijst niet
Dit bewijst niet dat alle apparaten in dit bereik van jou zijn. Op een gedeeld of gast-netwerk kunnen er apparaten van anderen tussen zitten. Scope blijft een menselijke beslissing.
Verifieer
Schrijf subnet en gateway letterlijk op in je sessielog. Elke volgende les gebruikt deze twee waarden.
Ontdek welke hosts reageren
Zeven antwoorden is niet hetzelfde als zeven apparaten.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Welke apparaten reageren op jouw lokale netwerk?
Context
Host discovery stuurt korte pakketjes naar elk adres in je subnet en noteert wie antwoordt. Het is de minst indringende scan die er is, maar hij hoort alleen op je eigen netwerk thuis.
Commando
sudo nmap -sn 192.168.x.0/24In de oefenterminal draait dit met de adressen van de oefenmachine (192.168.2.0/24). Op je eigen machine vul je je eigen waarden in.
Voorbeelduitvoer (geanonimiseerd)
Nmap scan report for 192.168.x.1
Host is up (0.0031s latency).
...
Nmap done: 256 IP addresses (7 hosts up) scannedInterpretatie
Zeven hosts reageerden tijdens deze discovery. Dat is een meting op één moment, met de apparaten die op dat moment aan stonden en bereid waren te antwoorden.
Dit bewijst niet
Dit bewijst niet dat er precies zeven apparaten bestaan. Een apparaat dat sliep, een apparaat dat niet reageert op ping, of een apparaat dat net was uitgeschakeld, staat er niet bij. Discovery is een ondergrens, geen telling.
Verifieer
Kun je elke gevonden host koppelen aan een apparaat dat je herkent? De hosts die overblijven, zijn je werk in 06.03.
Lees de buurtabel
Een MAC-adres vertelt iets, maar tegenwoordig steeds minder.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Welke hardware-adressen horen bij de hosts die je hebt gevonden?
Context
Je machine houdt een tabel bij van buren op hetzelfde netwerk: welk IP-adres hoorde bij welk MAC-adres. De eerste helft van een MAC verwijst normaal naar de fabrikant.
Commando
ip neighVoorbeelduitvoer (geanonimiseerd)
192.168.x.1 dev wlp3s0 lladdr [MAC-REDACTED] REACHABLE
192.168.x.24 dev wlp3s0 lladdr [MAC-REDACTED] STALEInterpretatie
REACHABLE betekent dat er recent verkeer was. STALE betekent dat de vermelding er nog staat maar niet recent bevestigd is. Dat is geen fout; het is een verlopen herinnering.
Dit bewijst niet
Een MAC-adres bewijst niet welk apparaat het is. Telefoons gebruiken standaard een willekeurig, per netwerk wisselend MAC-adres. Een fabrikantopzoeking die niets oplevert, betekent meestal privacy-MAC — niet een verdacht apparaat.
Verifieer
Zet je host-lijst uit 06.02 naast deze tabel. Welke hosts krijgen nu een naam, en welke blijven onbekend?
Eerste service discovery
Van wie is er, naar wat biedt het aan.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Welke poorten staan open op de apparaten die je herkent?
Context
Nu ga je van bestaan naar aanbod. Beperk je tot apparaten die aantoonbaar van jou zijn. –top-ports 30 houdt de scan kort en beleefd; -Pn slaat de bereikbaarheidstest over voor apparaten die niet op ping reageren maar wel bestaan.
Commando
sudo nmap -sT -Pn --top-ports 30 --open 192.168.x.24In de oefenterminal draait dit met de adressen van de oefenmachine (192.168.2.0/24). Op je eigen machine vul je je eigen waarden in.
Voorbeelduitvoer (geanonimiseerd)
PORT STATE SERVICE
80/tcp open http
443/tcp open https
554/tcp open rtspInterpretatie
Drie open poorten op één apparaat. –open onderdrukt alles wat dicht of gefilterd is, zodat je lijst leesbaar blijft. Wat er achter die poorten zit, weet je nog niet.
Dit bewijst niet
Een open poort bewijst niet welke software erachter draait. De kolom SERVICE is een gok van nmap op basis van het poortnummer, geen meting. Les 06.06 vervangt die gok door een meting.
Verifieer
Scan hetzelfde apparaat een tweede keer. Is de uitkomst gelijk? Zo niet, dan is er iets veranderd of gefilterd.
Wat open poorten betekenen
Een poortnummer is een verwachting, geen identiteit.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Wat verwacht je normaal achter de poorten die je hebt gevonden?
Context
Poortnummers hebben conventies. Ze helpen je richten, maar ze bewijzen niets. Deze les geeft je de conventies waar je in een thuisnetwerk het vaakst tegenaan loopt.
Commando
# geen commando — dit is de leeslijst bij je scanresultaatVoorbeelduitvoer (geanonimiseerd)
22 SSH externe shelltoegang
23 Telnet onversleuteld; hoort nergens meer thuis
53 DNS naamopzoeking, vaak op de router
80 HTTP onversleuteld beheerscherm of dienst
443 HTTPS versleuteld beheerscherm of dienst
445 SMB Windows-bestandsdeling
554 RTSP camerastream
631 IPP printerdienst
3389 RDP extern bureaublad
8080 alt-HTTP tweede webdienst of beheerpaneelInterpretatie
Telnet op 23 is de enige regel in deze lijst die op zichzelf al een bevinding is: het protocol stuurt wachtwoorden in leesbare tekst. RTSP op 554 verklaart meestal een camera. SMB op 445 in een thuisnetwerk verdient een vraag: deel je bewust bestanden?
Dit bewijst niet
Deze tabel bewijst niets over jouw apparaten. Elke dienst kan op elke poort draaien. Gebruik de tabel om te weten wat je moet controleren, niet om te concluderen wat er staat.
Verifieer
Zet naast elke open poort uit 06.04 de verwachting uit deze tabel. Welke wijkt af van wat je van het apparaat weet?
Identificeer de dienst
Vervang de gok door een meting.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Welke software draait er werkelijk achter die open poort?
Context
-sV praat met de dienst en vergelijkt het antwoord met een database van kenmerken. De scripts http-title en http-headers halen de paginatitel en de serverkoppen op. Samen geven ze een veel concreter beeld dan een poortnummer.
Commando
sudo nmap -sV -p 80 --script http-title,http-headers 192.168.x.24In de oefenterminal draait dit met de adressen van de oefenmachine (192.168.2.0/24). Op je eigen machine vul je je eigen waarden in.
Voorbeelduitvoer (geanonimiseerd)
80/tcp open http [server] [versie]
| http-title: [titel van de beheerpagina]
| http-headers:
| Server: [server]/[versie]Interpretatie
Je hebt nu een productnaam en meestal een versienummer. Dat is genoeg om te zoeken of er voor die versie bekende problemen zijn, en genoeg om te herkennen welk apparaat dit is.
Dit bewijst niet
Een versienummer in een header is wat het apparaat over zichzelf zegt. Het kan verouderd, aangepast of misleidend zijn. Dit is een fingerprint, geen bewijs — en zeker geen bewijs van kwetsbaarheid.
Verifieer
Open hetzelfde adres in je browser. Zie je de titel die nmap rapporteerde?
Controleer met een tweede gereedschap
Eén meting is een waarneming. Twee metingen zijn bewijs.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Bevestigt een ander gereedschap wat nmap je vertelde?
Context
nmap kan zich vergissen, en jij kunt je vergissen in het lezen van nmap. curl legt een gewone verbinding en laat je precies zien wat er gebeurt. –max-time 5 voorkomt dat je blijft hangen.
Commando
curl -v --max-time 5 http://192.168.x.24:80/ -o /dev/nullIn de oefenterminal draait dit met de adressen van de oefenmachine (192.168.2.0/24). Op je eigen machine vul je je eigen waarden in.
Voorbeelduitvoer (geanonimiseerd)
* Connected to 192.168.x.24 (192.168.x.24) port 80
> GET / HTTP/1.1
< HTTP/1.1 302 Found
< Location: https://192.168.x.24/Interpretatie
Leer deze vijf uitkomsten uit elkaar houden: open (verbinding komt tot stand), closed (connection refused, er luistert niets), filtered (timeout, iets houdt het tegen), redirect (302 naar een ander adres of protocol) en een echt antwoord (200 met inhoud).
Dit bewijst niet
Een timeout bewijst niet dat de poort dicht is. Het bewijst dat er geen antwoord kwam binnen vijf seconden. Dicht en geblokkeerd zien er van buiten hetzelfde uit — dat verschil is de kern van deze les.
Verifieer
Voer curl uit op een poort waarvan nmap zei dat hij dicht is. Krijg je connection refused of een timeout? Wat zegt dat verschil?
Levert op
Deze module werkt toe naar het document network-assets.md.
Identificeer je router
Het apparaat dat je al kende als een regel in ip route.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Welk adres is je router, en waarom is dat het enige adres dat je hier gebruikt?
Context
De router is het apparaat tussen jouw netwerk en de rest van de wereld. Je vindt hem niet door te raden maar door de default-regel uit je routeringstabel te lezen. Dat adres, en alleen dat adres, is het doel van deze module.
Commando
ip -4 route | grep '^default'In de oefenterminal draait dit met de adressen van de oefenmachine (192.168.2.0/24). Op je eigen machine vul je je eigen waarden in.
Voorbeelduitvoer (geanonimiseerd)
default via 192.168.x.1 dev wlp3s0 proto dhcp metric 600Interpretatie
via wijst het adres van de gateway aan. dev wijst de interface aan waarlangs je hem bereikt. proto dhcp betekent dat je dit adres van de router zelf hebt gekregen.
Dit bewijst niet
Dit is de router zoals jouw machine hem kent. Op een netwerk met meerdere routers of een provider-modem in bridge-modus kan er nog een apparaat achter zitten dat je hier niet ziet.
Verifieer
Open het gateway-adres in je browser. Krijg je een beheerscherm dat je herkent?
Aanvalsoppervlak van de router
Wat biedt je router aan aan je eigen netwerk?
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Welke poorten staan open aan de binnenkant van je router?
Context
Dit is een scan aan de LAN-zijde: je kijkt naar wat de router aanbiedt aan apparaten binnen je huis. Dat is iets anders dan wat hij aan het internet aanbiedt — dat is module 09.
Commando
sudo nmap -sT -Pn --top-ports 50 --open 192.168.x.1In de oefenterminal draait dit met de adressen van de oefenmachine (192.168.2.0/24). Op je eigen machine vul je je eigen waarden in.
Voorbeelduitvoer (geanonimiseerd)
PORT STATE SERVICE
53/tcp open domain
80/tcp open http
443/tcp open httpsInterpretatie
DNS op 53 is normaal: de router beantwoordt naamopzoekingen voor je netwerk. 80 en 443 zijn het beheerscherm. Staat 23 (Telnet) open, dan is dat op zichzelf een bevinding.
Dit bewijst niet
Wat hier open staat, staat aan de binnenkant open. Het zegt niets over bereikbaarheid vanaf het internet. Die twee door elkaar halen leidt tot paniek of tot valse gerustheid.
Verifieer
Herhaal de scan vanaf een tweede eigen apparaat op hetzelfde netwerk. Krijg je dezelfde lijst?
Identificeer de diensten van de router
Certificaten en versies zijn aanwijzingen, geen bewijs.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Welke software draait op je router, en wat zegt het certificaat van het beheerscherm?
Context
Vier scripts in één commando: dns-nsid vraagt de DNS-server naar zijn identiteit, http-title en http-headers lezen het beheerscherm, ssl-cert leest het certificaat van de HTTPS-kant.
Commando
sudo nmap -Pn -sV -p 53,80,443 \
--script dns-nsid,http-title,http-headers,ssl-cert \
192.168.x.1In de oefenterminal draait dit met de adressen van de oefenmachine (192.168.2.0/24). Op je eigen machine vul je je eigen waarden in.
Voorbeelduitvoer (geanonimiseerd)
53/tcp open domain [dns-software] [versie]
80/tcp open http [webserver]
| http-title: [naam beheerscherm]
443/tcp open ssl/http
| ssl-cert: Subject: commonName=[apparaatnaam]
| Issuer: commonName=[zelfde naam]
| Not valid after: [datum]Interpretatie
Als Subject en Issuer dezelfde naam hebben, is het certificaat self-signed: de router heeft het zelf gemaakt. Dat is bij thuisrouters normaal en verklaart de browserwaarschuwing. De versienummers geven je een aanknopingspunt om te controleren of je firmware nog wordt onderhouden.
Dit bewijst niet
Een versienummer bewijst niet dat je kwetsbaar bent, en een self-signed certificaat bewijst niet dat er iets mis is. Dit zijn fingerprints. Ze vertellen je waar je moet kijken, niet wat je moet concluderen.
Verifieer
Vergelijk de firmwareversie uit het beheerscherm met wat nmap rapporteerde. Komen ze overeen?
UPnP: lees, verander niet
open|filtered betekent niet bewezen open.
- UNDERSTAND
- PRACTICE
- APPLY
- VERIFY
- SECURE
- HARDEN
Vraag
Staat UPnP aan op je router, en zo ja, welke poortdoorverwijzingen bestaan er nu?
Context
UPnP laat apparaten binnen je netwerk zelf een poort openzetten naar het internet, zonder dat jij iets goedkeurt. Dat is de reden dat het securityrelevant is. Je begint met kijken of het antwoordt.
Commando
sudo nmap -sU -Pn -p 1900 --script upnp-info 192.168.x.1In de oefenterminal draait dit met de adressen van de oefenmachine (192.168.2.0/24). Op je eigen machine vul je je eigen waarden in.
Voorbeelduitvoer (geanonimiseerd)
PORT STATE SERVICE
1900/udp open|filtered upnpInterpretatie
open|filtered is het eerlijke antwoord van een UDP-scan: er kwam geen antwoord, en dat kan betekenen dat de poort open is en zwijgt, of dat iets het pakket tegenhoudt. Geeft upnp-info wél gegevens terug, dan is UPnP aantoonbaar actief.
Dit bewijst niet
open|filtered bewijst niet dat UPnP aan staat, en ook niet dat het uit staat. Het is een niet-meting. Noteer het als onbeslist en ga verder met een tweede gereedschap.
Verifieer
Wil je verder, controleer dan eerst of het gereedschap er is en wat installeren zou doen — vóór je installeert:
command -v upnpc
apt-cache policy miniupnpc
apt install --simulate miniupnpcPas na een bewuste, expliciete installatie leest upnpc -l de bestaande doorverwijzingen. Lees alleen. Voeg in deze module geen mapping toe en verwijder er geen — dat is een wijziging aan je router en die hoort bij een eigen beslissing met een eigen terugweg.
Levert op
Deze module werkt toe naar het document router-review.md.