#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 STRUTTRA
OPERATIVA
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'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#
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)
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
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
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)
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.

Understanding Linux

  • 1.
    #LINUX DAY NAPOLI 2011 Understanding Linux: 20 annidi 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 BASILARISULLE 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 KERNELMONOLITICI (UNIX->*.BSD, LINUX ) INTEGRAZIONE DEL CODICE STRETTA MICROKERNEL (MACH, MINIX, QNX) SEPARAZIONE SERVIZI BASE DA STRUTTRA OPERATIVA
  • 5.
    Differenze tra kernel IBRIDI (WINDOWS,XNU, DRAGONFLY, QUARK) CODICE NON ESSENZIALE A LIVELLO KS ESOKERNEL (NEMESIS) ”POTERE ALLO SVILUPPATORE”
  • 6.
    Kernel Linux: leorigini "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: statodell'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: meltingpot 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 ITERMINI 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: gestionedei 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 LOSCHEDULING 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: gestionedella 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: filesystem 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 ILSISTEMA 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: comunicazionefra 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: strutturadi 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 LEQUESTIONI 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)
  • 19.
  • 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 STEPN°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 STEPN°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 STEPN°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 STEPN°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: illato 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 ... DennisMacAlistair 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.