Corso Linux / Configurare un nuovo server e verificarlo dopo il riavvio

Per preparare un nuovo server Linux, assicurati prima un accesso alla console di recupero, poi verifica un account amministrativo ordinario e l’accesso SSH con chiave. Controlla quindi aggiornamenti, orario, porte necessarie e riavvio: la configurazione è completa solo se accesso e servizi richiesti funzionano anche in una nuova sessione e dopo un riavvio pianificato.

Questo laboratorio riunisce le verifiche iniziali senza sostituire la politica di sicurezza dell’organizzazione. Dopo aver preparato l’account, prova un nuovo accesso SSH con chiave e i privilegi prima di applicare la protezione di account e firewall. Mantieni aperti la console e la sessione amministrativa originaria durante le prove.

Il riferimento è una macchina virtuale con installazione ordinaria di Ubuntu 26.04 LTS oppure Rocky Linux 9. Container, WSL, immagini cloud e altre versioni possono avere servizi e pacchetti diversi. Prepara il ripristino e annota le versioni seguendo la lezione sull’ambiente di prova con macchina virtuale, in inglese; scegli una sola distribuzione per questo esercizio.

Identificare il server e la via di recupero

Usa una nuova VM o un server di prova, con privilegi amministrativi e una procedura di backup o ricostruzione. Accertati di poter aprire davvero la console fornita dall’hypervisor o dal gestore cloud prima di modificare l’accesso remoto. Uno snapshot può agevolare il ritorno allo stato precedente, ma non protegge automaticamente dal guasto dello stesso archivio né garantisce la coerenza di un’applicazione attiva.

cat /etc/os-release
hostnamectl
ip -brief address
ip route
timedatectl
lsblk -f

Registra distribuzione, nome host, indirizzi, fuso orario e dispositivi per escludere di essere sulla macchina sbagliata. L’indirizzo della scheda non coincide necessariamente con quello pubblico usato dal client: possono intervenire NAT e bilanciatori. Non copiare nomi di dispositivi, unità o indirizzi da un altro laboratorio. Nelle immagini cloud verifica l’account iniziale e quali impostazioni sono gestite da cloud-init o da altri sistemi di provisioning.

Creare o verificare un account amministrativo ordinario

Riutilizza un account amministrativo esistente se è adatto. Se serve un nuovo courseadmin, verifica prima con getent passwd courseadmin che il nome non sia già assegnato; se trovi un account o la ricerca dà un errore inatteso, fermati e chiariscine l’origine. Non aggiungere privilegi a un account esistente solo perché un comando di creazione è fallito. Inserisci la password nella richiesta interattiva, mai nella riga di comando.

Su Ubuntu usa questo blocco. Il secondo comando parte solo se la creazione termina con successo:

sudo adduser courseadmin &&
sudo usermod -aG sudo courseadmin

Su Rocky Linux usa invece questo blocco, che assegna anche una password prima di aggiungere l’utente al gruppo wheel:

sudo useradd -m courseadmin &&
sudo passwd courseadmin &&
sudo usermod -aG wheel courseadmin

Se una fase fallisce dopo aver creato l’account, controlla lo stato effettivo prima di riprendere: la catena && interrompe i passi successivi, ma non annulla quelli già riusciti. Accedi con quell’utente da un nuovo terminale e verifica id e sudo -v. L’aggiunta a un gruppo può non essere visibile in una sessione già aperta; la presenza nel gruppo, da sola, non dimostra che la politica sudo conceda l’operazione prevista.

La gestione degli utenti di Ubuntu descrive il gruppo sudo; la guida agli utenti di Rocky Linux illustra gli strumenti di gestione degli account. Se occorre modificare sudoers, usa visudo e la sua validazione, mantenendo la sessione amministrativa originaria. Non concedere accesso illimitato senza password per comodità.

Provare la chiave SSH con una connessione indipendente

SSH, Secure Shell, permette l’accesso remoto cifrato. Sul client scegli una chiave autorizzata o generane una nuova e confronta l’impronta della chiave host del server con quella ottenuta dalla console fidata. Registra nel server solo la chiave pubblica; la chiave privata resta sul client. Segui la procedura completa della lezione SSH collegata sopra, quindi apri una seconda connessione usando la chiave, l’utente e l’indirizzo effettivi. Per evitare che il multiplexing riutilizzi una connessione già autenticata, usa sul client ssh -o ControlMaster=no -o ControlPath=none -i /percorso/chiave -p PORTA courseadmin@INDIRIZZO, sostituendo percorso, porta e indirizzo con quelli reali. Prova anche sudo in quella sessione.

Controlla la porta sulla quale SSH ascolta davvero e le regole di accesso del cloud. Limita l’autenticazione con password soltanto dopo aver verificato chiave e recupero, secondo la documentazione OpenSSH di Ubuntu. Prima di applicare una modifica verifica la sintassi con sudo sshd -t, poi usa il servizio effettivo della distribuzione e riprova un nuovo accesso. Una sintassi valida non dimostra che tutte le regole consentano il login; una sessione rimasta aperta non dimostra che se ne possa aprire un’altra.

