1. #LINUX DAY NAPOLI 2011
Understanding Linux:
20 anni di kernel tra storia e tecnica
A CURA DI MARCO FERRIGNO
- Security & system independent researcher -
- Developer of the Italian Debian GNU/Linux HOWTOs -
gplus.to/marko.ferrigno
#all_contacts
2. root@host:/# intro
PROPEDEUTICITA':
NOZIONI BASILARI SULLE ARCHITETTURE DI ELABORAZIONE,
NOZIONI BASILARI SULL'UTILIZZO DEI SISTEMI OPERATIVI,
CURIOSITA' E SPIRITO DI INIZIATIVA.
COSA IMPAREREMO DA QUESTO TALK:
COS'E' UN KERNEL,
IL KERNEL LINUX: STORIA,
IL KERNEL LINUX: TECNICA,
IL KERNEL LINUX IN PRATICA,
… ALTRE AMENITA' NERD' ORIENTED
3. Kernel: cos'è realmente?
E' IL SOFTWARE IL CUI COMPITO E' QUELLO DI FORNIRE AI PROCESSI IN
ESECUZIONE SULL'ELABORATORE UN ACCESSO SICURO E CONTROLLATO
ALL'HARDWARE.
PRINCIPALI MANSIONI:
GESTIONE DELLA PORZIONE TEMPO-MACCHINA,
GESTIONE DELLE ASTRAZIONI.
I KERNEL SI CLASSIFICANO IN QUATTRO CATEGORIE:
MONOLITICI
MICROKERNEL
IBRIDI
ESOKERNEL
4. Differenze tra kernel
KERNEL MONOLITICI
(UNIX->*.BSD, LINUX )
INTEGRAZIONE DEL CODICE STRETTA
MICROKERNEL
(MACH, MINIX, QNX)
SEPARAZIONE SERVIZI BASE DA STRUTTRA
OPERATIVA
6. Kernel Linux: le origini
"I’m doing a (free) operating system (just a hobby, won’t be big and professional
like gnu) for 386(486) AT clones."
- Linus Torvads 26 agosto 1991 8:12 am - camp.os.minix
HA INIZIO UNA STORIA RICCA DI CONTRIBUTI DA PARTE DI UTENTI DI TUTTO IL
MONDO CHE COMUNICAVANO ESCLUSIVAMENTE TRAMITE INTERNET.
TRA LA NASCITA E LO STATO DELL'ARTE:
LA ”GUERRA” LINUS TORVALDS VS ANDREW TANENBAUM
LINUX 1.0 - 14 MARZO 1994
LINUX 3.0 - 21 LUGLIO 2011
7. Kernel Linux: stato dell'arte
LINUX 3.0: PRINCIPALI MIGLIORAMENTI
BTRFS: DEFRAMMENTAZIONE AUTOMATICA, SCRUBBING , PRESTAZIONI
AMPIAMENTO DEL PARCO DRIVER E DELLE ARCHITETTURE
> SCALABILITA' DEL VFS
PROCESS SCHEDULER++
GESTIONE DELLA MEMORIA++
NETWORKING → IPSET: SCTP, UDPLITE
FILE SYSTEM → EXT4 ”PUNCH HOLE”, CIFS WINDOWS 2008 DFS, XFS++
CRYPTO → FREESCALE SEC4/CAAM, SHA1/256 VIA NANO, S5PV210
VIRTUALIZZAZIONE → USER MODE++, XEN BLKBACK
SICUREZZA → SELINUX MOUNT POINT /sys/fs/selinux
ALTRE MODIFICHE → ULIMIT, KBUILD, HIBERNATE, POSIX-TIMER,
COREDUMP
NB: (++) == miglioramento rispetto alla release precedente
FACCIAMO UN PASSO INDIETRO ...
8. Kernel Linux: melting pot
IL ”SISTEMA” LINUX:
CODICE EX NOVO KERNEL LINUX
GESTIONE DEI SERVIZI DI RETE 4.3BSD
VARI FRAMMENTI DI CODICE X WINDOWS
GNU PRINCIPALI LIBRERIE DI SISTEMA, GCC
FILE SYSTEM HIERARCHY STANDARD:
DOCUMENTO CHE STABILISCE SOTTO QUALI NOMI DI DIRECTORY I FILE DI
CONFIGURAZIONE, LE LIBRERIE, I FILE ESEGUIBILI DI SISTEMA E I FILE DI DATI
DOVREBBERO ESSERE ARCHIVIATI
DISTRIBUZIONI E PACKAGES MANAGERS:
DA SOFTLANDING LINUX SYSTEM (AGOSTO 1992) A SABAYON …
…. PASSANDO PER SLACKWARE, DEBIAN, RED HAT
9. Kernel Linux: licenze
I TERMINI DELLA GNU GENERAL PUBLIC LICENSE (GPL) SONO STATI STABILITI
DALLA FREE SOFTWARE FOUNDATION.
IL SISTEMA LINUX E' LIBERO NEL SENSO CHE SI PUO' COPIARE, MODIFICARE E
USARE IN QUALUNQUE MODO SI DESIDERI E SI PUO' FAR CIRCOLARE SENZA
ALCUNA LIMITAZIONE.
CHIUNQUE LO USI O CREI UN PRODOTTO DA ESSO DERIVATO NON PUO'
RECLAMARE DIRITTI DI PROPRIETA' SUL PRODOTTO.
ALL'ATTO DELLA DISTRIBUZIONE SI DEVE RENDERE DISPONIBILE IL CODICE
SORGENTE E CIO' VALE PER OGNI COMPONENTE DI UN PACCHETTO DI
DISTRIBUZIONE CHE SIA OGGETTO DELLA GPL.
CIO' NON EVITA LA DIFFUSIONE GRATUITA O LA VENDITA DI VERSIONI
PURAMENTE BINARIE, PURCHE' CHIUNQUE RICEVA I FILE ESEGUIBILI ABBIA LA
POSSIBILITA' DI OTTENERE IL CODICE SORGENTE AD UN PREZZO
RAGIONEVOLE
10. Kernel Linux: moduli & driver
TORNANDO ALLA TECNICA … COS'E' UN MODULO?
E' UN COMPONENTE SOFTWARE CHE PUÒ SVOLGERE DIVERSE FUNZIONI
VANTAGGI:
PUÒ ESSERE COMPILATO SEPARATAMENTE ED ESSERE CARICATO IN UN
KERNEL GIA' IN USO.
ALTA PERSONALIZZAZIONE
DISTRIBUZIONE GRATUITA E LIBERA
I DRIVER IN UN SISTEMA LINUX:
IL KERNEL POSSIEDE DELLE TABELLE DINAMICHE DI TUTTI I DRIVER NOTI E
FORNISCE UN INSIEME DI PROCEDURE CHE PERMETTONO DI AGGIUNGERE O
RIMUOVERE UN DRIVER DA QUESTE TABELLE IN QUALUNQUE MOMENTO
MODULI & DRIVER:
UN MODULO PUO' REGISTRARE MOLTI TIPI DI DRIVER; UN CERTO MODULO PUO'
SCEGLIERE FRA QUESTI E, SE LO DESIDERA, REGISTRARE PIU' DI UN DRIVER.
UN CERTO DRIVER POTREBBE VOLER REGISTRARE DUE MECCANISMI DISTINTI
PER L'ACCESSO AD UN DISPOSITIVO.
11. Kernel Linux: gestione dei
processi
MODELLO UNIX: CREAZIONE - FORK() - ED ESECUZIONE - EXEC() - DEI
PROGRAMMI.
IDENTITA' DEI PROCESSI:
IDENTIFICATORE (PROCESS IDENTIFIER - PID)
CREDENZIALI UTENTE
PERSONALITA' DELLA SEMANTICA (LINUX)
CONTESTO DI UN PROCESSO:
CONTESTO DI SCHEDULING
CONTABILIZZAZIONE DELLE RISORSE
TABELLA DEI FILES
CONTESTO DEL FILE SYSTEM
TABELLA DEI GESTORI DEI SEGNALI
CONTESTO DELLA MEMORIA VIRTUALE
LA CHIAMATA CLONE() E IL CONCETTO DI TASK
12. Kernel Linux: scheduling
LO SCHEDULING CONSISTE NELL'ALLOCAZIONE DEL TEMPO DI CPU AI DIVERSI
TASK ALL'INTERNO DI UN SISTEMA OPERATIVO.
UN ASPETTO IMPORTANTE DELLO SCHEDULING NEL SISTEMA LINUX È
L'ESECUZIONE DEI VARI TASK DEL KERNEL:
TASK RICHIESTI DA UN PROCESSO IN ESECUZIONE
TASK INTERNI ESEGUITI PER CONTO DI UN DRIVER DI DISPOSITIVO.
2 DISTINTI ALGORITMI DI SCHEDULING
(CON PRELAZIONE E BASATO SULLE PRIORITA'):
ALGORITMO A PARTIZIONE DEL TEMPO
ALGORITMO DI REAL TIME (SOFT)
SINCRONIZZAZIONE KERNEL:
PRELAZIONE VS SPINLOCK
MULTIELABORAZIONE SIMMETRICA (SMP):
SPINLOCK
BIG KERNEL LOCK (BKL)
LOCK MULTIPLI E ALGORITIMI DI BILANCIAMENTO DEL CARICO
13. Kernel Linux: gestione della memoria
ALLOCAZIONE E RILASCIO DI PAGINE E BLOCCHI DI MEMORIA
MEMORIA VIRTUALE
GESTIONE DELLA MEMORIA FISICA:
SISTEMI DI ALLOCAZIONE: BUDDY, KMALLOC(), SLAB
GESTIONE DELLA MEMORIA VIRTUALE:
SPAZIO DI INDIRIZZI VISIBILE A OGNI PROCESSO
(NATURA LOGICA VS NATURA FISICA)
ASPETTI DA VALUTARE:
DURATA DI UNO SPAZIO DI INDIRIZZI
PAGINAZIONE E AVVICENDAMENTO
ZONA MEMORIA FISICA
ZONE_DMA <16 MB
ZONE_NORMAL 16 MB <X< 896 MB
ZONE_HIGHMEM >896 MB
14. Kernel Linux: file system
IL DOGMA: OGNI COSA E' UN FILE
DAL VANGELO DI THOMPSON && RITCHIE:
”UN FILE NON E' NECESSARIAMENTE UN OGGETTO MEMORIZZATO IN UN
DISCO O PRELEVATO DA UN SERVER DI RETE: UN FILE E' QUALUNQUE
ELEMENTO SIA IN GRADO DI GESTIRE L'IMMISSIONE O L'EMISSIONE DI UN
FLUSSO DI DATI”
IL KERNEL DI LINUX GESTISCE TUTTI I TIPI DI FILE NASCONDENDONE I
DETTAGLI RELATIVI ALLA STRUTTURA INTERNA SOTTO UNO STRATO DI
PROGRAMMI: IL FILE SYSTEM VIRTUALE (VFS)
IL VFS DEFINISCE QUATTRO TIPI DI OGGETTI PRINCIPALI:
INODE
FILE → /usr/include/linux/fs.h
SUPERBLOCCO
DENTRY → /usr/include/stdio.h
JOURNALING: ANNOTAZIONE DELLE MODIFICHE
/PROC: RAPPRESENTAZIONE COME FILE DELLE STRUTTURE DEL KERNEL
15. Kernel Linux: I/O
IL SISTEMA LINUX SUDDIVIDE I DISPOSITIVI IN TRE CLASSI:
DISPOSITIVI A BLOCCHI
→ BLOCCHI DI DATI DI DIMENSIONE FISSA INDIPENDETE
DISPOSITIVI A CARATTERI
→ MOUSE E TASTIERE
DISPOSITIVI DI RETE
→ COMUNICAZIONE INDIRETTA TRAMITE IL SOTTOSISTEMA DI RETE DEL
KERNEL
16. Kernel Linux: comunicazione fra
processi
IL MECCANISMO STANDARD DI UNIX USATO PER COMUNICARE A UN PROCESSO
CHE UN EVENTO SI È VERIFICATO È IL SEGNALE
LINUX PERO' NON UTILIZZA I SEGNALI PER COMUNICARE CON I PROCESSI
ESEGUITI IN MODALITA' KERNEL. ESSO FA USO DEGLI STATI DI SCHEDULING E
DELLE STRUTTURE wait_queue
MECCANISMO DEI SEMAFORI – VANTAGGI:
ESSERE CONDIVISI IN GRAN NUMERO DA PROCESSI INDIPENDENTI
ESECUZIONE ATOMICA
PASSAGGIO DI DATI TRA PROCESSI:
PIPE
17. Kernel Linux: struttura di rete
INTERNAMENTE IL KERNEL REALIZZA I SERVIZI DI RETE PER MEZZO DI TRE
STRATI DI PROGRAMMI:
INTERFACCIA A SOCKET (4.3BSD)
DRIVER DEI PROTOCOLLI (ETICHETTATURA DI PROTOCOLLO)
→ skbuff
→ GESTIONE DEL FIREWALL
→ CATENE DI FIREWALL
DRIVER DEI DISPOSITIVI DI RETE
→ ipfraq
→ ipq
18. Kernel Linux: sicurezza
LE QUESTIONI RELATIVE ALLA SICUREZZA SONO CLASSIFICABILI IN DUE
GRUPPI:
AUTENTICAZIONE
→ ASSICURARE CHE NESSUNO POSSA ACCEDERE AL SISTEMA SENZA PRMA
DIMOSTRARE DI AVERNE DIRITTO
→ FUNZIONE DI CODIFICA NON INVERTIBILE
→ PAM (PLUGGABLE AUTHENTICATION MODULES)
CONTROLLO DELL'ACCESSO
→ FORNIRE UN MECCANISMO CHE PERMETTA DI CONTROLLARE SE UN
UTENTE ABBIA DIRITTO D'ACCESSO A UN CERTO OGGETTO E CHE IMPEDISCA
L'ACCESSO SE L'ESITO DEL CONTROLLO E' NEGATIVO
→ UID, GID
→ MASCHERA DI PROTEZIONE
→ ROOT (da non confondere con chroot*)
*isolare limiti operativi di una singola applicazione, utile per la difesa in rete (…e non solo)
20. Kernel Linux: pratica
FORZA && CORAGGIO
STEP N°1: SCARICARE I SORGENTI https://www.kernel.org/
CASO D'ESEMPIO, LINUX KERNEL 3.0.4 (LATEST STABLE KERNEL)
https://www.kernel.org/pub/linux/kernel/v3.x/
STEP N°2: SCOMPATTARE L'ARCHIVIO
root@host:/# bunzip2 linux-3.0.4.tar.bz2
#sostituisce il *.tar.bz2 con il suo equivalente non compresso *.tar
root@host:/# tar xvf linux-3.0.4.tar
#estrae dall'archivio i files e crea la giusta struttura di directory, mantenendo il file *.tar
#a questo punto si può entrare nella direcotry creata:
root@host:/# cd linux-3.0.4
root@host:/linux-3.0.4#
21. Kernel Linux: pratica
STEP N°3: LA FASE DI CONFIGURAZIONE
root@host:/linux-3.0.4# make config
#nel caso nel sistema fossere presenti le librerie ncurses (e relativi files di sviluppo) è
possibile sostituire il comando sopra citato con
root@host:/linux-3.0.4# make menuconfig
LA SELEZIONE DEI PARAMETRI E' UN PROCEDIMENTO LUNGO CHE RICHIEDE
MOLTA PONDERAZIONE: SI TRATTA DI DECIDERE CHE COSA ANDRA'
COMPILATO ED INCLUSO NEL KERNEL, CHE COSA NON DOVRA' ESSERE
COMPILATO, COSA ANDRA' COMPILATO MA SARA' UTILIZZATO COME MODULO.
NT (NERDATA TOTALE)
22. Kernel Linux: pratica
STEP N°4: LA COMPILAZIONE
ASSICURATEVI CHE LA VOSTRA MACCHINA SIA A DISPOSIZIONE SENZA
INTERRUZZIONI MA SOPRATTUTTO TROVATEVI QUALCOSA DI DIVERTENTE DA
FARE … 4 SEMPLICI LETTERE STRESSERANNO IL VOSTRO PC IN UNA MANIERA
NON INDIFFERENTE
root@host:/linux-3.0.4# make
23. Kernel Linux: pratica
STEP N°5: IMMAGINE COMPRESSA, MODULI E RAMDISK
IN QUESTO MOMENTO ABBIAMO COMPILATO TUTTO MA NON ABBIAMO ANCORA
MESSO AL LORO POSTO NE' I MODULI NE' L'IMMAGINE DEL KERNEL:
CREIAMOLA!
root@host:/linux-3.0.4# make bzImage
FATTO CIO' NELLA SOTTODIRECTORY arch/xyz/boot SI TROVERA' IL FILE bzImage.
#xyz = sigla che indica l'architettura per cui è stato compilato il kernel
CREATO IL KERNEL E' IL MOMENTO DI INSTALLARE I MODULI
root@host:/linux-3.0.4# make modules_install
FATTO (cit. necessaria)! MANCA SOLO UN RAMDISK
COS'E'? E' UNA PORZIONE DI RAM CHE VIENE UTILIZZATA COME DISCO.
root@host:/linux-3.0.4# mkinitramfs -o /boot/initrd.img-3.0.4 3.0.4
IL PRIMO PARAMETRO INDICA IL PATH IN CUI ALLOCARE IL FILE, IL SECONDO
INDICA LA VERSIONE DEL KERNEL DI CUI GENERARE IL RAMDISK
24. Kernel Linux: pratica
STEP N°6: COPIA DEI FILE
IMMAGINE DEL KERNEL
cp arch/x86/boot/bzImage /boot/vmlinuz-3.0.4
MAPPATURA DEL SISTEMA
cp System.map /boot/System.map-3.0.4
[CONSIGLIATA] CONFIGURAZIONE USATA
cp .config /boot/config-3.0.4
STEP N°7: MODIFICA DEL BOOTLOADER
LILO, GRUB, GRUB2 … SI RIMANDA ALLE RISPETTIVE GUIDE (RTFM googleando
googleando)
25. Kernel Linux: il lato oscuro
KERNEL PANIC
→ ERRORE IRRECUPERABILE INDIVIDUATO IN KERNEL SPACE
INIEZIONE DI FALLIMENTI
→ TRANSAZIONE DI UN SISTEMA IN UNO STATO NON CORRETTO
OVERFLOW
→ STACK
→ BUFFER
→ HEAP
26. GRAZIE A ...
Dennis MacAlistair Ritchie
(Bronxville, 9 settembre 1941 – Murray Hill, 12 ottobre 2011)
Co-creatore del linguaggio C (insieme a Brian Kerningam e Ken Thompson) e co-
creatore dell’originale UNIX (assieme a Ken Thompson), a quest’uomo sono legate le
origini dell’affascinante e intricata storia del sistema operativo “più elegante” del mondo.
Se ne è andata una delle menti più brillanti dell’Informatica dei primi anni, dal cui GENIO
ASSOLUTO discendono tutti i sistemi operativi UNIX-derivati, tra cui Linux, BSD e
MacOS X, nonché tutti i linguaggi di programmazione moderni.
L’eco dovuta alla sua opera non si spegnerà mai.