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à
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
Struttura del sistema
sistema
ubuntu-server
TechStartup srl — Ubuntu 22.04
gruppo
dev
/srv/techstartup/codice — 770
gruppo
ops
/srv/techstartup/log — 770 /srv/techstartup/backup — 750
gruppo
security
accesso in lettura su tutti i gruppi
gruppi secondari: dev, ops, security
Procedura — 11 passi
Crea i tre gruppi dipartimentali
I gruppi vanno creati prima degli utenti. Assegnare un utente a un gruppo inesistente restituisce un errore.
$ 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.
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).
$ 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.
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).
$ getent group dev
id marcodev: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.
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.
$ 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.
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.
$ 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.
perché:Il flag -a è uno degli errori più frequenti nella gestione utenti. Dimenticarlo in produzione può togliere accessi critici senza messaggi di errore.
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.
$ getent group dev
getent group ops
getent group security
id valentinadev: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.
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}.
$ 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 logPrima 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.
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.
$ 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.
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.
$ 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).
Verifica finale: testa accessi consentiti
Il momento della verità. sudo -u simula il login come quell'utente senza aprire una sessione completa.
$ 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 OKsudo -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.
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.
$ sudo -u giulia ls /srv/techstartup/codice 2>&1ls: 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
Quale comando aggiunge marco al gruppo dev senza rimuoverlo dai suoi gruppi attuali?
Navigazione
Capitolo 16 di 16