Capitolo successivo Capitolo precedente Indice

20. Registrazione e controllo degli accessi

In ogni sistema operativo multiutente c'è la necessità di controllare gli accessi, attraverso un sistema di registrazione degli utenti, e degli eventi, attraverso un sistema di log. Nei sistemi Unix un utente che può accedere ha un account: letteralmente, un conto.

La tabella (seguente) elenca i programmi e i file a cui si accenna in questo capitolo.


Nome Descrizione
syslogd Daemon per la registrazione del log di sistema.
/etc/syslog.conf Configurazione di syslogd.
logger Aggiunge delle annotazioni al log di sistema.
klogd Daemon per la registrazione dei messaggi del kernel.
login Permette l'accesso a un sistema.
/etc/passwd Tabella delle caratteristiche salienti degli utenti.
/etc/group Tabella delle caratteristiche salienti dei gruppi.
/etc/shadow Tabella delle password quando non sono in /etc/passwd.
/var/run/utmp Elenco degli accessi in corso.
/var/log/wtmp Elenco degli accessi trascorsi.
/etc/motd Messaggio di apertura o messaggio del giorno.
/etc/nologin Messaggio di impedimento all'accesso.
/etc/securetty Elenco dei terminali da cui è consentito l'accesso all'utente root.
/var/spool/mail/<utente> Posta dell'utente.
~/.hushlogin Login rapido.
/var/log/lastlog Data e orario dell'ultimo accesso.
su Permette di operare con l'identità di un altro utente.
newgrp Permette di cambiare gruppo.
last Permette di analizzare il contenuto di /var/log/wtmp.
users Elenca i nomi degli utenti che accedono al sistema.
w Elenca i nomi e altre notizie degli utenti che accedono.
who Elenca i nomi degli utenti che accedono al sistema.
finger Fornisce notizie sugli utenti di un certo computer nella rete.
whoami Emette il nome dell'utente.
logname Emette il nome dell'utente.
Riepilogo dei programmi e dei file per la gestione della registrazione degli utenti e del controllo degli accessi.

20.1 Log di sistema

Il log di sistema, o syslog, è la procedura di registrazione degli eventi importanti all'interno di un cosiddetto file di log. Questo sistema è gestito principalmente dal daemon syslogd. Altri programmi o daemon possono aggiungere annotazioni al log inviando messaggi a syslogd.

# syslogd

syslogd [<opzioni>]

È il daemon che si occupa della registrazione del log di sistema. Di norma viene avviato durante la fase si inizializzazione del sistema (init). Utilizza un file di configurazione che se non specificato diversamente è /etc/syslog.conf. Questo file viene letto nel momento in cui syslogd si avvia e per fare in modo che venga riletto (per esempio dopo una modifica), occorre inviare a syslogd un segnale di aggancio (SIGHUP).

kill -HUP <PID-di-syslogd>

Alcune opzioni

-f <file-di-configurazione>

Specifica un file di configurazione diverso da quello predefinito.

-m <minuti>

Stabilisce l'intervallo espresso in minuti tra i messaggi di marcatura. Il valore predefinito è 20.

-p <log-socket>

Specifica un log socket diverso da quello predefinito che è /dev/log.

/etc/syslog.conf

È il file di configurazione utilizzato da syslogd per definire in che modo devono essere gestiti i messaggi del sistema di log. Se si vogliono apportare modifiche a questo file, è poi necessario fare in modo che venga riletto da syslogd. Per fare questo è possibile mandare a syslogd il segnale SIGHUP:

kill -HUP <PID-di-syslogd>

Il modo più semplice di gestire questi messaggi è quello di inserirli in un file di log, come per esempio nel modo seguente.

*.*                     /var/log/syslog

I messaggi possono essere suddivisi in file differenti a seconda del tipo.

*.=info;*.=notice       /var/log/messages
*.=debug                /var/log/debug
*.warn                  /var/log/syslog

