Articolo originale: Introduction to Linux, Part 2

In questo corso completo, imparerai molti degli strumenti utilizzati ogni giorno sia dagli Amministratori di Sistema di Linux che dai milioni di persone che eseguono distribuzioni Linux come Ubuntu sui loro PC. Questo corso ti insegnerà come spostarti nelle interfacce utente grafiche di Linux e nel potente ecosistema dello strumento di riga di comando.

Questa è la seconda parte. Prima leggi la prima parte:

https://www.freecodecamp.org/italian/news/introduzione-a-linux/

Capitolo 18: Principi di Sicurezza Locale

Obiettivi Formativi

Entro la fine di questo capitolo, dovresti essere in grado di:

  • Avere una buona comprensione delle migliori pratiche e strumenti per rendere i sistemi Linux il più sicuri possibile.
  • Comprendere i poteri e i pericoli dell'utilizzo dell'account root (superuser).
  • Utilizzare il comando sudo per eseguire operazioni privilegiate limitando al massimo i poteri avanzati.
  • Spiegare l'importanza dell'isolamento del processo e dell'accesso all'hardware.
  • Lavorare con le password, incluso come impostarle e modificarle.
  • Descrivere come proteggere il processo di avvio e le risorse hardware.

Account Utente

Il kernel Linux consente agli utenti correttamente autenticati di accedere a file e applicazioni. Mentre ogni utente è identificato da un numero intero univoco (ID utente o UID), un database separato associa un nome utente con ogni UID. Al momento della creazione dell'account, le nuove informazioni dell'utente vengono aggiunte al database utenti e la directory home dell'utente deve essere creata e popolata con alcuni file essenziali. Programmi di riga di comando come useradd e userdel e gli strumenti GUI vengono utilizzati per la creazione e la rimozione degli account.

User Accounts: /etc/passwd

Per ogni utente, i seguenti sette campi vengono conservati nel file /etc/passwd:

Nome Campo Dettagli Osservazioni
Username Nome di login utente Dovrebbe essere lungo tra 1 e 32 caratteri
Password Password utente (oppure il carattere x se la password è conservata nel file /etc/shadow) in formato crittografato Non è mai mostrata in Linux quando viene digitata, mettendola al riparo da sguardi indiscreti
User ID (UID) Ogni utente deve avere un ID (UID) - UID 0 è riservato all'utente root
- Gli UID che vanno da 1 a 99 sono riservati per altri account predefiniti
- Gli UID che vanno da 100 a 999 sono riservati agli account di sistema e gruppi
- I normali utenti hanno UID che vanno da 1000 in su
Group ID (GID) L'ID del gruppo primario (GID), conservato nel file /etc/group È stato trattato in dettaglio nel capitolo sui Processi
User Info Campo opzionale, consente l'inserimento di informazioni supplementari circa l'utente, come il suo nome Per esempio: Rufus T. Firefly
Directory Home Il percorso assoluto della posizione della directory home dell'utente Per esempio: /home/rtfirefly
Shell Il percorso assoluto della posizione della shell predefinita dell'utente Per esempio: /bin/bash

Tipi di Account

Per impostazione predefinita, Linux distingue tra diversi tipi di account al fine di isolare i processi e i carichi di lavoro. Linux ha quattro tipi di account:

  • root
  • Sistema
  • Normale
  • Rete

Per un ambiente di lavoro sicuro, si consiglia di concedere i privilegi minimi possibili e necessari per gli account e rimuovere gli account inattivi. L'utilità last, che mostra l'ultima volta che ogni utente ha effettuato l'accesso al sistema, può essere utilizzata per aiutare a identificare account potenzialmente inattivi che sono candidati per la rimozione dal sistema.

Tieni presente che le pratiche che usi sui sistemi aziendali multiutente sono più severe delle pratiche che puoi utilizzare sui sistemi desktop personali che influiscono solo sull'utente casuale. Ciò è particolarmente vero per quanto riguarda la sicurezza. Speriamo di mostrarti pratiche applicabili ai server aziendali che puoi utilizzare su tutti i sistemi, ma comprendiamo che puoi scegliere di rendere meno rigide queste regole sul tuo sistema personale..

last Utility
L'utility last

Comprendere l'Account root

root è l'account più privilegiato su un sistema Linux/Unix. Questo account ha la possibilità di gestire tutti gli aspetti dell'amministrazione del sistema, incluso l'aggiunta di account, la modifica delle password degli utenti, l'esame di file di log, l'installazione di software e così via. È necessario procedere con la massima cura quando si utilizza questo account. Non ha restrizioni di sicurezza imposte.

