Anche se memorizzati in maniera il piu' sicura possibile su un log-server remoto, l'utilita' dei log sarebbe abbastanza ridotta se l'amministratore di sistema dovesse limitarsi ad ignorarli completamente.
Un sistemista oberato di lavoro difficilmente avra' il tempo per tenere controllati accuratamente i log dei propri sistemi. Uno strumento utile in casi del genere potrebbe quindi essere logcheck. Certamente non puo' sostituire un'analisi attenta fatta di persona, ma e' sempre meglio di niente.
Facendo riferimento all'esempio dell'infobox su Syslog-ng, paranoid e' il nome dell'host monitorato, e stargazer quello su cui vengono replicati in remoto i log.
Si e' quindi provveduto ad installare logcheck su stargazer con il comando apt-get install logcheck
.
Per la sua configurazione si e' intervenuti sui seguenti files nella directory /etc/logcheck:
logcheck.conf
logcheck.logfiles
header.txt
In logcheck.conf per prima cosa e' stato modificata l'opzione DATE nel modo seguente DATE="$(date+'%H:%M %d/%m/%Y')", in modo che la data riportata nei subject delle mail inviate all'amministratore sia nel formato italiano anziche' americano.
E' stato impostato anche il livello di controllo da applicare ai messaggi(REPORTLEVEL), scegliendo tra workstation, server e paranoid. Si e' optato per il livello server.
In questo modo logcheck analizzera' tutte le stringhe contenenti le keywords e le regexp riportate nei files sotto le directory /etc/logcheck/cracking.d e /etc/logcheck/violation.d escludendo quelle che rispettano le espressioni regolari definite sotto /etc/logcheck/ignore.d.paranoid (Nota:il paranoid nel nome della directory non ha nulla a che vedere con il nome della macchina d'esempio).
Se ad esempio si fosse scelto il livello workstation sarebbero state ignorate anche le entries che avrebbero rispettato le espressioni regolari definite in ignore.d.server.
All'interno del file logcheck.logfiles sono invece stati elencati i files da monitorare. Nel caso dell'esempio fatto con syslog-ng, avendo diviso i log in sottodirectory, e' necessario riportare tra le entry all'interno di questo file, tutti i files .log, contenuti nelle directory relative ad anno e mese corrente per ogni host monitorato.
Ad esempio per il mese di dicembre 2005 in logcheck.logfiles saranno elencati tutti i files che dovrebbero essere sotto /var/log/hostnames/stargazer/2005/12/ e /var/log/hostnames/paranoid/2005/12/ .
Per evitare l'incombenza della modifica mensile del file logcheck.files si potrebbe utilizzare il seguente shellscript, gen-logfiles.sh:
#!/bin/bash
#estraggo anno e mese corrente
year=$(date +%Y)
month=$(date +%m)
#svuoto logcheck.logfiles del mese scorso
cat /dev/null > /etc/logcheck/logcheck.logfiles
#inserisco le nuove voci
for hostname in $(ls /var/log/hostnames/) ; do
echo /var/log/hostnames/$hostname/$year/$month/auth.log >> /etc/logcheck/logcheck.logfiles
echo /var/log/hostnames/$hostname/$year/$month/syslog >> /etc/logcheck/logcheck.logfiles
echo /var/log/hostnames/$hostname/$year/$month/cron.log >> /etc/logcheck/logcheck.logfiles
echo /var/log/hostnames/$hostname/$year/$month/daemon.log >> /etc/logcheck/logcheck.logfiles
echo /var/log/hostnames/$hostname/$year/$month/kern.log >> /etc/logcheck/logcheck.logfiles
echo /var/log/hostnames/$hostname/$year/$month/lpr.log >> /etc/logcheck/logcheck.logfiles
echo /var/log/hostnames/$hostname/$year/$month/mail.log >> /etc/logcheck/logcheck.logfiles
echo /var/log/hostnames/$hostname/$year/$month/user.log >> /etc/logcheck/logcheck.logfiles
echo /var/log/hostnames/$hostname/$year/$month/sshd.log >> /etc/logcheck/logcheck.logfiles
echo /var/log/hostnames/$hostname/$year/$month/debug >> /etc/logcheck/logcheck.logfiles
echo /var/log/hostnames/$hostname/$year/$month/messages >> /etc/logcheck/logcheck.logfiles
echo /var/log/hostnames/$hostname/$year/$month/log.emerg >> /etc/logcheck/logcheck.logfiles
echo /var/log/hostnames/$hostname/$year/$month/mail.crit >> /etc/logcheck/logcheck.logfiles
echo /var/log/hostnames/$hostname/$year/$month/mail.info >> /etc/logcheck/logcheck.logfiles
echo /var/log/hostnames/$hostname/$year/$month/mail.warn >> /etc/logcheck/logcheck.logfiles
done
Per automatizzare tutte le operazioni di controllo dei log, sono state inserite le seguenti linee in /etc/cron.d/logcheck:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot logcheck if [ -x /usr/sbin/logcheck ]; then nice -n10 /usr/sbin/logcheck -R; fi
3 * * * * logcheck if [ -x /usr/sbin/logcheck ]; then nice -n10 /usr/sbin/logcheck; fi
0 0 1 * * /etc/logcheck/gen-logfiles.sh
La prima linea imposta la variabile d'ambiente PATH, in modo che non ci siano problemi nell'invocare i vari programmi all'interno dello shellscript /usr/sbin/logcheck
.
La seconda indica di eseguire logcheck ad ogni reboot della macchina, mentre la terza al terzo minuto di ogni ora.
Oltre ad eseguire logcheck , inoltre, tramite il comando nice viene alzato di 10 unita' il valore relativo alla priorita' del processo. Poiche' Il range di valori ammissibile va infatti da -20 (priorita' massima) a 19 (priorita' minima), l'effetto del comando e' quello di assegnare una priorita' piu' bassa.
L'ultima linea consente di eseguire lo script gen-logfiles.sh alla mezzanotte del primo giorno del mese.
L'ultimo file di configurazione, header.txt, contiene l'intestazione delle mail di avviso inviate dopo i controlli da parte di logcheck. Nel mio caso ho lasciato invariata l'intestazione di default:
This email is sent by logcheck. If you wish to no-longer receive it, you can either deinstall the logcheck package or modify its
configuration file (/etc/logcheck/logcheck.conf).
Perche' l'utente logcheck possa accedere ai files sotto la directory /var/log/hostnames, e' stato necessario aggiungerlo al gruppo sys_operators, con il comando gpasswd -a logcheck sys_operators
. Nella configurazione di syslog-ng trattata nel relativo infobox, si e' infatti scelto di associare il gruppo sys_operators ai log ed alle loro directory, sensa consentire l'accesso ad altri utenti.
Infine, per non consentire il login al sistema all'utente logcheck, la sua password in /etc/shadow e' stata sostituita con il carattere *, e la sua shell in /etc/passwd impostata a /bin/false.
Analisi, monitoring, rotazione e gestione dei log di sistema. Configurazione di syslogd.