KERNEL SPEAKS

Precedente
Programma
Seguente
dmesg > log_boot
  Redireziona l'output del comando dmesg nel file log_boot per una maggior facilità di letture e debugging di un'eventuale problema
ls -l /var/log/
  Lista dei log
cat /var/log/messages
  Visualizza il contenuto del log messages
lspci
  Visualizza l'elenco di tutte le periferiche e i BUS pci
Tips & Tricks

Delle meraviglie del proc file system si è già accennato nei primi capitoli.
Vediamo alcune delle sue parti più interessanti (e accessibili per noi comuni mortali):
/proc/#PID/... - Visualizza per ogni processo in meoria (identificato dal suo PID) molte informazioni utili.
/proc/cpuinfo - Informazioni sulla CPU
/proc/ide/.../ - Informazioni sui dispositivi IDE
/proc/interrupts - Gli IRQ del sistema
/proc/iomem - La memoria I/O
/proc/kcore - Il dump completo della memoria
/proc/modules - I moduli del kernel
/proc/partitions - TUTTE le partizioni degli HD
/proc/pci - I dispositivi PCI
/proc/self - Link simbolico al PID del processo stesso con cui si accede a /proc/self :-!
/proc/version - La versione del kernel
/proc/net/arp - La arp table
/proc/net/dev - I byte trasferiti sui device di rete
/proc/sys/net/ipv4/ - Directory fondamentale con molte informazioni sullo stack tcp/ip. Su alcuni file è possibile cambiare valore (0 o 1) per modificare il comportamento del kernel. Per esempio:
echo 1 > /proc/sys/net/ipv4/ip_forward
abilita il forwarding dei pacchetti sulla macchina (necessario se opera come firewall o gateway di una rete).
Vari strumenti e comandi della shell di fatto esprimono in un formato comprensibile il contenuto di diverse parti del proc file system.

L'elenco delle directory del proc relative ai PID correntemente usati nel sistema può essere molto utile per identificare l'intrusione di un hacker con installazione di un root-kit.
Esistono diversi root-kit in circolazione ed una loro caratteristica comune è quella di "nascodere" all'utente la presenza sul sistema di processi che permettono all'hacker di entrare da remoto sulla macchina. Tipicamente comandi come ps, netstat e ls vengono modificati per impedire la visualizzazione dei processi sospetti.
Se si notano in /proc dei PID che non vengono visualizzati con un ps -adef è il caso di inziare a proccuparsi: provare e vedere quali comandi corrispondono al relativo PID (cat /proc/#PID/cmdline ) ed indagare sulla loro natura.
Ovviamente, se l'hacker ha ricompilato il kernel o caricato moduli dinamici particolari, lo stesso proc file system potrebbe non essere più attendibile, nè più nè meno di un ps modificato.

I messaggi del kernel

Quando il kernel entra in azione e inizia a caricarsi procede con il riconoscimento e l'inizializzazione dell'hardware presente.
Durante il caricamento presenta a video una serie di informazioni, a volte fin troppo dettagliate, sull'hardware trovato.
Per vedere i messaggi del kernel basta digitare il comando dmesg, che visualizza esattamente quanto viene visualizzato dal kernel durante il boot (in tempi troppo rapidi per essere leggibili).

Un dmesg d'esempio

Segue un esempio di un dmesg. Alcune parti variano a seconda dell'hardware presente sul sistema, altre sono sostanzialmente uguali su tutti i Linux. Quello che segue è il dmesg di un sistema piuttosto semplice, i kernel modulari di una distribuzione standard solitamente presentano ulteriori informazioni relative a driver per hardware o funzionalità qui non presenti.

Linux version 2.4.13 (root@llocalhost) (gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-81)) #5 Fri Nov 9 16:36:50 CET 2001
Questa prima riga mostra la versione del kernel (2.4.13) del compilatore interno (gcc), della versione del sistema operativo

Detected 200.457 MHz processor.
Ha rilevato la frequenza del processore a 200 MHz

Console: colour VGA+ 80x25
Inizializza la console e ne indica le proprietà (a colori, con 80 colonne per 25 righe)

Calibrating delay loop... 666.82 BogoMIPS
Test per verificare la velocità del processore. Più sono alti i BogusMIPS più è veloce la CPU:

Memory: 62272k/65536k available (1091k kernel code, 2880k reserved, 315k data, 212k init, 0k highmem)
Rilevazione della memoria fisica disponibile. Se il kernel non riesce ad individuare correttamente la memoria presente sul sistema, provare ad usare l'argomento mem al boot con LILO (es: mem=256M per dire al kernel che il sistema ha 256 Mb di memoria)

CPU: Intel Pentium II (Deschutes) stepping 01
Identificazione del processore

POSIX conformance testing by UNIFIX
PCI: PCI BIOS revision 2.10 entry at 0xfb5c0, last bus=0

Inizializzazione delle periferiche PCI

Serial driver version 5.05c (2001-07-08) with MANY_PORTS SHARE_IRQ SERIAL_PCI enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A
ttyS01 at 0x02f8 (irq = 3) is a 16550A

Inizializzazione delle porte seriali

hda: IBM-DTTA-351010, ATA DISK drive
Identificazione dell'hard-disk

Partition check:
hda: hda1 hda2 < hda5 hda6 hda7 hda8 >

Verifica dell'integrità delle partizioni da montare.

3c59x: Donald Becker and others. www.scyld.com/network/vortex.html
00:11.0: 3Com PCI 3c900 Cyclone 10Mbps Combo at 0x6400. Vers LK1.1.16

Inizializzazione del driver della scheda di rete e rilevazione del chip

NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP

Inizializzazione del TCP/IP ed elenco dei protocolli supportati dal kernel.

A fine caricamento il kernel lancia init il padre di tutti i processi, di cui scopriremo varie cose nella prossima pagina.

WEB RESOURCES
http://nodevice.com/sections/ManIndex/man0256.html dmesg print or control the kernel ring buffer
http://www.linuxgazette.com/issue59/nazario.html dmesg explained
http://www.uni-paderborn.de/Linux/mdw/HOWTO/Kernel-HOWTO.html#toc7 The Linux Kernel HOWTO
http://www.linux.com/enhance/hardware/ Hardware database, compatibilità e link utili a How-To e hompage del sito della casa produttrice
http://www.linuxdoc.org/HOWTO/Plug-and-Play-HOWTO.html PnP How-To