Linux Professional Institute Learning Logo.
Torna al contenuto principale
  • Home
    • Tutte le Risorse
    • LPI Learning Materials
    • Collabora
    • Publishing Partner
    • Diventa un Publishing Partner
    • FAQ
    • Collaboratori
    • Contatto
  • LPI.org
5.1 Lezione 1
Argomento 1: La Comunità Linux e una Carriera nell'Open Source
1.1 Evoluzione di Linux e Sistemi Operativi più Diffusi
  • 1.1 Lezione 1
1.2 Principali Applicazioni Open Source
  • 1.2 Lezione 1
1.3 Software e Licenze Open Source
  • 1.3 Lezione 1
1.4 Competenze ICT - Lavorare con Linux
  • 1.4 Lezione 1
Argomento 2: Trovare il Proprio Modo di Operare su un Sistema Linux
2.1 Nozioni di Base sulla Command Line
  • 2.1 Lezione 1
  • 2.1 Lezione 2
2.2 Utilizzo della Command Line per Ottenere Aiuto
  • 2.2 Lezione 1
2.3 Utilizzo di Directory e Elenchi di File
  • 2.3 Lezione 1
  • 2.3 Lezione 2
2.4 Creazione, Spostamento ed Eliminazione di File
  • 2.4 Lezione 1
Argomento 3: Il Potere della Command Line
3.1 Archiviazione dei File sulla Command Line
  • 3.1 Lezione 1
3.2 Ricerca ed Estrazione di Dati dai File
  • 3.2 Lezione 1
  • 3.2 Lezione 2
3.3 Trasformare i Comandi in uno Script
  • 3.3 Lezione 1
  • 3.3 Lezione 2
Argomento 4: Il Sistema Operativo Linux
4.1 Scelta di un Sistema Operativo
  • 4.1 Lezione 1
4.2 Comprendere l'Hardware del Computer
  • 4.2 Lezione 1
4.3 Dove Sono Memorizzati i Dati
  • 4.3 Lezione 1
  • 4.3 Lezione 2
4.4 Il Tuo Computer in Rete
  • 4.4 Lezione 1
Argomento 5: Sicurezza e Permessi sui File
5.1 Sicurezza di Base e Identificazione dei Tipi di Utente
  • 5.1 Lezione 1
5.2 Creazione di Utenti e Gruppi
  • 5.2 Lezione 1
5.3 Gestione delle Autorizzazioni e delle Proprietà dei File
  • 5.3 Lezione 1
5.4 Directory e File Speciali
  • 5.4 Lezione 1
How to get certified
  1. Argomento 5: Sicurezza e Permessi sui File
  2. 5.1 Sicurezza di Base e Identificazione dei Tipi di Utente
  3. 5.1 Lezione 1

5.1 Lezione 1

Certificazione:

Linux Essentials

Versione:

1.6

Argomento:

5 Sicurezza e Permessi sui File

Obiettivo:

5.1 Sicurezza di Base e Identificazione dei Tipi di Utente

Lezione:

1 di 1

Introduzione

Questa lezione tratta la terminologia di base degli account, il controllo degli accessi e la sicurezza dei sistemi Linux locali, gli strumenti della Command Line Interface (CLI) in un sistema Linux per i controlli degli accessi per la sicurezza di base e i file principali per gli account utente e di gruppo, inclusi quelli utilizzati per l’escalation dei privilegi di base.

La sicurezza di base nei sistemi Linux deriva dai controlli d’accesso Unix che, nonostante abbiano quasi cinquant’anni, sono molto efficaci in confronto ad alcuni popolari sistemi operativi di livello consumer molto più recenti. Alcuni altri popolari sistemi operativi basati su Unix tendono a “prendersi delle libertà” in termini di “facilità di accesso”, ma Linux no.

I moderni ambienti desktop Linux e le relative interfacce semplificano la creazione e la gestione degli utenti e spesso automatizzano l’assegnazione dei controlli di accesso quando un utente effettua il login, per esempio al display, all’audio e ad altri servizi, senza richiedere praticamente alcun intervento manuale da parte dell’amministratore di sistema. Tuttavia è importante comprendere i concetti di base del sistema operativo Linux sottostante.

Account

La sicurezza comprende molti concetti: uno dei più comuni è il concetto generale di controllo degli accessi. Prima di poter affrontare i controlli di accesso ai file come ownership e autorizzazioni, è necessario comprendere i concetti base relativi agli account utente Linux, che sono suddivisi in diversi tipi.

In un sistema Linux ogni utente è associato a un account che oltre alle informazioni di accesso (come nome utente e password) definisce anche come e dove l’utente può interagire con il sistema. Privilegi e controlli di accesso definiscono i “confini” entro i quali ogni utente può operare.

Identificativi (UID/GID)

Gli identificativi utente e di gruppo (UID - User Identifier/GID - Group Identifier) sono i riferimenti numerici di base agli account. Le prime implementazioni prevedevano numeri interi limitati a 16 bit (valori da 0 a 65535), ma i sistemi moderni (del 21° secolo) supportano UID e GID a 64 bit. Utenti e gruppi vengono enumerati in modo indipendente: quindi lo stesso ID può rappresentare sia un utente sia un gruppo.