Tux the Pinguin with a crown and scepter

Quando si accede come root o si agisce come root, il prompt della shell mostra '#' (se stai usando bash e non hai personalizzato il prompt, come abbiamo discusso in precedenza). Questa convenzione ha lo scopo di fungere da monito per te del potere assoluto di questo account.

Operazioni che Richiedono Privilegi di root

I privilegi di root sono richiesti per eseguire operazioni come:

  • Creazione, rimozione e gestione degli account utente
  • Gestione dei pacchetti software
  • Rimozione o modifica dei file di sistema
  • Riavvio dei servizi di sistema.

Gli utenti di account normali delle distribuzioni Linux potrebbero essere autorizzati a installare pacchetti software, aggiornare alcune impostazioni, utilizzare alcuni dispositivi periferici e applicare vari tipi di modifiche al sistema. Tuttavia, è richiesto il privilegio di root per eseguire attività di amministrazione come il riavvio della maggior parte dei servizi, l'installazione manuale di pacchetti e la gestione di parti del filesystem che si trovano al di fuori delle directory dell'utente normale.

LFS01_ch018_screen8
Operazioni che Richiedono Privilegi di root

Operazioni Che Non Richiedono Privilegi di root

Un utente con account normale può eseguire alcune operazioni che richiedono autorizzazioni speciali; tuttavia, la configurazione del sistema deve consentire l'esercizio di tali funzionalità.

SUID (Set owner User ID upon execution - simile alla funzionalità Windows "esegui come") è un tipo speciale di permesso fornito a un file. L'uso di SUID fornisce autorizzazioni temporanee a un utente per eseguire un programma con le autorizzazioni del proprietario del file (che potrebbe essere root) invece delle autorizzazioni detenute dall'utente.

La tabella fornisce esempi di operazioni che non richiedono privilegi di root:

Operazioni che non richiedono privilegi di root Esempi di questa operazione
Esecuzione di un client di rete Condivisione di un file tramite rete
Utilizzo di dispositivi come le stampanti Stampa tramite rete
Operazioni su file per i quali l'utente ha autorizzazioni adeguate per accedere Accesso ai file a cui puoi accedere o condivisione di dati tramite rete
Esecuzione di applicazioni SUID-root Esecuzione di programmi come passwd

sudo e su a Confronto

In Linux puoi usare sia su che sudo per concedere temporaneamente l'accesso come root a un utente normale. Tuttavia, questi metodi sono in realtà abbastanza diversi. Di seguito sono elencate le differenze tra i due comandi:

su sudo
Quando si aumentano i privilegi, è necessario inserire la password di root. Non si dovrebbe mai dare la password di root a un utente normale, mai e poi mai. Quando si aumentano i privilegi, è necessario inserire la password dell'utente e non la password di root.
Una volta che un utente si eleva all'account root utilizzando su, può fare tutto ciò che l'utente root può fare per tutto il tempo che l'utente desidera, senza che gli venga chiesta nuovamente la password. Offre più funzionalità ed è considerato più sicuro e più configurabile. Quello che l'utente può fare può essere esattamente controllato e limitato con precisione. Per impostazione predefinita, l'utente dovrà sempre continuare a dare la propria password per eseguire ulteriori operazioni con sudo o può evitare di farlo per un intervallo di tempo configurabile.
Il comando ha funzionalità di log limitate. Il comando ha funzionalità di log dettagliate.

Funzionalità di sudo

sudo ha la capacità di tenere traccia dei tentativi falliti di ottenere l'accesso a root. L'autorizzazione per gli utenti all'utilizzo di sudo si basa sulle informazioni di configurazione conservate nel file /etc/sudoers e nella directory  /etc/sudoers.d.

Un messaggio come il seguente apparirebbe in un file di log del sistema (in genere /var/log/secure) Quando si cerca di eseguire sudo per badperson senza ottenere una corretta autenticazione per l'utente:

badperson : user NOT in sudoers ; TTY=pts/4 ; PWD=/var/log ; USER=root ; COMMAND=/usr/bin/tail secure

sudo Features
Funzionalità di sudo

Il File sudoers

Ogniqualvolta sudo viene invocato, si attiva una ricerca nel file /etc/sudoers e nei file contenuti in /etc/sudoers.d per determinare se l'utente ha il diritto di utilizzare sudo e qual è la portata dei suoi privilegi. Richieste da utenti sconosciuti e richieste per eseguire operazioni non consentite all'utente anche con sudo vengono segnalate. La struttura di base delle voci in questi file è:

chi dove = (per conto di) cosa