Oppure, possono anche essere diretti ad altri computer host, a un terminale, ... Per conoscere in quanti modi si può gestire la configurazione di questo file, conviene consultare la documentazione interna: syslog.conf(5).

Se si utilizza un sistema di registrazione degli eventi su file, come potrebbe essere utilizzando il consueto file /var/log/syslog, per azzerarne il contenuto, è possibile copiare il file /dev/null su di esso:

# cp /dev/null /var/log/syslog

$ logger

logger [<opzioni>] [<messaggio>]

Permette di aggiungere delle annotazioni all'interno del log di sistema. Se non vengono forniti argomenti, il messaggio da registrare viene atteso dallo standard input. Se si utilizza la tastiera, per concludere è necessario utilizzare il carattere di <EOF> che di norma si ottiene con la combinazione [Ctrl+d].

Alcune opzioni

-f <file>

Permette di includere il file indicato all'interno del log di sistema.

# klogd

klogd [<opzioni>]

È il daemon specifico di Linux per l'intercettazione e la registrazione dei messaggi del kernel. Di norma viene avviato dalla procedura di inizializzazione del sistema, subito dopo syslogd.

Alcune opzioni

-f <file-di-log>

Specifica un file di log particolare invece di dirigere i messaggi direttamente al daemon della gestione del log di sistema, cioè syslogd.

20.2 Login

Il login è la procedura attraverso la quale un utente, precedentemente registrato, viene riconosciuto e gli viene concesso di utilizzare il sistema. Il concetto del login è simile a quello di una firma di ingresso.

Quando un utente conclude la sua attività con il sistema, esegue un logout. Il concetto del logout è simile a quello di una firma di uscita.

$ login

login [<utente>]

Permette l'accesso dell'utente al sistema. Se si dispone di più di un account, lo si può utilizzare durante una sessione di lavoro, per accedere temporaneamente in modo diverso ed essere identificati diversamente.

Di solito non si usa direttamente: è compito del programma di gestione del terminale, getty o simili, di avviarlo e fare quindi in modo che la prima cosa che appare sullo schermo sia la richiesta del login.

Ogni utente registrato nel sistema, cioè per il quale è stato previsto un account, ha una directory home, all'interno della quale si trova posizionato al momento dell'accesso. Questa directory contiene dei file riguardanti la particolare configurazione dell'utente a cui appartiene. La directory home è collocata in /home/<nome-utente> e questa viene normalmente abbreviata utilizzando il simbolo ~ (tilde). La directory home dell'utente root è speciale e si trova in /root. Durante un accesso normale da parte di un qualunque utente, compreso root, vengono richiesti il nome dell'utente (se non era già stato fornito nella riga di comando) e la password. Quindi vengono visualizzati:

Se si tratta di un utente al quale è associata una password, questa viene richiesta e controllata. Se risulta errata, vengono consentiti un massimo di dieci tentativi. Tutti gli errori sono riportati all'interno del log di sistema. Se l'utente che chiede di accedere non è root, e se esiste il file /etc/nologin, ne viene visualizzato il contenuto sullo schermo e non viene consentito l'accesso. Ciò serve per impedire l'accesso al sistema, tipicamente quando lo si intende chiudere. Perché l'accesso possa essere effettuato come utente root, occorre che il terminale (tty) da cui si intende accedere sia elencato all'interno di /etc/securetty. I tentativi di questo tipo, che provengono da terminali non ammessi, vengono registrati all'interno del log di sistema. Se esiste il file ~/.hushlogin, viene eseguito un accesso silenzioso, nel senso che vengono disattivati:

Se esiste il file /var/log/lastlog, viene visualizzata la data e l'ora dell'ultimo accesso e ne viene registrato quello in corso. Al termine della procedura di accesso viene avviata la shell dell'utente. Se all'interno del file /etc/passwd, non è indicata la shell da associare all'utente che accede, viene utilizzato /bin/sh. Se all'interno del file /etc/passwd non è indicata la directory home dell'utente, viene utilizzata la directory / (la radice).