Ogni utente ha non solo un UID, ma anche un GID primario. Il GID primario per un utente può essere univoco solo per quell’utente e potrebbe non essere utilizzato da altri utenti. Tuttavia, questo gruppo potrebbe anche essere un gruppo condiviso da numerosi utenti. Oltre a questi gruppi primari, ogni utente può essere membro anche di altri gruppi.

Sui sistemi Linux, per impostazione predefinita, ogni utente viene assegnato a un gruppo con lo stesso nome del proprio nome utente, e lo stesso GID del proprio UID. Per esempio, se si crea un nuovo utente chiamato newuser, per impostazione predefinita anche il suo gruppo di default sarà newuser.

L’Account Superuser

Su Linux l’account superuser è root, che ha sempre UID 0. Talvolta il superuser è chiamato amministratore di sistema e ha accesso e controllo illimitati sul sistema, inclusi gli altri utenti.

Il gruppo predefinito per il superuser ha GID 0 e anch’esso è chiamato root. La directory home del superuser è una directory di primo livello dedicata, /root, accessibile solo dall’utente root stesso.

Account Utenti Standard

Tutti gli account diversi da root sono tecnicamente account utenti ordinari, ma su un sistema Linux il termine colloquiale account utente spesso si riferisce a un account utente “ordinario” (non privilegiato). In genere hanno le seguenti proprietà, con alcune eccezioni:

  • UID che iniziano da 1000 (4 cifre), sebbene in alcuni sistemi legacy possano iniziare da 500.

  • Una determinata directory home, solitamente una sottodirectory di /home, a seconda della configurazione del sistema.

  • Una determinata shell di login. In Linux la shell predefinita è solitamente la Bourne Again Shell (/bin/bash), sebbene possano essere disponibili anche altre.

Se un account utente non ha una shell valida nei propri attributi, l’utente non sarà in grado di aprire una shell interattiva. Di solito /sbin/nologin viene usato per indicare una shell non valida. Questo può essere utile nel caso in cui l’utente venga autenticato solo per servizi diversi dalla console o dall’accesso SSH, per esempio solo per l’accesso FTP sicuro (sftp).

Note

Per evitare confusione il termine account utente in futuro verrà usato solo per indicare gli account utenti standard od ordinari. Per esempio, il termine account di sistema verrà utilizzato per fare riferimento a un account utente Linux appartenenete al tipo di account utente di sistema.

Account di Sistema

Gli account di sistema vengono generalmente creati durante l’installazione del sistema. Questi sono destinati a strutture (facility), programmi e servizi che non verranno eseguiti come superuser. In un mondo ideale, sarebbero tutte facility del sistema operativo.

Gli account di sistema variano, ma i loro attributi includono:

  • Gli UID sono generalmente inferiori a 100 (2 cifre) o vanno da 500 a 1000 (3 cifre).

  • O nessuna directory home dedicata o una directory che di solito non si trova sotto /home.

  • Nessuna shell di login valida (tipicamente /sbin/nologin), con rare eccezioni.

La maggior parte degli account di sistema su Linux non effettuerà mai il login e quindi non necessita di una shell definita nei propri attributi. Molti processi che hanno come come owner e vengono eseguiti dagli account di sistema vengono biforcati nel proprio ambiente dal gestore di sistema, in esecuzione con l’account di sistema specificato. Questi account di solito hanno privilegi limitati o, il più delle volte, nessun privilegio.

Note

Per la certificazione LPI Linux Essentials, gli account di sistema sono UID < 1000, con UID (e GID) a 2 o 3 cifre.

In generale gli account di sistema non dovrebbero avere una shell di login valida. Il contrario costituirebbe un problema di sicurezza nella maggior parte dei casi.

Account di Servizio

Gli account di servizio vengono generalmente creati quando vengono installati e configurati i servizi. Similmente agli account di sistema, sono destinati a strutture (facility), programmi e servizi che non vengono eseguiti come superuser.

In molta documentazione gli account di sistema e di servizio sono simili e spesso interscambiabili. Ciò include la posizione delle directory home, che, se definite, tipicamente si trovano al di fuori di /home (gli account di servizio hanno spesso maggiori probabilità di averne una rispetto agli account di sistema) e nessuna shell di login valida. Sebbene non esista una definizione rigorosa, la differenza principale tra gli account di sistema e di servizio sta negli UID/GID.

Account di sistema

UID/GID < 100 (2 cifre) o < 500-1000 (3 cifre)

Account di servizio

UID/GID > 1000 (4+ cifre), ma non un account utente “standard” o “ordinario”, un account per servizi, con un UID/GID > 1000 (4+ cifre)

Alcune distribuzioni Linux hanno ancora account di servizio pre-riservati con UID < 100 e potrebbero anche essere considerati account di sistema, anche se non vengono creati durante l’installazione. Per esempio, nelle distribuzioni Linux basate su Fedora (incluso Red Hat), l’utente per il server Web Apache ha UID (e GID) 48, chiaramente un account di sistema, nonostante abbia una home directory (di solito in /usr/share/httpd o /var/www/html/).