Pianificare gli aggiornamenti e verificare orario e nome host

Su Ubuntu aggiorna prima l’indice dei pacchetti e prosegui solo se il comando riesce:

sudo apt update &&
sudo apt upgrade

Su Rocky Linux esegui invece:

sudo dnf upgrade

Leggi e approva la transazione proposta, senza aggiungere automaticamente opzioni di conferma. apt update aggiorna l’indice, non installa gli aggiornamenti; apt upgrade può lasciare alcuni pacchetti non aggiornati. Controlla il riepilogo e gli eventuali pacchetti trattenuti, senza passare a una rimozione o a un aggiornamento di distribuzione alla cieca. La guida ai pacchetti di Ubuntu spiega la distinzione fra indice e pacchetti installati.

Verifica riavvii di servizi, cambiamenti del kernel e richieste di riavvio della macchina; riprova le funzioni necessarie oltre al solo SSH. Con timedatectl controlla fuso orario e sincronizzazione. Se devi cambiare fuso, scegli un nome IANA effettivo dall’elenco di timedatectl list-timezones, secondo la politica operativa. Un servizio di sincronizzazione attivo non prova che l’orologio sia sincronizzato: controlla anche lo stato del servizio NTP, Network Time Protocol, realmente installato e la raggiungibilità delle sue sorgenti.

Se cambi nome con sudo hostnamectl set-hostname nome-effettivo, sostituisci il segnaposto con il nome concordato e valuta DNS, file hosts, certificati e sistemi di gestione. Il cambio locale non aggiorna automaticamente questi elementi. Controlla inoltre se cloud-init o l’automazione ripristina un altro valore.

Limitare le porte e conservare un riferimento iniziale

Esamina il firewall effettivamente in uso: tipicamente UFW su Ubuntu o firewalld su Rocky Linux. Segui la lezione sulla protezione collegata nell’introduzione per identificare interfaccia, zona e regole attive. Consenti prima la porta di amministrazione effettiva dalla sorgente autorizzata e prova una nuova connessione, quindi aggiungi soltanto i servizi necessari. Considera IPv4, IPv6 e le regole sia dell’host sia del cloud. Non disattivare SELinux, Security-Enhanced Linux, senza indagare la causa concreta di un blocco.

Salva un riferimento con cui confrontare le modifiche future. Il blocco seguente crea una nuova directory dal nome univoco nella tua home, anziché riutilizzare e sovrascrivere una cartella esistente. La maschera umask 077, limitata alla subshell tra parentesi, esclude i permessi di gruppo e altri per i nuovi file su un normale filesystem Linux con permessi Unix; mktemp -d crea la directory privata. Verifica comunque ACL e politica del filesystem se applicabili.

(
  umask 077
  baseline=$(mktemp -d "$HOME/server-baseline.XXXXXX") &&
  cat /etc/os-release > "$baseline/os-release.txt" &&
  ip -brief address > "$baseline/addresses.txt" &&
  lsblk -f > "$baseline/storage.txt" &&
  systemctl --failed > "$baseline/failed-units.txt" &&
  printf 'Baseline: %s\n' "$baseline"
)

Se tutti i comandi riescono, l’ultima riga stampa il percorso Baseline: …: annotalo e controlla i quattro file. Se il blocco fallisce, resta possibile una raccolta parziale; non considerarla completa e individua il primo errore. Le parentesi non eseguono un ripristino e la directory rimane disponibile per l’analisi. La documentazione GNU di mktemp descrive la creazione sicura di nomi univoci.

Questa raccolta non è un backup delle configurazioni né una prova che il sistema sia sano. Non inserirvi password, chiavi private o token; anche indirizzi, topologia dei dischi e nomi delle unità sono informazioni operative da proteggere. Conserva separatamente i backup delle configurazioni e documenta come il personale autorizzato possa recuperarli.

Valutare il risultato dopo un riavvio pianificato

  1. Concorda una finestra di interruzione, verifica l’accesso alla console e salva i dati necessari.
  2. Esegui sudo reboot solo sul server di prova previsto e osserva l’avvio dalla console.
  3. Apri una nuova connessione SSH e verifica sudo, rete, sincronizzazione dell’orario, servizi necessari e mount attesi.
  4. Confronta systemctl --failed e i log dell’avvio corrente, consultabili con journalctl -b, con il riferimento iniziale. L’assenza di unità fallite non sostituisce una prova funzionale dei servizi.

Se non riesci a ricollegarti, usa la console e controlla nell’ordine indirizzo effettivo, stato del servizio SSH, porta in ascolto e firewall. Ripristina la modifica pertinente usando il backup e la procedura preparati, senza cambiare più impostazioni per tentativi. Installa le applicazioni successive solo quando l’accesso amministrativo e le funzioni richieste sono verificati anche dopo il riavvio.

Documentazione ufficiale