Understanding Linux: 20 anni di kernel tra storia e tecnica

26
#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

Transcript of Understanding Linux: 20 anni di kernel tra storia e tecnica

Page 1: Understanding Linux: 20 anni di kernel tra storia e tecnica

#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

Page 2: Understanding Linux: 20 anni di kernel tra storia e tecnica

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

Page 3: Understanding Linux: 20 anni di kernel tra storia e tecnica

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

Page 4: Understanding Linux: 20 anni di kernel tra storia e tecnica

Differenze tra kernel

KERNEL MONOLITICI(UNIX->*.BSD, LINUX ) INTEGRAZIONE DEL CODICE STRETTA

MICROKERNEL(MACH, MINIX, QNX)SEPARAZIONE SERVIZI BASE DA STRUTTRAOPERATIVA

Page 5: Understanding Linux: 20 anni di kernel tra storia e tecnica

Differenze tra kernel

IBRIDI(WINDOWS, XNU, DRAGONFLY, QUARK)

CODICE NON ESSENZIALE A LIVELLO KS

ESOKERNEL(NEMESIS)

”POTERE ALLO SVILUPPATORE”

Page 6: Understanding Linux: 20 anni di kernel tra storia e tecnica

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

Page 7: Understanding Linux: 20 anni di kernel tra storia e tecnica

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 ...

Page 8: Understanding Linux: 20 anni di kernel tra storia e tecnica

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

Page 9: Understanding Linux: 20 anni di kernel tra storia e tecnica

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

Page 10: Understanding Linux: 20 anni di kernel tra storia e tecnica

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.

Page 11: Understanding Linux: 20 anni di kernel tra storia e tecnica

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

Page 12: Understanding Linux: 20 anni di kernel tra storia e tecnica

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

Page 13: Understanding Linux: 20 anni di kernel tra storia e tecnica

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

Page 14: Understanding Linux: 20 anni di kernel tra storia e tecnica

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

Page 15: Understanding Linux: 20 anni di kernel tra storia e tecnica

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

Page 16: Understanding Linux: 20 anni di kernel tra storia e tecnica

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

Page 17: Understanding Linux: 20 anni di kernel tra storia e tecnica

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

Page 18: Understanding Linux: 20 anni di kernel tra storia e tecnica

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)

Page 19: Understanding Linux: 20 anni di kernel tra storia e tecnica

Kernel Linux: mappa

Page 20: Understanding Linux: 20 anni di kernel tra storia e tecnica

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'ARCHIVIOroot@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.4root@host:/linux-3.0.4#

Page 21: Understanding Linux: 20 anni di kernel tra storia e tecnica

Kernel Linux: pratica

STEP N°3: LA FASE DI CONFIGURAZIONEroot@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)

Page 22: Understanding Linux: 20 anni di kernel tra storia e tecnica

Kernel Linux: pratica

STEP N°4: LA COMPILAZIONEASSICURATEVI 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

Page 23: Understanding Linux: 20 anni di kernel tra storia e tecnica

Kernel Linux: pratica

STEP N°5: IMMAGINE COMPRESSA, MODULI E RAMDISKIN 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 kernelCREATO IL KERNEL E' IL MOMENTO DI INSTALLARE I MODULI

root@host:/linux-3.0.4# make modules_install FATTO (cit. necessaria)! MANCA SOLO UN RAMDISKCOS'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.4IL PRIMO PARAMETRO INDICA IL PATH IN CUI ALLOCARE IL FILE, IL SECONDO INDICA LA VERSIONE DEL KERNEL DI CUI GENERARE IL RAMDISK

Page 24: Understanding Linux: 20 anni di kernel tra storia e tecnica

Kernel Linux: pratica

STEP N°6: COPIA DEI FILE IMMAGINE DEL KERNELcp arch/x86/boot/bzImage /boot/vmlinuz-3.0.4

MAPPATURA DEL SISTEMAcp System.map /boot/System.map-3.0.4

[CONSIGLIATA] CONFIGURAZIONE USATAcp .config /boot/config-3.0.4

STEP N°7: MODIFICA DEL BOOTLOADERLILO, GRUB, GRUB2 … SI RIMANDA ALLE RISPETTIVE GUIDE (RTFM googleando googleando)

Page 25: Understanding Linux: 20 anni di kernel tra storia e tecnica

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

Page 26: Understanding Linux: 20 anni di kernel tra storia e tecnica

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.