Status scroll
0%
Capitolo 16 di 16100%
Capitolo 16Sessione operativa · 2h

Linux / Kernel / Shell

Progetto: Gestione Utenti TechStartup

Scenario reale: sei il nuovo sysadmin di una startup. Devi configurare da zero utenti, gruppi e per tre dipartimenti con policy di accesso distinte.

Modalità

FocusOS / Linux
Outputteoria + pratica

Checkpoint 1

Creare gruppi Linux e assegnare utenti con policy distinte per dipartimento.

Checkpoint 2

Configurare directory coerenti con la struttura organizzativa.

Checkpoint 3

Verificare e auditare gli accessi simulando utenti diversi.

Checkpoint 4

Usare usermod, chown e chmod in un flusso realistico end-to-end.

Glossario del capitolo

Termini da tenere aperti mentre studi

Tocca un termine per aprire il drawer e collegare teoria, comandi e pratica Linux.

Sezione operativa

Il mandato

Hai appena firmato il contratto come sysadmin di TechStartup srl. Il tuo primo compito è configurare il sistema di accessi Linux per tre team: sviluppo, operations e security.

Ogni team ha esigenze diverse: i dev devono scrivere codice, ops gestisce log e backup, security monitora tutto senza modificare nulla. Il principio guida è il minimo privilegio necessario: ogni utente accede solo a ciò che serve per il suo lavoro.

In questo progetto costruirai l'intera struttura passo dopo passo, esattamente come faresti in un ambiente reale.

Da tenere a mente

  • Principio del minimo privilegio: ogni utente ha solo i strettamente necessari.
  • I gruppi sono il meccanismo principale per condividere accessi tra più utenti.
  • La verifica degli accessi negati è importante quanto quella degli accessi consentiti.

Progetto guidato

TechStartup srl — Configurazione accessi Linux

Il tuo mandato

Sei stato assunto come sysadmin di TechStartup srl, una startup milanese con 6 dipendenti distribuiti su 3 team. L'HR ti ha inviato la lista: Marco, Sara e Luca lavorano nello sviluppo; Giulia e Antonio gestiscono le operations; Valentina è responsabile della sicurezza e deve monitorare l'attività di tutti i team senza modificare nulla. Il CEO vuole che l'ambiente sia configurato entro oggi. Il server gira su Ubuntu 22.04.

Script e risorse

Scarica script di resetricrea l'ambiente da zero

Struttura del sistema

sistema

ubuntu-server

TechStartup srl — Ubuntu 22.04

gruppo

dev

/srv/techstartup/codice — 770

marco
sara
luca

gruppo

ops

/srv/techstartup/log — 770 /srv/techstartup/backup — 750

giulia
antonio

gruppo

security

accesso in lettura su tutti i gruppi

valentina

gruppi secondari: dev, ops, security

Procedura — 11 passi

01

Crea i tre gruppi dipartimentali

I gruppi vanno creati prima degli utenti. Assegnare un utente a un gruppo inesistente restituisce un errore.

terminal
$ sudo groupadd dev && sudo groupadd ops && sudo groupadd security
(nessun output = successo)

groupadd crea un gruppo nel sistema. I tre gruppi corrispondono ai dipartimenti: sviluppo, operations e security.

perché:In Linux l'ordine conta: prima definisci i gruppi, poi gli utenti. Invertire crea dipendenze non risolte.

02

Crea gli utenti del team dev e assegnali al gruppo

  • ·-m (--create-home) — crea la home directory dell'utente (/home/marco ecc.). Senza, l'account esiste nel sistema ma non ha cartella personale e il login non funziona normalmente.
  • ·-s /bin/bash (--shell) — imposta bash come shell di login. Senza questa flag la distro potrebbe assegnare /bin/sh o nessuna shell interattiva.
  • ·-G dev (--groups) — assegna dev come gruppo supplementare al momento della creazione. Il gruppo primario resta quello omonimo all'utente (marco, sara, luca).
terminal
$ sudo useradd -m -s /bin/bash -G dev marco
sudo useradd -m -s /bin/bash -G dev sara
sudo useradd -m -s /bin/bash -G dev luca
(nessun output = successo)

Ogni utente viene creato con home directory (/home/marco ecc.) e bash come di default, già assegnato al gruppo dev.

03

Verifica che i tre utenti siano nel gruppo dev

