Di seguito la sequenza del caricamento fino all'operazione di Login
via terminale:
POST Kernel LINUX
LILO Caricamento moduli
Mount FSCK
Avvio di INIT
runlevel
getty getty getty
login
password
user@localhost:$
Per prima cosa, init si assicura che ci sia un programma di
getty per la connessione da terminale (o da console). getty
ascolta al terminale ed aspetta che l’utente sia pronto a fare il
login (di solito comporta che l’utente digiti qualcosa). Quando nota
un utente, getty da in output un messaggio di saluto (che si trova in
/etc/issue), chiede il nome dell’utente e, alla fine, fa
partire il programma login. login prende come parametro il nome
dell’utente, e chiede la password. Se corrispondono, login avvia la
shell configurata per l’utente, altrimenti esce semplicemente e
termina il processo (probabilmente dopo aver dato all’utente un’altra
possibilità di inserire il nome e la password). init nota che il
processo è stato terminato ed avvia una nuova getty per quel
terminale.
4.1 Cosa fa login
login si occupa di autenticare l’utente (cioè di assicurarsi che il
nome dell’utente e la password combacino), di configurare un ambiente
iniziale impostando i permessi per la linea seriale e di inizializzare
la shell.
Parte della configurazione iniziale consiste nel mandare in output
il contenuto del file /etc/motd (sta per "message of the day",
cioè "messaggio del giorno") e controllare la posta elettronica.
Queste fasi possono essere disabilitate creando il file .hushlogin
nella home directory dell’utente.
Se esiste il file /etc/nologin, i login sono disabilitati.
Un file del genere viene di solito creato da shutdown e da comandi
simili. login controlla la presenza di questo file, e se esiste non
accetterà i login. Se esiste, login manderà in output il suo contenuto
al terminale prima di uscire.
login tiene un log di tutti i tentativi di login falliti in un file
di log di sistema (usando syslog). Tiene anche un log di tutti i
login di root; entrambi possono essere utili per rintracciare gli
intrusi.
4.2 Il
controllo degli accessi
Tradizionalmente il database degli utenti è tenuto nel file /etc/passwd.
Alcuni sistemi usano le shadow password ed hanno spostato le password
in /etc/shadow. I siti con molti computer che condividono gli
account usano il NIS o altri metodi per immagazzinare i database degli
utenti: possono anche copiare automaticamente il database da una
posizione centrale in tutti gli altri computer.
Il database degli utenti non contiene solo le password, ma anche
altre informazioni sugli utenti, come il loro vero nome, le home
directory e le shell di login. Queste informazioni devono essere
pubbliche, in modo che chiunque possa leggerle, quindi le password
sono criptate. Questo metodo ha un risvolto negativo: chiunque con
accesso alle password criptate può usare un qualche metodo di
decrittazione per leggerle, senza doversi collegare al computer. Con
le shadow password si cerca di evitare questa possibilità,
spostando le password in un altro file che risulta leggibile solo da
root e le password sono comunque criptate. L'installazione del modulo
di shadow password, su un sistema che non le supporta nativamente, può
essere molto difficoltoso.
Con o senza le shadow password è importante assicurarsi che tutte
le password del sistema siano valide, cioè non facilmente
indovinabili. Per craccare (aprire, indovinare) le password si
può usare il programma crack: qualsiasi password che esso
riesce a craccare, per definizione non e’ valida! Come sempre, un ttol
come crack viene usato dagli intrusi (a scopi pirateschi), ma anche
dai sistemisti che vogliono evitare password facili da indovinare.
Il database dei gruppi degli utenti viene tenuto in /etc/group;
per i sistemi con le shadow password può anche esistere il file /etc/shadow.group.
root di solito non si può collegare dalla maggior parte dei
terminali di rete, ma solo da quelli elencati nel file /etc/securetty;
ciò rende necessario avere accesso fisico ad uno di questi terminali.
E’ comunque possibile collegarsi ad un qualsiasi terminale come utente
normale ed usare il comando su per diventare root (vengono
richiesti, ovviamente, i dati di accesso).
4.3 Login dai
terminali
I login dai terminali (attraverso linee seriali) e dalla console
(quando non si sta usando X, l'interfaccia grafica di Linux) vengono
forniti dal programma getty. init avvia una getty separata per
ogni terminale da cui sono consentiti i login. getty legge il nome
dell’utente e avvia il programma login, che legge la password. Se il
nome dell’utente e la password sono corretti, login avvia la shell.
Quando la shell termina, cioè l’utente si scollega, o quando login
termina perché il nome dell’utente e la password non corrispondono,
init lo nota, e avvia un'altra copia di getty. Il kernel non ha
nozione dei login, che vengono tutti gestiti dai programmi di sistema.
4.4 L’avvio
della shell
Quando parte una shell di login interattiva, essa esegue
automaticamente uno o più file predefiniti. Shell diverse eseguono
file diversi. La maggior parte delle shell eseguono prima un file
globale, ad esempio la Bourne shell (/bin/sh ed i suoi derivati
eseguono /etc/profile, poi eseguono .profile nella home directory
dell’utente). /etc/profile permette all’amministratore di
sistema di impostare un ambiente comune per gli utenti, specialmente
per quanto riguarda il PATH per includere le directory di comandi
locali oltre a quelle normali. D’altra parte, .profile permette
agli utenti di personalizzare il proprio ambiente superando, se
necessario, quello predefinito.
|