Autenticazione dell'utente

  La necessità di fornire un metodo di identificazione all'interno di un sistema computerizzato è nata con la diffusione dei primi sistemi multiutenti (Unix, anni '60). In pratica, un utente che vuole entrare nel sistema deve dimostrare di essere autorizzato all'accesso prima di poter usufruire dei servizi disponibili. A seconda della politica adottata, il meccanismo di autenticazione può essere impiegato per vari scopi: si parte dalla semplice personalizzazione del sistema per ogni utente, fino alla protezione totale dei dati dell'utente sia da persone esterne che dagli stessi altri fruitori del sistema. Un esempio di sistema del primo caso ci è dato da Windows 9x, dove i file degli altri utenti sono semplicemente impostati con attributo nascosto all'avvio; alla seconda categoria appartiene giustamente il sistema operativo Linux che, grazie alla sua modularità unita alla filosofia open source, consente di implementare agevolmente anche tecniche relativamente recenti come l'impiego delle smart card.
  L'obiettivo di questa sezione è di illustrare le basi dell'autenticazione all'interno del sistema operativo Linux, in modo che le successive sezioni, dedicate esclusivamente all'autenticazione via smart card, risultino più chiare anche a coloro che non conoscono approfonditamente il sistema del pinguino.

Autenticazione sotto Unix/Linux

  Lo schema generale per l'autenticazione in Unix è il seguente: l'utente (o l'amministratore di sistema) decidono, in fase di creazione dell'account, un identificativo (login) ed una parola chiave (password). Per ogni richiesta successiva di accesso, l'utente deve fornire la coppia login-password corretta; il sistema verifica che a quel determinato identificativo corrisponde quella parola chiave: in caso affermativo l'utente ha accesso, altrimenti viene rifiutato.
  Le varianti a questo schema riguardano soprattutto il modo in cui il sistema mantiene in memoria il database delle password. I due meccanismi più comuni sotto Unix sono:

  Poiché il file passwd contiene informazioni sull'utente, il suo accesso in lettura deve essere disponibile per qualunque processo; questo è un ulteriore motivo per cui si predilige memorizzare le password nel file shadow, protetto anche in lettura oltre che in scrittura.
  La verifica da parte del sistema avviene dando la password ricevuta in input all'algoritmo di cifratura utilizzato: mentre MD5 calcola il valore hash per effettuare il confronto, l'uso del DES è decisamente più complesso. In primo luogo
, la password viene sottoposta ad un processo di padding-troncatura, al fine di avere una stringa di esattamente otto byte; in seguito, la password funge da chiave di cifratura di un DES modificato, con input la stringa nulla (64 bit posti a zero) ed iterato 25 volte, ogni volta prendendo in input l'output dell'iterazione precedente. La modifica del DES, effettuata tramite l'immissione del valore salt, garantisce l'unicità della password cifrata anche se la password in chiaro è la stessa.
  La gestione dell'algoritmo di cifratura delle parole d'ordine è a carico della funzione crypt(). Nelle distribuzioni GNU/Linux in cui si può usare l'algoritmo MD5 dovrebbe essere possibile scegliere questo o l'algoritmo precedente, attraverso un file di configurazione (/etc/login.defs). Se la propria distribuzione non sembra predisposta per la cifratura MD5, è meglio non fare esperimenti: è importante che ogni componente del sistema di autenticazione e di gestione delle parole d'ordine sia aggiornato correttamente.
  
Questo sistema di autenticazione basato sulla conservazione di una parola d'ordine cifrata, ha una debolezza fondamentale: conoscendo la stringa cifrata e l'algoritmo che la genera, si può determinare la parola d'ordine originale per tentativi; un sistema che consente l'utilizzo di parole d'ordine con un massimo di otto caratteri è molto debole ai giorni nostri, perché tutte le combinazioni possibili possono essere provate in tempi brevi, anche con un elaboratore di potenza media. In particolare, questo metodo è molto vulnerabile agli attacchi a dizionario, visto che spesso gli utenti scelgono parole di uso comune o personali difficili da dimenticare ma anche
facili da catalogare.

Comandi e file supplementari

  I nuovi utenti possono essere aggiunti solo da parte dell'utente root, ma poi possono essere loro stessi a cambiare alcuni elementi della loro registrazione. Il più importante è naturalmente la parola d'ordine.

I comandi adduser, useradd

  Il programma in questione può avere due nomi alternativi: adduser o useradd. Questo permette all'utente root di aggiungere un nuovo utente all'interno del file /etc/passwd, assegnandogli un UID, un GID, una parola d'ordine, una shell, creando anche la sua directory personale. Per convenzione, il programma (o script che sia) inserisce automaticamente nella directory personale alcuni file di configurazione standard contenuti nella directory /etc/skel/. Di conseguenza, basta porre all'interno di questa directory i file e le directory che si vogliono riprodurre nella directory personale di ogni nuovo utente. Per mantenere la compatibilità con alcuni vecchi programmi, il nome dell'utente non deve superare gli otto caratteri. Inoltre, è opportuno limitarsi all'uso di lettere non accentate e di numeri; qualunque altro simbolo, compresi i segni di punteggiatura, potrebbero creare problemi di vario tipo.

La cartella /etc/skel/*

  La directory /etc/skel/ viene utilizzata normalmente come directory personale tipica per i nuovi utenti. In pratica, quando si aggiunge un nuovo utente e gli si prepara la sua directory personale, viene copiato all'interno di questa il contenuto di /etc/skel/. Il nome skel sta per skeleton, cioè scheletro; in effetti, rappresenta lo scheletro di una nuova directory personale. È molto importante la preparazione di questa directory, in modo che ogni nuovo utente trovi subito una serie di file di configurazione, necessari a utilizzare le shell previste nel sistema ed eventualmente altri programmi essenziali.

Il comando passwd

  Permette di cambiare la parola d'ordine registrata all'interno di /etc/passwd (oppure all'interno di /etc/shadow). Solo l'utente root può cambiare la parola d'ordine di un altro utente. Gli utenti comuni (tutti escluso root) devono utilizzare una parola d'ordine non troppo breve composta sia da maiuscole che minuscole o simboli diversi. Alcune parole d'ordine simili al nome utilizzato per identificare l'utente, non sono valide. Se non si dispone di un mezzo per l'inserimento di un nuovo utente, come quello fornito da adduser, è possibile aggiungere manualmente un record all'interno del file /etc/passwd senza l'indicazione della parola d'ordine che poi potrà essere specificata attraverso passwd.

Il comando chsh


  Permette di cambiare la shell predefinita all'interno del file /etc/passwd. È possibile indicare solo una shell esistente e possibilmente elencata all'interno di /etc/shells. Se la nuova shell non viene indicata tra gli argomenti, questa viene richiesta subito dopo l'avvio di chsh. Per conferma, viene richiesta anche la ripetizione della parola d'ordine.



Il file /etc/shells

  Il file /etc/shells contiene semplicemente un elenco di shell valide, cioè di quelle che sono esistenti e possono essere utilizzate. Segue un esempio di questo file.

/bin/sh
/bin/bash
/bin/tcsh
/bin/csh
/bin/ash
/bin/zsh

  È molto importante che questo file sia preparato con cura e contenga solo le shell per le quali il sistema è predisposto. Ciò significa, quanto meno, che deve esistere una configurazione generalizzata per ognuna di queste e che nella directory /etc/skel/ devono essere stati predisposti tutti i file di configurazione personalizzabili che sono necessari. Quindi, un file /etc/shells con un semplice elenco di tutte le shell disponibili non è sufficiente.

Il comando chfn

  Consente di modificare le informazioni personali registrate all'interno del file /etc/passwd. Si tratta in pratica del nome e cognome dell'utente, del numero dell'ufficio, del telefono dell'ufficio e del telefono di casa. Se non vengono specificate opzioni, i dati vengono inseriti in maniera interattiva; se non viene specificato l'utente, si intende quello che ha eseguito il comando. Solo l'utente root può cambiare le informazioni di un altro utente.
  
Le informazioni indicate nel quinto capo dei record del file /etc/passwd, sono strutturate solo in modo convenzionale, senza che esista una necessità effettiva.

I comandi id e groups

  Il comando id visualizza il numero UID (User ID) e il numero GID (Group ID) reale ed efficace dell'utente selezionato o di quello corrente, mentre groups visualizza i gruppi ai quali l'utente o gli utenti appartengono; il suo risultato è equivalente al comando id -Gn .

Utenti e gruppi importanti


  Osservando il file /etc/passwd si possono notare diversi utenti fittizi standard che hanno degli scopi particolari. Si tratta di utenti di sistema, nel senso che servono al corretto funzionamento del sistema operativo.

root:dxdFf9MvQ3s:0:0:root:/root:/bin/bash
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
adm:*:3:4:adm:/var/adm:
lp:*:4:7:lp:/var/spool/lpd:
sync:*:5:0:sync:/sbin:/bin/sync
shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown
halt:*:7:0:halt:/sbin:/sbin/halt
mail:*:8:12:mail:/var/mail:
news:*:9:13:news:/var/spool/news:
uucp:*:10:14:uucp:/var/spool/uucp:
operator:*:11:0:operator:/root:
games:*:12:100:games:/usr/games:
gopher:*:13:30:gopher:/usr/lib/gopher-data:
ftp:*:14:50:FTP User:/home/ftp:
nobody:*:99:99:Nobody:/:

  Di conseguenza, anche /etc/group contiene l'indicazione di gruppi particolari (gruppi di sistema).

root::0:root
bin::1:root,bin,daemon
daemon::2:root,bin,daemon
sys::3:root,bin,adm
adm::4:root,adm,daemon
tty::5:
disk::6:root
lp::7:daemon,lp
mem::8:
kmem::9:
wheel::10:root
mail::12:mail
news::13:news
uucp::14:uucp
man::15:
games::20:
gopher::30:
dip::40:
ftp::50:
nobody::99:
users::100:

  I campi delle parole d'ordine di questi utenti speciali (tutti tranne root) hanno un asterisco che di fatto impedisce qualunque accesso. Le varie distribuzioni GNU/Linux si distinguono spesso nella quantità e nell'organizzazione degli utenti e dei gruppi fittizi.
  
In questo caso, in particolare, l'utente fittizio
nobody ha il numero UID 99, come definito nella distribuzione Red Hat. In generale, questo utente potrebbe avere il numero -1, che applicandosi a un intero positivo rappresenta in pratica il numero più alto gestibile di UID, altre volte potrebbe essere il numero -2. Il numero massimo di UID dipende dalle caratteristiche del filesystem e dalle librerie utilizzate.
  
Segue la descrizione di alcuni di questi utenti e gruppi.

Eliminazione di un utente

  L'eliminazione di un utente dal sistema non è gestibile attraverso un programma di servizio standard di uso generale: la particolare distribuzione GNU/Linux può fornire degli strumenti adatti, oppure si deve agire manualmente. In questa sezione si descrive come si può intervenire manualmente. Fondamentalmente si tratta di agire su due punti:

  I file di un utente possono trovarsi ovunque gli sia stato consentito di scriverli. In particolare:

  Per elencare tutti i file appartenenti a un certo utente, è possibile usare il programma find in uno dei modi seguenti:

          find / -uid numero_utente -print

          find / -user utente -print