Perché conta
Non tutte le minacce arrivano da fuori. Un processo che apre file senza sosta, un servizio con una memory leak, una fork bomb (accidentale o dolosa) possono esaurire CPU, RAM o la process table e rendere il sistema inutilizzabile — un denial of service dall’interno. L’hardening non è solo chiudere porte: è anche garantire che nessun singolo processo o utente possa affamare gli altri. Lo strumento del kernel per questo sono i cgroups.
Leggere i processi
|
|
/proc è la finestra del kernel sui processi: lì leggi memoria reale, thread, file descriptor, limiti
e persino la riga di comando (/proc/<pid>/cmdline).
cgroups: i limiti del kernel
I control group (v2 sui sistemi moderni) permettono al kernel di imporre tetti a CPU, memoria, I/O e numero di processi per un gruppo. systemd li usa dietro le quinte e li espone come direttive: è il modo più semplice di applicarli a un servizio.
|
|
TasksMax è la difesa diretta contro le fork bomb: un servizio che tenta di creare migliaia di processi
sbatte contro il tetto invece di saturare la process table di tutto il sistema.
Verificare i limiti in azione
|
|
Limiti per utente, non solo per servizio
Per gli utenti interattivi, i limiti si impostano via pam_limits (/etc/security/limits.conf) — tetti a processi e file aperti per
account — oppure via le slice di systemd (user-<UID>.slice).
|
|
La difesa stratificata
|
|
Conclusione
Leggere i processi via ps e /proc, e imporre tetti con cgroups (MemoryMax, TasksMax, CPUQuota)
impedisce che un singolo processo — buggato o malevolo — affami il sistema. Finora abbiamo lavorato
“dentro” la macchina; ora usciamo verso la rete, dove si decide cosa il mondo può raggiungere: il
firewall con nftables, prossimo capitolo.