Concetti fondamentali

I sistemi Unix sono sistemi multi-utenti. Ogni utente abilitato nel sistema ha a disposizione un certo numero di risorse (un certo spazio disco, la possibilità di eseguire certi programmi ecc.), dette genericamente account. Ogni utente nel sistema è identificato da:

  • User ID: è un intero unico e non negativo. L'utente con ID pari a 0 è il superuser, ovvero l'amministratore di sistema.
  • Login Name: è una stringa anch'essa unica nel sistema. Il login name del super user è root, quindi nel seguito utilizzeremo indifferentemente root o superuser per indicare l'amministratore di sistema.
  • Password: ogni utente ha una password che gli viene richiesta al momento del login nel sistema. Non è necessariamente unica, nel senso che due utenti potrebbero avere la stessa password.
  • Group ID: identifica il gruppo a cui l'utente appartiene. Appartenere a un certo gruppo piuttosto che a un altro abilita certi permessi, come vedremo nel seguito.
  • Home Directory: è la directory dove vengono conservati i file privati dell'utente.
  • Shell Iniziale: è la shell (o interprete di comandi) che viene lanciata dopo la procedura di login.

Un utente può accedere al sistema tramite la procedura di login. Per esempio, quando l'utente accede a un terminale collegato al sistema, si presenta una schermata in cui viene richiesto di inserire il login name e successivamente la password. Se il nome e la password inserite corrispondono a uno degli account registrati nel sistema, allora viene eseguito il processo di shell che si posiziona sulla directory iniziale. A questo punto, l'utente si trova con un prompt tramite il quale è possibile lanciare dei comandi.

Le informazioni elencate precedentemente (esclusa la password) si trovano in un file chiamato /etc/passwd, che può essere acceduto in lettura da tutti e in scrittura solo dal root. Un esempio di file passwd è mostrato di seguito: ogni linea contiene le informazioni per ogni utente separate dal carattere ':'. Gli unici utenti "veri" nell'esempio sono root, lipari e elena.

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:
daemon:x:2:2:daemon:/sbin:
adm:x:3:4:adm:/var/adm:
lp:x:4:7:lp:/var/spool/lpd:
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:
news:x:9:13:news:/var/spool/news:
uucp:x:10:14:uucp:/var/spool/uucp:
operator:x:11:0:operator:/root:
games:x:12:100:games:/usr/games:
gopher:x:13:30:gopher:/usr/lib/gopher-data:
ftp:x:14:50:FTP User:/home/ftp:
nobody:x:99:99:Nobody:/:
xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false
lipari:x:500:500::/home/lipari:/bin/bash
elena:x:0:0:elena:/home/elena:/bin/bash

Nei vecchi sistemi le password degli utenti venivano anch'esse memorizzate nel file /etc/passwd criptate tramite un algoritmo unidirezionale. In questo modo, quando l'utente inseriva la password, la procedura di login applicava l'algoritmo ricavando una stringa che confrontava con il contenuto il campo opportuno del file /etc/passwd, mentre era impossibile dalla stringa criptata risalire alla password originale.

Però, un eventuale hacker, nell'ottica di scoprire la password di alcuni utenti, poteva comunque provare ad applicare l'algoritmo per criptare (che è pubblico) su una serie di password possibili, e confrontare i risultati con il contenuto del file. Con la potenza dei moderni computer era solo questione di tempo prima di riuscire a ricavare la password del root.

Quindi, per maggior sicurezza, nei sistemi moderni le password e alcune altre informazioni sono contenute nel file /etc/shadow (in alcuni sistemi chiamato master.passwd) che può essere letto o scritto solo da root, e quindi l'attacco descritto sopra non è possibile.

 

Files

Pagina in costruzione...

Accedi ai contenuti nella precedente versione ->