/etc/passwd

È un elenco di utenti, password, directory home, shell e altre informazioni personali utilizzate da finger ( finger). La struttura dei record (righe) di questo file è molto semplice.

<utente>:<password>:<UID>:<GID>:<dati-personali>:<directory-home>:<shell>

<!>   Per impedire l'accesso a un utente attraverso la procedura di login, è sufficiente modificare parzialmente il campo della password, per esempio con l'aggiunta di un asterisco.

/etc/group

È l'elenco dei gruppi di utenti. La struttura delle righe di questo file è molto semplice.

<gruppo>:<password>:<GID>:<lista-di-utenti>

/etc/shadow

Il file /etc/shadow appare in quei sistemi in cui è attivata la gestione delle shadow password. Serve a contenere le password cifrate, togliendole dal file /etc/passwd. Facendo in questo modo, è possibile inibire la maggior parte dei permessi di accesso a questo file, proteggendo le password. Al contrario, non è possibile impedire l'accesso in lettura del file /etc/passwd che fornisce una quantità di informazioni sugli utenti, indispensabili a molti programmi.

/var/run/utmp

È il file che contiene l'elenco degli accessi in essere nel sistema. Non è un normale file di testo e per l'estrazione delle informazioni in esso contenute si usano utility apposite. È possibile tuttavia che siano di più gli utenti effettivamente presenti nel sistema e ciò a causa del fatto che non tutti i programmi usano il metodo di registrazione fornito attraverso questo file.

Se questo file non esiste, conviene crearlo manualmente in uno dei due modi seguenti.

# cp /dev/null /var/run/utmp

# touch /var/run/utmp

/var/log/wtmp

Il file wtmp ha una struttura analoga a quella di /var/log/utmp e serve per conservare la registrazione degli accessi e della fine di questi (login-logout). Questo file non viene creato automaticamente; se manca, la conservazione delle registrazioni all'interno del sistema non viene effettuata. Viene aggiornato da login e da init.

Il formato di questo file non è quello di un normale file di testo, quindi non è leggibile o stampabile direttamente.

Se questo file non esiste, conviene crearlo manualmente in uno dei due modi seguenti.

# cp /dev/null /var/log/wtmp

# touch /var/log/wtmp

/etc/motd

Il contenuto di questo file viene visualizzato da login al termine della procedura di login, prima dell'avvio della shell associata all'utente. Questo file contiene, o dovrebbe contenere, il cosiddetto ``messaggio del giorno''.

/etc/nologin

Se esiste questo file, login non accetta nuovi accessi al sistema, e a ogni tentativo visualizza il suo contenuto.

Se si desidera chiudere il sistema è possibile creare questo file scrivendoci all'interno il motivo, o una breve spiegazione di quello che sta avvenendo.

/etc/securetty

Contiene l'elenco dei terminali ``sicuri'', cioè di quelli da cui si permette l'accesso come utente root. I nomi dei terminali vengono scritti senza indicare il prefisso /dev/. L'esempio seguente mostra un elenco di terminali che comprende la console, le sei console virtuali, quattro terminali seriali e quattro terminali che accedono dalla rete locale, oppure da X Window System.

console
tty1
tty2
tty3
tty4
tty5
tty6
ttyS0
ttyS1
ttyS2
ttyS3
ttyp0
ttyp1
ttyp2
ttyp3

/var/spool/mail/<utente>

Il file corrispondete al nome dell'utente, contenuto in /var/spool/mail/, viene usato per accumulare la posta a lui diretta.

Il programma login, dopo la visualizzazione del messaggio contenuto in /etc/motd, se trova che c'è posta per l'utente, visualizza un messaggio di avvertimento in tal senso.

~/.hushlogin

Se esiste il file .hushlogin all'interno della directory home di un certo utente, quando quell'utente accede, login non visualizza alcun messaggio introduttivo.

