Introduzione a POSIX: Permessi, Storia e Sicurezza nei Sistemi Unix e Linux
La storia si ripete?
Questa riflessione nasce da un curioso intreccio di pensieri. Da un lato, il flusso incessante di nuove release di sistemi Unix-like; dall’altro, la lettura del libro A Quarter Century of UNIX di Peter Salus. In particolare, colpisce il capitolo “Dueling Unixes”, che racconta come negli anni ’80 e ’90 molte aziende (Apollo, HP, IBM, Microsoft, SCO, Sun, ecc.) abbiano gareggiato per il controllo degli standard Unix.
Una delle tesi è che questa frammentazione abbia favorito Microsoft e l’ascesa di Windows NT. Nasce spontanea una domanda: con Linux rischiamo di ripetere lo stesso errore?
Introduzione tecnica a POSIX
POSIX (Portable Operating System Interface) è una serie di standard che uniformano il comportamento dei sistemi operativi Unix-like.
Ogni file in Unix/Linux ha:
- Un proprietario
- Un gruppo
- Permessi per utente, gruppo e altri:
read (r)
,write (w)
,execute (x)
Tutto questo si regge sul concetto di super-utente (root), con accesso illimitato. Dennis Ritchie (creatore di Unix) stesso lo definì:
“Un difetto teorico, e spesso pratico, in ogni schema di protezione.”
Il problema dei privilegi
Anche solo per cambiare l’orario di sistema, un processo deve essere eseguito come root
, aumentando i rischi di sicurezza.
POSIX Capabilities: la risposta moderna
Nel 1997, il comitato POSIX 1003.1e propose un insieme di capability, privilegi specifici che un processo può avere. Lo standard non fu completato, ma molte capability sono oggi implementate nel kernel Linux.
Esempi di capability:
Capability | Descrizione |
---|---|
CAP_CHOWN | Cambiare il proprietario di un file |
CAP_DAC_OVERRIDE | Ignorare i permessi standard di accesso |
CAP_NET_RAW | Usare socket RAW |
CAP_SYS_MODULE | Caricare moduli del kernel |
Visualizzale con:
man 7 capabilities
Esempio pratico
Assegna a Nginx il diritto di usare la porta 80 senza essere root:
setcap cap_net_bind_service=+ep /usr/bin/nginx
Conclusione
Capire le POSIX capabilities è fondamentale per creare sistemi Linux sicuri e moderni. Offrono granularità, riducono i privilegi necessari e aiutano a prevenire escalation di privilegi.