Lezione 7 - UNIMORE · 1 Lezione 7 Gestione degli utenti Sistemi Operativi (9 CFU), CdL...

Post on 11-Aug-2020

6 views 0 download

Transcript of Lezione 7 - UNIMORE · 1 Lezione 7 Gestione degli utenti Sistemi Operativi (9 CFU), CdL...

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.