Cover
Aloita nyt ilmaiseksi LSS - Lecture VIIIa - Linux logging.pdf
Summary
# Authenticatie- en sessielogbestanden
Authenticatie- en sessielogbestanden bieden inzicht in gebruikersinteracties en beveiligingsgebeurtenissen op een systeem [2](#page=2).
## 1. Authenticatie logbestanden
Authenticatielogbestanden registreren gebruikersauthenticatie-activiteiten, zoals logins en sudo-aanvragen [3](#page=3).
### 1.1 Locaties van authenticatielogboeken
De locaties van deze logbestanden variëren per distributie:
* **Debian en afgeleiden:** `/var/log/auth.log`. Sinds Debian 12 wordt dit vervangen door `systemd-journald` (toegankelijk via `journalctl`), maar kan nog steeds aanwezig zijn als `rsyslog` geïnstalleerd is [3](#page=3).
* **RHEL en afgeleiden:** `/var/log/secure`. Deze logboeken zijn ook toegankelijk via `journalctl` [15](#page=15).
### 1.2 Loggen van `sudo` activiteiten
`sudo`-activiteiten worden gelogd, inclusief correcte en incorrecte wachtwoordpogingen, en de activering en sluiting van sessies. Wanneer een gebruiker niet in het `sudoers`-bestand staat of niet tot de `wheel`-groep behoort, wordt dit gelogd met de melding "This incident will be reported" [14](#page=14) [16](#page=16).
### 1.3 Loggen van `su` activiteiten
Het gebruik van `su` om superuser-rechten te verkrijgen wordt ook gelogd. De logs lijken op `sudo`-logs, maar er wordt nog geen "session closed" geregistreerd omdat de sessie als root actief blijft. Het `pam_unix`-module wordt gebruikt in de sessiestapel voor `su` [17](#page=17).
### 1.4 Loggen van SSH authenticatiepogingen
Zowel mislukte als succesvolle SSH loginpogingen worden geregistreerd. Mislukte pogingen bevatten informatie over de externe host (IP-adres). Succesvolle logins en logouts worden gelogd met tijdstempels, wat sessietracking mogelijk maakt en kan worden geanalyseerd met tools zoals `last` en `lastb` [18](#page=18) [19](#page=19).
## 2. Sessielogbestanden
Sessielogbestanden registreren informatie over gebruikerssessies, inclusief succesvolle en mislukte logins, en actieve gebruikerssessies [20](#page=20).
### 2.1 `/var/log/lastlog`
Dit bestand bevat de meest recente login-informatie voor gebruikers. Het is standaard ingeschakeld op de meeste distributies, maar is in binair formaat. De log kan worden gelezen met de commando's `lastlog` of `lslogins`. Standaard toont het alleen gebruikers die in `/etc/passwd` vermeld staan; verwijderde of niet-lokale gebruikers worden mogelijk niet weergegeven, tenzij specifiek opgevraagd [21](#page=21).
### 2.2 `/var/log/btmp`
Dit bestand registreert de laatste mislukte loginpogingen (bad logins). Het is standaard ingeschakeld en wordt opgeslagen in binair formaat. Lezen kan via `lastb` of `lslogins --failed`. Net als bij `lastlog`, worden verwijderde of niet-lokale gebruikers standaard niet weergegeven. Op een niet-live systeem kan het bestand worden gelezen met `lastb -f ` [23](#page=23) [24](#page=24).
### 2.3 Y2K38 bug
De Y2K38 bug is een probleem gerelateerd aan de tijdrepresentatie in systemen, wat potentiële problemen kan veroorzaken met timestamps in logbestanden en andere gegevens [25](#page=25).
### 2.4 `/var/log/faillog`
Dit logbestand wordt beheerd door `pam_faillock.so` en registreert mislukte authenticatiepogingen per gebruiker binnen een gespecificeerd interval. Als het aantal opeenvolgende mislukte pogingen een ingestelde drempel ("deny") overschrijdt, wordt het account vergrendeld. Het is niet standaard ingeschakeld op Debian/RHEL en wordt in binair formaat opgeslagen, leesbaar met het commando `faillog` [26](#page=26).
### 2.5 `/var/log/wtmp`
Dit bestand bevat records van alle succesvolle logins en logouts, evenals systeemherstarts. Het is standaard ingeschakeld en in binair formaat. Het kan worden gelezen met het commando `last`. In tegenstelling tot `lastlog` en `lastb`, worden ook verwijderde en niet-lokale gebruikers hier vermeld. Op een niet-live systeem kan het bestand worden gelezen met `last -f ` [27](#page=27) [28](#page=28).
### 2.6 `/run/utmp`
Dit bestand bevat informatie over gebruikers die momenteel op het systeem zijn ingelogd. Het is standaard ingeschakeld en in binair formaat. De informatie kan worden opgevraagd met de commando's `who` of `w`. Het `w`-commando biedt aanvullende details over de actieve processen en CPU-tijd in vergelijking met `who` [29](#page=29).
### 2.7 Samenvatting van sessie-gerelateerde commando's
De volgende commando's kunnen worden gebruikt om verschillende sessielogbestanden te analyseren:
* `who`: Toont wie er is ingelogd [31](#page=31).
* `w`: Toont wie er is ingelogd en wat ze momenteel doen [31](#page=31).
* `last`: Rapporteert de meest recente logins en opstarttijden [31](#page=31).
* `lastb` / `lslogins --failed`: Toont een lijst van de laatste mislukte logins [31](#page=31).
* `lastlog` / `lslogins`: Toont de laatste login tijdstippen van gebruikers [31](#page=31).
* `faillog`: Toont het aantal mislukte logins per gebruiker vóór een vergrendeling (indien ingeschakeld) [31](#page=31).
---
# Systemd journal en logboekbeheer
Dit studieonderwerp behandelt de werking en beveiliging van het systemd journal, inclusief cryptografische authenticatie van logboekvermeldingen, en verkent traditionele logboekbeheerhulpmiddelen zoals rsyslog en logrotate, met aandacht voor hun configuratie en retentiebeleid.
## 2 Systemd journal en logboekbeheer
Het systemd journal biedt een significant beveiligingsvoordeel ten opzichte van traditionele platte tekst logbestanden door middel van cryptografische hashing van logboekvermeldingen. In tegenstelling tot klassieke syslog, waar logbestanden gemakkelijk gemanipuleerd kunnen worden zonder sporen achter te laten, creëert het journal een ketting van cryptografisch geauthenticeerde vermeldingen. Elke vermelding bevat een hash van de voorgaande vermelding, waardoor de integriteit van de gehele logboekketen behouden blijft. Door de top-most hash op te slaan op een veilige, write-once locatie, kan elke manipulatie door een aanvaller eenvoudig worden gedetecteerd [5](#page=5).
### 2.1 De systemd-journald service
Het beheer van het systemd journal wordt verzorgd door de `systemd-journald` service, geconfigureerd via het bestand `journald.conf`, dat doorgaans te vinden is in `/etc/systemd/` [6](#page=6).
### 2.2 Verschil tussen systemd Journal en filesystem Journal
Het is belangrijk om onderscheid te maken tussen het *systemd Journal* en een *filesystem Journal*. Het *systemd Journal* bestaat uit bestanden die logboekvermeldingen over systeemgebeurtenissen bevatten en worden verwerkt en opgeslagen via systemd, meestal in `/var/log/journal/`. Deze bestanden zijn toegankelijk via het commando `journalctl`. Een *filesystem Journal* daarentegen is een interne functie van een bestandssysteem om dit in een consistente staat te houden en is bruikbaar voor forensisch onderzoek, maar niet direct toegankelijk via reguliere bestandsnamen [7](#page=7).
Het systemd journal wordt opgeslagen als binaire bestanden [8](#page=8).
### 2.3 Eigenschappen van Journal bestanden
De journalbestanden bevinden zich in de subdirectory `journal` binnen `/var/log/` en zijn eigendom van root. Ze behoren echter tot de groep `systemd-journal`, wat speciale permissies met zich meebrengt [9](#page=9).
* **`drwxr-sr-x+`**: Het `setgid` (set group ID) bit zorgt ervoor dat alles wat in deze map wordt aangemaakt, de groep `systemd-journal` krijgt. Leden van deze groep hebben volledige toegang tot de logbestanden zonder `sudo` permissies nodig te hebben [9](#page=9).
* **Extended permissions (ACLs)**: Naast `setgid` kunnen er ook extended permissions aanwezig zijn via Access Control Lists (ACLs). Deze ACLs worden opgeslagen in zogenaamde 'extended attributes' (xattr) binnen de `system` namespace van het bestand [10](#page=10) [11](#page=11).
Opmerking: In veel Linux-distributies hebben leden van de `adm` groep ook volledige toegang tot logbestanden, wat vergelijkbaar is met de `systemd-journal` groep [10](#page=10).
#### 2.3.1 Journal in RHEL
In Red Hat Enterprise Linux (RHEL) wordt ook systemd gebruikt, waardoor het systemd journal beveiligingsberichten en andere gebeurtenissen bevat die men normaal in `/var/log/secure` zou vinden. Het systemd journal is in RHEL standaard niet persistent en bevindt zich in `/run/log/journal/`, maar kan persistent gemaakt worden via `journald.conf` [12](#page=12).
Andere verschillen in RHEL zijn:
* Leden van de `wheel` groep hebben leesrechten op alle bestanden, waardoor `sudo` niet nodig is om alle logboekvermeldingen te bekijken [13](#page=13).
* Journalbestanden hebben extended attributes voor ACLs en SELinux [13](#page=13).
### 2.4 Logboekbeheer met rsyslog
`rsyslog` is een populaire implementatie van het syslog-protocol, dat wordt gebruikt om logboekberichten te scheiden van de software die ze genereert en de software die ze analyseert. Het syslog-protocol is tegenwoordig gestandaardiseerd in RFC 5424. Er zijn verschillende implementaties van syslog [45](#page=45):
* **1980s: syslog**: De oorspronkelijke implementatie die in UNIX-systemen werd geïntroduceerd om berichten van de kernel en applicaties te loggen [45](#page=45).
* **1998: syslog-ng**: Een uitbreiding op syslog met filtering, custom formatting, etc [45](#page=45).
* **2004: rsyslog**: Voegt features toe zoals high-performance logging en database-integratie. De 'r' staat voor 'rocket fast' en 'remote log shipping' [45](#page=45).
#### 2.4.1 Rsyslog installatie en beschikbaarheid
* **Debian**: Vanaf Debian 12 wordt rsyslog niet meer standaard geïnstalleerd. Basis lokaal loggen gebeurt via `systemd-journald`, waardoor `rsyslog` voor deze taak overbodig is geworden. Het kan echter nog steeds worden geïnstalleerd en is volledig ondersteund voor remote syslog behoeften of voor software die het nog vereist [46](#page=46).
* **RHEL**: Rsyslog is standaard beschikbaar op RHEL [46](#page=46).
De `rsyslog` daemon draait op de achtergrond om logberichten te verwerken. De configuratie van rsyslog vindt plaats in `/etc/rsyslog.conf` [47](#page=47) [48](#page=48).
#### 2.4.2 Faciliteitcodes en ernstniveaus in rsyslog
Rsyslog gebruikt faciliteitcodes (facility codes) en ernstniveaus (severity levels) om logboekberichten te categoriseren en prioriteren [49](#page=49).
* **Facility**: Specificeert de bron van het logbericht [49](#page=49).
* **Severity**: Geeft het belang van het logbericht aan [49](#page=49).
Deze codes en niveaus worden gebruikt voor het filteren, routeren en beheren van logboeken. Voor een uitgebreide lijst van faciliteitcodes en ernstniveaus, zie de Wikipedia-pagina over Syslog [49](#page=49) [50](#page=50).
### 2.5 Logboekbeheer met logrotate
`logrotate` is een tool die wordt gebruikt om platte logbestanden te beheren (niet het systemd Journal). De functionaliteit omvat [52](#page=52):
* Het starten van een nieuw logbestand na een bepaalde periode ('roteren') [52](#page=52).
* Optionele compressie van oude logbestanden [52](#page=52).
* Het verwijderen van oude logs op basis van retentiebeleid [52](#page=52).
`logrotate` wordt meestal dagelijks uitgevoerd via cron of een systemd timer. De configuratie van `logrotate` is te vinden in `/etc/logrotate.conf` en in bestanden binnen de `/etc/logrotate.d/` directory [52](#page=52).
* `/etc/logrotate.conf`: Bevat standaardinstellingen, zoals wekelijkse rotatie en een retentieperiode van 4 weken [55](#page=55).
* `/etc/logrotate.d/*`: Hierin worden specifieke instellingen gedefinieerd voor individuele logbestanden, bijvoorbeeld voor `/var/log/btmp` bestanden [56](#page=56).
### 2.6 Logboekbeheer met systemd-journald
Het systemd Journal maakt geen gebruik van platte tekstbestanden en is onafhankelijk van `rsyslog` en `logrotate`. De instellingen voor het roteren van het journal zijn te vinden in `/etc/systemd/journald.conf` [57](#page=57) [58](#page=58).
Logrotatie kan ook getriggerd worden door abrupte (backward) tijdswijzigingen, bijvoorbeeld bij het starten van virtuele machines waarbij de kloksynchronisatie met het hostsysteem plaatsvindt. Dit zorgt ervoor dat logs in aparte bestanden worden opgeslagen om problemen met logboekvermeldingen die buiten volgorde vallen te voorkomen, wat de integriteit van de logboekketen ten goede komt [59](#page=59).
---
# Systeem- en kernelgebeurtenislogboeken
Dit deel behandelt de algemene systeemlogboeken en de kernelringbuffer, die informatie vastleggen over systeemgebeurtenissen, hardware-initialisatie en bootprocessen [32](#page=32) [36](#page=36).
### 3.1 Algemene systeemlogboeken
Systeemlogboeken zijn essentiële hulpmiddelen voor het vastleggen van gebeurtenissen die plaatsvinden op een besturingssysteem. De locatie en het beheer van deze logboeken kunnen per distributie verschillen [33](#page=33).
#### 3.1.1 Logboekbestanden per distributie
* **Debian en afgeleiden:**
* Historisch gezien werd `/var/log/syslog` gebruikt [33](#page=33).
* Vanaf Debian 12 wordt dit vervangen door `systemd-journald`, toegankelijk via `journalctl` [33](#page=33).
* Het is belangrijk om het `syslog` logboekbestand niet te verwarren met de `(r)syslog` daemon zelf [33](#page=33).
* **RHEL en afgeleiden:**
* Hier wordt doorgaans het bestand `/var/log/messages` gebruikt voor algemene systeemberichten [33](#page=33) [34](#page=34).
### 3.2 Kernelringbuffer
De kernelringbuffer is cruciaal voor het vastleggen van gebeurtenissen tijdens het opstarten van het systeem op een laag niveau [36](#page=36).
#### 3.2.1 Doel en functionaliteit
* Tijdens het bootproces biedt de console veel belangrijke informatie over de initiële fase van de systeemstart. Dit omvat hardwaregebeurtenissen, driverinitialisatie, bootprocessen en andere systeemgebeurtenissen die op een laag niveau plaatsvinden [36](#page=36).
* Om verlies van vroege berichten te voorkomen, maakt de kernel gebruik van een zogenaamde **ringbuffer** [36](#page=36).
* Deze buffer slaat alle berichten op, inclusief bootberichten, die worden gegenereerd door de `printk()` functie binnen de kernelcode [36](#page=36).
* Het "ring"-aspect verwijst naar het feit dat de buffer een cyclische datastructuur is met een vaste grootte. Wanneer de ringbuffer vol is, overschrijft nieuwe data de oudere data [36](#page=36).
#### 3.2.2 Toegang en tools
* De kernelringbuffer is beschikbaar als een karakterapparaat met de naam `/dev/kmsg` [37](#page=37) [39](#page=39).
* Oudere distributies maakten mogelijk gebruik van bestanden zoals `/var/log/dmesg` of `/var/log/kern.log` [37](#page=37).
* Er zijn verschillende tools om de kernelringbuffer uit te lezen:
* `dmesg` (staat voor ‘diagnostic message’) [37](#page=37) [38](#page=38).
* `journalctl -k`
* `journalctl --dmesg`
> **Tip:** De `dmesg` commando is een veelgebruikte en snelle manier om de kernelberichten te bekijken, vooral nuttig na het opstarten van het systeem of na hardwarewijzigingen [37](#page=37).
---
# Applicatielogboeken
Applicaties, zoals webservers en andere diensten, genereren doorgaans hun eigen logbestanden om informatie over hun werking en gebeurtenissen vast te leggen [40](#page=40).
### 4.1 Locatie van applicatielogboeken
Applicaties loggen hun informatie veelal in de directory `/var/log`. De specifieke locatie binnen deze directory kan variëren afhankelijk van de applicatie [41](#page=41) [43](#page=43).
#### 4.1.1 Veelvoorkomende loglocaties
* **Apache2 webserver:**
* Op Red Hat Enterprise Linux (RHEL) systemen: `/var/log/httpd/*` [41](#page=41).
* Op Debian-gebaseerde systemen: `/var/log/apache2/*` [41](#page=41).
* **NGINX webserver:** `/var/log/nginx/*` [41](#page=41).
* **Fail2Ban:** `/var/log/fail2ban.log` [41](#page=41).
* **Uncomplicated Firewall (ufw):** `/var/log/ufw.log` [41](#page=41).
Een voorbeeld van een specifiek toegangslogbestand voor de Apache webserver is `/var/log/httpd/access.log` [42](#page=42).
#### 4.1.2 Alternatieve loglocaties
Naast de standaard `/var/log` map, kunnen applicaties ook op andere locaties logbestanden aanmaken [43](#page=43).
* **Apache Tomcat:** Als Java-applicatieserver, logt Apache Tomcat typisch in de map `/opt/tomcat/logs/*` [43](#page=43).
#### 4.1.3 Gebruik van systemd-journald
Sommige applicaties maken gebruik van `systemd-journald` voor hun logging. In dit geval worden de logboeken niet als platte tekstbestanden in `/var/log` opgeslagen, maar beheerd door de journald-service [43](#page=43).
* **OpenSSH server:** Voor diensten die `systemd-journald` gebruiken, kan de logging worden opgevraagd met commando's zoals `journalctl -u sshd` voor de OpenSSH server [43](#page=43).
> **Tip:** Het is essentieel om de documentatie van specifieke applicaties te raadplegen om de exacte locatie van hun logbestanden te achterhalen, aangezien deze sterk kunnen variëren [43](#page=43).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Authenticatie logboeken | Logbestanden die specifieke gegevens bevatten over de inlogactiviteiten van gebruikers op een systeem, inclusief succesvolle en mislukte pogingen. |
| Systemd Journal | Een centrale logboekcomponent van systemd die logboekvermeldingen verwerkt en opslaat in een cryptografisch beveiligde, binaire vorm, wat manipulatie bemoeilijkt. |
| Syslog protocol | Een gestandaardiseerd netwerkprotocol voor het verzenden van logboekberichten van verschillende bronnen naar een centrale logboekserver. |
| rsyslog | Een verbeterde implementatie van het syslog-protocol die hogere prestaties, remote log shipping en database-integratie biedt. |
| logrotate | Een hulpprogramma dat wordt gebruikt om logbestanden te beheren door ze periodiek te roteren, te comprimeren en oude logbestanden te verwijderen op basis van ingestelde regels. |
| Kernelringbuffer | Een cyclische datastructuur die door de kernel wordt gebruikt om berichten op te slaan, inclusief bootberichten, die worden gegenereerd door de printk() functie. |
| Binaire bestandsformaat | Een opslagmethode voor gegevens die rechtstreeks door een computer wordt gelezen en verwerkt, in tegenstelling tot leesbare tekstbestanden. |
| SetGID (setgroup) | Een bestand permissiebit dat ervoor zorgt dat bestanden die in een directory worden aangemaakt, automatisch de groep van die directory erven, wat toegang vergemakkelijkt voor groepsleden. |
| Access Control List (ACL) | Een geavanceerd mechanisme voor toegangscontrole dat gedetailleerdere permissies toestaat dan de standaard Unix-permissies. |
| Extended Attributes (xattr) | Een functie van bestandssystemen die het mogelijk maakt om extra metagegevens aan bestanden te koppelen, zoals ACL's of SELinux-contexten. |
| pam_unix module | Een PAM (Pluggable Authentication Modules) module die wordt gebruikt voor authenticatie en autorisatie op basis van wachtwoorden die zijn opgeslagen in de `/etc/shadow` database. |
| Y2K38 bug | Een probleem dat vergelijkbaar is met de Y2K-bug, waarbij de tijd op 32-bits systemen na 19 januari 2038 een integer-overflow zal ervaren als de tijd wordt opgeslagen als een 32-bits Unix timestamp. |
| /var/log/lastlog | Een binair logbestand dat de meest recente inloggegevens van gebruikers bevat, waaronder de laatste loginlocatie en -tijd. |
| /var/log/btmp | Een binair logbestand dat mislukte loginpogingen registreert, inclusief informatie zoals gebruikersnaam, terminal en IP-adres. |
| /var/log/wtmp | Een binair logbestand dat alle succesvolle login- en logout-sessies, evenals systeemreboots, registreert. |
| /run/utmp | Een binair logbestand dat bijhoudt welke gebruikers momenteel op het systeem zijn ingelogd, inclusief hun terminal en inlogtijd. |
| Faciliteitscodes | Categorieën die de bron van een logbericht aangeven, zoals kernel, mail, auth, etc., binnen het syslog-protocol. |
| Ernstniveaus | Indicatoren van de prioriteit of belangrijkheid van een logbericht, variërend van DEBUG tot EMERGENCY, binnen het syslog-protocol. |
| Systemd timer | Een mechanisme binnen systemd dat taken op specifieke tijden of intervallen kan uitvoeren, vergelijkbaar met cron jobs. |
| Log rotatie | Het proces van het vervangen van een actief logbestand door een nieuw, leeg bestand, vaak gevolgd door compressie en archivering van het oude bestand. |
[/