/etc/sudoers contiene molta documentazione sulla personalizzazione. La maggior parte delle distribuzioni Linux ora preferisce aggiungere un file nella directory /etc/sudoers.d con un nome che corrisponde allo username. Questo file contiene la configurazione sudo del singolo utente, mentre si dovrebbe lasciare inalterato il file di configurazione principale, eccetto per quanto riguarda le modifiche che riguardano tutti gli utenti.

Dovresti modificare uno di questi file di configurazione utilizzando visudo, che garantisce che solo una persona alla volta stia modificando il file, che abbia le autorizzazioni adeguate, e rifiuta di scrivere il file ed uscire se ci sono errori di sintassi nelle modifiche apportate. Le modifiche possono essere eseguite con un comando come quelli seguenti:

# visudo /etc/sudoers
# visudo -f /etc/sudoers.d/student

L'editor specifico effettivo che verrà aperto dipenderà dall'impostazione della variabile di ambiente EDITOR.

The sudoers File
Il File sudoers

Registrare i Comandi

Per impostazione predefinita, i comandi sudo effettuati ed eventuali errori sono registrati nel file /var/log/auth.log per quanto riguarda la famiglia di distribuzioni Debian, e in /var/log/messages e/o /var/log/secure negli altri sistemi. Questa è una misura di sicurezza importante per consentire il monitoraggio e la responsabilità dell'uso di sudo. Una voce tipica del messaggio di registrazione contiene:

  • Nome utente del chiamante
  • Informazioni sul terminale
  • Directory di lavoro
  • Account utente chiamato
  • Comando con argomenti

L'esecuzione di un comando come sudo whoami viene registrato come voce nel file di log in questo modo:

Dec 8 14:20:47 server1 sudo: op : TTY=pts/6 PWD=/var/log USER=root COMMAND=/usr/bin/whoami

varlogsecure
Registrazione dei Comandi

Isolamento del Processo

Linux è considerato più sicuro di molti altri sistemi operativi in quanto i processi sono isolati in modo naturale l'uno dall'altro. Un processo normalmente non può accedere alle risorse di un altro processo, anche se questo processo è in esecuzione con gli stessi privilegi utente. Linux quindi rende difficile (anche se certamente non impossibile) ai virus e ai tentativi di penetrare la sicurezza, l'accesso e l'attacco casuale a risorse in un sistema.

Sono stati aggiunti recentemente altri meccanismi di sicurezza che limitano il rischio ulteriormente, tra i quali:

  • Gruppi di Controllo (cgroup)
    Consentono agli amministratori di sistema di raggruppare processi e associare risorse finite a ciascun cgroup.
  • Contenitori
    Rendono possibile l'esecuzione di più sistemi Linux isolati (contenitori) su un singolo sistema facendo affidamento ai cgroup.
  • Virtualizzazione
    L'hardware viene emulato in modo tale che non solo i processi possano essere isolati, ma interi sistemi possano essere eseguiti contemporaneamente come ospiti isolati (macchine virtuali) su un host fisico.
Process Isolation
Isolamento di Processi

Accesso ai Dispositivi Hardware

Linux limita all'utente l'accesso a dispositivi hardware non di rete in modo estremamente simile all'accesso ai normali file. Le applicazioni interagiscono coinvolgendo il livello del filesystem (che è indipendente dall'effettivo dispositivo o hardware nel quale risiede). Questo livello aprirà quindi uno speciale file di dispositivo (spesso chiamato nodo di dispositivo) nella directory /dev che corrisponde al dispositivo al quale si accede. Ciascun file speciale di dispositivo ha normali permessi per proprietario, gruppo e altri. La sicurezza è applicata in modo naturale, allo stesso modo dell'accesso a file standard.

Gli hard disk, per esempio, sono rappresentati come  /dev/sd*. Un utente root può leggere e scrivere sul disco in modo grezzo, ad esempio eseguendo qualcosa come:

# echo hello world > /dev/sda1

I permessi standard così come sono mostrati nella videata qui sotto, rendono impossibile agli utenti normali fare questo. La scrittura verso un dispositivo fatta in quel modo può facilmente obliterare il filesystem che vi risiede in un modo che non consente una riparazione senza grossi sforzi, posto che ci si riesca. La normale lettura e scrittura di file su hard disk dalle applicazioni è fatta a un livello più alto tramite il filesystem e mai con accesso diretto al nodo di dispositivo.

Hardware Device Access
Accesso ai Dispositivi Hardware

Mantenere il Sistema Aggiornato