Note

Per la certificazione LPI Linux Essentials, gli account di sistema sono UID < 1000 e gli account utente ordinari sono UID > 1000. Poiché gli account utente ordinari sono > 1000, questi UID possono includere anche account di servizio.

Shell di Login e Directory Home

Alcuni account hanno una shell di login, mentre altri no per motivi di sicurezza, in quanto non richiedono un accesso interattivo. La shell di login predefinita nella maggior parte delle distribuzioni Linux è la Bourne Again Shell, o bash, ma potrebbero essere disponibili anche altre shell, come la shell C (csh), la shell Korn (ksh) o la shell Z (zsh ), giusto per nominarne alcune.

Un utente può cambiare la sua shell di login utilizzando il comando chsh. Per impostazione predefinita, il comando viene eseguito in modalità interattiva e visualizza un prompt che chiede quale shell debba essere utilizzata. La risposta dovrebbe essere il percorso completo del binario della shell, come mostrato qui sotto:

$ chsh

Changing the login shell for emma
Enter the new value, or press ENTER for the default
	Login Shell [/bin/bash]: /usr/bin/zsh

Puoi anche eseguire il comando in modalità non interattiva, con l’opzione -s seguita dal percorso del binario, in questo modo:

$ chsh -s /usr/bin/zsh

La maggior parte degli account ha una directory home definita. In Linux, questa è solitamente l’unico posto in cui un account utente ha garantito l’accesso in scrittura, con alcune eccezioni (per esempio aree temporanee del file system). Tuttavia, per motivi di sicurezza, alcuni account sono impostati appositamente per non avere alcun accesso in scrittura anche nella propria directory home.

Ottenere Informazioni Sugli Utenti

Elencare le informazioni di base degli utenti è una pratica quotidiana comune su un sistema Linux. In alcuni casi gli utenti dovranno cambiare utente e ottenere privilegi più alti per portare a termine attività privilegiate.

Anche gli utenti ordinari hanno la possibilità di elencare gli attributi e gli accessi dalla Command Line, utilizzando i comandi di seguito riportati. Le informazioni di base, in un contesto limitato, non costituiscono un’operazione privilegiata.

Per elencare sulla Command Line le informazioni correnti di un utente basta un semplice comando di due lettere: id. L’output varierà in base al tuo ID di login:

$ id
uid=1024(emma) gid=1024(emma) 1024(emma),20(games),groups=10240(netusers),20480(netadmin) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Nell’elenco precedente, l’utente (emma) possiede una serie di identificativi che possono essere suddivisi come segue:

  • 1024 = User ID (UID), seguito dal nome utente (nome comune o nome di login) tra parentesi.

  • 1024 = l’ID del gruppo primario (GID), seguito dal nome del gruppo (nome comune) tra parentesi.

  • Un elenco di GID aggiuntivi (nomi di gruppo) a cui appartiene anche l’utente.

Per elencare l’ultima volta che gli utenti si sono loggati sul sistema puoi usare il comando last:

$ last
emma     pts/3        ::1              Fri Jun 14 04:28   still logged in
reboot   system boot  5.0.17-300.fc30. Fri Jun 14 04:03   still running
reboot   system boot  5.0.17-300.fc30. Wed Jun  5 14:32 - 15:19  (00:46)
reboot   system boot  5.0.17-300.fc30. Sat May 25 18:27 - 19:11  (00:43)
reboot   system boot  5.0.16-100.fc28. Sat May 25 16:44 - 17:06  (00:21)
reboot   system boot  5.0.9-100.fc28.x Sun May 12 14:32 - 14:46  (00:14)
root     tty2                          Fri May 10 21:55 - 21:55  (00:00)
	...

Le informazioni elencate nelle colonne possono variare, ma alcune voci degne di nota dell’elenco precedente sono:

  • Un utente (emma) ha effettuato il login tramite la rete (pseudo TTY pts/3) ed è ancora loggato.

  • Viene elencata l’ora del processo di avvio corrente, insieme al kernel. Nell’esempio sopra riportato, circa 25 minuti prima che l’utente abbia effettuato l’accesso.

  • Il superuser (root) ha effettuato il login tramite una console virtuale (TTY tty2), sommariamente, a metà maggio.

Una variante del comando last è il comando lastb, che elenca tutti gli ultimi tentativi di login falliti.

I comandi who e w elencano solamente i login attivi sul sistema:

$ who
emma  pts/3        2019-06-14 04:28 (::1)

$ w
 05:43:41 up  1:40,  1 user,  load average: 0.25, 0.53, 0.51
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
emma  pts/3     04:28    1:14m  0.04s  0.04s -bash

Alcune informazioni sono mostrate da entrambi i comandi. Per esempio, un utente (emma) ha effettuato il login con uno pseudo-dispositivo TTY (pts/3) e l’ora del login è 04:28.

Il comando w mostra ulteriori informazioni, incluse le seguenti:

  • L’ora corrente e da quanto tempo il sistema è attivo

  • Il numero di utenti collegati

  • Il carico medio degli ultimi 1, 5 e 15 minuti