/var/log/lastlog

Il file /var/log/lastlog, se esiste, viene utilizzato da login per registrare gli ultimi accessi al sistema e per poter visualizzare la data e l'ora dell'ultimo accesso, a ogni login.

Se questo file non esiste, conviene crearlo manualmente in uno dei due modi seguenti.

# cp /dev/null /var/log/lastlog

# touch /var/log/lastlog

20.3 Cambiamento di identità

Alcuni programmi consentono di ottenere i privilegi di un altro utente, come se si eseguisse un altro login. In alcuni sistemi, questo rappresenta un problema di sicurezza, quando da un terminale che non viene considerato sicuro e quindi non incluso nell'elenco di /etc/securetty, si riesce a ottenere l'accesso come root.

$ su

su [<opzioni>] [<utente>]

su permette a un utente di diventare temporaneamente un altro. Avvia una shell con UID e GID reale ed efficace. Se non viene indicato un utente, su sottintende root. Prima di attivare la nuova shell, viene richiesta la password associata all'utente selezionato, a meno che su non sia stato eseguito da chi sta già accedendo come root.

$ newgrp

newgrp [<gruppo>]

Permette di cambiare il gruppo a cui appartiene l'utente. L'utente non cambia, la directory home nemmeno, cambia solo il GID. Un utente può cambiare gruppo solo se nel file /etc/group sono diversi i gruppi a cui può appartenere l'utente.

In alcuni sistemi Unix non è possibile cambiare gruppo se quel gruppo non ha una password.

20.4 Informazioni sugli accessi

Molti programmi permettono di avere informazioni sugli accessi e di conseguenza anche sugli utenti. In particolare sono importanti quelli che permettono di leggere il contenuto dei file /var/run/utmp e /var/log/wtmp il cui formato non è leggibile attraverso l'uso di un semplice cat.

Queste notizie possono essere utili anche per la preparazione di script, per esempio quando c'è la necessità di verificare se questo viene avviato dall'utente root o da un altro.

$ last

last [<opzioni>] [<nome>... ]

Visualizza il contenuto del file di log degli accessi (login) e disconnessioni (logout) per le informazioni riguardanti gli utenti e/o i terminali. Il file dal quale queste informazioni vengono attinte è /var/log/wtmp.

Alcune opzioni

-<numero> | -n <numero>

Limita il numero di elementi visualizzati allo specifico valore numerico indicato.

Esempi

$ last

Visualizza gli ultimi eventi del log degli accessi.

$ last pippo root

Visualizza gli accessi e disconnessioni da parte degli utenti pippo e root.

$ users

users [<file>]

Visualizza i nomi degli utenti che accedono attualmente al computer host corrente. Se un utente ha attivato più sessioni, il suo nome apparirà più volte nell'elenco. Se il comando viene avviato senza l'indicazione di un file, i dati visualizzati vengono estratti da /etc/utmp. Una possibilità comune è quella di visualizzare attraverso users il contenuto di /etc/wtmp.

$ w

w [<opzioni>] [<utente>]

Visualizza i nomi degli utenti che accedono attualmente e varie informazioni sulla loro attività.

$ who

who [<opzioni>] [<file>] [am i]

Visualizza i nomi degli utenti che accedono attualmente e varie informazioni sulla loro attività. who trae normalmente le sue informazioni dal file /etc/utmp, a meno che non venga indicato un altro file (per esempio /etc/wtmp).

Vedere info who oppure who(1).

$ whoami

whoami

Visualizza il nome dell'utente associato con l'attuale UID efficace. È equivalente a id -un.

$ logname

logname

Emette il nome dell'utente, così come appare dal file /var/run/utmp.

 

1997.10.26 - Scritto da Daniele Giacomini   daniele@calion.com   (vedi copyright: Appunti Linux).


Capitolo successivo Capitolo precedente Indice