Quando sono individuati i problemi di sicurezza sia sul kernel Linux  che su applicazioni e librerie, le distribuzioni Linux hanno una buona reputazione di agire velocemente, applicando le risoluzioni per tutti i sistemi, aggiornando i loro repository software e inviando notifiche che consigliano l'aggiornamento immediato. La stessa cosa vale anche per la risoluzione di bug e miglioramenti di prestazioni che non sono legati alla sicurezza.

Timely System Update

Tuttavia, è ben noto che molti sistemi non vengono aggiornati con sufficiente frequenza e problemi per i quali esiste già la soluzione rimangono nei computer per molto tempo; questo è particolarmente vero con sistemi operativi proprietari dove gli utenti non sono informati o non si fidano della politica di applicazione delle risoluzioni dei problemi da parte dei gestori delle distribuzioni, in quanto talvolta gli aggiornamenti possono causare nuovi problemi e rompere cose che prima funzionavano. La maggior parte dei vettori di attacco più efficaci sfruttano buchi di sicurezza per i quali è già pronta la risoluzione ma non è stata universalmente distribuita.

Quindi la migliore pratica per trarre vantaggio del meccanismo di aggiornamenti automatici della tua distribuzione Linux è di applicarli tempestivamente, mai rimandarli. È estremamente raro che tali aggiornamenti possano causare nuovi problemi.

Come Sono Conservate le Password

Il sistema verifica l'autenticità e l'identità usando le credenziali utente.

In origine, le password criptate erano conservate nel file /etc/passwd, che era leggibile da tutti. Pertanto era piuttosto facile scoprire le password.

How Passwords are Stored
Come Sono Conservate le Password

Nei moderni sistemi, le password sono in realtà conservate in forma criptata in un file secondario chiamato /etc/shadow. Solo chi ha accesso come root può leggere o modificare questo file.

Algoritmo della Password

La protezione delle password è diventato un elemento cruciale di sicurezza. La maggior parte delle distribuzioni Linux fa affidamento su un moderno algoritmo di codifica delle password chiamato SHA-512 (Secure Hashing Algorithm 512 bits), sviluppato dall'Agenzia per la Sicurezza Nazionale degli Stati Uniti per la codifica delle password.

L'algoritmo SHA-512 è largamente usato per applicazione di sicurezza e protocolli. Questi includono TLS, SSL, PHP, SSH, S/MIME e IPSec. SHA-512 è uno degli algoritmi più testati.

Per esempio, se desideri fare esperimenti con la codifica SHA-512, la parola "test" può essere codificata usando il programma sha512sum per produrre il formato SHA-512 (vedi sotto):

Password Encryption: sha512sum
Codifica Password: sha512sum

Buone Pratiche per le Password

I professionisti IT seguono parecchie buone pratiche per mettere in sicurezza i dati e la password di ciascun utente.

  • La durata della password è un metodo per assicurarsi che l'utente venga avvisato quando è ora di creare una nuova password, trascorso uno specifico periodo di tempo. Questo assicura che le password, se scoperte, saranno utilizzabili solo per un periodo limitato di tempo. Questa funzionalità è implementata usando chage, che configura l'informazione di password in scadenza per un utente.
  • Un altro metodo è di forzare gli utenti a creare password complesse usando i moduli PAM (Pluggable Authentication Modules). PAM può essere configurato automaticamente per verificare che una password creata o modificata usando l'utility passwd sia sufficientemente complessa. La configurazione di PAM è implementata usando una libreria chiamata  pam_cracklib.so, che può essere rimpiazzata da pam_passwdqc.so per potere usufruire di più opzioni.
  • È anche possibile installare un programma di cracking di password come  John The Ripper, per mettere in sicurezza il file delle password e per rilevare voci di password deboli. Si raccomanda di ottenere un'autorizzazione scritta prima di installare detto strumento su qualsiasi sistema se non di proprietà.
Using chage
Utilizzare chage

Richiedere Password per il Boot Loader

Puoi mettere in sicurezza il processo di avvio con una password per evitare che qualcuno possa saltare il passaggio di autenticazione utente. Questo può funzionare assieme alla protezione con password del BIOS. Nota che anche se il solo uso di una password per il bootloader impedirà a un utente di modificare la configurazione del bootloader durante il processo di avvio, non impedirà a un utente l'avvio tramite un media alternativo, come dischi ottici e chiavi USB. Pertanto dovrebbe essere usata assieme a una password del BIOS per una protezione completa.

Sign saying: Password Required

Per il metodo di avvio meno recente GRUB 1, era relativamente facile impostare una password per grub. Tuttavia, per la versione GRUB 2 le cose sono diventate più complicate, anche se si ha maggiore flessibilità e si può trarre vantaggio da funzionalità più avanzate come password specifiche per utente (che possono anche essere quelle del loro normale login).