Vengono inoltre visualizzate informazioni aggiuntive per ogni sessione utente attiva:

  • Tempi totali di utilizzo della CPU (Select, total CPU utilization times) (IDLE, JCPU e PCPU)

  • Il processo corrente (-bash). Il tempo di utilizzo totale della CPU da parte di quel processo è l’ultimo elemento (PCPU).

Entrambi i comandi hanno ulteriori opzioni per elencare varie informazioni aggiuntive.

Cambiare Utente e Aumentare i Privilegi

In un mondo ideale, gli utenti non avrebbero mai bisogno di aumentare i privilegi per completare le proprie attività. Il sistema “funzionerebbe” sempre e tutto sarebbe configurato per i diversi tipi di accesso.

Fortunatamente per noi, Linux funziona in questo modo per la maggior parte degli utenti che non sono amministratori di sistema, nonostante segua sempre il modello di sicurezza con privilegi minimi.

Tuttavia, esistono comandi che consentono l’escalation dei privilegi quando necessario. Due dei più importanti sono su e sudo.

Attualmente, nella maggior parte dei sistemi Linux, il comando su viene utilizzato solo per aumentare i privilegi a root, che è l’utente predefinito se non viene specificato un nome utente dopo il comando. Sebbene possa essere utilizzato per passare a un altro utente, non è certamente una buona pratica: gli utenti devono effettuare il login da un altro sistema, sulla rete, o dalla console fisica o dal terminale del sistema.

emma ~$ su -
Password:
root ~#

