Understanding Linux: 20 anni di kernel tra storia e tecnica
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Understanding Linux: 20 anni di kernel tra storia e tecnica

  • 952 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
952
On Slideshare
813
From Embeds
139
Number of Embeds
1

Actions

Shares
Downloads
3
Comments
0
Likes
0

Embeds 139

http://www.scoop.it 139

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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:/# introPROPEDEUTICITA: NOZIONI BASILARI SULLE ARCHITETTURE DI ELABORAZIONE, NOZIONI BASILARI SULLUTILIZZO DEI SISTEMI OPERATIVI, CURIOSITA E SPIRITO DI INIZIATIVA.COSA IMPAREREMO DA QUESTO TALK: COSE 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 INESECUZIONE SULLELABORATORE UN ACCESSO SICURO E CONTROLLATOALLHARDWARE.PRINCIPALI MANSIONI: GESTIONE DELLA PORZIONE TEMPO-MACCHINA, GESTIONE DELLE ASTRAZIONI.I KERNEL SI CLASSIFICANO IN QUATTRO CATEGORIE: MONOLITICI MICROKERNEL IBRIDI ESOKERNEL
  • 4. Differenze tra kernelKERNEL MONOLITICI(UNIX->*.BSD, LINUX )INTEGRAZIONE DEL CODICE STRETTAMICROKERNEL(MACH, MINIX, QNX)SEPARAZIONE SERVIZI BASE DA STRUTTRAOPERATIVA
  • 5. Differenze tra kernel IBRIDI (WINDOWS, XNU, DRAGONFLY, QUARK)CODICE NON ESSENZIALE A LIVELLO KS ESOKERNEL (NEMESIS)”POTERE ALLO SVILUPPATORE”
  • 6. Kernel Linux: le origini"I’m doing a (free) operating system (just a hobby, won’t be big and professionallike gnu) for 386(486) AT clones."- Linus Torvads 26 agosto 1991 8:12 am - camp.os.minixHA INIZIO UNA STORIA RICCA DI CONTRIBUTI DA PARTE DI UTENTI DI TUTTO ILMONDO CHE COMUNICAVANO ESCLUSIVAMENTE TRAMITE INTERNET.TRA LA NASCITA E LO STATO DELLARTE: LA ”GUERRA” LINUS TORVALDS VS ANDREW TANENBAUM LINUX 1.0 - 14 MARZO 1994 LINUX 3.0 - 21 LUGLIO 2011
  • 7. Kernel Linux: stato dellarteLINUX 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, COREDUMPNB: (++) == miglioramento rispetto alla release precedente FACCIAMO UN PASSO INDIETRO ...
  • 8. Kernel Linux: melting potIL ”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, GCCFILE SYSTEM HIERARCHY STANDARD:DOCUMENTO CHE STABILISCE SOTTO QUALI NOMI DI DIRECTORY I FILE DICONFIGURAZIONE, LE LIBRERIE, I FILE ESEGUIBILI DI SISTEMA E I FILE DI DATIDOVREBBERO ESSERE ARCHIVIATIDISTRIBUZIONI E PACKAGES MANAGERS:DA SOFTLANDING LINUX SYSTEM (AGOSTO 1992) A SABAYON ……. PASSANDO PER SLACKWARE, DEBIAN, RED HAT
  • 9. Kernel Linux: licenzeI TERMINI DELLA GNU GENERAL PUBLIC LICENSE (GPL) SONO STATI STABILITIDALLA FREE SOFTWARE FOUNDATION.IL SISTEMA LINUX E LIBERO NEL SENSO CHE SI PUO COPIARE, MODIFICARE EUSARE IN QUALUNQUE MODO SI DESIDERI E SI PUO FAR CIRCOLARE SENZAALCUNA LIMITAZIONE.CHIUNQUE LO USI O CREI UN PRODOTTO DA ESSO DERIVATO NON PUORECLAMARE DIRITTI DI PROPRIETA SUL PRODOTTO.ALLATTO DELLA DISTRIBUZIONE SI DEVE RENDERE DISPONIBILE IL CODICESORGENTE E CIO VALE PER OGNI COMPONENTE DI UN PACCHETTO DIDISTRIBUZIONE CHE SIA OGGETTO DELLA GPL.CIO NON EVITA LA DIFFUSIONE GRATUITA O LA VENDITA DI VERSIONIPURAMENTE BINARIE, PURCHE CHIUNQUE RICEVA I FILE ESEGUIBILI ABBIA LAPOSSIBILITA DI OTTENERE IL CODICE SORGENTE AD UN PREZZORAGIONEVOLE
  • 10. Kernel Linux: moduli & driverTORNANDO ALLA TECNICA … COSE UN MODULO?E UN COMPONENTE SOFTWARE CHE PUÒ SVOLGERE DIVERSE FUNZIONIVANTAGGI: PUÒ ESSERE COMPILATO SEPARATAMENTE ED ESSERE CARICATO IN UN KERNEL GIA IN USO. ALTA PERSONALIZZAZIONE DISTRIBUZIONE GRATUITA E LIBERAI DRIVER IN UN SISTEMA LINUX:IL KERNEL POSSIEDE DELLE TABELLE DINAMICHE DI TUTTI I DRIVER NOTI EFORNISCE UN INSIEME DI PROCEDURE CHE PERMETTONO DI AGGIUNGERE ORIMUOVERE UN DRIVER DA QUESTE TABELLE IN QUALUNQUE MOMENTOMODULI & DRIVER:UN MODULO PUO REGISTRARE MOLTI TIPI DI DRIVER; UN CERTO MODULO PUOSCEGLIERE FRA QUESTI E, SE LO DESIDERA, REGISTRARE PIU DI UN DRIVER.UN CERTO DRIVER POTREBBE VOLER REGISTRARE DUE MECCANISMI DISTINTIPER LACCESSO AD UN DISPOSITIVO.
  • 11. Kernel Linux: gestione dei processiMODELLO UNIX: CREAZIONE - FORK() - ED ESECUZIONE - EXEC() - DEIPROGRAMMI.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 VIRTUALELA CHIAMATA CLONE() E IL CONCETTO DI TASK
  • 12. Kernel Linux: schedulingLO SCHEDULING CONSISTE NELLALLOCAZIONE DEL TEMPO DI CPU AI DIVERSITASK ALLINTERNO DI UN SISTEMA OPERATIVO.UN ASPETTO IMPORTANTE DELLO SCHEDULING NEL SISTEMA LINUX ÈLESECUZIONE 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 SPINLOCKMULTIELABORAZIONE 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 VIRTUALEGESTIONE DELLA MEMORIA FISICA:ZONA MEMORIA FISICAZONE_DMA <16 MBZONE_NORMAL 16 MB <X< 896 MBZONE_HIGHMEM >896 MBSISTEMI DI ALLOCAZIONE: BUDDY, KMALLOC(), SLABGESTIONE 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
  • 14. Kernel Linux: file systemIL DOGMA: OGNI COSA E UN FILEDAL 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 LIMMISSIONE O LEMISSIONE DI UN FLUSSO DI DATI”IL KERNEL DI LINUX GESTISCE TUTTI I TIPI DI FILE NASCONDENDONE IDETTAGLI RELATIVI ALLA STRUTTURA INTERNA SOTTO UNO STRATO DIPROGRAMMI: 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.hJOURNALING: ANNOTAZIONE DELLE MODIFICHE/PROC: RAPPRESENTAZIONE COME FILE DELLE STRUTTURE DEL KERNEL
  • 15. Kernel Linux: I/OIL SISTEMA LINUX SUDDIVIDE I DISPOSITIVI IN TRE CLASSI:DISPOSITIVI A BLOCCHI→ BLOCCHI DI DATI DI DIMENSIONE FISSA INDIPENDETEDISPOSITIVI A CARATTERI→ MOUSE E TASTIERE DISPOSITIVI DI RETE → COMUNICAZIONE INDIRETTA TRAMITE IL SOTTOSISTEMA DI RETE DELKERNEL
  • 16. Kernel Linux: comunicazione fra processiIL MECCANISMO STANDARD DI UNIX USATO PER COMUNICARE A UN PROCESSOCHE UN EVENTO SI È VERIFICATO È IL SEGNALELINUX PERO NON UTILIZZA I SEGNALI PER COMUNICARE CON I PROCESSIESEGUITI IN MODALITA KERNEL. ESSO FA USO DEGLI STATI DI SCHEDULING EDELLE STRUTTURE wait_queueMECCANISMO DEI SEMAFORI – VANTAGGI: ESSERE CONDIVISI IN GRAN NUMERO DA PROCESSI INDIPENDENTI ESECUZIONE ATOMICAPASSAGGIO DI DATI TRA PROCESSI: PIPE
  • 17. Kernel Linux: struttura di reteINTERNAMENTE IL KERNEL REALIZZA I SERVIZI DI RETE PER MEZZO DI TRESTRATI DI PROGRAMMI: INTERFACCIA A SOCKET (4.3BSD)DRIVER DEI PROTOCOLLI (ETICHETTATURA DI PROTOCOLLO)→ skbuff→ GESTIONE DEL FIREWALL→ CATENE DI FIREWALLDRIVER DEI DISPOSITIVI DI RETE→ ipfraq→ ipq
  • 18. Kernel Linux: sicurezzaLE QUESTIONI RELATIVE ALLA SICUREZZA SONO CLASSIFICABILI IN DUEGRUPPI: AUTENTICAZIONE → ASSICURARE CHE NESSUNO POSSA ACCEDERE AL SISTEMA SENZA PRMADIMOSTRARE DI AVERNE DIRITTO → FUNZIONE DI CODIFICA NON INVERTIBILE → PAM (PLUGGABLE AUTHENTICATION MODULES) CONTROLLO DELLACCESSO → FORNIRE UN MECCANISMO CHE PERMETTA DI CONTROLLARE SE UNUTENTE ABBIA DIRITTO DACCESSO A UN CERTO OGGETTO E CHE IMPEDISCALACCESSO SE LESITO 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. Kernel Linux: mappa
  • 20. Kernel Linux: praticaFORZA && CORAGGIOSTEP N°1: SCARICARE I SORGENTI https://www.kernel.org/CASO DESEMPIO, LINUX KERNEL 3.0.4 (LATEST STABLE KERNEL)https://www.kernel.org/pub/linux/kernel/v3.x/STEP N°2: SCOMPATTARE LARCHIVIOroot@host:/# bunzip2 linux-3.0.4.tar.bz2#sostituisce il *.tar.bz2 con il suo equivalente non compresso *.tarroot@host:/# tar xvf linux-3.0.4.tar#estrae dallarchivio 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#
  • 21. Kernel Linux: praticaSTEP 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 conroot@host:/linux-3.0.4# make menuconfigLA SELEZIONE DEI PARAMETRI E UN PROCEDIMENTO LUNGO CHE RICHIEDEMOLTA PONDERAZIONE: SI TRATTA DI DECIDERE CHE COSA ANDRACOMPILATO ED INCLUSO NEL KERNEL, CHE COSA NON DOVRA ESSERECOMPILATO, COSA ANDRA COMPILATO MA SARA UTILIZZATO COME MODULO. NT (NERDATA TOTALE)
  • 22. Kernel Linux: praticaSTEP N°4: LA COMPILAZIONEASSICURATEVI CHE LA VOSTRA MACCHINA SIA A DISPOSIZIONE SENZAINTERRUZZIONI MA SOPRATTUTTO TROVATEVI QUALCOSA DI DIVERTENTE DAFARE … 4 SEMPLICI LETTERE STRESSERANNO IL VOSTRO PC IN UNA MANIERANON INDIFFERENTEroot@host:/linux-3.0.4# make
  • 23. Kernel Linux: praticaSTEP N°5: IMMAGINE COMPRESSA, MODULI E RAMDISKIN QUESTO MOMENTO ABBIAMO COMPILATO TUTTO MA NON ABBIAMO ANCORAMESSO AL LORO POSTO NE I MODULI NE LIMMAGINE DEL KERNEL:CREIAMOLA!root@host:/linux-3.0.4# make bzImageFATTO CIO NELLA SOTTODIRECTORY arch/xyz/boot SI TROVERA IL FILE bzImage.#xyz = sigla che indica larchitettura per cui è stato compilato il kernelCREATO IL KERNEL E IL MOMENTO DI INSTALLARE I MODULIroot@host:/linux-3.0.4# make modules_installFATTO (cit. necessaria)! MANCA SOLO UN RAMDISKCOSE? 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 SECONDOINDICA LA VERSIONE DEL KERNEL DI CUI GENERARE IL RAMDISK
  • 24. Kernel Linux: praticaSTEP 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.4STEP N°7: MODIFICA DEL BOOTLOADERLILO, GRUB, GRUB2 … SI RIMANDA ALLE RISPETTIVE GUIDE (RTFM googleandogoogleando)
  • 25. Kernel Linux: il lato oscuroKERNEL PANIC→ ERRORE IRRECUPERABILE INDIVIDUATO IN KERNEL SPACEINIEZIONE DI FALLIMENTI→ TRANSAZIONE DI UN SISTEMA IN UNO STATO NON CORRETTOOVERFLOW→ 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 leorigini 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.