Il formato di getent group è nome:password:GID:membri. Il campo password è sempre "x" (gestita da /etc/shadow, non qui). id mostra gid (gruppo primario dell'utente) e groups (tutti i gruppi a cui appartiene, primario incluso).

terminal
$ getent group dev
id marco
dev:x:1001:marco,sara,luca
uid=1001(marco) gid=1004(marco) groups=1004(marco),1001(dev)

getent group mostra i membri del gruppo. id utente mostra tutti i gruppi (primario e supplementari) a cui l'utente appartiene.

perché:Verificare subito dopo la creazione previene errori silenziosi. Un'assegnazione fallita non sempre produce un messaggio di errore visibile.

04

Crea gli utenti del team ops

  • ·-m -s /bin/bash — garantisce home directory e shell interattiva. Senza, l'account esiste tecnicamente ma non è usabile per fare login.
  • ·-G ops — ops è il gruppo con accesso a log e backup. Assegnarlo qui evita un usermod separato dopo la creazione.
terminal
$ sudo useradd -m -s /bin/bash -G ops giulia
sudo useradd -m -s /bin/bash -G ops antonio
(nessun output = successo)

Giulia e Antonio entrano nel sistema con home, bash e il gruppo ops come supplementare. Il loro gruppo primario è quello omonimo (giulia, antonio) — ops si aggiunge, non sostituisce.

05

Crea Valentina con accesso multi-gruppo (security + audit)

Valentina deve leggere le directory di tutti i team. Questo si ottiene aggiungendola ai gruppi dev, ops e security come gruppi supplementari.

terminal
$ sudo useradd -m -s /bin/bash valentina
sudo usermod -aG dev,ops,security valentina
(nessun output = successo)

Prima crea l'utente, poi usa usermod -aG per aggiungere i gruppi supplementari. Il flag -a (append) è obbligatorio: senza, -G sovrascrive tutti i gruppi esistenti.

warning:usermod -G dev,ops,security valentina SENZA -a rimuove valentina da tutti i suoi gruppi attuali prima di assegnare i nuovi. Sempre usare -aG.

perché:Il flag -a è uno degli errori più frequenti nella gestione utenti. Dimenticarlo in produzione può togliere accessi critici senza messaggi di errore.

06

Audit completo: verifica struttura gruppi e utente multi-gruppo

Prima di creare le directory è fondamentale avere la certezza che tutti gli utenti siano nei gruppi corretti. Un errore qui — un utente mancante o nel gruppo sbagliato — si propaga nei permessi delle directory ed è difficile da rintracciare dopo.

terminal
$ getent group dev
getent group ops
getent group security
id valentina
dev:x:1001:marco,sara,luca
ops:x:1002:giulia,antonio
security:x:1003:valentina
uid=1006(valentina) gid=1009(valentina) groups=1009(valentina),1001(dev),1002(ops),1003(security)

getent group mostra i membri di ciascun gruppo. id valentina conferma che è nei tre gruppi supplementari — è il check principale per un utente multi-gruppo.

07

Crea la struttura di directory del progetto

  • ·/srv è la directory standard Linux per dati serviti da applicazioni e servizi (definita dall'FHS, Filesystem Hierarchy Standard). Non /home (dati utente) né /tmp (temporanei).
  • ·Si crea prima la directory padre, poi le figlie. In alternativa si può usare mkdir -p con espansione: mkdir -p /srv/techstartup/{codice,log,backup}.
terminal
$ sudo mkdir /srv/techstartup
sudo mkdir /srv/techstartup/codice /srv/techstartup/log /srv/techstartup/backup
ls -la /srv/techstartup/
total 20
drwxr-xr-x 5 root root 4096 gen 15 10:23 .
drwxr-xr-x 3 root root 4096 gen 15 10:23 ..
drwxr-xr-x 2 root root 4096 gen 15 10:23 backup
drwxr-xr-x 2 root root 4096 gen 15 10:23 codice
drwxr-xr-x 2 root root 4096 gen 15 10:23 log

Prima crea la directory padre /srv/techstartup, poi le tre sottodirectory in un solo comando passando più argomenti a mkdir. ls -la conferma che esistono tutte e tre e appartengono a root.

08

Configura accesso directory codice: solo team dev

  • ·chown root:dev — imposta root come owner e dev come gruppo proprietario. Il formato è sempre utente:gruppo.
  • ·chmod 770 — in ottale: owner=rwx (7), gruppo=rwx (7), altri=--- (0). Dev legge, scrive ed esegue; chiunque altro non ha nessun accesso.
terminal
$ sudo chown root:dev /srv/techstartup/codice
sudo chmod 770 /srv/techstartup/codice
(nessun output = successo)

chown root:dev assegna la directory al gruppo dev. chmod 770 dà a owner e gruppo completi (rwx), gli altri non possono accedere (---).

perché:La combinazione chown + chmod è il flusso standard: prima definisci chi è il proprietario (gruppo), poi cosa può fare.

09

Configura accessi ops: log in scrittura, backup in sola lettura

  • ·log (chmod 770 = rwxrwx---) — ops deve poter aggiungere voci ai log, quindi serve la scrittura per il gruppo.
  • ·backup (chmod 750 = rwxr-x---) — ops può leggere i backup ma non modificarli o eliminarli. Il valore 5 = r-x: lettura ed esecuzione, nessuna scrittura. I backup sono dati critici: limitare la scrittura riduce il rischio di cancellazioni accidentali.
terminal
$ sudo chown root:ops /srv/techstartup/log && sudo chmod 770 /srv/techstartup/log
sudo chown root:ops /srv/techstartup/backup && sudo chmod 750 /srv/techstartup/backup
(nessun output = successo)

I log richiedono scrittura (ops deve aggiungere voci), quindi 770. Il backup è più critico: 750 permette al gruppo di leggere ma non modificare (r-x = 5).

10

Verifica finale: testa accessi consentiti

Il momento della verità. sudo -u simula il login come quell'utente senza aprire una sessione completa.

terminal
$ sudo -u marco ls /srv/techstartup/codice && echo "marco: accesso OK"
sudo -u valentina ls /srv/techstartup/codice && echo "valentina: accesso OK"
sudo -u giulia ls /srv/techstartup/log && echo "giulia: accesso log OK"
marco: accesso OK
valentina: accesso OK
giulia: accesso log OK

sudo -u esegue il comando nel contesto di quell'utente senza aprire una sessione separata. Se il comando riesce, && stampa il messaggio di conferma.

perché:La verifica degli accessi consentiti conferma che la policy non blocca chi ha diritto di accedere.

11

Verifica finale: testa accesso negato (giulia su /codice)

2>&1 redirige stderr (canale 2) su stdout (canale 1). Senza questa redirezione, il messaggio "Permission denied" verrebbe scritto su stderr e potrebbe non apparire nel terminale a seconda del contesto. Qui serve per vedere l'errore nell'output normale.

terminal
$ sudo -u giulia ls /srv/techstartup/codice 2>&1
ls: cannot open directory '/srv/techstartup/codice': Permission denied

"Permission denied" è il risultato atteso: giulia appartiene al gruppo ops, non al gruppo dev. Se vedessi output diverso, la policy chmod/chown sarebbe configurata in modo errato.

perché:Testare l'accesso negato è tanto importante quanto testare quello consentito. Senza questo step, non sai se il sistema funziona davvero.

Hai completato il progetto se…

marco, sara e luca accedono a /srv/techstartup/codice. giulia e antonio accedono a /srv/techstartup/log (r/w) e /srv/techstartup/backup (r). valentina accede a tutte e tre le directory. Qualsiasi altro utente ottiene "Permission denied" su tutte le directory.

Checkpoint finale

Cosa portarti via

  • I gruppi Linux sono il modo standard per applicare policy di accesso a più utenti contemporaneamente.
  • useradd -G assegna gruppi supplementari al momento della creazione; usermod -aG li aggiunge a un utente esistente senza sovrascrivere quelli già assegnati.
  • chmod 770 limita l'accesso ai soli membri del gruppo proprietario. chmod 750 aggiunge il vincolo di sola lettura per altri.
  • Testare l'accesso negato con sudo -u è parte integrante della verifica di una policy di sicurezza.

Prompt operativo

Fermati e ragiona

  • Cosa succederebbe se usassi usermod -G security valentina senza il flag -a?
  • Come cambieresti la struttura se un utente deve passare da ops a dev mantenendo l'accesso ai log?
  • Qual è il rischio di usare chmod 777 su /srv/techstartup/codice?

Progress Dashboard Quiz

Hai completato 0/0 domande su 16 capitoli con quiz.

Capitoli completati: 0/16

Quiz capitolo

Verifica rapida

1/5

Quale comando aggiunge marco al gruppo dev senza rimuoverlo dai suoi gruppi attuali?

Navigazione

Capitolo 16 di 16