Dopo aver inserito la password del superuser (root), l’utente ottiene la sua shell (nota il # alla fine del prompt dei comandi) e diventa, a tutti gli effetti, il superuser (root).

La condivisione delle password è una pessima pratica di sicurezza; quindi, in un moderno sistema Linux, dovrebbe esserci pochissimo bisogno, se presente, del comando su.

Il simbolo del dollaro ($) dovrebbe terminare il prompt della Command Line di una shell utente non privilegiata, mentre il simbolo cancelletto (#) dovrebbe terminare il prompt della Command Line della shell del superuser (root). È altamente raccomandato non cambiare mai il carattere finale di qualsiasi prompt da questo standard “universalmente accettato”, poiché questa nomenclatura è usata nei materiali di apprendimento, inclusi questi.

Warning

Non passare mai al superuser (root) senza passare il parametro della shell di login (-). A meno che non sia esplicitamente indicato diversamente dal SO o dal fornitore del software, quando su è necessario, dovresti eseguire sempre su - con pochissime eccezioni. Gli ambienti utente possono causare modifiche indesiderate alla configurazione e problemi se utilizzati in modalità con privilegi completi come superuser.

Qual è il problema più grande nell’usare su per passare al superuser (root)? Se la sessione di un utente ordinario è stata compromessa, la password del superuser (root) potrebbe essere individuata. È qui che entra in gioco “Switch User Do” (o “Superuser Do”):

$ cat /sys/devices/virtual/dmi/id/board_serial
cat: /sys/devices/virtual/dmi/id/board_serial: Permission denied

$ sudo cat /sys/devices/virtual/dmi/id/board_serial
[sudo] password for emma:
/6789ABC/

Nell’esempio precedente, l’utente sta tentando di individuare il numero di serie della propria scheda di sistema. Tuttavia, l’autorizzazione viene negata, poiché tali informazioni sono contrassegnate come privilegiate.

Tuttavia, usando sudo, l’utente inserisce la propria password per autenticarsi. Se è stato autorizzato nella configurazione di sudoers a eseguire quel comando con privilegi, con le opzioni consentite, funzionerà.

Tip

Per impostazione predefinita, il primo comando sudo autorizzato autenticherà i successivi comandi sudo per un certo periodo di tempo (molto breve). Questo è configurabile dall’amministratore di sistema.

File di Controllo degli Accessi

Quasi tutti i sistemi operativi hanno una serie di posizioni specifiche in cui memorizzare i controlli di accesso. In Linux questi sono tipicamente file di testo nella directory /etc, che è dove dovrebbero essere memorizzati i file di configurazione del sistema. Per impostazione predefinita, questa directory è leggibile da ogni utente sul sistema, ma scrivibile solo da root.

I file principali relativi agli account utente, agli attributi e al controllo degli accessi sono:

/etc/passwd

Questo file memorizza le informazioni di base sugli utenti di sistema, inclusi UID e GID, la directory home, la shell, etc. Nonostante il nome, qui non vengono memorizzate password.

/etc/group

Questo file memorizza le informazioni di base su tutti i gruppi di utenti nel sistema, come il nome del gruppo, il GID e i membri.

/etc/shadow

Qui è dove vengono memorizzate le password degli utenti. Sono crittografate (sottoposte a hashing) per ragioni di sicurezza.

/etc/gshadow

Questo file memorizza informazioni più dettagliate sui gruppi, inclusa una password crittografata (sottoposta a hashing) che consente agli utenti di diventare temporaneamente membri del gruppo, un elenco di utenti che possono diventare membri del gruppo in qualsiasi momento e un elenco di amministratori del gruppo.

Warning

Questi file non sono stati progettati per essere modificati direttamente e questo non dovrebbe mai accadere. Questa lezione tratta solamente le informazioni memorizzate in questi file e non la loro modifica.

Per impostazione predefinita ogni utente può entrare in /etc e leggere i file /etc/passwd ed /etc/group. Inoltre, per impostazione predefinita, nessun utente, eccetto root, può leggere i file /etc/shadow ed /etc/gshadow.

Esistono anche dei file che hanno a che fare con l’escalation dei privilegi di base sui sistemi Linux, come, per esempio, accade con i comandi su e sudo. Per impostazione predefinita, questi sono accessibili solo dall’utente root.

/etc/sudoers

Questo file controlla chi e come può usare il comando sudo.

/etc/sudoers.d

Questa directory può contenere file che integrano le configurazioni del file sudoers.

Per l’esame della certificazione LPI Linux Essentials, è sufficiente conoscere il percorso e il nome del file di configurazione predefinito di sudo: /etc/sudoers. La sua configurazione va oltre lo scopo di questi materiali.

Warning

Anche se /etc/sudoers è un file di testo, non dovrebbe mai essere modificato direttamente. Se sono necessarie modifiche al suo contenuto, dovrebbero essere fatte utilizzando l’utility visudo.

/etc/passwd

Il file /etc/passwd è comunemente chiamato “file delle password”. Ogni riga contiene più campi sempre delimitati dal carattere due punti (:). Nonostante il nome, l’hash unidirezionale (one-way hash) delle password oggi non è più memorizzato in questo file.

La tipica sintassi di una riga in questo file è la seguente:

USERNAME:PASSWORD:UID:GID:GECOS:HOMEDIR:SHELL

Dove:

USERNAME

Il nome utente o di login (login name), come root, nobody, emma.

PASSWORD

Vecchia posizione dell’hash della password. È quasi sempre x, a indicare che la password è memorizzata nel file /etc/shadow.

UID

User ID (UID), come 0, 99, 1024.

GID

Group ID predefinito (GID), come 0, 99, 1024.

GECOS

Un elenco CSV di informazioni sull’utente, inclusi nome, posizione, numero di telefono. Per esempio: Emma Smith,42 Douglas St,555.555.5555

HOMEDIR

Percorso della directory home dell’utente, come /root, /home/emma, etc.

SHELL

La shell predefinita per questo utente, come /bin/bash, /sbin/nologin, /bin/ksh, etc.

Per esempio, la riga seguente descrive l’utente emma:

emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555:/home/emma:/bin/bash
Comprendere il Campo GECOS

Il campo GECOS contiene tre (3) o più campi, delimitati da una virgola (,), ovvero un elenco di valori separati da virgola (CSV - Comma Separated Values). Sebbene non esista uno standard imposto, i campi sono generalmente nel seguente ordine:

NAME,LOCATION,CONTACT

Dove:

NAME

È il “nome completo” (Full Name) dell’utente o il “nome del software” (Software Name) nel caso di un account di servizio.

LOCATION

Di solito è l’ubicazione fisica dell’utente all’interno di un edificio, il numero della stanza o l’ufficio o la persona da contattare nel caso di un account di servizio.

CONTACT

Elenca le informazioni di contatto come il numero di telefono di casa o dell’ufficio.

Campi aggiuntivi possono includere ulteriori informazioni di contatto, come un numero di casa (home number) o un indirizzo e-mail. Per modificare le informazioni nel campo GECOS, usa il comando chfn e rispondi alle domande, come nell’esempio sotto riportato. Se non viene fornito alcun nome utente dopo il comando, vengono cambiate le informazioni dell’utente corrente:

$ chfn

Changing the user information for emma
Enter the new value, or press ENTER for the default
	Full Name: Emma Smith
	Room Number []: 42
	Work Phone []: 555.555.5555
	Home Phone []: 555.555.6666

/etc/group

Il file /etc/group contiene campi, sempre delimitati da due punti (:), che memorizzano le informazioni di base sui gruppi nel sistema. A volte è chiamato “file dei gruppi”. La sintassi per ogni riga è la seguente:

NAME:PASSWORD:GID:MEMBERS

Dove:

NAME

È il nome del gruppo, come root, users, emma, etc.

PASSWORD

Vecchia posizione di un eventuale hash della password del gruppo. Quasi sempre x, a indicare che la password (se definita) è memorizzata nel file /etc/gshadow.

GID

Group ID (GID), come 0, 99, 1024.

MEMBERS

Un elenco, separato da virgole, di nomi utente che sono membri del gruppo, come jsmith,emma.

L’esempio seguente mostra una riga contenente informazioni sul gruppo students:

students:x:1023:jsmith,emma

Non è necessario che un utente sia elencato nel campo dei membri quando il gruppo è il gruppo principale di quell’utente. Se un utente è elencato, allora è ridondante, cioè, non vi è alcun cambiamento nel funzionamento, che sia elencato o meno.

Note

L’uso delle password per i gruppi esula dallo scopo di questa lezione. Tuttavia, se presente, l’hash della password è memorizzato nel file /etc/gshadow. Anche questo esula dallo scopo di questa lezione.

/etc/shadow

Il seguente elenco mostra gli attributi memorizzati nel file /etc/shadow, comunemente indicato come file shadow. Il file contiene un elenco di campi sempre delimitati da due punti (:). Sebbene abbia molti campi, la maggior parte di essi non rientra nell’ambito di questa lezione, a eccezione dei primi due.

La sintassi di base di una riga in questo file è la seguente:

USERNAME:PASSWORD:LASTCHANGE:MINAGE:MAXAGE:WARN:INACTIVE:EXPDATE

Dove:

USERNAME

Il nome utente (uguale a quello in /etc/passwd), come root, nobody, emma.

PASSWORD

L’hash unidirezionale (one-way hash) della password, incluso il salt precedente. Per esempio: !!, !$1$01234567$ABC…​, $6$012345789ABCDEF$012…​.

LASTCHANGE

Data dell’ultima modifica della password, espressa in giorni trascorsi dall'“Epoca”, come per esempio 17909.

MINAGE

Durata minima della password in giorni.

MAXAGE

Durata massima della password in giorni.

WARN

Periodo di avviso prima della scadenza della password, espresso in giorni.

INACTIVE

Durata massima della password dopo la scadenza, espressa in giorni.

EXPDATE

Data di scadenza della password, in giorni trascorsi dall'“Epoca”.

Nel seguente esempio puoi vedere una riga del file /etc/shadow. Nota che alcuni valori, come INACTIVE ed EXPDATE non sono definiti.

emma:$6$nP532JDDogQYZF8I$bjFNh9eT1xpb9/n6pmjlIwgu7hGjH/eytSdttbmVv0MlyTMFgBIXESFNUmTo9EGxxH1OT1HGQzR0so4n1npbE0:18064:0:99999:7:::

L'“Epoca” di un sistema POSIX è la mezzanotte (0000), Universal Coordinate Time (UTC), di giovedì 1 gennaio 1970. La maggior parte delle date e degli orari POSIX sono espresse in secondi a partire dall'“Epoca” o nel caso del file /etc/shadow, in giorni trascorsi dall'“Epoca”.

Note

Il file shadow è stato progettato per essere leggibile solo dal superuser e da selezionati servizi di autenticazione del sistema di base che controllano l’hash unidirezionale della password al login o in un altro momento di autenticazione.

Sebbene esistano diverse soluzioni di autenticazione, il metodo base di memorizzazione delle password è la funzione di hash unidirezionale. Questa viene fatta in modo tale che la password non venga mai memorizzata in chiaro su un sistema, poiché la funzione di hashing non è reversibile. Puoi trasformare una password in un hash, ma (idealmente) non è possibile trasformare un hash in una password.

Al massimo, è richiesto un metodo di forza bruta per eseguire l’hash di tutte le combinazioni di una password, fino a quando una non corrisponde. Per cercare di limitare il problema che l’hash di una password venga violato su un sistema, i sistemi Linux utilizzano un salt casuale per ogni hash della password di un utente. Quindi l’hash di una password utente su un sistema Linux generalmente non sarà lo stesso di un altro sistema Linux, anche se la password è la stessa.

Nel file /etc/shadow, la password può assumere diverse forme, tra cui le seguenti:

!!

Questo significa un account “disabilitato” (nessuna autenticazione possibile), senza hash della password memorizzato.

!$1$01234567$ABC…​

Un account “disabilitato” (a causa del punto esclamativo iniziale), con una precedente funzione di hash, hash salt e hash string memorizzati.

$1$0123456789ABC$012…​

Un account “abilitato”, con una funzione di hash, hash salt e hash string memorizzati.

La funzione di hash, l’hash salt e l’hash string sono preceduti e delimitati dal simbolo dollaro ($). La lunghezza dell’hash salt deve essere compresa tra otto e sedici (8-16) caratteri. Ecco tre dei più comuni esempi:

$1$01234567$ABC…​

Una funzione hash MD5 (1), con una lunghezza hash di otto caratteri.

$5$01234567ABCD$012…​

Una funzione hash SHA256 (5), con una lunghezza hash di dodici caratteri.

$6$01234567ABCD$012…​

Una funzione hash SHA512 (6), con una lunghezza hash di dodici caratteri.

Note

La funzione hash MD5 è considerata crittograficamente insicura per il livello di ASIC odierno (dal 2010 in poi) e persino per le prestazioni SIMD di elaborazione generale. Per esempio, i Federal Information Processing Standards (FIPS) degli Stati Uniti non consentono l’utilizzo di MD5 per alcuna funzione crittografica, solo per aspetti molto limitati di validazione, ma non per l’integrità delle firme digitali o scopi simili.

Dal punto di vista degli obiettivi e dell’esame LPI Linux Essentials, è sufficiente comprendere che l’hash della password di un utente locale è memorizzato nel file /etc/shadow che può essere letto solamente da selezionati servizi di autenticazione o modificato dal superuser utilizzando altri comandi.

Esercizi Guidati

  1. Considera il seguente output del comando id:

    $ id emma
    uid=1000(emma) gid=1000(emma) groups=1000(emma),4(adm),5(tty),10(uucp),20(dialout),27(sudo),46(plugdev)

    In quali file sono memorizzati i seguenti attributi?

    UID e GID

    Gruppi

    • Inoltre, in quale file è memorizzata la password dell’utente?

  2. Quale dei seguenti tipi di crittografia viene utilizzato, per impostazione predefinita, per memorizzare le password in locale su un sistema Linux?

    • Asimmetrica

    • Funzione di Hash unidirezionale (One-way Hash)

    • Simmetrica

    • ROT13

  3. Se un account ha un ID utente (UID - User ID) inferiore a 1000, che tipo di account è?

  4. Come puoi ottenere l’elenco dei login attivi sul tuo sistema e anche il loro numero?

  5. Utilizzando il comando grep, abbiamo ottenuto le informazioni sull’utente emma riportate qui sotto:

    $ grep emma /etc/passwd
    emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555,:/home/emma:/bin/ksh

    Completa gli spazi vuoti della tabella con le informazioni corrette utilizzando l’output del comando precedente.

    Nome Utente

    Password

    UID

    GID Primario

    GECOS

    Directory Home

    Shell

Esercizi Esplorativi

  1. Confronta i risultati di last con quelli di w e who. Quali informazioni mancano a ciascuno dei comandi rispetto agli altri?

  2. Prova a eseguire i comandi who e w -his.

    • Quali informazioni sono state rimosse dall’output del comando w con le opzioni “no header” (-h) e “short” (-s)?

    • Quali informazioni sono state aggiunte all’output del comando w con l’opzione “ip address” (-i)?

  3. Qual è il file che memorizza l’hash unidirezionale della password di un account utente?

  4. Quale file contiene l’elenco dei gruppi di cui è membro un account utente? Quale logica potrebbe essere utilizzata per stilarlo?

  5. Per impostazione predefinita, uno o più (1+) dei seguenti file non sono leggibili da utenti ordinari senza privilegi. Quali sono?

    • /etc/group

    • /etc/passwd

    • /etc/shadow

    • /etc/sudoers

  6. Come puoi cambiare, in modalità non interattiva, la shell di login dell’utente corrente nella Shell Korn (/usr/bin/ksh)?

  7. Perché la directory home dell’utente root non si trova nella directory /home?

Sommario

In questa lezione abbiamo trattato i database degli utenti e dei gruppi di Linux. Abbiamo appreso le proprietà più importanti di utenti e gruppi, inclusi i loro nomi e i loro ID numerici. Abbiamo anche esaminato come funziona l’hashing delle password su Linux e come gli utenti vengono assegnati ai gruppi.

Tutte queste informazioni sono memorizzate nei quattro file di seguito riportati, che forniscono i controlli di accesso più semplici per la sicurezza locale su un sistema Linux:

/etc/passwd

Tutti gli attributi POSIX degli account utente a livello locale del sistema, a eccezione degli hash delle password, leggibili da tutti.

/etc/group

Tutti gli attributi POSIX dei gruppi a livello locale del sistema, leggibili da tutti.

/etc/shadow

Tutti gli hash delle password degli utenti a livello locale del sistema (e le informazioni sulla scadenza), non leggibili da chiunque (solo da processi selezionati).

/etc/sudoers

Tutte le informazioni/permessi sull’escalation dei privilegi a livello locale del sistema tramite il comando sudo.

In questa lezione sono stati discussi i seguenti comandi:

id

Elenca gli ID utente e di gruppo reali (o effettivi).

last

Elenca gli utenti che hanno effettuato il login per ultimi.

who

Elenca gli utenti che sono attualmente connessi.

w

Simile a who ma con informazioni di contesto aggiuntive.

su

Passa a un altro utente con una shell di login o esegue comandi come quell’utente, passando la sua password.

sudo

Switch User (o Superuser) Do: se autorizzato, l’utente corrente inserisce la propria password (se richiesta) per scalare i privilegi.

chsh

Cambia la shell di un utente.

chfn

Modifica le informazioni dell’utente nel campo GECOS.

Risposte agli Esercizi Guidati

  1. Considera il seguente output del comando id:

    $ id emma
    uid=1000(emma) gid=1000(emma) groups=1000(emma),4(adm),5(tty),10(uucp),20(dialout),27(sudo),46(plugdev)

    In quali file sono memorizzati i seguenti attributi?

    UID e GID

    /etc/passwd

    Gruppi

    /etc/group

    • Inoltre, in quale file è memorizzata la password dell’utente?

      La password crittografata (sottoposta a hashing) dell’utente è memorizzata in /etc/shadow.

  2. Quale dei seguenti tipi di crittografia viene utilizzato, per impostazione predefinita, per memorizzare le password in locale su un sistema Linux?

    Per impostazione predefinita, per memorizzare le password viene utilizzata una funzione di hash unidirezionale (one-way hash).

  3. Se un account ha un ID utente (UID - User ID) inferiore a 1000, che tipo di account è?

    Gli account con un UID inferiore a 1000 generalmente sono account di sistema.

  4. Come puoi ottenere l’elenco dei login attivi sul tuo sistema e anche il loro numero?

    Usando il comando w. Oltre a un elenco di tutti i login attivi, il comando mostra anche informazioni come il numero di utenti che hanno effettuato il login, il carico del sistema e il tempo di funzionamento.

  5. Utilizzando il comando grep, abbiamo ottenuto le informazioni sull’utente emma riportate qui sotto:

    $ grep emma /etc/passwd
    emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555,:/home/emma:/bin/ksh

    Completa gli spazi vuoti della tabella con le informazioni corrette utilizzando l’output del comando precedente.

    Nome Utente

    emma

    Password

    x - dovrebbe sempre essere x per un login utente valido e attivo

    UID

    1000

    GID Primario

    1000

    GECOS

    Emma Smith,42 Douglas St,555.555.5555

    Directory Home

    /home/emma

    Shell

    /bin/ksh

Risposte agli Esercizi Esplorativi

  1. Confronta i risultati di last con quelli di w e who. Quali informazioni mancano a ciascuno dei comandi rispetto agli altri?

    Gli strumenti w e who elencano solo gli utenti attualmente connessi sul sistema, mentre last elenca anche gli utenti che si sono disconnessi. Il comando w mostra l’utilizzo del sistema, mentre who non lo fa.

  2. Prova a eseguire i comandi who e w -his.

    • Quali informazioni sono state rimosse dall’output del comando w con le opzioni “no header” (-h) e “short” (-s)?

      Rispettivamente, non viene stampata l’intestazione (header), il che è utile per l’analisi, e non vengono riportate l’ora di accesso e le informazioni sulla CPU.

    • Quali informazioni sono state aggiunte all’output del comando w con l’opzione “ip address” (-i)?

      Questa opzione stampa l’indirizzo IP, invece di tentare la risoluzione DNS, stampando il nome host. Questa opzione di w ha una migliore corrispondenza con l’output predefinito del comando last.

  3. Qual è il file che memorizza l’hash unidirezionale della password di un account utente?

    Il file /etc/shadow memorizza l’hash unidirezionale della password di un account utente poiché, a differenza di /etc/passwd, non è leggibile da un account utente ordinario e non privilegiato.

  4. Quale file contiene l’elenco dei gruppi di cui è membro un account utente? Quale logica potrebbe essere utilizzata per stilarlo?

    Il file /etc/group ha un elenco CSV di nomi utente nell’ultimo campo (“members”) di qualsiasi riga corrispondente a un gruppo.

    Qualsiasi riga nel file /etc/group in cui un utente è elencato nell’ultimo campo (“members”) indica che quell’utente è un membro di quel gruppo, supponendo che sia formattato in modo corretto (CSV). Inoltre, il gruppo primario di un utente nel file /etc/passwd avrà anche una corrispondenza nel file /etc/group in termini di nome del gruppo e GID.

  5. Per impostazione predefinita, uno o più (1+) dei seguenti file non sono leggibili da utenti ordinari senza privilegi. Quali sono?

    • /etc/group

    • /etc/passwd

    • /etc/shadow

    • /etc/sudoers

      I file /etc/shadow ed /etc/sudoers non sono leggibili per impostazione predefinita, tranne che dai servizi selezionati o dal superuser. Queste risposte dipendono dai sistemi e dai nomi utente utilizzati in laboratorio.

  6. Come puoi cambiare, in modalità non interattiva, la shell di login dell’utente corrente nella Shell Korn (/usr/bin/ksh)?

    $ chsh -s /usr/bin/ksh
  7. Perché la directory home dell’utente root non si trova nella directory /home?

    Perché l’account root è necessario per individuare e correggere gli errori, che potrebbero includere problemi di file system relativi alla directory /home. In questi casi, root dovrebbe essere completamente funzionante anche quando il file system /home non è ancora disponibile.

Linux Professional Institute Inc. Tutti i diritti riservati. Visita il sito Learning Materials: https://learning.lpi.org
Quest'opera è sotto la licenza 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License'.

Prossima Lezione

5.2 Creazione di Utenti e Gruppi (5.2 Lezione 1)

Leggi la prossima Lezione

Linux Professional Institute Inc. Tutti i diritti riservati. Visita il sito Learning Materials: https://learning.lpi.org
Quest'opera è sotto la licenza 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License'.

LPI è una organizzazione non-profit.

© 2023 Linux Professional Institute (LPI) è lo standard di certificazione globale e l'organizzazione di supporto alla carriera per i Professionisti Open Source. Con più di 200,000 titolari di Certificazione, è il primo e il più grande ente di Certificazione Open Source e Linux vendor-neutral. LPI ha professionisti certificati in oltre 180 Paesi, offre i suoi Esami in più lingue e ha centinaia di Partner di formazione in tutto il mondo.

La nostra missione è promuovere l'uso dell'Open Source supportando le persone che vi lavorano.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Contattaci
  • Privacy & Cookie Policy

Trovato un errore? Per favore scrivi a contattaci.

© 1999–2023 The Linux Professional Institute Inc. Tutti i diritti riservati.