Upload
marco-ferrigno
View
729
Download
3
Embed Size (px)
Citation preview
#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
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
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
Differenze tra kernel
KERNEL MONOLITICI(UNIX->*.BSD, LINUX ) INTEGRAZIONE DEL CODICE STRETTA
MICROKERNEL(MACH, MINIX, QNX)SEPARAZIONE SERVIZI BASE DA STRUTTRAOPERATIVA
Differenze tra kernel
IBRIDI(WINDOWS, XNU, DRAGONFLY, QUARK)
CODICE NON ESSENZIALE A LIVELLO KS
ESOKERNEL(NEMESIS)
”POTERE ALLO SVILUPPATORE”
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
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 ...
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
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
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.
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
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
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
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
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
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
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
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)
Kernel Linux: mappa
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#
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)
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
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
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)
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
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.