Inoltre non modificherai mai grub.cfg direttamente; invece puoi modificare i file di configurazione in /etc/grub.d e /etc/defaults/grub, poi eseguire update-grub, oppure grub2-mkconfig e salvare il nuovo file di configurazione.

Per saperne di più, leggi il post seguente (in inglese): "GRUB 2 Password Protection".

Vulnerabilità dell'Hardware

Quando l'hardware è accessibile fisicamente, la sicurezza può essere compromessa da:

  • Key logging
    La registrazione in tempo reale dell'attività di un computer, compreso i tasti premuti. I dati catturati possono essere salvati localmente oppure trasmessi a macchine remote.
  • Network sniffing
    La cattura e la visualizzazione del livello dati dei pacchetti sulla tua rete.
  • Avvio da un disco di ripristino o una distribuzione live
  • Rimontaggio e modifica del contenuto del disco.

La politica di sicurezza della tua struttura IT dovrebbe partire dai requisiti su come accedere fisicamente in modo corretto a server e workstation. L'accesso fisico a un sistema rende possibile per gli aggressori di sfruttare diversi vettori di attacco, in modo tale che tutte le precauzioni a livello di sistema operativo diventino irrilevanti.

Le linee guida della sicurezza sono:

  • Bloccare workstation e server.
  • Proteggere i punti di collegamento alla rete in modo tale che possano accedere solo persone di tua fiducia.
  • Proteggere le tue tastiere dove vengono digitate le password per assicurarsi che le tastiere non possano essere manomesse.
  • Assicurarsi che una password protegga il BIOS in modo tale che il sistema non possa essere avviato con una chiave USB o una distribuzione live su DVD.

Per computer usati da un solo utente e quelli in un ambiente domestico alcune delle protezioni sopra citate (come prevenire l'avvio da media rimovibili) possono essere eccessive e puoi evitare di implementarle. Tuttavia se nel tuo sistema ci sono informazioni sensibili che richiedono una accurata protezione dovresti adottare le linee guida sopra citate oppure toglierle dal computer.

Hardware Vulnerability
Vulnerabilità Hardware

Vulnerabilità Software

Come tutti i software, gli hacker trovano occasionalmente punti deboli nell'ecosistema Linux. La forza di Linux (e della comunità open source in generale) è la velocità con cui tali vulnerabilità sono esposte e riparate. La copertura specifica delle vulnerabilità va oltre lo scopo di questo corso, ma la commissione di discussione può essere utilizzata per svolgere ulteriori discussioni.

Cartoon penguin opening the door

Riepilogo del Capitolo

Hai completato il Capitolo 18. Riassumiamo i concetti chiave trattati:

  • L'account di root ha autorità sull'intero sistema.
  • I privilegi di root possono essere richiesti per compiti come il riavvio di servizi, l'installazione manuale di pacchetti e la gestione di parti del filesystem che sono al di fuori della directory home.
  • Per poter esegure qualsiasi operazione con alti privilegi come modifiche a livello di sistema, devi usare  su oppure sudo.
  • La chiamata a sudo attiva una ricerca nel file  /etc/sudoers, oppure nella directory /etc/sudoers.d, che prima controlla che l'utente chiamante possa usare sudo e che venga usato all'interno dell'ambito consentito.
  • Una delle più potenti funzionalità di sudo è la capacità di registrare tentativi falliti per l'acquisizione di accesso a root. Per impostazione predefinita, i comandi sudo e i fallimenti sono registrati in /var/log/auth.log per quanto riguarda la famiglia Debian e in /var/log/messages nelle altre famiglie di distribuzioni.
  • Un processo non può accedere alle risorse di un altro processo, anche se quel processo è in esecuzione con gli stessi privilegi utente.
  • Tramite l'uso delle credenziali utente, il sistema verifica autenticità e identità.
  • L'algoritmo SHA-512 viene usato tipicamente per codificare le password. Possono essere codificate ma non decodificate.
  • Si possono configurare i Pluggable Authentication Modules (PAM) per verificare automaticamente che le password create o modificate con l'utility passwd siano sufficientemente complesse (può anche essere configurato quanto abbastanza complesse debbano essere).
  • La politica di sicurezza della tua struttura IT dovrebbe partire dai requisiti su come mettere propriamente in sicurezza l'accesso fisico a server e workstations.
  • Mantenere i tuoi sistemi aggiornati è un importante passo per evitare attacchi di sicurezza