GNU/Linux >> Linux Esercitazione >  >> Linux

Linux immutabile con Silverblue:il mio superpotere preferito

Sono un recente ma devoto convertito a Silverblue, che eseguo sul mio laptop principale di casa e che metterò sul mio laptop di lavoro alla scadenza un aggiornamento hardware tra pochi mesi. Ho scritto un articolo su Silverblue su Enable Sysadmin e durante il fine settimana ci ho spostato anche il laptop di uno dei miei figli. In termini di usabilità, aspetto e sensazione, Silverblue è fondamentalmente una versione di Fedora. C'è una differenza fondamentale, tuttavia, che è che il sistema operativo è montato in sola lettura, il che significa che è immutabile.

Cosa significa "immutabile"? Significa che non può essere modificato. Per essere più precisi, in un contesto software, generalmente significa che qualcosa non può essere modificato durante il runtime.

Digressione importante:immutabilità costante

Mentre scrivevo l'ultima frase, mi sono reso conto che poteva essere un po' fuorviante. Molti linguaggi di programmazione hanno il concetto di "costanti". Una costante è una variabile (o un insieme o una struttura di dati) che non è variabile. Puoi assegnare un valore a una costante e, in generale, aspettarti che non cambi. Ma, e questo dipende dal linguaggio che stai usando, può darsi che la costante non sia immutabile.

Questa affermazione sembra andare contro il buon senso; anche se, per essere onesti, le frasi "linguaggio di programmazione" e "buon senso" sono raramente usate positivamente nella stessa frase nella mia esperienza. Ma questo è solo il modo in cui sono progettate alcune lingue. La conclusione è questa:se hai una variabile che intendi essere immutabile, controlla la sintassi del linguaggio di programmazione che stai utilizzando e, se necessario, esegui tutti i passaggi specifici necessari per mantenere tale immutabilità.

Immutabilità del sistema operativo

Nel caso di Silverblue, è il sistema operativo che è immutabile. Installi le applicazioni nei container (ne parleremo più avanti) usando Flatpak, piuttosto che sul filesystem di root. Ciò significa non solo che l'installazione delle applicazioni è isolata dal filesystem principale, ma anche che la capacità di applicazioni dannose di compromettere il sistema è notevolmente ridotta. Non è impossibile:generalmente cerchiamo di evitare la parola "impossibile" quando descriviamo attacchi o vulnerabilità nella sicurezza, ma il rischio è significativamente inferiore.

Come aggiorni il tuo sistema, allora? Bene, quello che fai è creare una nuova immagine di avvio che includa tutti i pacchetti aggiornati necessari e, quando sei pronto, esegui l'avvio. Silverblue fornisce strumenti semplici per farlo:è probabilmente meno fastidioso rispetto al modo standard di aggiornare il tuo sistema. Questo approccio semplifica inoltre la manutenzione di versioni diverse di un sistema operativo o installazioni con set di pacchetti diversi. Se è necessario testare un'applicazione in un particolare ambiente, avviare l'immagine che riflette quell'ambiente ed eseguire il test. Un altro ambiente? Un'altra immagine.

Tuttavia, siamo più interessati alle proprietà di sicurezza che questa situazione ci offre. Non solo è difficile compromettere il sistema operativo principale come utente standard (come con molti problemi di sicurezza, una volta che hai sudo o accesso root, la situazione è notevolmente degradata), ma si opera sempre in un ambiente noto. La conoscibilità è una proprietà molto desiderabile per la sicurezza, poiché puoi testare, monitorare ed eseguire analisi forensi da una configurazione nota. Dal punto di vista della sicurezza (per non parlare degli altri vantaggi che offre), l'immutabilità è sicuramente una risorsa in un sistema operativo.

Immutabilità del contenitore

Questo non è il luogo per descrivere in dettaglio i contenitori (noti anche come "contenitori Linux" o, meno frequentemente o accuratamente al giorno d'oggi, "contenitori Docker"), ma sono fondamentalmente raccolte di software che crei come immagini e quindi esegui carichi di lavoro su un server host (a volte noto come "pod"). Una delle grandi cose dei contenitori è che generalmente sono veloci da avviare (fornire ed eseguire) da un'immagine, e un altro è che il formato di quell'immagine, il formato di confezionamento, è ben definito, quindi è facile da creare le immagini stesse.

Dal nostro punto di vista, tuttavia, la cosa grandiosa dei contenitori è che puoi scegliere di usarli in modo immutabile. In effetti, questo è il modo in cui vengono generalmente utilizzati:l'utilizzo di contenitori mutevoli è generalmente considerato un anti-pattern. Il modo standard (e "corretto") di utilizzare i container consiste nel raggruppare ogni componente dell'applicazione e le dipendenze richieste in un container ben definito (e si spera piccolo) e quindi distribuirlo come richiesto. Il modo in cui sono progettati i contenitori non significa che tu non puoi cambia qualsiasi software all'interno del contenitore in esecuzione, ma il modo in cui funzionano ti scoraggia dal farlo; il che è buono, come non dovresti assolutamente.

Ricorda, il software immutabile offre una migliore conoscibilità e migliora la tua resistenza ai compromessi in fase di esecuzione. Invece, data la leggerezza dei contenitori, dovresti progettare la tua applicazione in modo tale che, se necessario, puoi semplicemente uccidere l'istanza del contenitore e sostituirla con un'istanza da un'immagine aggiornata.

Questa considerazione ci porta a due dei motivi per cui non dovresti mai eseguire container con privilegio di root. Innanzitutto, c'è la tentazione per gli utenti legittimi di utilizzare quel privilegio per aggiornare il software in un contenitore in esecuzione, riducendo la conoscibilità e possibilmente introducendo comportamenti imprevisti. In secondo luogo, ci sono molte più opportunità di compromissione se un attore malintenzionato, umano o automatizzato, può modificare il software sottostante nel contenitore.

Doppia immutabilità con Silverblue

Ho detto sopra che Silverblue esegue le applicazioni in contenitori. Ciò significa che hai due livelli di sicurezza forniti come impostazione predefinita quando esegui applicazioni su un sistema Silverblue:l'immutabilità del sistema operativo e l'immutabilità del contenitore.

Come addetto alla sicurezza, approvo la difesa in profondità, e questo è un classico esempio di quella proprietà. Mi piace anche il fatto di poter controllare cosa sto eseguendo e quali versioni con molta più facilità rispetto a un sistema operativo standard.

Questo articolo è stato originariamente pubblicato su Alice, Eve e Bob, un blog sulla sicurezza.


Linux
  1. Migliora le prestazioni del sistema Linux con noatime

  2. Comprensione delle chiamate di sistema su Linux con strace

  3. Le distribuzioni Linux sono ancora importanti con i container?

  4. Dietro le quinte con i container Linux

  5. Pianificazione delle attività di sistema con Cron su Linux

Come monitorare il sistema Linux con il comando Sguardi

Come salvare il tuo sistema Windows o Linux con Rescatux

Comando Linux Uptime con esempi

Introduzione al sistema operativo Linux

Trova le informazioni sull'hardware del sistema Linux con Hwinfo

Come visualizzare le statistiche del sistema Linux con Saidar