Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
1
Lezione 7Gestione degli utentiSistemi Operativi (9 CFU), CdL Informatica, A. A. 2015/2016Dipartimento di Scienze Fisiche, Informatiche e MatematicheUniversità di Modena e Reggio Emiliahttp://weblab.ing.unimo.it/people/andreolini/didattica/sistemi-operativi
2
Quote of the day(https://xkcd.com/149/)
3
INTRODUZIONE
4
Lo scenario(Sistema multi-utente)
Molteplicità di utenti. Più utenti possono usare i servizi messi a disposizione dall'host nello stesso istante.
Principio del minimo privilegio. Ispira le decisioni del SO nelle assegnazioni delle risorse.
SistemaOperativo
Hardware
CPU Disco
Memoria PortaUSB
Bus
Applicazioni
Utente 1 Utente 2 Utente N
Host
5
Problema 1/4(Identificare l'utente per chi è veramente)
Un utente legittimo si identifica onestamente presso il SO, senza spacciarsi per qualcun altro.Un utente malizioso potrebbe invece presentarsi al SO nelle vesti di un altro utente e fare danni, addossando la colpa ad un altro.Il SO è in grado di impedire la “sostituzione di persona”?
SistemaOperativo
Hardware
CPU Disco
Memoria PortaUSB
Bus
Applicazioni
Utente 1 Utente 2 Utente N
HostUtente 1
X
6
Problema 2/4(Limitare a specifici utenti l'accesso ad una risorsa hw/sw)
Il SO espone risorse hw/sw agli utenti perché possano fruirne.Tuttavia, non tutte le risorse hw/sw sono fruibili a tutti gli utenti.
Esempio: file delle password(è modificabile solo da unamministratore).
Il SO è in grado di applicare restrizioni di accesso alle risorse?
SistemaOperativo
Hardware
CPU Disco
Memoria PortaUSB
Bus
Applicazioni
Utente 1 Utente 2 Utente N
Host
X
Admin Guest
File password
7
Problema 3/4(Eseguire operazioni con privilegi specifici)
Alcune operazioni critiche sono impedite agli utenti normali.
Accensione periferica.Formattazione disco.Modifica password.
Tuttavia, un utente vorrebbe poter eseguire tali operazioni (pena un'esperienza d'uso fortemente degradata).Può l'utente eseguire comandi con privilegi specifici, in maniera controllata?
SistemaOperativo
Hardware
CPU Disco
Memoria PortaUSB
Bus
Applicazioni
Utente 1 Utente 2 Utente N
Host
File password
User
8
Problema 4/4(Fornire strumenti per la gestione degli utenti ed il controllo degli accessi)
Il SO mette a disposizione gli strumenti per la gestione degli utenti?Il SO mette a disposizione gli strumenti per il controllo degli accessi alle risorse?Il SO mette a disposizione gli strumenti per la limitazione del consumo di risorse da parte di un utente?
SistemaOperativo
Hardware
CPU Disco
Memoria PortaUSB
Bus
Applicazioni
Utente 1 Utente 2 Utente N
Host
File password
Student 1
File tesiX
Student 2Hacker
X
Forkbomb
9
10
Autenticazione(Risposta al Problema 1/4)
I SO moderni forniscono astrazioni software per l'autenticazione.Autenticazione (login): è la procedura con cui il SO conferma la veridicità di una informazione data per vera da una entità.L'autenticazione si svolge in due operazioni.
Identificazione. Nel momento in cui una entità sipresenta, Il SO prova ad associarla ad un nome dilogin a lui noto.Verifica delle credenziali di accesso. Il SO chiedeall'utente una informazione che solo lui può dare.
11
Fattori di autenticazione(Le tipologie di informazioni fornite dall'utente)
Le informazioni fornite da un utente per verificare la propria identità prendono il nome di fattori di autenticazione (authentication factor).I fattori di autenticazione si riferiscono ad informazioni
che solo l'utente è supposto conoscere (password);che solo l'utente è supposto avere (dati memorizzatiin un badge personale);che solo l'utente è supposto saper fare o forniregeneticamente (firma, impronta digitale).
12
Una avvertenza(Non si può spiegare tutto in 36 lezioni/72 ore)
In questo corso introduttivo si considererà esclusivamente la password come fattore di autenticazione. In realtà, ne esistono altri:
chiave pubblica GPG.codice numerico OTP a 6 cifre (One Time Pad).impronta del pollice.
I sistemi moderni possono prevedere una forma di autenticazione a fattori multipli (solitamente, due).
Google, Facebook: two factor authentication converifica delle credenziali tramite password ed un codice di6 lettere inviato al proprio smartphone.
13
L'astrazione software “utente”(Rappresenta un utente del sistema, umano o non)
Il SO fornisce una astrazione software dal nome utente (user). L'utente rappresenta una entità qualunque (umana o non) abilitata ad usufruire dei servizi dell'host.
Non tutti i servizi.Solo quelli per cui è autorizzata.
14
Informazioni associate all'utente(Le più importanti)
Identificatore utente (user id): un numero intero non negativo univoco per un utente. È usato dal nucleo del SO per distinguere utenti diversi.Nome di login (username, login name): stringa alfanumerica di lunghezza non nulla. È una rappresentazione ad alto livello dell'identificatore utente (per l'utente umano).Password: una sequenza alfanumerica per la verifica delle credenziali.Shell di login: il percorso dell'interprete dei comandi.Home directory: la directory in cui si trova l'utente subito dopo aver fatto il login.
15
Account utente(Account = insieme di informazioni riguardanti l'utente)
Un account utente (user account, account) è l'insieme di tutte le informazioni riguardanti un dato utente.
Nome di login.Password.Home directory.Shell di login.…
16
Classificazione degli utenti: normali(Utente normale identificatore utente in [1000, 2→ 64-1))
Alcuni utenti rappresentano umani.Identificatore utente: nell'intervallo [1000, 264-1].Nome utente: una stringa alfanumerica che ricorda unnome di persona.
Questi utenti possono eseguire una shell interattiva al loro login.
/bin/bash (ma può essere cambiata).Questi utenti hanno una home directory.
/home/username (può essere cambiata).Questi utenti non possono configurare o alterare direttamente le risorse hw/sw.
Devono elevare i loro privilegi in qualche modo.
17
18
Classificazione degli utenti: superutente(Superutente identificatore utente = 0)→
Nei sistemi UNIX (GNU/Linux non fa eccezione), uno degli utenti può fare tutto.
L'utente amministratore (o superutente).Identificatore utente: 0.Nome utente: root.
L'utente amministratore può eseguire una shell interattiva al login.
Tipicamente, /bin/bash (ma può essere cambiata).L'utente amministratore ha una home directory.
/root (può essere cambiata).L'utente root può configurare o alterare direttamente le risorse hw/sw.
Dischi, schede di rete, file delle password…
19
Classificazione degli utenti: di sistema(Superutente identificatore utente = 0)→
Infine, alcuni sistemi non rappresentano umani, bensì impersonificazioni di servizi in esecuzione.
Identificatore utente: >0 (tipicamente, anche < 1000).Nome utente: una stringa alfanumerica che ricorda unnome di servizio.
Tali utenti non usano mai una shell interattiva al login, che viene pertanto disabilitata.Tali utenti possono non avere una home directory.Tali utenti possono accedere a risorse specifiche dei servizi (per il resto, non possono fare altro).
File di configurazione, file di log.
20
Il file /etc/passwd(Per l'identificazione degli utenti)
Il file /etc/passwd contiene l'elenco degli utenti noti al SO.
È una base di dati primordiale.Elenco di record (uno per riga).I campi di un record sono separati dal carattere :.
Questo file è:leggibile da tutti gli utenti.Modificabile solo dall'utente root.
21
I campi di /etc/passwd(Informazioni associate agli utenti; man 5 passwd per tutti i dettagli)
Nome di login.Password cifrata (nelle distribuzioni GNU/Linux attuali è conservata in un altro file, per motivi di sicurezza).Identificatore utente.Identificatore del gruppo di lavoro primario (usato per il controllo degli accessi).Nome e cognome veri.Home directory.Interprete dei comandi usato.
22
Il file /etc/shadow(Per la verifica delle credenziali dell'utente con password)
Il file /etc/shadow contiene informazioni sulle password associate a ciascun nome di login.
È una base di dati primordiale.Elenco di record (uno per riga).I campi di un record sono separati dal carattere :.
Questo file è leggibile e modificabile dal solo utente root.
Notate la separazione in un file separato (e benprotetto) delle informazioni riguardanti le password.
→ Il principio del minimo privilegio è in azione!
23
I campi di /etc/shadow(Informazioni associate alla password utente; man 5 shadow per i dettagli)
Nome di login.Password cifrata.Data ultimo cambio password.Età minima e massima della password.Periodo di avviso password.Periodo di inattività password.Data scadenza account.
24
Una considerazione di efficienza(È doveroso ribadirla)
Per motivi legati all'efficienza, il nucleo del SO mantiene nelle sue strutture di controllo una sola informazione fra tutte quelle ora viste: l'identificatore dell'utente.
Il nucleo preferisce lavorare con numeri interial posto delle stringhe (è più efficiente).Il nucleo preferisce lasciare alle applicazioni di sistemala conduzione della procedura di autenticazione ededicarsi ad altre faccende più urgenti (gestione I/O,processi, memoria, …).
25
Il file /var/log/wtmp(Contiene un log dei tentativi di login effettuati)
Il file /var/log/wtmp contiene un log di tutti i login effettuati con successo.Il file è in formato binario e non è leggibile in maniera diretta.
È necessario usare strumenti opportuni.
26
Cosa succede al login?(Uno schema semplificato che tiene conto di un solo fattore di autenticazione)
Che cosa succede esattamente quando un utente prova ad autenticarsi presso un terminale di tipo testuale?
Dispositivo /dev/ttyX.Accessibile tramite la sequenzadi tasti Ctrl-Alt-Fx.
L'autenticazione grafica funziona in maniera analoga.
SistemaOperativo
Hardware
CPU Disco
Memoria PortaUSB
Bus
ApplicazioniHost
27
Cosa succede al login?(L'utente “Mauro Andreolini” fornisce il nome di login)
L'utente “Mauro Andreolini” digita il proprio nome di login (la stringa andreoli).La stringa andreoli viene letta dallo STDIN del processo che implementa la procedura di login con password.
Il processo /bin/login.
SistemaOperativo
Hardware
CPU Disco
Memoria PortaUSB
Bus
Applicazioni
Mauro Andreolini
Host
/bin/login
andreoli
STDIN
28
Cosa succede al login?(/bin/login chiede al SO le informazioni di andreoli in /etc/passwd)
Il processo /bin/login chiede al SO il record del file /etc/passwd relativo all'utente andreoli./bin/login ottiene una struttura dati rappresentante la riga di /etc/passwd richiesta.Il SO si accorge che il campo password è vuoto.
→ Occorre leggere /etc/shadow.
SistemaOperativo
Hardware
CPU Disco
Memoria PortaUSB
Bus
Applicazioni
Mauro Andreolini
Host
Gestoreutenti
andreoli andreoli:x:…
/bin/login
29
Cosa succede al login?(L'utente con nome di login andreoli fornisce la password)
L'utente il cui nome di login è andreoli digita il proprio nome di login (la stringa andreoli).La stringa andreoli viene letta dallo STDIN del processo che implementa la procedura di login con password.
Il processo /bin/login.PS: la password del vero utente andreoli docente non è voodie5m…
SistemaOperativo
Hardware
CPU Disco
Memoria PortaUSB
Bus
Applicazioni
Mauro Andreolini
Host voodie5m
Gestoreutenti
STDIN/bin/login
30
Don't even think about it, say no go!(Bruteforcing your lovely teacher's account? Guys, please…)
31
Cosa succede al login?(/bin/login chiede al SO le informazioni di andreoli in /etc/shadow)
Il processo /bin/login chiede al SO il record del file /etc/shadow relativo all'utente andreoli./bin/login ottiene una struttura dati rappresentante la riga di /etc/shadow richiesta.
SistemaOperativo
Hardware
CPU Disco
Memoria PortaUSB
Bus
Applicazioni
Mauro Andreolini
Host
Gestoreutenti
andreoli andreoli:pwd:…
/bin/login
32
Cosa succede al login?(/bin/login verifica che la password immessa sia corretta)
Il processo /bin/login verifica che la password immessa coincida con il valore contenuto nel record di /etc/shadow.Se coincide, /bin/login genera un processo figlio con l'interprete utente (/bin/bash).Se non coincide, /bin/login esce con uno stato di errore e viene fatto ripartire.
SistemaOperativo
Hardware
CPU Disco
Memoria PortaUSB
Bus
Applicazioni
Mauro Andreolini
Host
Gestoreutenti
voodie5m =?= pwd di andreoli
/bin/login
33
Cosa succede al login?(/bin/login verifica che la password immessa sia corretta)
In caso di login riuscito, il SO aggiorna il log dei login (il file /var/log/wtmp) tramite una funzione di libreria.
SistemaOperativo
Hardware
CPU Disco
Memoria PortaUSB
Bus
Applicazioni
Mauro Andreolini
Host
Gestoreutenti
/bin/login
/bin/bash
/var/log/wtmp
34
Autorizzazione(Risposta al Problema 2/4)
I SO moderni forniscono astrazioni software per l'autorizzazione.Autorizzazione (access control): è la procedura con cui il SO controlla se un processo lanciato da un utente ha i privilegi di accesso sufficienti per accedere ad una risorsa hw/sw.
35
Le astrazioni principali in gioco(Nella procedura di autorizzazione)
Le astrazioni principali in gioco nella procedura di autorizzazione sono le seguenti.Gruppo di lavoro. Specifica un insieme di utenti con privilegi di accesso identici su una risorsa.Attributi di un file. Specificano i privilegi minimi di accesso alla risorsa che gli utenti devono fornire per poter usufruire della stessa.Credenziali di processo.Specificano le credenziali con cui il processo si presenta ad accedere alla risorsa.
36
L'astrazione software “gruppo di lavoro”(Rappresenta un insieme di utenti con privilegi identici su un file)
Il SO fornisce una astrazione software dal nome gruppo (group). Un gruppo rappresenta un insieme di utenti che condividono specifici privilegi di accesso verso file e directory.Il gruppo è una delle tante informazioni di un account utente.
Utente Gruppo
Utente
Utente…
… Filespeciale
/dev/sda
37
Informazioni associate al gruppo(Le più importanti)
Identificatore gruppo (group id): un numero intero non negativo univoco per un gruppo. È usato dal nucleo del SO per distinguere gruppi diversi.Nome del gruppo (groupname): stringa alfanumerica di lunghezza non nulla. È una rappresentazione ad alto livello dell'identificatore del gruppo (per l'utente umano).Password: una sequenza alfanumerica per la verifica delle credenziali.Lista utenti: un elenco dei nomi di login appartenenti al gruppo.
38
Una password per il gruppo?(Eh?)
Anche i gruppi hanno password?Ebbene, sì.È possibile aggiungersi ad un nuovo gruppo durante una sessione di lavoro.È possibile configurare il SO in modo tale da effettuare una autenticazione con password a tal scopo.Nella maggior parte dei casi, la password usata è quella nulla.
39
Il file /etc/group(Per l'identificazione dei gruppi)
Il file /etc/group contiene l'elenco dei gruppi di utenti noti al SO.
È una base di dati primordiale.Elenco di record (uno per riga).I campi di un record sono separati dal carattere :.
Questo file è:leggibile da tutti gli utenti.Modificabile solo dall'utente root.
40
I campi di /etc/group(Informazioni associate ai gruppi; man 5 group per tutti i dettagli)
Nome del gruppo.Password cifrata (nelle distribuzioni GNU/Linux attuali è conservata in un altro file, per motivi di sicurezza).Identificatore gruppo.Lista degli utenti appartenenti al gruppo.
41
Il file /etc/gshadow(Per la verifica delle credenziali del gruppo con password)
Il file /etc/gshadow contiene informazioni sulle password associate a ciascun gruppo.
È una base di dati primordiale.Elenco di record (uno per riga).I campi di un record sono separati dal carattere :.
Questo file è leggibile e modificabile dal solo utente root.
Notate la separazione in un file separato (e benprotetto) delle informazioni riguardanti le password.
→ Il principio del minimo privilegio è in azione!
42
I campi di /etc/gshadow(Informazioni associate al gruppo utente; man 5 gshadow per i dettagli)
Nome del gruppo.Password cifrata.Utenti amministratori del gruppo.Utenti membri del gruppo.
43
“Shadow”? “Ombra”? Eh?(Passwords get invisible, just like a shadow in the dark)
44
Accesso alle risorse tramite file(In UNIX, everything is a file)
In GNU/Linux, le risorse hw/sw sono accessibili mediante file.
“In UNIX, everything is a file”.Periferiche fisiche: accessibili tramite file speciali nella directory /dev.Dispositivi virtuali: accessibili tramite file speciali nella directory /dev.Archivi di dati: accessibili tramite file regolari nel file system.
Ken Thompson(1943-)Autore del SO UNIXCoautore del CInventore di UTF8
45
Gruppo primario, gruppi secondari(La differenza è spiegata nella slide successiva)
Un utente può far parte di uno o più gruppi. → L'utente ha diversi privilegi che può far valere
quando accede alle risorse.Ad ogni istante, uno dei gruppi di lavoro può essere battezzato come primario. Gli altri gruppi sono detti secondari.
Utente Gruppo
Gruppo
Gruppoprimario
/dev/sda
/dev/sr0
/home/andreoli/*
46
Gli attributi di un file(Utente creatore, gruppo di lavoro primario, permessi)
Ciascun file espone agli utenti tre attributi per il controllo degli accessi.Utente creatore: nome di login dell'utente che ha creato fisicamente il file.Gruppo dell'utente creatore: il nome del gruppo primario di lavoro dell'utente nell'istante di creazione del file.
→ Il gruppo primario di un utente imposta il gruppodell'utente creatore in un file.
Insieme di permessi: una rappresentazione sintetica dei privilegi di accesso al file.
47
Privilegi di accesso(Tre insiemi di utenti; tre azioni possibili su file)
I privilegi di accesso ad un file/directory sono specificati per tre insiemi di utenti.
L'utente creatore del file.Gli utenti appartenenti al gruppo dell'utente creatore.Tutti gli altri utenti.
I privilegi di accesso ad un file/directory specificano le operazioni possibili fra le seguenti.
Lettura.Scrittura.Esecuzione (file) o accesso (directory).
48
Rappresentazione dei permessi(Nove caratteri per i tre insiemi di utenti)
La rappresentazione dei permessi fornita dalle applicazioni di sistema agli utenti è una stringa di 9 caratteri.
I primi 3 caratteri indicano le azioni permesse perl'utente creatore del file.I secondi 3 caratteri indicano le azioni permesse pergli utenti del gruppo primario dell'utente creatore.Gli ultimi 3 caratteri indicano le azione permesse pertutti gli altri utenti.
---------Creatore Gruppo Altri
49
Rappresentazione dei permessi(I bit R, W, X specificano lettura, scrittura, esecuzione/accesso)
All'interno di ogni insieme:il primo carattere specifica se è abilitato l'accesso inlettura (r) oppure no (-).il primo carattere specifica se è abilitato l'accesso inscrittura (w) oppure no (-).il primo carattere specifica se è abilitata l'esecuzioneo l'accesso (x) oppure no (-).
---------Creatore Gruppo Altri
50
Rappresentazione dei permessi(Esempio di permessi per l'utente creatore)
Ad esempio, rwx per l'utente creatore indica:abilitazione accesso in lettura (r).abilitazione accesso in scrittura (w).abilitazione all'esecuzione/accesso (x).
→ L'utente creatore può fare tutto!
rwx------Creatore Gruppo Altri
51
Rappresentazione dei permessi(Esempio di permessi per l'utente creatore)
Ad esempio, r-x per il gruppo dell'utente creatore indica:
abilitazione accesso in lettura (r).disabilitazione accesso in scrittura (-).abilitazione all'esecuzione/accesso (x).
→ Gli utenti del gruppo creatore possono leggere ed eseguire/accedere, ma non scrivere!
rwxr-x---Creatore Gruppo Altri
52
Rappresentazione dei permessi(Esempio di permessi per l'utente creatore)
Ad esempio, r-x per tutti gli altri utenti indica:abilitazione accesso in lettura (r).disabilitazione accesso in scrittura (-).abilitazione all'esecuzione/accesso (x).
→ Tutti gli altri utenti del sistema possono leggere ed eseguire/accedere, ma non scrivere!
rwxr-xr-xCreatore Gruppo Altri
53
Credenziali di un processo(Con quali privilegi si presenta un processo quando chiede l'accesso?)
Finora sono state introdotte strutture dati di natura “statica” (non mutano da sole).
credenziali di un utente.gruppi di un utente.attributi di un file.
Anche i processi hanno credenziali, che sono di natura “dinamica” (il processo le acquisisce nel momento in cui parte):
identificatore utente.identificatore gruppo primario.identificatori gruppi secondari.
54
Identificatore utente di un processo(Quale utente ha lanciato il processo?)
L'identificatore utente (user identifier) di un processo è l'identificatore numerico dell'utente che ha lanciato un processo.Tale campo è presente nel descrittore di processo.
L'identificatore utente del processo viene confrontato con l'identificatore utente del creatore del file. Se corrispondono, i permessi accordati al processo sono quelli della prima terna.
55
Identificatore gruppo primario(Qual è il gruppo di lavoro primario dell'utente che ha lanciato il processo?)
L'identificatore del gruppo primario (primary group identifier) è l'identificatore numerico del gruppo primario di lavoro dell'utente nel momento che ha lanciato un processo.Tale campo è presente nel descrittore di processo.
L'identificatore di gruppo del processo viene confrontato con l'identificatore di gruppo del creatore del file. Se corrispondono, i permessi accordati al processo sono quelli della seconda terna.
56
Identificatore gruppi secondari(Quali sono i gruppi di lavoro secondari dell'utente che ha lanciato il processo?)
Gli identificatori dei gruppi secondari (secondary group identifiers) sono gli identificatori numerici dei gruppo secondari di lavoro dell'utente nel momento che ha lanciato un processo.Tale campo è presente nel descrittore di processo.
Gli identificatori di gruppo del processo sono confrontati uno per uno con l'identificatore di gruppo del creatore del file. Se uno di essi corrisponde, i permessi accordati al processo sono quelli della seconda terna.
57
Domanda(Che succede se gli identificatori non corrispondono?)
Che cosa succede se:l'identificatore utente di un processo non corrispondeall'identificatore utente del creatore del fileEl'identificatore gruppo di un processo noncorrisponde all'identificatore gruppo primario delcreatore del file
?
→ I permessi accordati al processo sono quelli della terza terna.
58
Domanda(Che succede se gli identificatori non corrispondono?)
Che cosa succede se:l'identificatore utente di un processo non corrispondeall'identificatore utente del creatore del fileEl'identificatore di gruppo di un processo noncorrisponde all'identificatore gruppo primario delcreatore del file
?
→ I permessi accordati al processo sono quelli della terza terna.
59
“Guardi, guardi, lo vede il dito?”(“Lo vede che stuzzica, e prematura anche?”)
60
Credenziali di accesso e percorso file(Un piccolo dettaglio da ricordare)
La procedura di controllo degli accessi va applicata ad ogni componente del percorso assoluto di un file.Se, ad esempio, un file ha percorso assoluto:
/dev/sdala procedura di controllo degli accessi va applicata ai seguenti percorsi:
//dev/dev/sda
61
Esempio di accesso ad una risorsa(L'utente andreoli vuole aprire il file /dev/sda e leggere i blocchi del disco)
Supponiate che l'utente andreoli voglia leggere il file speciale di nome /dev/sda, per esempio lanciando il comando seguente:
less -Mr -f /dev/sda
Il file speciale /dev/sda rappresenta il primo disco rigido. Leggendo /dev/sda si leggono i blocchi del disco abasso livello.Come funziona l'algoritmo di accesso alla risorsa?
62
Esempio di accesso ad una risorsa(I preliminari, parte I)
Il file / ha i seguenti attributi:rwxr-xr-x root root
Il file /dev ha i seguenti attributi:rwxr-xr-x root root
Il file /dev/sda ha i seguenti attributi:rw-rw---- root disk
Permessi Utente creatore Gruppo utente
Permessi Utente creatore Gruppo utente
Permessi Utente creatore Gruppo utente
63
Esempio di accesso ad una risorsa(I preliminari, parte II)
I gruppi dell'utente andreoli sono i seguenti:andreoli cdrom floppy audio dip video plugdev netdev scanner bluetooth vboxsf
Gli identificatori utente/gruppo del processo less sono andreoli/andreoli.
64
Esempio di accesso ad una risorsa(Apertura di /dev/sda)
Modosupervisore
Modoutente
Il processo less apre il file /dev/sda con la chiamata di sistema open(). Parte la procedura di autorizzazione.
Hardware
UID processo: andreoliGID processo: andreoliGID secondari: cdrom …
GestoreFile System/dev/sda
UID creatore: rootGID creatore: diskPermessi: rw-rw----
less -Mr /dev/sda
PCB
open()
65
Controllo accessi /(Identificatore utente di processo =?= Identificatore utente creatore del file)
Modosupervisore
Modoutente
L'identificatore utente del processo less (andreoli) è uguale all'identificatore utente del creatore del file (root)? NO Bisogna controllare il gruppo primario.→
Hardware
GestoreFile System
/
UID creatore: rootGID creatore: rootPermessi: rwxr-xr-x
less -Mr /dev/sda
PCB
open()
UID processo: andreoliGID processo: andreoliGID secondari: cdrom …
66
Controllo accessi /(Identificatore gruppo di processo =?= Identificatore gruppo primario creatore)
Modosupervisore
Modoutente
L'identificatore di gruppo del processo less (andreoli) è uguale all'identificatore del gruppo primario del creatore del file (root)? NO Bisogna controllare i gruppi secondari.→
Hardware
GestoreFile System
/
UID creatore: rootGID creatore: rootPermessi: rwxr-xr-x
less -Mr /dev/sda
PCB
open()
UID processo: andreoliGID processo: andreoliGID secondari: cdrom …
67
Controllo accessi /(Identificatore gruppo secondario =?= Identificatore gruppo primario creatore)
Modosupervisore
Modoutente
Tra gli identificatori dei gruppi secondari del processo less (cdrom floppy audio dip video plugdev netdev scanner bluetooth vboxsf) ce ne è uno uguale all'identificatore del gruppo primario del creatore del file (root)? NO Si applica l'ultima terna.→
Hardware
GestoreFile System
/
UID creatore: rootGID creatore: rootPermessi: rwxr-xr-x
less -Mr /dev/sda
PCB
open()
UID processo: andreoliGID processo: andreoliGID secondari: cdrom …
68
Controllo accessi /(I permessi accordati a less sono quelli della terza terna: r-x)
Modosupervisore
Modoutente
I privilegi ammissibili per less sulla directory / sono lettura (r) ed accesso (x).less vuole aprire / (r) ed entrarci (x), per aprire /dev.Gli viene accordato il permesso.
Hardware
GestoreFile System
/
UID creatore: rootGID creatore: rootPermessi: rwxr-xr-x
less -Mr /dev/sda
PCB
open()
UID processo: andreoliGID processo: andreoliGID secondari: cdrom …
69
Controllo accessi /dev(Identificatore utente di processo =?= Identificatore utente creatore del file)
Modosupervisore
Modoutente
L'identificatore utente del processo less (andreoli) è uguale all'identificatore utente del creatore del file (root)? NO Bisogna controllare il gruppo primario.→
Hardware
GestoreFile System
/dev
UID creatore: rootGID creatore: rootPermessi: rwxr-xr-x
less -Mr /dev/sda
PCB
open()
UID processo: andreoliGID processo: andreoliGID secondari: cdrom …
70
Controllo accessi /dev(Identificatore gruppo di processo =?= Identificatore gruppo primario creatore)
Modosupervisore
Modoutente
L'identificatore di gruppo del processo less (andreoli) è uguale all'identificatore del gruppo primario del creatore del file (root)? NO Bisogna controllare i gruppi secondari.→
Hardware
GestoreFile System
/dev
UID creatore: rootGID creatore: rootPermessi: rwxr-xr-x
less -Mr /dev/sda
PCB
open()
UID processo: andreoliGID processo: andreoliGID secondari: cdrom …
71
Controllo accessi /dev(Identificatore gruppo secondario =?= Identificatore gruppo primario creatore)
Modosupervisore
Modoutente
Tra gli identificatori dei gruppi secondari del processo less (cdrom floppy audio dip video plugdev netdev scanner bluetooth vboxsf) ce ne è uno uguale all'identificatore del gruppo primario del creatore del file (root)? NO Si applica l'ultima terna.→
Hardware
GestoreFile System
/dev
UID creatore: rootGID creatore: rootPermessi: rwxr-xr-x
less -Mr /dev/sda
PCB
open()
UID processo: andreoliGID processo: andreoliGID secondari: cdrom …
72
Controllo accessi /dev(I permessi accordati a less sono quelli della terza terna: r-x)
Modosupervisore
Modoutente
I privilegi ammissibili per less sulla directory / sono lettura (r) ed accesso (x).less vuole aprire / (r) ed entrarci (x), per aprire /dev/sda.Gli viene accordato il permesso.
Hardware
GestoreFile System
/dev
UID creatore: rootGID creatore: disPermessi: rwxr-xr-x
less -Mr /dev/sda
PCB
open()
UID processo: andreoliGID processo: andreoliGID secondari: cdrom …
73
Controllo accessi /dev/sda(Identificatore utente di processo =?= Identificatore utente creatore del file)
Modosupervisore
Modoutente
L'identificatore utente del processo less (andreoli) è uguale all'identificatore utente del creatore del file (root)? NO Bisogna controllare il gruppo primario.→
Hardware
GestoreFile System/dev/sda
UID creatore: rootGID creatore: diskPermessi: rw-rw----
less -Mr /dev/sda
PCB
open()
UID processo: andreoliGID processo: andreoliGID secondari: cdrom …
74
Controllo accessi /dev/sda(Identificatore gruppo di processo =?= Identificatore gruppo primario creatore)
Modosupervisore
Modoutente
L'identificatore di gruppo del processo less (andreoli) è uguale all'identificatore del gruppo primario del creatore del file (disk)? NO Bisogna controllare i gruppi secondari.→
Hardware
GestoreFile System/dev/sda
UID creatore: rootGID creatore: diskPermessi: rw-rw----
less -Mr /dev/sda
PCB
open()
UID processo: andreoliGID processo: andreoliGID secondari: cdrom …
75
Controllo accessi /dev/sda(Identificatore gruppo secondario =?= Identificatore gruppo primario creatore)
Modosupervisore
Modoutente
Tra gli identificatori dei gruppi secondari del processo less (cdrom floppy audio dip video plugdev netdev scanner bluetooth vboxsf) ce ne è uno uguale all'identificatore del gruppo primario del creatore del file (disk)? NO Si applica l'ultima terna.→
Hardware
GestoreFile System/dev/sda
UID creatore: rootGID creatore: diskPermessi: rw-rw----
less -Mr /dev/sda
PCB
open()
UID processo: andreoliGID processo: andreoliGID secondari: cdrom …
76
Controllo accessi /dev/sda(I permessi accordati a less sono quelli della terza terna: ---)
Modosupervisore
Modoutente
I privilegi ammissibili per less sulla directory / sono nulli (---).less vuole aprire in lettura /dev/sda (r).Gli viene negato il permesso.
Hardware
GestoreFile System
/dev
UID creatore: rootGID creatore: diskPermessi: rw-rw----
less -Mr /dev/sda
PCB
open()
UID processo: andreoliGID processo: andreoliGID secondari: cdrom …
X
77
BIG FAT WARNING(You have been warned)
Lo schema ora proposto è una semplificazione della realtà.Sono stati omessi dettagli molto importanti.
L'obiettivo dello schema attuale è quello di introdurvi dolcemente (si spera) i concetti principali dello schema dei permessi.
78
Domanda da 1M USD(Rivolta a voi, cari studenti)
Quali credenziali avrebbe dovuto presentare l'utente andreoli per poter accedere al file speciale /dev/sda?
79
Un limite dello schema dei permessi(La suddivisione degli utenti in classi di privilegio è grossolana)
Un limite dello schema standard dei permessi è la sua grossolanità nell'assegnazione dei privilegi. Un permesso può essere assegnato a tre insiemi di utenti:
il creatore;un solo gruppo di lavoro specifico;i rimanenti utenti.
Il modello concettuale delle categorie di utenti è separato in sole tre classi.
80
Un esempio(Scomodo da realizzare coi permessi standard; provateci)
Un'applicazione gestisce documenti per una scuola superiore.
Alcuni utenti pubblicano contenuti (w), altri utentili leggono (r), altri ancora possono leggere escrivere (rw).Gli utenti sono divisi in gruppi (classe di studenti,docenti, dirigente, amministratore, lettori, scrittori,lettori e scrittori).
Provate ad implementare questo schema di autorizzazione con i permessi…
81
Liste di controllo degli accessi(Mitigano la scomodità appena vista)
Per risolvere il problema, Il SO fornisce una autorizzazione basata su liste di controllo degli accessi (Access Control List, ACL).Ogni file/directory è munito di una tabella che contiene l'elenco di singoli utenti e gruppi autorizzati ad accederlo (con i relativi permessi).
→ Immaginate un file che espone permessi per utenti e gruppi diversi.
82
Un esempio di ACL(Specifica permessi per singoli utenti e gruppi)
Classe di utenti UID/GID Permessi
Utente creatore - rwx
Utente 1007 r--
Utente 1010 rwx
Gruppo primario - rwx
Gruppo 102 r--
Gruppo 103 -w-
Gruppo 109 rw-
Altri - r--
Corrisponde alpermesso per
l'utente creatore
Corrisponde alpermesso per
il gruppo primario
Corrisponde alpermesso pergli altri utenti
83
Controllo degli accessi con le ACL(Concettualmente analogo al controllo dei permessi)
Il controllo degli accessi con le ACL è identico concettualmente al controllo degli accessi tramite permessi.Quando un processo apre un file, per ogni componente del suo percorso assoluto si verifica se le credenziali di processo (identificatori utente, gruppo, gruppi secondari) siano elencate nella ACL corrispondente, nell'ordine seguente:
utente creatore, utente, gruppo primario,gruppo, altri.
Si applicano i permessi della prima riga che corrisponde alle credenziali di processo.
84
Esempio di accesso ad una risorsa(L'utente studente vuole aprire il file /tmp/doc.txt)
Supponiate che l'utente marco voglia leggere il documento contenuto nel file di nome /tmp/doc.txt, per esempio lanciando il comando seguente:
less -Mr /tmp/doc.txt
Come funziona l'algoritmo di accesso alla risorsa tramite le ACL?
85
Esempio di accesso ad una risorsa(I preliminari, parte I)
ACL della directory /Classe di utenti UID/GID Permessi
Utente creatore - rwx
Gruppo primario - r-x
Altri - r-x
L'ACL mostra credenzialicoincidenti con quelle delloschema standard dei permessi.
86
Esempio di accesso ad una risorsa(I preliminari, parte II)
ACL della directory /tmpClasse di utenti UID/GID Permessi
Utente creatore - rwx
Gruppo primario - rwx
Altri - rwx
Nella directory /tmptutti possono faretutto.
87
Esempio di accesso ad una risorsa(I preliminari, parte III)
ACL del file /tmp/doc.txtClasse di utenti UID/GID Permessi
Utente creatore(admin)
-rwx
Utente 1005(carlo) rwx
Gruppo primario(staff)
-rwx
Gruppo 1010(studenti) r--
Altri - ---
L'utente carlo èun amministratore.Lui può fare tuttocon il file.
Gli utenti del gruppostudenti nonpossono modificareil documento.
88
Esempio di accesso ad una risorsa(I preliminari, parte IV)
I gruppi dell'utente marco sono i seguenti:users cdrom floppy audio dip video plugdev netdev scanner bluetooth studenti
Gli identificatori utente/gruppo del processo less sono marco/users.
89
Esempio di accesso ad una risorsa(Apertura di /tmp/doc.txt)
Modosupervisore
Modoutente
Il processo less apre il file /tmp/doc.txt con la chiamata di sistema open(). Parte la procedura di autorizzazione.
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/tmp/doc.txt
less -Mr /tmp/doc.txt
PCB
open()
ACL /tmp/doc.txt
90
Controllo accessi /(Identificatore utente di processo =?= Identificatore utente creatore del file)
Modosupervisore
Modoutente
L'identificatore utente del processo less (marco) è uguale all'identificatore utente del creatore del file (admin)? NO Bisogna →controllare le restrizioni in ACL su altri utenti.
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/
less -Mr /tmp/doc.txt
PCBACL /Classe UID/GID PermessiCreatore - rwx
open()
91
Controllo accessi /(Esistono restrizioni per altri utenti nella ACL?)
Modosupervisore
Modoutente
Esistono restrizioni specifiche per altri utenti nella ACL della directory /? NO si passa al gruppo primario. →
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/
less -Mr /tmp/doc.txt
PCBACL /Classe UID/GID Permessi
open()
92
Controllo accessi /(Identificatore gruppo di processo =?= Identificatore gruppo primario creatore)
Modosupervisore
Modoutente
L'identificatore di gruppo del processo less (users) è uguale all'identificatore del gruppo primario del creatore del file (root)? NO →Bisogna controllare i gruppi secondari.
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/
less -Mr /tmp/doc.txt
PCBACL /Classe UID/GID PermessiGr. pr. - r-x
open()
93
Controllo accessi /(Identificatore gruppo secondario =?= Identificatore gruppo primario creatore)
Modosupervisore
Modoutente
Tra gli identificatori dei gruppi secondari del processo less (cdrom floppy audio dip video plugdev netdev scanner bluetooth studenti) ce ne è uno uguale all'identificatore del gruppo primario del creatore del file (root)? NO Bisogna controllare le →restrizioni in ACL su altri gruppi.
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/
less -Mr /tmp/doc.txt
PCBACL /Classe UID/GID PermessiGr. pr. - r-x
open()
94
Controllo accessi /(Esistono restrizioni per altri gruppi nella ACL?)
Modosupervisore
Modoutente
Esistono restrizioni specifiche per altri gruppi nella ACL della directory /? NO Si applicano i permessi della riga “Altri” nella ACL.→
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/
less -Mr /tmp/doc.txt
PCBACL /Classe UID/GID Permessi
open()
95
Controllo accessi /(I permessi accordati a less sono quelli della terna di “Altri”: r-x)
Modosupervisore
Modoutente
I privilegi ammissibili per less sulla directory / sono lettura (r) ed accesso (x).less vuole aprire / (r) ed entrarci (x), per aprire /tmp.Gli viene accordato il permesso.
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/
less -Mr /tmp/doc.txt
PCBACL /Classe UID/GID PermessiAltri - r-x
open()
96
Controllo accessi /tmp(Identificatore utente di processo =?= Identificatore utente creatore del file)
Modosupervisore
Modoutente
L'identificatore utente del processo less (marco) è uguale all'identificatore utente del creatore del file (admin)? NO Bisogna →controllare le restrizioni in ACL su altri utenti.
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/tmp
less -Mr /tmp/doc.txt
PCBACL /tmpClasse UID/GID PermessiCreatore - rwx
open()
97
Controllo accessi /tmp(Esistono restrizioni per altri utenti nella ACL?)
Modosupervisore
Modoutente
Esistono restrizioni specifiche per altri utenti nella ACL della directory /tmp? NO si passa al gruppo primario. →
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/tmp
less -Mr /tmp/doc.txt
PCBACL /tmpClasse UID/GID Permessi
open()
98
Controllo accessi /tmp(Identificatore gruppo di processo =?= Identificatore gruppo primario creatore)
Modosupervisore
Modoutente
L'identificatore di gruppo del processo less (users) è uguale all'identificatore del gruppo primario del creatore del file (staff)? NO →Bisogna controllare i gruppi secondari.
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/tmp
less -Mr /tmp/doc.txt
PCBACL /tmpClasse UID/GID PermessiGr. pr. - rwx
open()
99
Controllo accessi /tmp(Identificatore gruppo secondario =?= Identificatore gruppo primario creatore)
Modosupervisore
Modoutente
Tra gli identificatori dei gruppi secondari del processo less (cdrom floppy audio dip video plugdev netdev scanner bluetooth studenti) ce ne è uno uguale all'identificatore del gruppo primario del creatore del file (staff)? NO Bisogna controllare le →restrizioni in ACL su altri gruppi.
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/tmp
less -Mr /tmp/doc.txt
PCBACL /tmpClasse UID/GID PermessiGr. pr. - rwx
open()
100
Controllo accessi /tmp(Esistono restrizioni per altri gruppi nella ACL?)
Modosupervisore
Modoutente
Esistono restrizioni specifiche per altri gruppi nella ACL della directory /tmp? NO Si applicano i permessi della riga “Altri” nella ACL.→
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/tmp
less -Mr /tmp/doc.txt
PCBACL /tmpClasse UID/GID Permessi
open()
101
Controllo accessi /tmp(I permessi accordati a less sono quelli della terna di “Altri”: rwx)
Modosupervisore
Modoutente
I privilegi ammissibili per less sulla directory /tmp sono lettura (r), scrittura (w) ed accesso (x).less vuole aprire /tmp (r) ed entrarci (x), per aprire /tmp/doc.txt.Gli viene accordato il permesso.
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/tmp
less -Mr /tmp/doc.txt
PCBACL /tmpClasse UID/GID PermessiAltri - rwx
open()
102
Controllo accessi /tmp/doc.txt(Identificatore utente di processo =?= Identificatore utente creatore del file)
Modosupervisore
Modoutente
L'identificatore utente del processo less (marco) è uguale all'identificatore utente del creatore del file (admin)? NO Bisogna →controllare le restrizioni in ACL su altri utenti.
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/tmp/doc.txt
less -Mr /tmp/doc.txt
PCBACL /tmp/doc.txtClasse UID/GID PermessiCreatore - rwx
open()
103
Controllo accessi /tmp/doc.txt(Esistono restrizioni per altri utenti nella ACL?)
Modosupervisore
Modoutente
Esiste una restrizione specifica sull'utente carlo nella ACL del file /tmp/doc.txt.L'identificatore utente del processo less (marco) è uguale all'identificatore utente nell'ACL (carlo)? NO si passa al gruppo →primario.
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/tmp/doc.txt
less -Mr /tmp/doc.txt
PCBACL /tmp/doc.txtClasse UID/GID Permessi
open()
carlo 1005 rwx
104
Controllo accessi /tmp/doc.txt(Identificatore gruppo di processo =?= Identificatore gruppo primario creatore)
Modosupervisore
Modoutente
L'identificatore di gruppo del processo less (users) è uguale all'identificatore del gruppo primario del creatore del file (staff)? NO →Bisogna controllare i gruppi secondari.
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/tmp/doc.txt
less -Mr /tmp/doc.txt
PCBACL /tmp/doc.txtClasse UID/GID PermessiGr. pr. - rwx
open()
105
Controllo accessi /tmp/doc.txt(Identificatore gruppo secondario =?= Identificatore gruppo primario creatore)
Modosupervisore
Modoutente
Tra gli identificatori dei gruppi secondari del processo less (cdrom floppy audio dip video plugdev netdev scanner bluetooth studenti) ce ne è uno uguale all'identificatore del gruppo primario del creatore del file (staff)? NO Bisogna controllare le →restrizioni in ACL su altri gruppi.
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/tmp/doc.txt
less -Mr /tmp/doc.txt
PCBACL /tmp/doc.txtClasse UID/GID PermessiGr. pr. - rwx
open()
106
Controllo accessi /tmp/doc.txt(Esistono restrizioni per altri gruppi nella ACL?)
Modosupervisore
Modoutente
Esiste una restrizione specifica sul gruppo studenti nella ACL del file /tmp/doc.txt.L'identificatore di gruppo del processo less (users) è uguale all'identificatore di gruppo nell'ACL (studenti)? NO Bisogna →controllare i gruppi secondari.
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/tmp/doc.txt
less -Mr /tmp/doc.txt
PCBACL /tmp/doc.txtClasse UID/GID Permessi
open()
1010 r--Gruppo
107
Controllo accessi /tmp/doc.txt(Identificatore gruppo secondario =?= Identificatore gruppo IN acl)
Modosupervisore
Modoutente
Tra gli identificatori dei gruppi secondari del processo less (cdrom floppy audio dip video plugdev netdev scanner bluetooth studenti) ce ne è uno uguale all'identificatore del gruppo specificato nella ACL (studenti)? SÌ Si assegna il permesso → di lettura (r).
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/tmp/doc.txt
less -Mr /tmp/doc.txt
PCBACL /tmp/doc.txtClasse UID/GID Permessi
open()
1010 r--Gruppo
108
Controllo accessi /tmp/doc.txt(I permessi accordati a less sono quelli della riga dell'ACL: r--)
I privilegi ammissibili per less sulla directory /tmp sono di sola lettura (r).less vuole aprire /tmp/doc.txt (r) per leggerlo.Gli viene accordato il permesso.
Modosupervisore
Modoutente
Hardware
UID processo: marcoGID processo: usersGID secondari: cdrom …
GestoreFile System
/tmp
less -Mr /tmp/doc.txt
PCBACL /tmp/doc.txtClasse UID/GID Permessi
open()
1010 r--Gruppo
109
Three… Two… One(Ignition!)
110
Una domanda (im)pertinente(Di quelle che fanno guadagnare punti bonus)
Sono stati discussi due sistemi di autorizzazione:Permessi UNIX.Access Control List.
Supponiamo siano entrambi attivi.
Sono usati tutti e due i sistemi?Se sì, in che ordine?
Oppure ne viene usato solo uno?Se sì, quale?
111
La risposta(Dovrebbe essere sufficientemente chiara)
Sono usati entrambi i sistemi di autorizzazione.
Prima i permessi.Poi le ACL.
112
Cambio di privilegio(Risposta al Problema 3/4)
I SO moderni forniscono astrazioni software per il cambio di privilegio.Casi tipici:
un utente lancia un processo (spesso, bash) con iprivilegi di un altro utente (spesso, root).un utente lancia un processo che assumeautomaticamente privilegi superiori.
113
Avvio processo con privilegi diversi(Banale dal punto di vista teorico)
L'avvio di un processo con privilegi diversi è banale dal punto di vista della teoria.Il SO mette a disposizione programmi di sistema che permettono eseguire un comando cambiando l'utente o il gruppo di lavoro primario.
Posto che abbiate le credenziali per farlo!
114
Elevazione dei privilegi di un comando(Molto più interessante)
Lo scenario di gran lunga più interessante è il secondo: un utente lancia un comando, che assume automaticamente privilegi superiori.
Il tutto, in maniera controllata dal SO!
Come fare?
115
L'idea di fondo(Prevedere due personalità di esecuzione in modo utente)
L'idea di fondo è quella di prevedere, per un processo in esecuzione in modo utente, due distinte “personalità”.
Una personalità normale, corrispondente ad unprocesso che può fare cose normali (no superpoteri).Una personalità “eroe”, corrispondente ad un processoche può fare tutte (sì superpoteri).
E se si usassero due coppie distinte di UID/GID per rappresentare tali personalità?
116
Utente e gruppo effettivi(La personalità ”eroe”)
Il SO fornisce due ulteriori astrazioni software dal nome identificatore di utente effettivo (effective user id) e identificatore di gruppo effettivo (effective group id).Queste due astrazioni sono credenziali di processo, associate al processo in esecuzione.
Non ai file.Non all'account.
I relativi campi delle strutture dati di controllo sono memorizzati nel descrittore di processo.
117
Utenti e gruppo “reali”(La personalità “normale”)
Vi ricordate le credenziali di processo introdotte pochi minuti fa?
Identificatore utente.Identificatore gruppo.
Nella realtà, queste due credenziali prendono il nome di:
Identificatore reale di utente (real user id).Identificatore reale di gruppo (real group id).
Il motivo? Per distinguerle dagli identificatori di utente e gruppo effettivi.
118
Orrore!(Danny is scared by all these IDs…)
119
Domande(Indotte dalla confusione)
Quando e come un processo passa dalla personalità “normale” alla personalità “eroe”?
Il controllo degli accessi ai file non avviene esibendo gli identificatori reali? Che senso ha introdurre quelli effettivi?
120
Una tragica confessione del docente(Che sta cercando di indorare la pillola amarissima)
Ricordate le procedure di controllo degli accessi viste poco fa?
Permessi.Liste di controllo degli accessi.
Le procedure sono state raccontate in maniera semplificata, per non turbarvi troppo.Sono state omesse due informazioni importanti. È giunta l'ora di dirvele.
121
“Com'è umano Lei…”(Ugo è contentissimo di scoprire che quello che ha studiato non è tutto vero…)
122
UID reale = 0 Accesso garantito→(Subito, senza controllo)
Se il processo si presenta con un identificatore di utente reale uguale a 0
ossia, se è stato lanciato dall'utente rootallora il nucleo non effettua alcun controllo!
Niente controllo di permessi!Niente controllo delle ACL!
123
L'utente root è accontentato sempre(Controllo accessi /dev/sda: non c'è se è root a lanciare il processo)
Modosupervisore
Modoutente
Hardware
GestoreFile System/dev/sda
less -Mr /dev/sda
PCB
open()
Utente root
124
UID reale ≠ 0 Controllo→(Le credenziali del processo usate nel controllo sono quelle effettive)
Se il processo si presenta con un identificatore di utente reale diverso da 0
ossia, se è stato lanciato da un utente diverso daroot
allora il nucleo effettua il controllo di autorizzazione.
Prima sui permessi.Poi sulle ACL.
Le credenziali di processo usate per effettuare il controllo non sono quelle reali.SONO QUELLE EFFETTIVE!
125
L'utente normale subisce i controlli(Controllo accessi /dev/sda)
Modosupervisore
Modoutente
Hardware
GestoreFile System/dev/sda
UID creatore: rootGID creatore: diskPermessi: rw-rw----
less -Mr /dev/sda
PCB
open()
UID processo: andreoliGID processo: andreoliGID secondari: cdrom …
Utentenon root
126
Le credenziali di processo sono diverse(Sono quelle effettive, non quelle reali)
Modosupervisore
Modoutente
Hardware
GestoreFile System/dev/sda
UID creatore: rootGID creatore: diskPermessi: rw-rw----
less -Mr /dev/sda
PCB
open()
UID processo EFFETTIVO: andreoliGID processo EFFETTIVO: andreoliGID secondari EFFETTIVI: cdrom …
Utentenon root
127
La differenza tra “reale” ed ”effettivo”(In condizioni normali)
Quando un processo è creato, di solito:l'identificatore utente effettivo è posto ugualeall'identificatore utente reale.l'identificatore di gruppo effettivo è posto ugualeall'identificatore di gruppo reale.
Ripeto: in condizioni normali…
128
La differenza tra “reale” ed ”effettivo”(In condizioni non normali)
In una situazione ben specifica, invece:l'identificatore utente effettivo è posto ugualeall'identificatore utente del creatore del file.l'identificatore di gruppo effettivo è posto ugualeall'identificatore di gruppo del creatore del file.
129
La conseguenza(Guardate un po' i comandi nella directory /usr/bin…)
Se vi studiate gli attributi dei file eseguibili nella directory /usr/bin (in altre parole, i comandi):
ls -l /usr/binscoprirete che utente creatore del file e gruppo del file sono root e root.
→ In condizioni non normali, l'utente potrebbe eseguire questi comandi con privilegi di root.
Interessante…
130
Il bit “setuid” dei permessi (Il bit che abilita la condizione non normale)
Le azioni disponibili su un file non sono solo:r: letturaw: scritturax: esecuzione
Ve ne è un'altra, sostituta di x, applicabile alla prima terna nel caso di file.
s: esecuzione con i privilegi dell'utente creatore delfile.
Il bit s prende il nome di set user ID (setuid).
131
Il bit “setuid” all'opera (Analisi dei permessi del comando /usr/bin/passwd)
Osservate gli attributi del file eseguibile /usr/bin/passwd:
ls -l /usr/bin/passwdUtente creatore: root.Gruppo primario del file: root.Permessi: rwsr-xr-x.
Notate la s applicataalla prima terna di permessi
132
Il bit “setuid” all'opera (Esecuzione del comando passwd)
Quando l'utente lancia il comando passwd, accade questo:
viene creato un nuovo processo.utente e gruppo reali rimangono quelli dell'utentedi partenza (ad es., andreoli).utente e gruppo effettivi diventano quelli dell'utentecreatore del file (root e root).viene caricata in memoria l'immagine dell'eseguibile/usr/bin/passwd.
→ passwd esegue come se fosse lanciato dall'utente root.
133
Pro e contro del bit setuid(Una comodità che può costare molto cara)
Pro: il processo esegue con le credenziali di root e può eseguire operazioni delicate.
Senza che l'utente debba tramutarsi prima in unamministratore.
→ Comodità d'uso.Contro: il processo esegue con i massimi privilegi possibili.
Se il programma è scritto male, è possibile farglicompiere azioni spregevoli, non ultima l'esecuzione dicodice arbitrario!
134
Il bit “setgid” dei permessi (Analogo al bit setuid, per i gruppi)
Le azioni disponibili su un file non sono solo:r: letturaw: scritturax: esecuzione
Ve ne è un'altra, sostituta di x, applicabile alla seconda terna nel caso di file.
s: esecuzione con i privilegi gruppo delfile.
Il bit s prende il nome di set group ID (setgid).
Valgono tutte le considerazioni svolte per il bit setuid.
135
Il problema dell'elevazione dei privilegi(O non si può fare nulla, o si può fare tutto; non c'è una via di mezzo)
Il vero problema dello schema di permessi visto finora è il seguente.Un processo non ha alcun privilegio particolare oppure, quando diventa amministratore, acquisisce tutti i privilegi possibili per l'intera esecuzione!
Non esiste una via di mezzo.
136
Una domanda (im)pertinente(Di quelle che fanno guadagnare punti bonus)
È oramai chiaro che il modello di permessi visto finora è di tipo “o tutto o niente”.Ciò non va bene per diversi motivi.
Il processo mantiene i pieni privilegi anche dopo aversvolto le operazioni critiche.Il processo ottiene i pieni privilegi laddove neservivano di meno.
In entrambi i casi si viola il principio del minimo privilegio!Si può raffinare lo schema dei permessi in tal senso?
137
La risposta(Dovrebbe essere sufficientemente chiara)
SÌ!*Si possono addirittura risolvere entrambi i problemi proposti!
*
138
Identificatore setuid/setgid salvato(Risolve il problema del mantenimento dei privilegi per l'intera esecuzione)
L'identificatore setuid salvato (saved setuid identifier) di un processo è una copia del valore dell'identificatore di utente effettivo all'inizio dell'esecuzione.Tale campo è presente nel descrittore di processo.
L'identificatore setgid salvato (saved setgid identifier) di un processo è una copia del valore dell'identificatore di gruppo effettivo all'inizio dell'esecuzione.Tale campo è presente nel descrittore di processo.
139
Rilascio temporaneo dei privilegi(Il processo riduce la sua “potenza” da utente effettivo a utente reale)
Per un processo setuid/setgid in esecuzione, il SO permette (tramite una chiamata di sistema opportuna) il rilascio temporaneo dei privilegi effettivi (privilege drop).
Il processo invoca la chiamata di sistema.Il nucleo scrive negli identificatori effettivi i valoridegli identificatori reali.
Poiché gli utenti reali sono meno privilegiati degli utenti effettivi, si ottiene un rilascio di privilegio.
140
Motivazione(Del rilascio temporaneo)
Perché un processo dovrebbe effettuare il rilascio temporaneo dei privilegi?La risposta è semplice e diretta.Le porzioni critiche del programma sono eseguite con i privilegi più elevati possibile (gli effettivi).
Porzione critica aggiornamento file password,→accesso ad una periferica, …
Le porzioni non critiche del programma sono eseguite con i privilegi originari (i reali).
Porzione non critica Stampa menu help, …→
141
Recupero dei pieni privilegi(Il processo ripristina la sua “potenza” da utente reale a utente effettivo)
Per un processo setuid/setgid in esecuzione, il SO permette (tramite una chiamata di sistema opportuna) il ripristino dei privilegi effettivi (privilege restore).
Il processo invoca la chiamata di sistema.Il nucleo scrive negli identificatori effettivi i valoridegli identificatori salvati.
Ecco a cosa servivano gli identificatori salvati!
142
Capability(Risolvono il problema dei troppi privilegi associati all'account root)
Il SO GNU/Linux fornisce il meccanismo delle capability. In sostanza, i pieni privilegi dell'utente root sono suddivisi in tanti singoli sotto-privilegi acquisibili separatamente dai processi.
→ Non è più necessario acquisire i pieni poteri. Si acquisiscono i poteri strettamente necessari per risolvere uno specifico problema.
143
Quali capability esistono?(man 7 capabilities ve lo dice)
Di capability ne esistono tante.man 7 capabilities per tutti i sordidi dettagli.
Esempi di capability:forgiare e spedire pacchetti di rete arbitrari.impostare interfacce di rete.montare e smontare dischi.riavviare il sistema.…
144
Capability di processo(Permesse, effettive, ereditabili)
Capability permesse (permitted capability).Queste sono le capability cui è concesso l'uso al processo (dal nucleo) durante la sua esecuzione.Alcune di queste capability possono essere superflue; il processo può abbandonarle.
Attenzione! Una volta abbandonate, il processo nonpuò più riprenderle!
145
Capability di processo(Permesse, effettive, ereditabili)
Capability effettive (effective capability).Queste sono le capability non abbandonate, con cui il processo può operare durante l'esecuzione.Il processo può rilasciare temporaneamente i propri privilegi disabilitando le opportune capability permesse.Il processo può recuperare i pieni privilegi attivando nuovamente le opportune capability permesse.
146
Capability di processo(Permesse, effettive, ereditabili)
Capability ereditabili (inheritable capability).Queste sono le capability trasferibili all'insieme delle capability permesse se il processo carica in memoria una nuova immagine con la chiamata di sistema opportuna.
147
Capability di file(La naturale estensione del bit setuid)
Un file può contenere (oppure no) informazioni riguardanti le capability.Se le contiene, queste informazioni sono usate dal nucleo per stabilire gli insiemi di capability possedute da un processo che esegue quel file.
Un file espone tre insiemi di capability.
148
Capability di file(Permesse, effettive, ereditabili)
Capability permesse (permitted capability).Queste capability sono inserite nell'insieme delle capability permesse al processo all'inizio della sua esecuzione.
149
Capability di file(Permesse, effettive, ereditabili)
Capability effettive (effective capability).Questo è un singolo bit.Se è abilitato, durante il lancio del processo le capability permesse sono tutte abilitate di default.
150
Capability di file(Permesse, effettive, ereditabili)
Capability ereditabili (inheritable capability).Queste capability sono messe in AND bit a bit con le capability ereditabili del processo.Il risultato è l'insieme di capability che il processo farà ereditare se deciderà di lanciare un nuovo programma.Logicamente, tale insieme conterrà l'intersezione delle capability:
offerte dal processo;presenti nel file.
151
Elevazione privilegi con le capability(Che capability ottiene un processo quando va in esecuzione?)
Il nucleo stabilisce le capability a disposizione di un processo durante il suo avvio, nel momento in cui è caricata in memoria l'immagine di un file eseguibile.
152
Alcune definizioni(Necessarie per illustrare le operazioni del nucleo)
Siano:P → un insieme di capability del processo prima del
caricamento dell'immagineP' → un insieme di capability del processo dopo il
caricamento dell'immagineF → un insieme di capability del fileM → una maschera di capability (inizialmente
contenente tutte le capability) da cui il processopuò depennare quelle che non vuole far ereditareai suoi figli
153
Calcolo dell'insieme P'(permitted)(Le capability permesse del processo, dopo l'esecuzione dell'immagine)
P'(permitted) = (P(inheritable) & F(inheritable))|(F(permitted) & cap_bset)
Capability permesse delprocesso dopo l'esecuzionedell'immagine
Capability ereditabilidel processo primadell'esecuzionedell'immagine
Capabilityereditabilidel file
ANDbit a bit Capability
richiestedal processoe presentinel fileOR
bit a bit
Capabilitypermessedel file
ANDbit a bit
Mascheradi capability(inizialmentecompleta)
Capabilitypermessedel file enon filtratedallamaschera
154
Calcolo dell'insieme P'(effective)(Le capability effettive del processo, dopo l'esecuzione dell'immagine)
P'(effective) = F(effective) ? P'(permitted) : 0
Capability permesse delprocesso dopo l'esecuzionedell'immagine
Bit presentenel file
Sì le capability→effettive del processosono tutte quellepermesse
Vale 1? No nessuna→capabilityeffettiva
155
Calcolo dell'insieme P'(inheritable)(Le capability ereditabili del processo, dopo l'esecuzione dell'immagine)
P'(inheritable) = P(inheritable)
Capability ereditabili delprocesso dopo l'esecuzionedell'immagine
Sono esattamente quelleereditabili prima dellaesecuzione dell'immagine
156
Una domanda (im)pertinente(Di quelle che fanno guadagnare punti bonus)
Sono stati discussi due sistemi di elevazione dei privilegi:
Bit setuid/setgid.Capability.
Supponiamo siano entrambi attivi.Sono usati tutti e due i sistemi?
Se sì, in che ordine?Oppure ne viene usato solo uno?
Se sì, quale?
157
La risposta(Dovrebbe essere sufficientemente chiara)
Sono usati entrambi i sistemi di elevazione dei privilegi.
Prima i bit setuid/setgid (che già danno l'intero insieme dei privilegi).Poi le capability.
158
Strumenti a disposizione degli utenti(Problema 4/4)
Il SO mette a disposizione strumenti per:la gestione degli utenti e dei gruppi (creazione,modifica, cancellazione).la gestione dei permessi su file e directory.l'esecuzione di comandi con privilegi opportuni(esecuzione con un nuovo identificatore utente ogruppo, con capability definite).la limitazione delle risorse consumate da un utente(tempo di CPU, file aperti, memoria prenotata, …).
159
GESTIONE DEGLI UTENTI
160
Scenario e domande(Come sono gestiti gli utenti? È possibile visionare le proprietà di un utente?)
Scenario: in un SO moderno (time sharing, multi-utente), un amministratore vuole creare, modificare, rimuovere utenti.
Domande:Esistono strumenti per creare, modificare, rimuovere utenti?Esistono strumenti per prendere visione delle caratteristiche di un utente?
161
Creazione di un utente in Debian(Semplicissima, grazie al comando adduser)
Debian GNU/Linux e derivate semplificano molto la procedura di creazione di un nuovo utente.È sufficiente eseguire il comando seguente da amministratore:
adduser nome_di_loginAd esempio:
adduser prova
Il comando adduser è interattivo; il SO chiede informazioni all'utente, che le deve immettere.
162
Immissione dei campi(Pochi e immediati: password, nome completo, stanza, numeri di telefono)
I campi da immettere sono pochi e di immediata comprensione.
La password (da immettere due volte per sicurezza).Il nome completo (nome e cognome dell'utente).Il nome/numero dell'ufficio in cui si lavora.I numeri di telefono di lavoro e di casa.Una stringa di testo (immessa dall'amministratore)di compendio alle informazioni precedenti.
163
Il risultato del comando adduser(Un utente nuovo di zecca con la sua home directory ed il suo gruppo primario)Il risultato del comando adduser è un utente nuovo di zecca (nel caso in questione, l'utente di nome prova).L'utente prova ha le seguenti risorse.
Una home directory /home/prova.Un gruppo primario di lavoro prova (e, per il momento,nessun altro gruppo secondario).Un interprete di default (/bin/bash) con unaconfigurazione iniziale copiata pari pari dalla directory/etc/skel (“skel” “skeleton” “scheletro”).→ →
164
Esercizi (1 min.)1. Create un nuovo utente con nome di login studente.
165
Analisi dell'utente(Visione del file /etc/passwd)
Aprite il file /etc/passwd e cercate il record relativo all'utente di nome prova:
grep prova /etc/passwd
Dovreste ottenere il record seguente:
166
Analisi dell'utente(Visione del file /etc/passwd)
Aprite il file /etc/passwd e cercate il record relativo all'utente di nome prova:
grep prova /etc/passwd
Dovreste ottenere il record seguente:
Nome di logindell'utente
167
Analisi dell'utente(Visione del file /etc/passwd)
Aprite il file /etc/passwd e cercate il record relativo all'utente di nome prova:
grep prova /etc/passwd
Dovreste ottenere il record seguente:
Password(celata all'utente)
168
Analisi dell'utente(Visione del file /etc/passwd)
Aprite il file /etc/passwd e cercate il record relativo all'utente di nome prova:
grep prova /etc/passwd
Dovreste ottenere il record seguente:
Identificatore utente(partono da 1000)
169
Analisi dell'utente(Visione del file /etc/passwd)
Aprite il file /etc/passwd e cercate il record relativo all'utente di nome prova:
grep prova /etc/passwd
Dovreste ottenere il record seguente:
Identificatore gruppo primario(partono da 1000)
170
Analisi dell'utente(Visione del file /etc/passwd)
Aprite il file /etc/passwd e cercate il record relativo all'utente di nome prova:
grep prova /etc/passwd
Dovreste ottenere il record seguente:
Nome completo dell'utente(nome e cognome)
171
Analisi dell'utente(Visione del file /etc/passwd)
Aprite il file /etc/passwd e cercate il record relativo all'utente di nome prova:
grep prova /etc/passwd
Dovreste ottenere il record seguente:
Numero di stanza
172
Analisi dell'utente(Visione del file /etc/passwd)
Aprite il file /etc/passwd e cercate il record relativo all'utente di nome prova:
grep prova /etc/passwd
Dovreste ottenere il record seguente:
Numero di telefonodi lavoro
173
Analisi dell'utente(Visione del file /etc/passwd)
Aprite il file /etc/passwd e cercate il record relativo all'utente di nome prova:
grep prova /etc/passwd
Dovreste ottenere il record seguente:
Numero di telefonodi casa
174
Analisi dell'utente(Visione del file /etc/passwd)
Aprite il file /etc/passwd e cercate il record relativo all'utente di nome prova:
grep prova /etc/passwd
Dovreste ottenere il record seguente:
Informazionisuppletive
175
Analisi dell'utente(Visione del file /etc/passwd)
Aprite il file /etc/passwd e cercate il record relativo all'utente di nome prova:
grep prova /etc/passwd
Dovreste ottenere il record seguente:
Home directorydell'utente
176
Analisi dell'utente(Visione del file /etc/passwd)
Aprite il file /etc/passwd e cercate il record relativo all'utente di nome prova:
grep prova /etc/passwd
Dovreste ottenere il record seguente:
Percorso assoluto dell'interprete dei comandi
dell'utente
177
Esercizi (1 min.)2. Identificate la home directory e l'interprete dei
comandi dell'utente studente.
178
Rimozione di un utente in Debian(Semplicissima, grazie al comando deluser)
Debian GNU/Linux e derivate semplificano molto la procedura di rimozione di un utente esistente.È sufficiente eseguire il comando seguente da amministratore:
deluser nome_di_loginAd esempio:
deluser prova
Il comando deluser non è interattivo (non ha bisogno di esserlo).
179
Il risultato del comando deluser(User has been buried, just like Mark would)
Il risultato del comando deluser è la rimozione completa dell'utente.
Cancellazione del nome dilogin dalle liste di utenti egruppi.Cancellazione del gruppoprimario dalla lista dei gruppi.Rimozione della homedirectory (tramite l' opzione--remove-home).
180
Esercizi (1 min.)3. Cancellate l'utente studente.
181
Una osservazione ed una domanda(Potreste non trovare adduser e deluser in altri distribuzioni GNU/Linux)
I due comandi adduser e deluser sono tipici delle distribuzioni Debian GNU/Linux e derivate.Con tutta probabilità non li troverete nelle altre distribuzioni GNU/Linux non basate su Debian.
La diaspora dei sistemi UNIX colpisce ancora…
La domanda nasce spontanea: quali comandi usano, allora, le altre distribuzioni GNU/Linux?
182
I comandi useradd e userdel(Questi li trovate in tutte le distribuzioni GNU/Linux)
Le altre distribuzioni GNU/Linux usano i comandi useradd e userdel, analoghi dal punto di vista concettuale.
man useradd e man userdel per tutti i dettagli.
A differenza dei comandi precedenti, questi comandi presentano una maggiore difficoltà di uso legata alla loro non interattività.
183
Non interattività dei comandi(Il SO non chiede nulla; è l'amministratore a dover specificare tutto)
I due comandi useradd e userdel non sono interattivi.Il SO non pone domande all'amministratore.È l'amministratore a dover specificare le proprietà dell'utente tramite opportune opzioni.
Se l'amministratore si dimentica di impostarle,l'utente creato non avrà tali proprietà.Le proprietà si possono sempre impostare in seguito.
184
Esercizi (2 min.)4. Cancellate la directory /home/studente.
Provate a creare nuovamente l'utente studente, questa volta usando il comando useradd.
Cercate di capire:quali e quanti gruppi sono stati associati all'utente.se è stata assegnata una home directory.
185
Creazione della home directory(Comando useradd, opzione -m)
Per creare una home directory e configurare è sufficiente usare l'opzione -m di useradd.
useradd -m prova
Verificate con il comando:ls -al /home/prova
Sono presenti persino i file di configurazione dell'interprete di default (BASH)!
186
Esercizi (1 min.)5. Provate a rimuovere nuovamente l'utente studente, questa volta usando il comando userdel.
Cercate di capire se la home directory è stata rimossa.
187
Rimozione della home directory(Comando deluser, opzione -r)
Per rimuovere la home directory è sufficiente usare l'opzione -r di userdel.
userdel -r prova
Non date questo comando!L'utente prova non c'è più…
188
Creazione di utenti più complessi(Possibile attraverso diverse opzioni)
I comandi adduser e useradd permettono all'amministratore di impostare le caratteristiche di un account già al momento della creazione.
man adduser e man useradd per tutti i dettagli.
Ad esempio, è possibile impostare i gruppi di lavoro secondari con uno dei comandi seguenti:
adduser --ingroup video provauseradd -G video -m prova
189
Modifica di un utente esistente(Da parte dell'amministratore, tramite il comando usermod)
Il comando usermod permette di modificare le proprietà e le risorse di un utente esistente.La sintassi è semplice:
usermod [opzioni] nome_di_login
Che cosa è possibile modificare, esattamente?Nome di login, identificatore utente, home directory,nome e/o identificatore dei gruppi di lavoro primarioe secondari, eseguibile dell'interprete, …
190
Un esempio concreto(Proviamo a modificare alcune caratteristiche dell'utente prova)
Fate piazza pulita di un eventuale utente prova preesistente.
userdel -r provaCreate nuovamente un utente prova:
adduser provaProvate a cambiare l'utente prova nel modo che segue.
Nome di login prova → prova2Identificatore utente 1001 → 1100Home directory /home/prova → /home/prova2
191
Le opzioni di usermod richieste(-l, -u, -d e -m)
Spulciando la pagina di manuale di usermodman usermod
dovreste individuare le opzioni seguenti.-l: cambia il nome di login-u: cambia l'identificatore utente-d: sposta la home directory-m: copia il contenuto della vecchia directory nella
nuova
192
Il comando richiesto(Tutto sommato, abbastanza semplice da costruire)
Il comando richiesto è, in definitiva:usermod -l prova2 -u 1100 -d /home/prova2 -m prova
Provatelo!Non vi preoccupate di eventuali avvertimenti riguardanti spool di posta non trovati.
193
Esercizi (5 min.)6. Installate il pacchetto software zsh. Assegnate
l'interprete dei comandi /bin/zsh all'utente studente.
194
Il comando usermod permette anche di disabilitare il login per uno specifico nome di login (tramite l'opzione -L), bloccando di fatto l'account.Ad esempio, per bloccare l'account al (povero) utente prova:
usermod -L provaProvate ad autenticarvi di nuovo come prova:su – prova
L'autenticazione fallisce.
Blocco di un account(Comando usermod, opzione -L)
195
Il comando usermod permette anche di riabilitare il login per uno specifico nome di login (tramite l'opzione -U), sbloccando di fatto l'account.Ad esempio, per sbloccare l'account al (fortunato) utente prova:
usermod -U provaProvate ad autenticarvi di nuovo come prova:su – prova
L'autenticazione ha di nuovo successo.
Sblocco di un account(Comando usermod, opzione -U)
196
Modifica di un utente esistente(Da parte dell'utente stesso, tramite una serie di comandi)
Può l'utente cambiare da solo le preferenze del proprio account, senza scomodare ogni volta l'utente amministratore?Certamente (non tutte però; per l'aggiunta ai gruppi serve ancora l'amministratore)!
chfn: cambia il nome dell'utente e le altreinformazioni.
passwd: modifica la password.chsh: modifica l'interprete dei comandi.
197
Esercizi (3 min.)7. Autenticatevi come studente. Eseguite i
comandi studenti sull'utente studente:chfnpasswdchsh
Verificate l'applicazione delle modifiche.
198
GESTIONE DEI GRUPPI
199
Scenario e domande(Come sono gestiti i gruppi? È possibile visionare le proprietà di un gruppo?)
Scenario: in un SO moderno (time sharing, multi-utente), un amministratore vuole creare, modificare, rimuovere gruppi.
Domande:Esistono strumenti per creare, modificare, rimuovere gruppi?Esistono strumenti per prendere visione delle caratteristiche di un gruppo?
200
Creazione di un gruppo in Debian(Semplicissima, grazie al comando addgroup)
Debian GNU/Linux e derivate semplificano molto la procedura di creazione di un nuovo utente.È sufficiente eseguire il comando seguente da amministratore:
addgroup nome_gruppoAd esempio:
addgroup prove
Il comando addgroup è talmente semplice da non richiedere alcuna interattività.
201
Il risultato del comando addgroup(Un gruppo nuovo di zecca)
Il risultato del comando addgroup è un gruppo nuovo di zecca (nel caso in questione, il gruppo di nome prove).
202
Esercizi (1 min.)8. Create un nuovo gruppo di nome studenti.
203
Una domanda spontanea(E sacrosanta!)
Nelle slide precedenti si è appurato che adduser e useradd creano un gruppo primario avente lo stesso nome dell'utente.Ad esempio:
adduser prova crea gruppo primario → prova (elo associa all'utente di nome prova).
Domanda: a che serve allora addgroup?
204
La risposta(Altrettanto ovvia ed altrettanto sacrosanta!)
addgroup serve a creare gruppi che, in futuro:potranno essere associati ad un utente come gruppisecondari.potranno divenire nuovi gruppi primari di un utente.
205
Analisi del gruppo(Visione del file /etc/group)
Aprite il file /etc/group e cercate il record relativo al gruppo di nome prove:
grep prove /etc/passwd
Dovreste ottenere il record seguente:
206
Analisi del gruppo(Visione del file /etc/group)
Aprite il file /etc/group e cercate il record relativo al gruppo di nome prove:
grep prove /etc/passwd
Dovreste ottenere il record seguente:
Nomedel gruppo
207
Analisi del gruppo(Visione del file /etc/group)
Aprite il file /etc/group e cercate il record relativo al gruppo di nome prove:
grep prove /etc/group
Dovreste ottenere il record seguente:
Password(celata all'utente)
208
Analisi del gruppo(Visione del file /etc/group)
Aprite il file /etc/group e cercate il record relativo al gruppo di nome prove:
grep prove /etc/group
Dovreste ottenere il record seguente:
Identificatore gruppo(partono da 1000)
209
Esercizi (1 min.)9. Identificate l'identificatore di gruppo del
gruppo studenti.
210
Rimozione di un gruppo in Debian(Semplicissima, grazie al comando delgroup)
Debian GNU/Linux e derivate semplificano molto la procedura di rimozione di un gruppo esistente.È sufficiente eseguire il comando seguente da amministratore:
delgroup nome_gruppoAd esempio:
delgroup prove
Il comando delgroup non è interattivo (non ha bisogno di esserlo).
211
Il risultato del comando delgroup(Group has been ripped off, just like Clint would)
Il risultato del comando delgroup è la rimozione completa del gruppo.
Cancellazione del gruppodalle lista dei gruppi.Cancellazione del gruppodall'elenco dei gruppi di ogniutente.
212
Una osservazione ed una domanda(Potreste non trovare addgroup e delgroup in altri distribuzioni GNU/Linux)I due comandi addgroup e delgroup sono tipici delle distribuzioni Debian GNU/Linux e derivate.Con tutta probabilità non li troverete nelle altre distribuzioni GNU/Linux non basate su Debian.
La diaspora dei sistemi UNIX colpisce ancora…
La domanda nasce spontanea: quali comandi usano, allora, le altre distribuzioni GNU/Linux?
213
I comandi groupadd e groupdel(Questi li trovate in tutte le distribuzioni GNU/Linux)
Le altre distribuzioni GNU/Linux usano i comandi groupadd e groupdel, analoghi dal punto di vista concettuale.
man groupadd e man groupdel per tutti idettagli.
Questi comandi presentano grossomodo le stesse difficoltà di addgroup e delgroup.
214
Esercizi (1 min.)10. Provate a creare nuovamente il gruppo studenti, questa volta usando il comando groupadd.
Verificate la creazione del nuovo gruppo.
215
Esercizi (1 min.)11. Provate a rimuovere nuovamente il gruppo studenti, questa volta usando il comando groupdel.
Verificate la rimozione del nuovo gruppo.
216
Modifica di un gruppo esistente(Da parte dell'amministratore, tramite il comando groupmod)
Il comando groupmod permette di modificare le proprietà e le risorse di un gruppo esistente.La sintassi è semplice:
groupmod [opzioni] nome_gruppo
Che cosa è possibile modificare, esattamente?Nome gruppo, identificatore gruppo, password.
217
Un esempio concreto(Proviamo a modificare alcune caratteristiche del gruppo prove)
Fate piazza pulita di un eventuale gruppo prove preesistente.
delgroup proveCreate nuovamente un gruppo prove:
addgroup proveProvate a cambiare il gruppo prove nel modo che segue.
Nome gruppo prove → prove2Identificatore gruppo 1001 → 1100
218
Le opzioni di groupmod richieste(-n e -g)
Spulciando la pagina di manuale di groupmodman groupmod
dovreste individuare le opzioni seguenti.-n: cambia il nome del gruppo-g: cambia l'identificatore gruppo
219
Il comando richiesto(Tutto sommato, abbastanza semplice da costruire)
Il comando richiesto è, in definitiva:groupmod -n prove2 -g 1100 prove
Provatelo!
220
Esercizi (3 min.)12. Create un gruppo studenti (se non è già
esistente). Modificate le seguenti proprietà del gruppo:
Nome gruppo → studenti2Identificatore del gruppo → 1300
Verificate la corretta applicazione delle modifiche.
221
Analisi dei gruppi di un utente(Da parte di amministratore o di un utente, tramite il comando groups)
Il comando groups mostra i gruppi di appartenenza di un utente. La sintassi è semplice:
groups [nome_di_login]
Se l'amministratore vuole vedere i gruppi di un utente, bisogna fornire il corrispettivo nome di login come parametro.Se un utente (incluso l'amministratore) vuole stampare i propri gruppi, può eseguire groups senza parametri.
222
Alcuni esempi concreti(Stampiamo i gruppi di root)
Per stampare i gruppi dell'utente root, si diventa superutente e si esegue il comando groups:
su -groups
In generale, l'utente root è associato al solo gruppo root.
→ Non essendo root soggetto a restrizioni sull'accesso alle risorse, non ha bisogno di gruppi secondari che le definiscono.
223
Alcuni esempi concreti(Stampiamo i gruppi dell'utente attivo sul vostro terminale)
Per stampare i gruppi dell'utente attivo (ad esempio, andreoli), si può procedere in due modi diversi.
Si diventa superutente e si esegue il comando groups andreoli:
su -groups andreoli
Si esegue groups da utente andreoli:groups
224
Modifica dei gruppi di un utente(Da parte di amministratore, tramite diversi comandi)
Il SO mette a disposizione diversi comandi per modificare i gruppi di lavoro primario e secondari di un utente.
Perché tanti comandi per svolgere la stessa operazione?
Diaspora UNIX…
225
Il comando usermod(Presente su tutti i sistemi UNIX; opzioni -g e -G)
Nei sistemi UNIX il comando usermod è usato per la modifica dei gruppi di lavoro primario e secondari.
Opzione -g nome_gruppo: specifica il nuovogruppo di lavoro primarioOpzione -G ng_1,ng_2,…: specifica il nuovol'insieme completo dei gruppi secondari
226
Un esempio concreto(Assegniamo nuovi gruppi primario e secondari all'utente prova)
Proviamo ad assegnare all'utente prova i seguenti gruppi di lavoro primario e secondari.
Gruppo primario: root.Gruppi secondari: disk cdrom floppy audio.
I comandi richiesti sono i seguenti (da utente amministratore).
usermod -g root provausermod -G disk,cdrom,floppy,audio prova
227
Esercizi (3 min.)13. Impostate i seguenti nuovi gruppi per l'utente studente.
Gruppo primario: root.Gruppi secondari: disk cdrom floppy audio dip video plugdev games netdev scanner bluetooth vboxsf.Verificate la corretta applicazione dei nuovi gruppi.
228
BIG FAT WARNING(You have been warned)
L'opzione -G di usermod vuole l'elenco di tutti i gruppi di lavoro secondari.Se volete inserire un solo gruppo di lavoro secondario, dovete fornire sia lui sia tutti i gruppi secondari esistenti.Se scrivete -G nuovo_gruppo, tutti gli altri gruppi saranno cancellati!
229
Esercizi (2 min.)14. Provate ad aggiungere un gruppo secondario root all'utente studente usando il seguente comando sbagliato:usermod -G root studente
Notate qualcosa di strano?
230
Aggiunta di utenti(Comando usermod, opzioni -g e -a)
Per aggiungere gruppi secondari è necessario specificare anche l'opzione -a di usermod.Ad esempio, per aggiungere il gruppo secondario root all'utente prova:
usermod -a -G root prova
Verificate l'aggiunta del gruppo secondario con il comando:
groups prova
231
Esercizi (2 min.)15. Aggiungete i seguenti gruppi all'utente studente:disk cdrom floppy audio dipvideo plugdev games netdevscanner bluetooth vboxsf
232
Un altro comando per gestire gruppi(Il comando gpasswd)
Un comando alternativo per la gestione di gruppi utente è gpasswd.
man gpasswd per tutti i dettagli.
Per aggiungere un utente ad un gruppo:gpasswd -a nome_di_login gruppo
Per rimuovere un utente da un gruppo:gpasswd -d nome_di_login gruppo
233
Alcuni esempi concreti(Comando gpasswd, opzioni -a e -d)
Per aggiungere il gruppo lp all'utente prova:gpasswd -a prova lp
Per rimuovere il gruppo lp dall'utente prova:gpasswd -d prova lp
234
BIG FAT WARNING(You have been warned)
Provate a modificate uno o più gruppi di lavoro secondari dell'utente con cui siete collegati attualmente.
Le modifiche non sono visibili fino al prossimo login!
235
Un esempio concreto(Aggiungiamoci ad un gruppo secondario e vediamo l'elenco dei gruppi)
Se, ad esempio, siete autenticati come utente andreoli, aggiungete il gruppo root all'elenco dei gruppi secondari:
gpasswd -a andreoli root
Da un altro terminale dell'utente andreoli, stampate l'elenco completo dei gruppi secondari:
groups → Il gruppo root non è ancora presente.
236
GESTIONE DEI PERMESSI
237
Scenario e domande(Come modificare i permessi di un file? Come vedere i permessi di un file?)
Scenario: in un SO moderno (time sharing, multi-utente), un utente vuole impostare impostare i permessi di accesso alle risorse.
Domande:Esistono strumenti per modificare i permessi di file e/o directory?Esistono strumenti per prendere visione dei permessi di un file?
238
Visione degli attributi di un file(Comando ls, opzione -l)
L'opzione -l del comando ls mostra gli attributi principali di un file, tra cui quelli di interesse nella presente lezione.
Utente creatore del file.Gruppo del file.Permessi del file.
Ad esempio, create un file vuoto nella vostra home directory:
touch /home/andreoli/file.txtVisionatene I metadati:
ls -l /home/andreoli/file.txt
239
Gli attributi di interesse(Creatore, gruppo, permessi)
Utente creatoredel file
240
Gli attributi di interesse(Creatore, gruppo, permessi)
Gruppodel file
241
Gli attributi di interesse(Creatore, gruppo, permessi)
Permessidel file
242
Modifica dell'utente creatore(Comando chown)
Il comando chown modifica l'utente creatore di un file e/o di una directory. L'uso è semplice:
chown [OPZIONI] nome_di_login file
Ad esempio, per modificare il creatore del file file.txt da andreoli a root eseguite il seguente comando da amministratore:
chown root /home/andreoli/file.txt
243
Modifica del gruppo del file(Comando chgrp)
Il comando chgrp modifica il gruppo di un file e/o di una directory. L'uso è semplice:
chgrp [OPZIONI] nome_gruppo file
Ad esempio, per modificare il gruppo del file file.txt da andreoli a root eseguite il seguente comando da amministratore:
chgrp root /home/andreoli/file.txt
244
Modifica di utente creatore e gruppo (Comando chown, primo argomento del tipo utente:gruppo)
Il comando chown fornisce una scorciatoia per impostare simultaneamente utente creatore e gruppo di un file.È sufficiente specificare il primo argomento con una stringa nome_di_login:gruppo.
chown nome_di_login:gruppo file
245
Un esempio concreto(Modifichiamo simultaneamente utente creatore e gruppo di file.txt)
Ad esempio, per modificare simultaneamente le seguenti modifiche sul file di testo di nome /home/andreoli/file.txt:
utente creatore → andreoligruppo del file → andreoli
è possibile usare il solo comando chown:chown andreoli:andreoli /home/andreoli/file.txt
246
Cambio ricorsivo di utente e/o gruppo(Comandi chown e chgrp, opzione -R)
L'opzione -R di chown e chgrp opera ricorsivamente su una directory.Ad esempio, per impostare utente e gruppo alla coppia andreoli:andreoli per tutti i file e le sottodirectory contenute in /home/andreoli, potete scrivere:
chown -R andreoli:andreoli /home/andreoli
247
Esercizi (2 min.)16. Create un file vuoto dal nome lista.txt
nella vostra home directory. Cambiate utente creatore e gruppo di lista.txt nel modo seguente:
utente creatore → rootgruppo del file → root
Verificate la corretta applicazione degli attributi utente creatore e gruppo del file.
248
Modifica dei permessi del file(Comando chmod)
Il comando chmod modifica i permessi del file. L'uso è meno semplice dei comandi precedenti:
chmod [OPZIONI] permessi file
249
Rappresentazioni dei permessi(Comprese dal comando chmod)
Il comando chmod comprende due distinte rappresentazioni dei permessi.Rappresentazione testuale. I permessi da applicare ad un file/directory sono rappresentati tramite una stringa.Rappresentazione ottale. I permessi da applicare ad un file/directory sono rappresentati tramite un numero in base 8 (ottale).
250
Rappresentazione testuale(Molto simile alla rappresentazione dei permessi fornita da ls)
Nella rappresentazione testuale, chmod accetta una o più stringhe di permessi separate da una virgola:
str1,str2,…,strnCiascuna stringa di permessi ha il formato seguente:
insieme_di_utenti±insieme_di_permessi
Il simbolo ± indica la presenza di un + (aggiunta) o di un – (rimozione).
251
Insieme degli utenti(Specifica su quale insieme di utenti vale il permesso)
L'insieme degli utenti è una stringa composta dai caratteri u, g, o, a.
u → I permessi si applicano all'utente creatore.g → I permessi si applicano al gruppo del file.o → I permessi si applicano ai restanti utenti.a → I permessi si applicano a tutti gli utenti.
252
Esempi di insiemi degli utenti(Tanto per (non) chiarire le idee)
ugo → tutti gli utenti del sistema.a → tutti gli utenti del sistema.go → gli utenti appartenenti al gruppo del file
Eil resto del mondo
253
Insieme dei permessi(Specifica i permessi associati ad un insieme di utenti)
L'insieme dei permessi è una stringa composta dai caratteri r, w, x, s.
r → Si applica il permesso di lettura.w → Si applica il permesso di scrittura.x → Si applica il permesso di esecuzione (file)
Odi ingresso (directory)
s → Si applica il bit setuid/setgid
OCCHIO! L'insieme presentato è semplificato al minimo indispensabile.
254
Esempi di permessi(Tanto per (non) chiarire le idee)
rwx → lettura, scrittura, esecuzionerw → lettura, scritturarx → lettura, esecuzionerws → lettura, scrittura, esecuzione setuid/setgid
255
Esempio di esecuzione di chmod(Con permessi in rappresentazione testuale)
Supponiate di voler assegnare al file di testo /home/andreoli/file.txt il seguente insieme di permessi: rw-rw-r--.Costruiamo insieme le stringhe dei permessi.
Permessi di lettura e scrittura per l'utente creatore eper gli utenti appartenenti al gruppo del file: ug+rw.Permessi di lettura per gli altri utenti: o+r.
Il comando richiesto è, pertanto:chmod ug+rw,o+r /home/andreoli/file.txt
256
Esercizi (3 min.)17. Create un file vuoto dal nome lista.txt
nella vostra home directory. Usando chmod con rappresentazione testuale dei permessi, impostate i permessi seguenti sul file:rwxr-xr-x
Verificate la corretta applicazione dei permessi.
257
Rappresentazione ottale(Molto diversa dalla rappresentazione dei permessi fornita da ls)
Nella rappresentazione ottale, chmod accetta un numero intero rappresentato in base ottale.
Il numero può essere lungo da una a quattro cifre. Se le cifre sono meno di quattro, si assumono degli zeri.Ad esempio: 4 0004, 755 0755.→ →
258
Insieme degli utenti(Specifica su quale insieme di utenti vale il permesso)
Si consideri un insieme di permessi 0755.
Seconda cifra (7) → insieme di permessi per l'utente creatore.
Terza cifra (5) →insieme di permessi per gli utenti appartenenti al gruppo del file.
Quarta cifra (5) → insieme di permessi per tutti gli altri utenti.
259
Insieme dei permessi(Specifica i permessi associati ad un insieme di utenti)
Si consideri un insieme di permessi 0755.L'insieme dei permessi è un numero intero lungo 4 bit (da 0 a 7), ottenibile sommando i numeri 0, 1, 2, 4.
0 → nessun permesso.4 → Si applica il permesso di lettura.2 → Si applica il permesso di scrittura.1 → Si applica il permesso di esecuzione (file)
Odi ingresso (directory)
260
Esempi di permessi(Tanto per (non) chiarire le idee)
7 → lettura, scrittura, esecuzione6 → lettura, scrittura5 → lettura, esecuzione4 -> lettura2 → scrittura1 → esecuzione
261
Permessi setuid/setgid(Prima cifra del numero in ottale)
Si consideri un insieme di permessi 0755. Il valore della prima cifra stabilisce ulteriori permessi (setuid/setgid).
Prima cifra = 4 → È impostato il bit setuid.
Prima cifra = 2 → È impostato il bit setgid.
Prima cifra = 1 → È impostato lo sticky bit (non trattato in questo corso).
Prima cifra = 0 → Non è impostato nient'altro.
262
Esempio di esecuzione di chmod(Con permessi in rappresentazione ottale)
Supponiate di voler assegnare al file di testo /home/andreoli/file.txt il seguente insieme di permessi: rw-rw-r--.Costruiamo insieme il numero in base ottale.
263
Esempio di esecuzione di chmod(Con permessi in rappresentazione ottale)
Permessi di lettura e scrittura per l'utente creatore:seconda cifra impostata a 4+2 = 6.Permessi di lettura e scrittura per tutti gli utentiappartenenti al gruppo del file: terza cifra impostata a 4+2 = 6.Permessi di lettura per gli altri utenti: quarta cifra impostata a 4.Assenza di bit setuid/setgid: prima cifra impostata a 0.Il comando richiesto è, pertanto:
chmod 0664 /home/andreoli/file.txt
264
Esercizi (3 min.)18. Create un file vuoto dal nome lista.txt
nella vostra home directory. Usando chmod con rappresentazione ottale dei permessi, impostate i permessi seguenti sul file:rwsr-xr-x
Verificate la corretta applicazione dei permessi.
265
Uso di risorse hardware(Tramite l'aggiunta in gruppi opportuni)
Le risorse hardware (tipicamente, periferiche) sono accedute tramite file speciali presenti nella directory /dev.Esempio (già visto):
file speciale /dev/sda primo disco rigido SATA.→
L'accesso a /dev/sda è mediato da opportuni permessi.
Quali sono? Un utente normale li possiede già?Di quale gruppo è richiesta l'appartenenza?
266
Visione degli attributi di /dev/sda(Per capire quali permessi è necessario presentare)
Per vedere gli attributi del file speciale /dev/sda potete digitare il comando:
ls -l /dev/sdaSi ottiene un output del genere:
267
Quali permessi servono?(Per leggere /dev/sda)
Per leggere /dev/sda da utente normale è necessario presentare le credenziali seguenti.
Esserel'utente root
Far parte delgruppo disk
→ Per un utente normale, l'unico modo per leggere /dev/sda è quello di inserirsi nel gruppo disk.
268
Aggiunta del gruppo all'utente(Facile, una volta che si conosce il gruppo)
L'accesso diretto al file fallisce. Se digitate:less -Mr -f /dev/sda
il SO risponderà con un messaggio del tipo “Permesso Negato”.Provate ad aggiungervi al gruppo disk, scrivendo il comando seguente da utente root (modificate il nome di login andreoli con il nome di login del vostro utente):
gpasswd -a andreoli disk
269
Lettura del disco a basso livello(Richiede un nuovo login utente)
L'aggiunta del gruppo diventa operativa ad un nuovo login. Uscite dalla sessione grafica ed autenticatevi nuovamente.In seguito, verificate di essere nel gruppo disk:
groupsL'output dovrebbe contenere la stringa disk.Provate a leggere il disco:
less -Mr -f /dev/sdaDovreste vedere il contenuto del disco in formato ASCII.
270
La maschera dei permessi(Process umask)
Nei sistemi UNIX, il descrittore dei processi contiene un campo specifico detto maschera dei permessi (process umask, umask).La maschera dei permessi è un insieme di permessi usato per calcolare il permesso iniziale di un file/directory:
permesso iniziale = permesso imposto – mascheraMotivazione: misura di sicurezza (si limitano i permessi assegnati inizialmente al file).
→ Principio del minimo privilegio…
271
Un esempio di applicazione(Semplice semplice)
Ad esempio, se l'utente apre un file in scrittura con un permesso iniziale di rwxrwxrwx e la maschera dei permessi è pari a ----w--w-, il permesso effettivo iniziale del file diventa:
rwxrwxrwx - ----w--w- = rwxr-xr-x
In tal modo, si evita la proliferazione di file con permessi rwxrwxrwx.
272
Gestione della maschera dei permessi(Il comando umask)
Il comando builtin umask gestisce la maschera dei permessi. Se lanciato senza argomenti, ritorna il valore corrente della maschera.
umaskUn valore consueto della maschera è 0022 (si tolgono le scritture ad ogni utente non creatore).Fornendo come argomento un permesso ottale, è possibile modificare la maschera per la sessione di terminale attiva.
OCCHIO! La modifica non è permanente!
273
Un piccolo esperimento(Analisi del comando touch)
Proviamo a tracciare con strace l'esecuzione di un comando che crea un file vuoto. Siamo interessati alla chiamata di sistema open() che crea il file con permessi specifici.
strace -e open touch file_vuoto.txtL'output contiene la riga seguente.
274
Analisi di open()(Vuole aprire il file con permessi rw-rw-rw-)
Nomedel file
Accessoin scrittura
File creatose non esiste
File non è unterminale di
controllo
Le operazionidi I/O sono
non bloccanti
Permessirw-rw-rw-
touch vuole aprire un file in scritturacon permessi rw-rw-rw-
275
Lettura degli attributi del file(Il comando ls -l mostra una apparente inesattezza)
Tuttavia, leggendo gli attributi del file:ls -l file_vuoto.txt
si nota che i permessi del file appena creato sono diversi: rw-r—r--.
Domanda: dove sono finite le w per il gruppo e per gli altri utenti?Risposta: le ha filtrate la maschera dei permessi!
276
Una ipotesi ragionata(Maschera dei permessi = 0 Permessi del file creato da touch = → rw-rw-rw)
Ipotesi: se si imposta la maschera dei permessi nulla, il file creato da touch avrà i permessi (non filtrati) rw-rw-rw-.
277
Verifica dell'ipotesi(Il comando umask con un argomento: insieme di permessi in ottale)
Impostate una maschera nulla dei permessi (0000 o 0) sul terminale corrente, digitando:
umask 0Cancellate e create nuovamente il file vuoto:
rm file_nuovo.txttouch file_vuoto.txt
Leggete i suoi attributi:ls -l file_vuoto.txt
Il file ha permessi rw-rw-rw-.
278
Esercizi (3 min.)19. Quale maschera dei permessi dovete
impostare per creare nuovi file con permessi nulli sul gruppo e sugli altri utenti?
Esempio: apro un file in scrittura con permessi rw-rw-rw-, viene creato su disco un file con permessi rw-------.
Verificate la correttezza della maschera impostata.
279
GESTIONE DELLE ACL
280
Liste di controllo degli accessi(Ne esistono di due tipi: per file e per directory)
GNU/Linux offre il supporto per le liste di controllo degli accessi. Esistono due tipi di liste.
ACL di file. Sono associate a file. Descrivono i permessi di quel file.ACL di default. Sono associate a directory. Descrivono i permessi di default che avranno i file nella directory.
281
Elenco delle ACL di un file(Il comando getfacl)
Il comando getfacl (contenuto nel pacchetto software acl) stampa l'ACL di un file/directory.Creiamo un file di testo vuoto e stampiamo la sua ACL.
touch documento.txtgetfacl documento.txt
282
La lista in dettaglio(L'output del comando getfacl sul file documento.txt)
Le linee che iniziano con il carattere #contengono commenti (qui, informazionisul nome del file, il creatore, il gruppo).Permessi per l'utente creatore (rw-).Permessi per gli utenti appartenenti algruppo del file (r--).Permessi per tutti gli altri utenti (r--).L'ACL è presentata in un
formato lungo.Una riga=un permesso.
Formato permessi: stringainsieme_utenti:identificatore:permessi
283
Una osservazione(Il file documento.txt non sembra avere permessi diversi da quelli usuali)
Osservando bene l'ACL, non si notano permessi diversi da quelli solitamente assegnati ad un file.
C'è un permesso per l'utente creatore.C'è un permesso per gli utenti appartenenti algruppo del file.C'è un permesso per tutti gli altri utenti.
L'ACL mostra anche i permessi standard UNIX.
284
Come riconoscere un file con ACL?(ls mostra il carattere + dopo la stringa dei permessi)
Come riconoscere un file su cui sono state imposte restrizioni ulteriori tramite ACL?Il comando ls mostra il carattere + dopo la stringa dei permessi.Ad esempio: rw-r—r--+.Il file documento.txt ha ACL ulteriori?
ls -l documento.txt
Manca il + non sono imposte restrizioni ulteriori→
285
Impostazione di una ACL(Comando setfacl, opzione -m)
Il comando setfacl modifica l'ACL di un file o di una directory. Nello specifico, l'opzione -m riceve in ingresso una rappresentazione compatta di modifiche ad una ACL, da applicare ai file passati come argomento.
setfacl -m perm1,perm2,…,permn file …
286
Il formato breve di una ACL(La rappresentazione “compatta” della ACL)
L'argomento dell'opzione -m è una ACL in formato breve.
Tutta l'ACL è contenuta in una riga.Elenco di permessi separati da virgola.
Il formato di un permesso è sempre lo stesso:insieme_utenti:identificatore:permessi
Insieme utenti: u (utente), g (gruppo).Identificatore: nome utente/gruppo.
287
Un esempio concreto(Rendiamo documento.txt leggibile dagli utenti nel gruppo studenti)
Proviamo ad impostare il permesso di sola lettura per ciascun utente nel gruppo studenti.Costruiamo insieme l'ACL.L'ACL è formata da un solo permesso:
sola lettura per gli utenti nel gruppo studenti.Insieme utenti → g.Identificatore → studenti.Permessi → r.Il comando richiesto è:
setfacl -m g:studenti:r documento.txt
288
Controllo della nuova ACL(Rendiamo documento.txt leggibile dagli utenti nel gruppo studenti)
Controlliamo la nuova ACL con il comando getfacl.
getfacl /home/andreoli/documento.txtSi ottiene l'ACL seguente.
Gli utenti nel gruppo studenti possonoleggere (r--) documento.txt.
289
Aggiunta di una ulteriore restrizione(Rendiamo documento.txt leggibile e scrivibile dagli utenti in docenti)
Create un gruppo docenti:addgroup docenti
Impostate il permesso di lettura e scrittura per gli utenti nel gruppo docenti.
setfacl -m g:docenti:rw documento.txtSi ottiene l'ACL seguente.
Gli utenti nel gruppo docenti possonoleggere e scrivere (rw-) documento.txt.
290
Una domanda importante(Si riescono ad implementare queste restrizioni con i permessi UNIX?)
Una domanda importante è d'obbligo.Si riescono ad implementare le restrizioni di accesso ora viste con lo schema dei permessi?Se sì, quanto è comodo implementarle?
La risposta alla prima domanda è: nì.La risposta alla seconda domanda è: non è molto comodo.
291
Cosa bisogna fare?(Come “per fare cosa”? Per implementare lo schema con i permessi UNIX)
Bisogna prevedere:accessi in sola lettura per un insieme di utenti(gruppo studenti).accessi in lettura e scrittura per un altro insieme diutenti (gruppo docenti).
292
Un tentativo di soluzione(File documento.txt con gruppo studenti; permessi r-- al gruppo)
Si associa il file documento.txt al gruppo studenti e si pone il permesso del gruppo a r--.
E i docenti? Si fa in modo che non siano creatori del file e che non siano nel gruppo studenti. Pertanto, accedono al file con i permessi del “resto del mondo”.
→ Si pone rw- il permesso del “resto del mondo”.
293
Svantaggio della soluzione proposta(Cani e porci possono scrivere su documento.txt)
Il “resto del mondo” non è un gruppo controllabile.
Ci finiscono automaticamente tutti gli utenti che nonsono il creatore di documento.txt e non sono nelgruppo di lavoro studenti.Più persone di quelle preventivate possono accederea documento.txt in lettura e scrittura.
→ No good.
294
Un altro tentativo di soluzione(File documento.txt con gruppo docenti; permessi rw- al gruppo)
Si associa il file documento.txt al gruppo docenti e si pone il permesso del gruppo a rw-.
E gli studenti? Si fa in modo che non siano creatori del file e che non siano nel gruppo docenti. Pertanto, accedono al file con i permessi del “resto del mondo”.
→ Si pone r-- il permesso del “resto del mondo”.
295
Confronto con la soluzione precedente(documento.txt non è più scrivibile da cani e porci)
La soluzione ora proposta è migliore della precedente.Ora il “resto del mondo” può solo leggere il file documento.txt.
→ Utenti arbitrari non possono più sovrascrivere il file.
296
Un problema insormontabile(Ci sono dei pro e dei contro)
I due grandi insiemi di utenti disponibiligli utenti appartenenti al gruppo del fileil “resto del mondo”
sono ora entrambi prenotati.
E se si volesse negare ad un terzo insieme di utenti anche l'accesso in lettura?
→ Non si può fare (preservando i permessi di accesso rw- ai docenti e r-- agli studenti).Non ci credete? Provate a farlo!
297
Come risolvere il problema con le ACL?(Si aggiunge una ulteriore restrizione; sic et simplicter!)
Come si può superare questa difficoltà con le ACL?Basta impostare permessi nulli di accesso (---) ad un gruppo designato di utenti (ad esempio, esterni).
addgroup esternisetfacl -m g:esterni:--- documento.txt
Et voilà!
298
Esercizi (3 min.)20. Create un documento vuoto dal nome report.txt. Impostate l'ACL seguente:
utente creatore → rwxutente admin → rwxgruppo del file → r-xgruppo lavoratori → rw-resto del mondo → r--
Create utenti e gruppi non presenti.Verificate la correttezza dell'ACL.
299
Cancellazione elementi di una ACL(Comando setfacl, opzione -x)
L'opzione -x del comando setfacl rimuove una o più righe dalla ACL. L'argomento dell'opzione -x è la rappresentazione compatta di una o più righe di una ACL:
setfacl -x riga1,riga2,…,rigan file …
300
La rappresentazione delle righe(Da rimuovere)
Il formato delle righe è molto simile al formato delle ACL brevi. Manca il campo dei permessi.
insieme_utenti:identificatore
Insieme utenti: u (utente), g (gruppo).Identificatore: nome utente/gruppo.
301
Un esempio concreto(Rimuoviamo da documento.txt la riga ACL relativa agli studenti)
Proviamo a rimuovere nel file documento.txt la restrizione imposta al gruppo studenti.La rappresentazione della riga è:
insieme utenti → g.identificatore → studenti.
Il comando richiesto è:setfacl -x g:studenti documento.txt
302
Esercizi (2 min.)21. Con riferimento al file report.txt,
rimuovete la restrizione sul gruppo di nome lavoratori.
Verificate la correttezza della nuova ACL.
303
La maschera di una ACL(Definisce il massimo permesso garantito ad utenti e gruppi)
Una ACL può contenere un elemento di nome maschera.
Se l'ACL contiene restrizioni ulteriori rispetto a quellestandard, la maschera è obbligatoria.
Tale elemento definisce il massimo permesso assegnabile ad un utente o un gruppo.
304
Algoritmo di controllo dei permessi(Rivisited with masks)
Se l'utente effettivo presentato da un processo corrisponde ad una restrizione su un utente non creatore nella ACL:
→ permesso assegnato al processo =permessi della restrizioneANDpermessi della maschera
Idem per il gruppo effettivo ed una restrizione su un gruppo non primario.
305
L'operatore AND in azione(Notate la restrizione del permesso accordato; ricorda umask)
Permesso associato alla restrizione: rwx.Maschera della ACL: r-x.Permesso accordato: rwx AND r-x = r-x.
La maschera è uno strumento utile per la riduzione dei permessi di accesso.
306
Modifica della maschera(Per ridurre i permessi di accesso ad un file/directory)
La maschera è accessibile tramite l'insieme utenti di nome m. Per impostarla al valore r-- per il file documento.txt, potete digitare il comando seguente:
setfacl -m m::r-- documento.txt
307
Lettura della ACL(L'effetto della maschera è comunicato tramite un commento)
Leggete l'ACL del file documento.txt con il comando getfacl:
getfacl documento.txt
La mascheraè cambiata
Per il gruppo docenti, il permesso accordatoal processo (r--) differisce da quello scrittonella restrizione (rw-). La maschera è all'opera.
308
Esercizi (5 min.)22. Create un utente docente. Create un gruppo docenti. Inserite l'utente docente nel gruppo docenti.
Usando un'utenza diversa da docente, create un file /tmp/documento.txt ed impostate l'ACL seguente:
gruppo docenti → rw-maschera → r--
Diventate utente docente. Provate ad accedere in scrittura al file /tmp/documento.txt. Ci riuscite o no? Che cosa è successo?
309
ACL di default(Specifica i permessi di default di file e directory in un sottoalbero)
Una ACL di default è associata ad una directory DIR. Essa specifica quali permessi di default saranno associati a file e directory contenuti nella directory DIR.
Per gestire una ACL di default è necessario aggiungere l'opzione -d ai comandi getfacl e setfacl visti in precedenza.
310
Impostazione di ACL in una directory(Comandi mkdir e setfacl -d)
Create una directory di nome directory:mkdir directory
È possibile impostare una ACL qualunque; ad esempio, lettura e scrittura (rw-) per gli utenti nel gruppo docenti:
setfacl -d -m g:docenti:rw- directory
311
Visione della ACL in una directory(Comando getfacl -d)
Per vedere l'ACL della directory di nome directory si usa il comando getfacl con l'opzione -d:
getfacl -d directory
Queste sono le restrizioni classichesulla directory imposte tramite ilmeccanismo dei permessi UNIX.
Queste sono le restrizioni di defaultdella directory.
312
Visione della ACL in una directory(Comando getfacl -d)
Per vedere l'ACL della directory di nome directory si usa il comando getfacl con l'opzione -d:
getfacl -d directory
Queste restrizioni di default sono lacopia esatta delle restrizioni impostetramite i permessi.
313
Visione della ACL in una directory(Comando getfacl -d)
Per vedere l'ACL della directory di nome directory si usa il comando getfacl con l'opzione -d:
getfacl -d directory
Questa è la maschera. Se non èimpostata esplicitamente, assumeil valore rwx.
314
Visione della ACL in una directory(Comando getfacl -d)
Per vedere l'ACL della directory di nome directory si usa il comando getfacl con l'opzione -d:
getfacl -d directory
Questa è la restrizione impostadall'utente sul gruppo docentitramite il comando setfacl.
315
Effetto delle ACL di default(Su una sottodirectory)
Come impatta la presenza di una ACL di default nella directory di nome directory sulla creazione di una sua sottodirectory?
→ La sottodirectory eredita l'ACL di default.E così le sue sottodirectory, e così via.
316
Un esempio(Creiamo una sottodirectory subdir e leggiamo la sua ACL di default)
Entrate nella directory di nome directory e create una sottodirectory di nome subdir:
cd directorymkdir subdir
Recuperate l'ACL di default di subdir:getfacl -d subdir
Confrontate le ACL di default di directory e di subdir. Che cosa notate?
317
Il confronto(ACL directory vs. ACL subdir)
Le due ACL sono IDENTICHE!
318
Effetto delle ACL di default(Su un file nella directory)
Come impatta la presenza di una ACL di default nella directory di nome directory sulla creazione di un file al suo interno?
Purtroppo le cose non sono così semplici come nel caso della sottodirectory.
319
Eredità della ACL di default(L'ACL del file diventa inizialmente l'ACL di default della directory)
Il passo iniziale è chiaro: viene costruita una ACL iniziale del file con gli esatti contenuti dell'ACL di default della directory.
L'ACL così creata è modificata in alcuni suoi elementi, per produrre l'ACL finale del file.Elementi modificati:
utente creatore, gruppo del file, altri utenti, maschera.Elementi non modificati:
le restrizioni aggiuntive mediante setfacl.
320
Modifiche alla ACL del file(Elemento “utente creatore”)
I permessi dell'utente creatore nella versione finale dell'ACL del file sono l'AND di due contributi.Permessi utente creatore=
permessi utente con cui il processo vuole creare il fileANDpermessi utente dell'ACL del file ereditati dall'ACL didefault.
321
Esempio(Elemento “utente creatore”)
Il processo vuole creare un file con permessi utente rwx.L'ACL ha un elemento dell'utente creatore con permessi rw-.
→ Il permesso utente finale del file èrwx AND rw- = rw-.
322
Modifiche alla ACL del file(Elemento “maschera”)
Se la directory madre del file ha un elemento maschera, i permessi della maschera nella versione finale dell'ACL del file sono l'AND di due contributi.Permessi maschera =
permessi gruppo con cui il processo vuole creare il fileANDpermessi maschera dell'ACL del file ereditati dall'ACLdi default.
323
Modifiche alla ACL del file(Elemento “maschera”)
INOLTRE, SOLO IN QUESTO SPECIFICO CASO NON SI MODIFICANO I PERMESSI FINALI DEL GRUPPO NELL'ACL DEL FILE!
I PERMESSI DEL GRUPPO NELL'ACL FINALE DEL FILE RIMANGONO QUELLI EREDITATI DALLA ACL DI DEFAULT DELLA DIRECTORY.
324
Esempio(Elemento “maschera”)
Il processo vuole creare un file con permessi gruppo rw-.L'ACL ha un elemento maschera con permessir-x.
→ La maschera finale del file èrw- AND r-x = r--.
325
Modifiche alla ACL del file(Elemento “gruppo del file”)
Se il file non ha ereditato una maschera dalla directory madre, i permessi del gruppo nella versione finale dell'ACL del file sono l'AND di due contributi.Permessi gruppo =
permessi gruppo con cui il processo vuole creare il fileANDpermessi gruppo dell'ACL del file ereditati dall'ACL didefault.
326
Esempio(Elemento “gruppo del file”)
Il processo vuole creare un file con permessi gruppo rw-.L'ACL ha un elemento per il gruppo del file con permessi r-x.
→ Il gruppo finale del file èrw- AND r-x = r--.
327
Modifiche alla ACL del file(Elemento “gli altri utenti”)
I permessi degli altri utenti nella versione finale dell'ACL del file sono l'AND di due contributi.Permessi altri utenti=
permessi altri utenti con cui il processo vuole creare ilfileANDpermessi altri utenti dell'ACL del file ereditati dall'ACLdi default.
328
Esempio(Elemento “gli altri utenti”)
Il processo vuole creare un file con permessi per gli altri utenti r--.L'ACL ha un elemento per gli altri utenti con permessi r--.
→ Il permesso finale degli altri utenti del file èr-- AND r-- = r--.
329
Domanda da 1M USD(Domanda pertinente ed ovvia)
Perché se il file eredita un elemento maschera dalla directory madre non viene aggiornato l'elemento “gruppo del file” nella ACL risultante?
330
Risposta(Per niente ovvia; si spera pertinente)
Come avete già avuto modo di apprezzare, la maschera del file riduce i permessi accordati al processo in fase di accesso al file.
In realtà, la maschera ha anche un secondo ruolo: limita i permessi iniziali di un file in fase di creazione!
Principio del minimo privilegio…
331
Risposta(Per niente ovvia; si spera pertinente)
Quando un processo crea un file, suggerisce delle permessi di creazione (utente, gruppo, altri utenti).Il processo non presenta una maschera, perché non è prevista nello schema standard dei permessi.Tuttavia, l'ACL del file deve avere una maschera inizializzata in qualche modo.Come risolvere questo problema?
332
Risposta(Per niente ovvia; si spera pertinente)
Il file potrebbe benissimo ereditare la maschera dalla directory madre e finirla lì.Che succede, però, se la maschera ereditata dalla directory madre è rwx?La maschera è troppo ampia; non filtra nulla.
→ Ciò contraddice il principio del minimo privilegio.Come ridurre automaticamente una maschera troppo ampia?
333
Risposta(Per niente ovvia; si spera pertinente)
Solitamente, quando un processo apre un file, imposta permessi minori di rwx, in special modo sulle classi di utenti “gruppo” e “resto del mondo”.
Prendete ad esempio il comando touch; richiedepermessi rw-rw-rw-.Il gruppo ha permessi rw-, così come tutti gli altriutenti che non siano il creatore.
In linea di massima, i programmi di sistema UNIX sono molto parchi in termini di permessi assegnati ai file.
334
Risposta(Per niente ovvia; si spera pertinente)
IDEA: visto che i permessi del gruppo sono generalmente limitati in fase di creazione, si potrebbe pensare di limitare la maschera al più a tali permessi.In tal modo, se un processo crea un file con permessi rw-, la maschera non dovrebbe avere permessi più ampi di rw-.
335
Risposta(Per niente ovvia; si spera pertinente)
CONSEGUENZE (paranoiche).Il SO mitiga l'effetto sciagurato di una maschera rwx posto sulla directory madre.
Maschera che non filtrerebbe un bel niente.
La maschera è ridotta ad un valore sensato.Se il processo vuole creare un file con permessi rw-sul gruppo, almeno inizialmente questi permessi sonoreputati sufficienti.La maschera fa passare i permessi rw-, ma non di più.
336
I'm gettin' paranoid(just like Quincy)
337
Esercizi (3 min.)23. Create una directory di nome directory.
Assegnate l'ACL seguente alla directory:gruppo docenti permessi → rw-
Entrate nella directory e create un nuovo file vuoto di nome prova.txt, usando il comando touch.
Perché la maschera del file ha permessi rw-?Perché il gruppo del file ha permessi r-x?
338
ELEVAZIONE DEI PRIVILEGI
339
Scenario e domande(Come sono gestiti i gruppi? È possibile visionare le proprietà di un gruppo?)
Scenario: in un SO moderno (time sharing, multi-utente), un amministratore vuole eseguire comandi con privilegi modificati.
Domande:Esistono strumenti per eseguire comandi con privilegi modificati?Esistono strumenti per prendere visione dei privilegi di un utente?
340
Visione degli identificatori(Il comando id)
Il comando id stampa gli identificatori utente, di gruppo primario e dei gruppi secondari per uno specifico utente. L'uso è molto semplice.
id [OPZIONI]… [UTENTE]
Se usato senza argomenti, id considera l'utente attivo sul terminale. Altrimenti, si considera l'utente specificato come argomento.
341
Esercizi (1 min.)
24. Stampate tutti gli identificatori:dell'utente attivo sul vostro terminale;dell'utente root.
342
Esecuzione di una shell(Come utente root)
Il comando su esegue comandi generici con le credenziali di un altro utente.Nel suo uso più semplice, su non richiede né opzioni, né argomenti:
su
In tale scenario, il SO assume che:l'utente in cui ci si voglia trasformare sia root;il comando che si voglia eseguire sia l'interprete didefault (solitamente, /bin/bash).
343
BIG FAT WARNING(You have been warned)
Se non si specifica altro, il comando su non carica le variabili di ambiente del nuovo utente.Le applicazioni che leggono queste variabili potrebbero confondersi.
344
Esercizi (1 min.)25. Diventate root. Stampate le variabili di
ambiente con il comando export.
Notate qualcosa di strano?
345
Caricamento del nuovo ambiente(Comando su, opzione --login)
Per caricare l'ambiente è necessario usare l'opzione --login di id.I seguenti comandi sono equivalenti:
su --loginsu -lsu -
Ad esempio, per diventare root e caricare il suo ambiente, dovete digitare il comando seguente:
su -
346
Esercizi (2 min.)26. Diventate root, caricando in memoria il suo
ambiente. Stampate le variabili di ambiente con il comando export. Confrontate l'output attuale con quello dell'esercizio precedente.
Notate qualcosa di strano?
347
Esecuzione di una shell(Come un altro utente specifico)
È possile diventare un altro utente specifico, passando il suo nome di login come argomento di su.Ad esempio, per lanciare una shell come utente docente (e caricare il suo ambiente):
su - docente
348
Esercizi (1 min.)27. Lanciate una shell da utente studente.
349
Esecuzione di un comando generico(Come un utente specifico)
È possile lanciare non solo una shell, bensì un comando specifico. Il comando è specificato come argomento dell'opzione -c di su.
Ad esempio, per lanciare il comando top come utente docente, potete scrivere:
su -c top – docente
350
Esecuzione di un comando generico(Come un utente specifico)
Se il comando è complesso (ossia, contiene a sua volta opzioni e argomenti) va scritto fra virgolette. Ad esempio, se volete eseguire il comando pidstat -u 1, dovete scrivere il comando: su -c “pidstat -u 1” – docente
351
Esercizi (1 min.)28. Lanciate da utente studente un comando
che mostri i file nascosti nella sua home directory.
352
Una domanda (im)pertinente(Di quelle che fanno guadagnare punti bonus)
È possibile eseguire comandi come un altro utente. Tuttavia, è necessario conoscere le credenziali dell'altro utente.
È possibile eseguire comandi come un altro utente senza dover conoscere le credenziali dell'altro utente?
Magari, presentando le proprie credenziali?Oppure, non presentandole affatto?
353
La risposta(Dovrebbe essere sufficientemente chiara)
SÌ!*Presentando le proprie credenziali oppure, addirittura, senza fornire credenziali!
*
354
Il comando sudo(Esecuzione comandi come un altro utente e/o gruppo)
Il comando esterno sudo esegue un comando come un altro utente e/o gruppo.
Proprio come il comando su.Il comando sudo è fornito dal pacchetto software sudo.Diventate root.
su - Installate il pacchetto software sudo:
apt-get install sudo
355
Il file /etc/sudoers(Configurazione di sudo)
Prima di poter usare sudo, si rende necessaria la sua configurazione. La configurazione di sudo è contenuta nel file /etc/sudoers.
Come si edita la configurazione?Si può aprire direttamente il file /etc/sudoers con un editor di testo.È preferibile usare il comando visudo che apre un editor e blocca l'accesso al file ad altri utenti.
356
Apertura del file /etc/sudoers(Il comando visudo)
Aprite il file /etc/sudoers, lanciando visudo da utente root:
su -visudo
Il comando visudo usa la variabile di ambiente EDITOR per capire quale editor eseguire.Se volete usare un editor specifico (ad es., vim), scrivete:
EDITOR=vim visudo
357
Il formato del file /etc/sudoers(Una riga Un commento o una direttiva di configurazione)→
Ogni riga del file /etc/sudoers è:un commento (primo carattere = #);una direttiva di configurazione (primo carattere ≠ #).
Una direttiva di configurazione specifica:il caricamento di altri file di configurazione.la definizione di proprietà e di alias.specifiche di permessi su utenti/gruppi di utenti.
358
Una osservazione(Non vi si può spiegare tutto in sole 72 ore)
Il formato completo del file /etc/sudoers è documentato in una pagina di manuale apposita.
man 5 sudoersSezione SUDOERS FILE FORMAT.
Sono presenti numerosi esempi di configurazione (impossibili da vedere tutti in un corso introduttivo).
man 5 sudoersSezione EXAMPLES.
359
Il file /etc/sudoers in Debian(Parte I: configurazioni di default)
## This file MUST be edited with the 'visudo' command as root.## Please consider adding local content in /etc/sudoers.d/ instead of# directly modifying this file.## See the man page for details on how to write a sudoers file.#Defaults env_resetDefaults mail_badpassDefaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
360
Il file /etc/sudoers in Debian(Parte 0: commenti)
## This file MUST be edited with the 'visudo' command as root.## Please consider adding local content in /etc/sudoers.d/ instead of# directly modifying this file.## See the man page for details on how to write a sudoers file.#Defaults env_resetDefaults mail_badpassDefaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Questi sono commenti. Potete bellamente trascurarli.
361
Il file /etc/sudoers in Debian(Parte 1: configurazioni di default)
## This file MUST be edited with the 'visudo' command as root.## Please consider adding local content in /etc/sudoers.d/ instead of# directly modifying this file.## See the man page for details on how to write a sudoers file.#Defaults env_resetDefaults mail_badpassDefaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Per tutti gli utenti è abilitata la proprietà env_reset. I comandi lanciati con sudo eseguono in un ambiente ristretto comprendente poche e selezionate variabili di ambiente.
362
Il file /etc/sudoers in Debian(Parte 1: configurazioni di default)
## This file MUST be edited with the 'visudo' command as root.## Please consider adding local content in /etc/sudoers.d/ instead of# directly modifying this file.## See the man page for details on how to write a sudoers file.#Defaults env_resetDefaults mail_badpassDefaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Per tutti gli utenti è abilitata la proprietà mail_badpass. Se un utente sbaglia la password, viene inviata una e-mail all'indirizzo di posta elettronica dell'amministratore dell'host.
“username is not in the sudoers file.This incident will be reported.”
363
Il file /etc/sudoers in Debian(Parte 1: configurazioni di default)
## This file MUST be edited with the 'visudo' command as root.## Please consider adding local content in /etc/sudoers.d/ instead of# directly modifying this file.## See the man page for details on how to write a sudoers file.#Defaults env_resetDefaults mail_badpassDefaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Per tutti gli utenti è abilitata la proprietà secure_path. I comandi lanciati con sudo ricevono una variabile di ambiente PATH con il valore specificato nell'argomento.
364
Il file /etc/sudoers in Debian(Parte 2: definizione degli alias)
# Host alias specification
# User alias specification
# Cmnd alias specification
365
Il file /etc/sudoers in Debian(Parte 2: definizione degli alias)
# Host alias specification
# User alias specification
# Cmnd alias specification
Qui si possono inserire degli alias, ovvero stringhe di testo mirate a semplificare la costruzione dei comandi (un po' come gli alias di shell).
Attualmente non sono definiti alias.
366
Il file /etc/sudoers in Debian(Parte 2: definizione degli alias)
# Host alias specification
# User alias specification
# Cmnd alias specification
Esempio di alias: si vuole usare la stringa WEBMASTERS per identificare tutti gli utenti responsabili di un sito Web.Si scrive:
User_Alias WEBMASTERS = will, wendy, wimSi usa WEBMASTERS al posto di will, wendy, wim.
367
Il file /etc/sudoers in Debian(Parte 3: specifica dei privilegi utente)
# User privilege specificationroot ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command%sudo ALL=(ALL:ALL) ALL
368
Il file /etc/sudoers in Debian(Parte 3: specifica dei privilegi utente)
# User privilege specificationroot ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command%sudo ALL=(ALL:ALL) ALL
Queste sono specifiche di privilegi per utenti e gruppi.La specifica ha il seguente formato (semplificato):<who> <where> = <as whom> <what>
Who: chi ha il permesso di eseguireWhere: da quali host ha il permesso di eseguireAs whom: chi può diventare prima di eseguireWhat: cosa può eseguire
369
Il file /etc/sudoers in Debian(Parte 3: specifica dei privilegi utente)
# User privilege specificationroot ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command%sudo ALL=(ALL:ALL) ALL
Studiamo la prima specifica di permessi.
370
Il file /etc/sudoers in Debian(Parte 3: specifica dei privilegi utente)
# User privilege specificationroot ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command%sudo ALL=(ALL:ALL) ALL
<who> <where> = <as whom> <what>
La specifica riguarda l'utente root.
371
Il file /etc/sudoers in Debian(Parte 3: specifica dei privilegi utente)
# User privilege specificationroot ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command%sudo ALL=(ALL:ALL) ALL
<who> <where> = <as whom> <what>
La specifica è valida su tutti i possibili host di Internet (ALL).È possibile restringere l'esecuzione a specifici indirizzi IP. Nella pratica, qui si lascia sempre ALL.
372
Il file /etc/sudoers in Debian(Parte 3: specifica dei privilegi utente)
# User privilege specificationroot ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command%sudo ALL=(ALL:ALL) ALL
<who> <where> = <as whom> <what>
L'utente root può trasformarsi in un qualunque altro utente (primo ALL).Il gruppo primario dell'utente root può trasformarsi in un qualunque altro gruppo (secondo ALL).
373
Il file /etc/sudoers in Debian(Parte 3: specifica dei privilegi utente)
# User privilege specificationroot ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command%sudo ALL=(ALL:ALL) ALL
<who> <where> = <as whom> <what>
L'utente root può eseguire tutti i comandi possibili.
374
Il file /etc/sudoers in Debian(Parte 3: specifica dei privilegi utente)
# User privilege specificationroot ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command%sudo ALL=(ALL:ALL) ALL
La seconda specifica è quasi identica alla prima.L'unica differenza è la presenza del carattere % prima del primo campo.Il carattere % permette a sudo di interpretare la stringa seguente come il nome di un gruppo.
→ I membri del gruppo sudo hanno le stesse facoltà di lancio privilegiato concesse all'utente root.
375
Il file /etc/sudoers in Debian(Parte 4: caricamento di ulteriori configurazioni)
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
376
Il file /etc/sudoers in Debian(Parte 4: caricamento di ulteriori configurazioni)
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
La direttiva includedir carica ed interpreta tutti i file di configurazione contenuti nella directory passata come argomento (/etc/sudoers.d).L'ordine di caricamento è quello alfanumerico.
Attualmente non sono caricati ulteriori file (la direttiva è commentata).
377
Lettura dei propri privilegi(AKA “Che cosa mi fa fare sudo?”)
L'opzione -l di sudo specifica cosa può fare l'utente attuale.
sudo -lSe specificata due volte, l'opzione -l produce un output più prolisso.
sudo -llL'opzione -U specifica il nome di login dell'utente di cui si vogliono ottenere i privilegi di lancio.
sudo -llU docente
378
L'output del comando(Deprimente per alcuni, euforico per altri)
Chi ha appena installato sudo si vedrà comparire con ogni probabilità un output simile.
L'utente nome_login non può eseguire sudo su host_name.
Chi ha già installato e configurato sudo si vedrà comparire con ogni probabilità un output simile.
L'utente nome_login può eseguire i seguenti comandi su nome_host:
Voce sudoers: RunAsUsers: ALL Comandi:
ALL
379
Una amara constatazione(sudo non fa eseguire nulla in maniera privilegiata)
Il comando sudo è configurato per non far eseguire nulla in maniera privilegiata a chi non soddisfa i requisiti del file /etc/sudoers.Per poter usare sudo bisognerebbe:
essere rootOPPURE
far parte del gruppo sudo.
380
Aggiunta al gruppo sudo(Rende possibile l'esecuzione di qualunque comando con privilegi arbitrari)
Aggiungetevi al gruppo sudo:gpasswd -a andreoli sudo
(sostituite andreoli con il nome di login del vostro utente).Terminate la sessione di lavoro ed autenticatevi nuovamente.
381
Esecuzione di un comando(Con privilegi di root)
Nella sua forma più semplice, il comando sudo riceve un solo argomento: il comando da eseguire.
Il comando è eseguito usando l'utente root ed ilgruppo root.
Provate ad eseguire:sudo cat /dev/sda
382
L'output del comando(Il contenuto del disco /dev/sda)
L'output del comando è il contenuto del primo disco rigido SATA, rappresentato in ASCII.
Il comando è stato eseguito come utente root.È stata chiesta una password, che non è quella dell'utente finale (root), bensì quella dell'utente di partenza (andreoli)!
383
Esercizi (2 min.)
29. Lanciate il comando seguente come utente normale e come utente root (usando sudo):env
Di quante righe consta l'output in entrambi i casi? Notate delle differenze?
384
L'ambiente di esecuzione di sudo(Ridotto rispetto a quello standard)
Il comando sudo:genera un processo figlio;seleziona alcune specifiche variabili di ambiente;
esegue l'immagine del comando con gli argomenti ele variabili di ambiente scelte.
L'esercizio precedente vi ha mostrato una tecnica per mostrare l'ambiente di esecuzione di sudo.
385
Come verificare che siamo root?(Malfidati…)
Potete verificare di avere credenziali di root con il comando id.Per ottenere gli identificatori reali dell'utente, del gruppo e dei gruppi secondari, eseguite:
sudo id -r -usudo id -r -gsudo id -r -G
→ Siete realmente root; appartenete all'unico gruppo root.
386
Esecuzione di un comando(Con i privilegi di un utente specifico)
L'opzione -u di sudo permette di specificare il nome di login dell'utente che eseguirà il comando.Ad esempio, per eseguire il comando id come utente docente:
sudo -u docente id
387
Esecuzione di un comando(Con i privilegi di un gruppo specifico)
L'opzione -g di sudo permette di specificare il nome del gruppo primario sotto cui si eseguirà il comando.L'utente può far parte o no del gruppo.Ad esempio, per eseguire il comando id come utente docente e gruppo root:
sudo -u docente -g root id
388
Esercizi (2 min.)30. Eseguite come utente studente e gruppo
primario disk il comando che legge il primo disco rigido SATA.
389
Gestione delle credenziali(Ogni quanto sudo chiede la password?)
Quando si lancia un comando con sudo, quest'ultimo può chiedere la password:
ogni volta.dopo N minuti di inattività.mai.
Sicurezza
Comoditàd'uso
390
Timeout di richiesta password(Più piccolo è, meglio è)
La proprietà timestamp_timeout permette di impostare l'intervallo massimo di validità dei privilegi acquisiti. Scaduto l'intervallo, al primo comando immesso tramite sudo viene chiesta nuovamente la password.Ad esempio, per impostare un intervallo di validità di 5 minuti, scrivete in /etc/sudoers:Defaults timestamp_timeout=5
391
In un mondo ideale...(…timestamp_timeout dovrebbe essere impostato a 0!)
Il valore ottimale di timestamp_timeout dal punto di vista della sicurezza è 0.
Se timestamp_timeout ≠ 0, è possibile per un estraneo dare comandi con sudo senza la password.
È sufficiente lasciare incustodito il vostro portatile,con un terminale aperto su cui si è già dato ilcomando sudo (ad es., per un aggiornamentosoftware).
392
Nel mondo reale...(…timestamp_timeout ha un valore ≫ 0!)
Nelle distribuzioni GNU/Linux, il valore di default per timestamp_timeout è ≫0.Quanto è grande?
15 minuti!
393
Esecuzione globale senza password(NON FATELO SULLE VOSTRE MACCHINE)
È possibile disabilitare in maniera permanente la richiesta di una password.Disabilitate la proprietà authenticate nel file /etc/sudoers.Defaults !authenticate
Occhio! Il comando sudo non chiede più la password a nessuno!
394
Esecuzione globale per utente/gruppo(Senza password; non fatelo sulle vostre macchine, per favore)
Il comando sudo permette di etichettare (tag) i singoli comandi.
man 5 sudoersPer ottenere un elenco dei tag, cercate Tag_Spec.
L'etichetta NOPASSWD: disabilita la richiesta di password per un dato comando.Se il comando è ALL si disabilitano tutti i →comandi!
395
Esecuzione globale per utente/gruppo(Senza password; non fatelo sulle vostre macchine, per favore)
Modificate come segue la riga relativa al gruppo sudo nel file /etc/sudoers.
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
Etichetta Comando
396
Esecuzione comandi specifici(Senza password; se proprio dovete farlo, fatelo così)
Nell'ultima posizione di una specifica di privilegi potete scrivere, al posto della stringa ALL, un elenco di comandi specifici che volete siano eseguiti con le caratteristiche volute.Scriverete in /etc/sudoers:%sudo ALL=(ALL:ALL) NOPASSWD: /path/to/cmd1,/path/to/cmd2,...
OCCHIO! Va scritto il percorso assoluto del comando.
397
Esecuzione comandi specifici(Senza password; se proprio dovete farlo, fatelo così)
Esempio: il comando slabtop mostra le allocazioni di memoria del kernel ai vari sottosistemi.Per motivi di sicurezza, l'esecuzione di slabtop è permessa al solo utente root. Se volete eseguire slabtop senza password, scriverete in /etc/sudoers:%sudo ALL=(ALL:ALL) NOPASSWD: /usr/bin/slabtop
398
Esercizi (2 min.)31. Modificate il file /etc/sudoers in modo
tale da permettere al vostro utente l'esecuzione come root e senza password dei seguenti comandi:slabtopcat /dev/mem
399
Ricapitolando(Repetita iuvant)
Abusate di sudo il meno possibile. Se proprio dovete usarlo, cercate di seguire quest'ordine (i primi suggerimenti sono preferibili):
abilitate singoli comandi con password.abilitate tutti i comandi con password.abilitate singoli comandi senza password.abilitate tutti comandi senza password.disabilitate la richiesta di password per tutti.
Livello dicompetenzadell'utente
Inetto
Provetto
400
Registro delle esecuzioni di sudo(Ogni tentativo di uso è segnato in un file di log con il relativo esito)
I SO GNU/Linux registrano i diversi eventi di autenticazione nel file /var/log/auth.log.Ogni riga di tale è un record i cui campi sono separati da uno o più spazi:
<data> <host> <appl:> <info>
Datadell'evento
Nomedell'host
Stringa cheidentifica ilprocesso
(notare i :)
Stringa chedettaglia
il tipo di evento
401
Un piccolo esperimento(Osservate il file /var/log/auth.log mentre vi autenticate con sudo)
Configurate sudo in modo tale da permettervi l'esecuzione di un comando qualunque come utente root.Aprite due terminali su due finestre distinte; che siano entrambe visibili.
Su un terminale guardate in diretta le ultime righe di/var/log/auth.log, scrivendo il comandotailf /var/log/auth.log.Sull'altro terminale eseguite il comando con privilegipiù elevati, ad esempio: sudo top.
402
Il risultato dell'esperimento(Analizziamo le righe di /var/log/auth.log)
Dovreste vedere queste tre righe di output.
403
Il risultato dell'esperimento(Analizziamo le righe di /var/log/auth.log)
Il comando sudo riceve una richiesta di esecuzione:
del comando /usr/bin/topcome utente rootsul terminale pts/1 (gnome-terminal).
404
Il risultato dell'esperimento(Analizziamo le righe di /var/log/auth.log)
La richiesta è accettata dal modulo software autenticatore opportuno, dal nome piuttosto criptico di pam_unix(sudo:session).
Viene registrato l'inizio di una sessione, che dura finoa quando non termina l'esecuzione del comando.
405
Il risultato dell'esperimento(Analizziamo le righe di /var/log/auth.log)
Al termine del comando, la sessione viene chiusa.
406
Un altro piccolo esperimento(Osservate il file /var/log/auth.log mentre fallite l'autenticazione)
Configurate sudo in modo tale da permettervi l'esecuzione di un comando qualunque con password, come utente root.Aprite due terminali su due finestre distinte.
Su un terminale guardate in diretta le ultime righe di/var/log/auth.log, scrivendo il comandotailf /var/log/auth.log.Sull'altro terminale eseguite il comando con privilegipiù elevati, ad esempio: sudo top. Sbagliate lapassword e fate fallire sudo.
407
Il risultato dell'esperimento(Analizziamo le righe di /var/log/auth.log)
Dovreste vedere queste due righe di output.
408
Il risultato dell'esperimento(Analizziamo le righe di /var/log/auth.log)
Il modulo autenticatore di sudo segnala il fallimento della autenticazione:
da parte dell'utente andreoli su pts/1che voleva diventare rootsul terminale pts/1 (gnome-terminal).
409
Il risultato dell'esperimento(Analizziamo le righe di /var/log/auth.log)
Il motivo del fallimento dell'autenticazione è:tre tentativi di immissione della password falliti.
410
Bit setuid/setgid(Esecuzione automatica con privilegi elevati)
GNU/Linux offre un ulteriore supporto per l'esecuzione con privilegi elevati: i bit di permessi setuid e setgid.Una volta impostati tali permessi con il comando chmod, il processo esegue con i seguenti privilegi:
identificatore utente → identificatore creatore fileIdentificatore gruppo → identificatore gruppo file
Non sono necessari altri comandi.
411
Impostazione del bit setuid/setgid (Tramite il comando chmod)
Il comando chmod imposta anche i permessi setuid e setgid.
chmod u+s: impostazione bit setuid.chmod g+s: impostazione bit setgid.chmod u-s: rimozione bit setuid.chmod g-s: rimozione bit setgid.
412
Esercizi (5 min.)32. Copiate il file dell'eseguibile top nella vostra
home directory, dandogli il nome newtop.Cambiate utente creatore e gruppo del file nel modo seguente:
utente creatore → root.gruppo del file → root.
Impostate il setuid bit ed eseguite newtop.Stampate UID, GID, EUID, EGID con il comando ps.Con quali diritti esegue newtop?
413
Capability(I privilegi di root sono spezzati in tanti piccoli privilegi)
GNU/Linux offre un ulteriore supporto per l'esecuzione con privilegi elevati: le capability.I due comandi usati per leggere ed impostare le capability sono getcap e setcap.
414
Lettura di capability(Il comando getcap)
Il comando getcap mostra le capability di un file. Il suo uso è molto semplice:
getcap [OPZIONI] file…
Ad esempio:getcap /bin/ls
415
Esercizi (1 min.)33. Per quale motivo non siete riusciti ad eseguire
il comando getcap?Che cosa dovete fare per eseguire il comando getcap?
416
Come trovare comandi con capability(Comando getcap, argomento “*”)
Per scoprire i comandi con capability potete eseguire getcap con argomenti “wildcard” che rappresentano gli eseguibili in questione:
getcap /bin/* /sbin/* /usr/bin/* /usr/sbin/*
Scoprirete l'esistenza di alcuni comandi che, per essere eseguiti da utente normale, devono acquisire particolari privilegi.
417
Esempio: comando ping(Verifica la connettività di un host)
Il comando ping verifica se un host remoto è raggiungibile.
ping towel.blinkenlights.nl
Per funzionare, ping ha bisogno di costruire “a mano” pacchetti di controllo ed inviarli.
Ciò non è concesso a tutti.Ciò è concesso a root.Ciò è concesso a chi esegue un comando con lacapability cap_net_raw attiva sull'eseguibile.
418
Un'occhiata alle capability di ping(What's that “+ep” about?)
L'output del comando:/sbin/getcap /bin/ping
è la stringa seguente:/bin/ping = cap_net_raw+ep
Il comandoin questione
La capabilityassegnata
La capability aggiunta (+)è effettiva (e)
e permessa (p)
419
Il formato delle capability di getcap(Una sequenza di clausole separate dal carattere ,)
In generale, le capability mostrate dal comando getcap sono rappresentate da un insieme di clausole separate dal carattere , (virgola).
comando = clausola1,clausola2,…,clausolaN
Ogni clausola è composta da:un elenco di capability;un'azione (aggiunta, rimozione, reset+aggiunta);un elenco di insiemi di capability su cui compierel'azione.clausola = <capability><azione><insiemi>
420
Elenco delle capability(Un elenco di nomi validi di capability separato da “,”, oppure all)
L'elenco delle capability è separato dal carattere , (virgola). L'elenco può anche essere nullo.
Per specificare tutte le capability si può usare la parola chiave all.
421
Azioni sulle capability(+ aggiunge; - rimuove; = pulisce prima di reimpostare)
L'azione sulle capability è uno dei tre caratteri seguenti:
+ aggiunge le capability→- rimuove le capability→= rimuove le capability considerate dagli insiemi→
effective, permitted ed inheritable, prima diimpostarle.
422
Insiemi delle capability(e effettive; → p permesse; → i ereditate)→
Gli insiemi delle capability sono uno o più dei seguenti insiemi:
e → insieme delle capability effettive (effective)p → insieme delle capability permesse (permitted)i → insieme delle capability ereditate (inherited)
423
Capire che cosa fa l'azione “=”(Con un esempio, si spera semplice)
Esempio: che cosa fa all=p?all → considera tutte le capability= → rimuove tutte le capability dagli insiemi e, p,
i prima di impostarlep → imposta le capability richieste nell'insieme p
(permitted)
424
Impostazione di capability(Il comando setcap)
Il comando setcap imposta le capability di un file. Il suo uso è molto semplice:
getcap [OPZIONI] capability file
Ad esempio:setcap cap_net_raw+ep comando
425
Esercizi (5 min.)34. Usando il comando cp, copiate il comando ping nella vostra home directory, dandogli il nome newping.
Annullate le capability del file newping.Eseguite newping 8.8.8.8. Funziona?Assegnate le capability cap_net_raw agli insiemi permitted ed effective sul file newping.Eseguite newping 8.8.8.8. Funziona?
426
CONTRASTO ALLEATTIVITÀ MALIZIOSE
427
Scenario e domande(Esistono strumenti per limitare le risorse ad un utente?)
Scenario: in un SO moderno (time sharing, multi-utente), un amministratore vuole identificare utenti “maliziosi” e limirare le risorse ad essi assegnate.
Domande:Esistono strumenti per controllare se gli utenti esibiscono comportamenti maliziosi?Esistono strumenti per limitare i comportamenti maliziosi?
428
Comportamenti maliziosi considerati(I più importanti)
(a) Un utente prova ad effettuare (in maniera automatizzata) molteplici login consecutivi.
Obiettivo: indovinare una coppia (nome di login,password) valida sull'host.
(b) Un utente prova spesso ad eseguire comandi con privilegi elevati.
Obiettivo: conseguire i diritti di root.
(c) Un utente manda in crash il SO.Obiettivo: negare il servizio sull'host.
429
Intercettare tentativi di login(Il caso (a))
Il comando lastb elenca gli ultimi tentativi di login falliti. Ciascuna riga dell'output è un record rappresentante un singolo tentativo di login.Il formato dei record è il seguente:<nome login> <terminale di login> <host di login> <data login> <data logout> <durata>
Provate il comando (richiede i privilegi di root):sudo lastb
430
Un esempio di output di lastb(Chi ha provato a connettersi da dove a che ora)
431
Un esempio di output di lastb(Chi ha provato a connettersi da dove a che ora)
Nome di login dell'utente.UNKNOWN → lastb non è riuscito a determinare il nome di login.
432
Un esempio di output di lastb(Chi ha provato a connettersi da dove a che ora)
Meccanismo usato per provare l'autenticazione.ssh:notty: login da remoto tramite protocollo SSH.tty3: login locale tramite il terzo emulatore di terminale(/dev/tty3, raggiungibile tramite Ctrl-Alt-F3).:0: login locale tramite il gestore grafico.
433
Un esempio di output di lastb(Chi ha provato a connettersi da dove a che ora)
Sistema che subisce il tentativo di login.localhost: l'host locale, tramite il protocollo SSH.:0: l'host locale, tramite il gestore grafico.
434
Un esempio di output di lastb(Chi ha provato a connettersi da dove a che ora)
Data iniziale, data finale e durata del tentativo di login.Solitamente, la durata è nulla (0m, 0s).
435
Esercizi (3 min.)35. Il comando lastb registra le informazioni di
login e logout in un file ben specifico. Sapreste scoprire di quale file si tratta?
436
Alcune opzioni utili(Opzioni -n, -F, -w, -t, -f)
-n number, -number: mostra le number righe più recenti.-F: stampa estesa delle date di login e logout.-w: stampa estesa del nome di login e del dispositivo di login.-t YYYYMMDDHHMMSS: visualizza l'elenco dei login fino all'istante temporale specificato.-f filename: analizza un file alternativo a /var/log/btmp.
437
Come individuare i tentativi di login?(Contate il numero di tentativi di login nell'output di lastb)
Si stampa l'output di lastb e lo si analizza. I sintomi seguenti indicano un possibile tentativo di login malizioso.
Tanti tentativi di login in un breve arco di tempo.Tentativi di login con nomi di utente diversi.Tentativi di login da un singolo host remoto.
438
Esercizi (3 min.)36. Scaricate il file lastb.txt dalla sezione
“Approfondimenti” della presente lezione.Studiate tale file e giudicate se l'host è stato vittima di tentativi di login maliziosi.
439
Intercettare tentativi di esecuzione(Il caso (b))
Si stampa il file /var/log/auth.log e si stampano tutte e sole le righe dettaglianti i fallimenti.Una riga dettagliante un fallimento contiene la stringa authentication failure. La riga successiva contiene il motivo specifico del fallimento.
→ Il comando richiesto è:grep -A1 “authentication failure”
/var/log/auth.log
440
Come individuare i tentativi di esecuzione?(Contate il numero di tentativi falliti nel file /var/log/auth.log)
I sintomi seguenti indicano un possibile tentativo di esecuzione di comando malizioso.
Tentativi di esecuzione di una shell da utente root.Tanti tentativi di esecuzione in un breve lasso ditempo.
441
Esercizi (3 min.)37. Scaricate il file auth_log.txt dalla sezione
“Approfondimenti” della presente lezione.Studiate tale file e giudicate se l'host è stato vittima di tentativi di esecuzione maliziosi.
442
Intercettare crash di sistema(Il caso (c))
Il comando last elenca gli ultimi tentativi di login andati a buon fine. Ciascuna riga dell'output è un record rappresentante un singolo tentativo di login.Il formato dei record è il seguente:<nome login> <terminale di login> <host di login> <data login> <data logout> <durata>
Provate il comando:last
443
Un esempio di output di last(Chi è riuscito a connettersi da dove a che ora)
444
Un esempio di output di last(Chi è riuscito a connettersi da dove a che ora)
Nome di login dell'utente.unknown → last non è riuscito a determinare il nome di login.
445
Un esempio di output di last(Chi è riuscito a connettersi da dove a che ora)
Meccanismo usato per l'autenticazione.pts/X: login locale tramite emulatore di terminale grafico (gnome-terminal).tty2: login locale tramite il terzo emulatore di terminale(/dev/tty2, raggiungibile tramite Ctrl-Alt-F2).:0: login locale tramite il gestore grafico.
446
Un esempio di output di last(Chi è riuscito a connettersi da dove a che ora)
Sistema su cui il login è andato a buon fine.:0: l'host locale, tramite il gestore grafico.
447
Un esempio di output di last(Chi è riuscito a connettersi da dove a che ora)
Data di login, data di logout e durata della sessione.Se non è stato registrato un logout utente, il SO assume che sia avvenuto un crash e stampa, invece, la stringa crash.
448
Come individuare i tentativi di crash?(Contate il numero di crash nell'output di last)
Si stampa l'output di last e lo si analizza. I sintomi seguenti indicano un possibile tentativo di negazione del servizio sulla macchina.
Presenza di più stringhe crash da parte dello stessoutente (recidivo).
449
Esercizi (3 min.)38. Scaricate il file last.txt dalla sezione
“Approfondimenti” della presente lezione.Studiate tale file e giudicate se l'host è stato vittima di tentativi di negazione del servizio maliziosi.
450
Come difendersi?(“Son of a bitch!”)
451
Cancellazione di un account(Nei casi più gravi)
Scenario: un utente si è comportato male e va radiato dal sistema.
Azione: la misura più drastica è la cancellazione dell'account utente (e l'eventuale gruppo primario).
deluser andreolidelgroup andreoli
452
Addendum(Non cancellate la home directory dell'utente!)
Non cancellate la la home directory dell'utente!Il suo contenuto può permettere la ricostruzione delle azioni condotte dall'utente.
→ Potete studiare e capire che cosa ha fatto l'utente (e prevenirlo, in futuro).
→ Un tecnico forense può ricostruire le azioni svolte dall'utente e facilitare il lavoro di una eventuale indagine giudiziaria.
453
Esercizi (1 min.)39. Supponiate che l'utente docente abbia
combinato un pasticcio e gli debba essere impedito ogni tipo di accesso alla macchina del laboratorio.
Che cosa fareste?
NOTA: non eseguite fisicamente tale azione. Individuatela e basta.
454
Che fare se l'account non è cancellabile?(Purtroppo è possibile)
In alcuni casi non è pensabile cancellare un account utente.Ad esempio, considerate un utente remoto malizioso che prova a connettersi tramite protocollo SSH alla vostra macchina.
L'utente remoto si presenta come root. Vi sentirestedi cancellare l'account root sul vostro host?L'utente remoto si presenta con un nome di login nonpresente sul vostro host. Non potete cancellarlo.
Che fare?
455
Blocco login remoto(Per impedire ad utenti entrare nella vostra macchina)
Scenario: un utente remoto sta provando a connettersi via SSH al vostro host.
Azione: usate il software Fail2ban.Scandisce i file di log delle autenticazioni.Individua le macchine remote da cui un utente haprovato ad autenticarsi, fallendo.Blocca le comunicazioni della macchina remota sulservizio SSH per un certo intervallo di tempo.
456
Installazione di Fail2ban(Semplicissima)
Per installare il software Fail2ban digitate il comando seguente da root:
apt-get install fail2ban
Viene installato ed attivato un servizio che esegue le operazioni succitate.
457
Rimozione dei privilegi di esecuzione(Per chi fa il furbetto, provando a diventare root)
Scenario: un utente locale sta abusando del comando sudo per (provare ad) eseguire comandi con i privilegi di root.
Azione: esaminate il file /etc/sudoers e togliete ogni privilegio di esecuzione all'utente.
Rimuovete righe di configurazione specifiche perl'utente.Rimuovete l'utente dai gruppi dei “power user” (sudo,wheel, …).
458
Esercizi (2 min.)40. Controllate che il file /etc/sudoers non
abbia alcuna configurazione particolare per l'utente docente.
Rimuovete l'utente docente da ogni gruppo di power user.
459
Limitazione delle risorse di shell(Per chi ha provato a lanciare una fork bomb)
Scenario: un utente locale ha mandato in crash il SO, ad esempio tramite una fork bomb.
Azione: riducete le risorse assegnate alla shell eseguita dall'utente, in modo tale da impedire la negazione del servizio.
460
Gestione delle risorse di shell(Comando builtin ulimit)
Il comando builtin ulimit gestisce le risorse assegnate ad una shell.
Numero massimo di processi eseguibili.Numero massimo di file aperti simultaneamente.Quantitativo massimo di memoria prenotabile.…
man 2 setrlimit per tutti i dettagli.
461
Visione delle risorse di shell(Comando builtin ulimit, opzione -a)
Il comando builtin ulimit -a stampa tutte le risorse assegnate ad un utente.L'output è un elenco di risorse (con annesse unità di grandezza) ed il loro limite massimo.
Risorsa assegnataalla shell
Unità dimisura
Limite
462
Limiti soft e limiti hard(Now I'm confused)
Limite soft. Il limite soft è il valore della risorsa che il kernel non fa superare alla shell.
Limite hard. Il limite hard è un tetto imposto sul valore del limite soft.
463
Domande(Indotte dalla confusione)
Perché servono due limiti?
Non ne basta uno solo?
Qual è il ruolo di “soft”?
Qual è il ruolo di “hard”?
464
Funzionamento dei limiti(Per l'utente non privilegiato)
L'utente non privilegiato può svolgere le seguenti operazioni.
Può impostare il valore del limite soft nell'intervallo[0, limite hard].Può abbassare il valore del limite hard in manierairreversibile (cfr. livello di cortesia).
Ora è chiaro il ruolo del limite hard. Esso funge da limitatore del massimo valore assegnabile ad una risorsa.
465
Funzionamento dei limiti(Per l'utente privilegiato)
L'utente privilegiato, ossia:rootchi ha ricevuto la capability CAP_SYS_RESOURCE
può alterare i limiti soft e hard arbitrariamente.
466
Visione dei due limiti(Comando ulimit, opzioni -S e -H)
L'opzione -S di ulimit mostra il valore attuale del limite soft.
ulimit -S -a
L'opzione -H di ulimit mostra il valore attuale del limite hard.
ulimit -H -a
467
Confronto dei limiti soft e hard(Sono leggermente diversi)
468
Una osservazione(Il numero massimo di processi assegnato è molto elevato)
Il numero massimo di processi eseguibili nella sessione di shell è molto elevato, e permette ad una fork bomb di autoalimentarsi.
Se si abbassa drasticamente tale valore, non sarà più permessa la creazione di nuovi processi e, pertanto, la fork bomb perderà di efficacia.
469
Abbassamento del limite sui processi(Per mitigare l'impatto di una fork bomb)
Aprite un nuovo terminale. Mostrate l'help in linea di ulimit.
help ulimitQuale opzione permette di modificare il limite sul numero di processi eseguibili?
L'opzione è la -u.Abbassate il numero massimo di processi ad un valore basso, ad esempio 300.
ulimit -u 300
470
BIG FAT WARNING(You have been warned)
L'abbassamento del limite vale esclusivamente per la shell su cui avete lanciato il comando ulimit!
Le limitazioni non valgono nelle altre shell.Le limitazioni non sono permanenti.
471
Verifica del nuovo limite(Controllare fa sempre bene; non si sa mai…)
Controllate che il nuovo limite sia stato applicato.ulimit -a
Dovreste leggere una riga del tipo:max user processes (-u) 300
472
Esecuzione fork bomb(Non riesce più ad eseguire come prima)
Eseguite la fork bomb sul terminale su cui avete ristretto il numero massimo di processi.
:(){ :|: & };:
Notate come il SO non faccia più partire i processi figli.
473
Impatto della fork bomb sul SO(È praticamente nullo)
Aprite un altro terminale ed usatelo.Notate rallentamenti? Non dovrebbero esservene.
L'impatto della fork bomb è praticamente nullo.
474
Come rendere permanenti le restrizioni?(Le scrivete nel file /etc/security/limits.conf)
Le restrizioni applicate non sono permanenti. Esse svaniranno alla chiusura del terminale.
Come fare per renderle permanenti?Potete scrivere le modifiche nel file seguente:
/etc/security/limits.conf
475
Il formato del file(La solita base di dati composta da n righe, 1 record per riga)
Il file /etc/security/limits.conf è una base di dati primordiale.
Elenco di record (uno per riga).I campi di un record sono separati da spazi.
Il formato del record è il seguente:<domain> <type> <item> <value>
Utenteo gruppo
Tipo dilimite
Nomedella risorsa
Valoredel limite
476
Modifica permanente sui processi(Facilissima)
Aggiungete una restrizione del genere.Utente: andreoliTipo: hardRisorsa: nprocValore: 300
Scrivete in fondo al file:andreoli hard nproc 300
477
Esercizi (5 min.)41. Applicate una restrizione permanente sul
numero massimo di processi eseguibili dall'utente docente al terminale.
Verificate che una fork bomb non abbia più effetti catastrofici sul SO.
478
Esercizi (10 min.)42. Applicate una restrizione permanente sul
tempo massimo di CPU utilizzabile dall'utente docente al terminale.
Ad esempio, impostate un tempo max. di 1 minuto.Verificate che un comando CPU-bound esegua per al più il tempo massimo impostato.