linux - introduzionecmp/corsoreti/slides/lab/intro_linux.pdf · linux • linux è un kernel di...

47
Linux - Introduzione

Upload: others

Post on 23-Jul-2020

38 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Linux - Introduzione

Page 2: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

UNIX - Architettura• Un sistema operativo UNIX è composto da:• Il nucleo (Kernel): gestisce le risorse del calcolatore:

• Gestisce Processi, Utenti, Memoria• Driver: colloquio con le periferiche (schermo, tastiera, mouse,

dischi, interfacce di rete, scanner, stampanti...)• File system: l’insieme dei meccanismi base per l'organizzazione

dei supporti di memoria di massa in file.• Funzionalità di Rete

• Librerie di sistema: software per realizzare funzionalità di uso comune (shared libraries)

• UNIX Tools: una collezione di programmi con interfaccia testualepresente su quasi tutte le versioni di unix.

• La Shell: è il ‘Command line interpreter’ cioè interpreta i comandi dell’utente e li traduce in azioni da parte dei vari programmi di utilità(che usano il kernel). Rappresenta l’interfaccia fra utente e sistema.

• Applicativi specializzati

Page 3: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Linux• Linux è un kernel di sistema operativo• è una forma di unix, un membro di una complessa famiglia

di sistemi operativi che nasce nel 1969• è software libero, rilasciato sotto la licenza GPL

• il codice sorgente è pubblico• tutti hanno il diritto di leggerlo, modificarlo, distribuire le

versioni modificate (open source – scelta tecnica)• le versioni ridistribuite ricadono sotto la stessa licenza

(Copyleft – scelta politica)• gran parte del software di base che viene usato insieme a

linux è prodotto dal progetto GNU, con lo scopo “politico” di realizzare un sistema operativo completamente libero.

• Licenza GPL• Per questo un sistema operativo nel suo complesso è

(dovrbbe essere) chiamato GNU/Linux.

Page 4: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

dal kernel al CD di installazione: le Distribuzioni

Linux è solo un kernel, per creare un ambiente di lavoro funzionante servono molti altri componenti

Si attinge principalmente (ma non solo) dal patrimonio di software libero.

Ogni programma è sviluppato indipendentemente, tipicamente distribuito come sorgenti c.

Una distribuzione linux è costituita da:● kernel● utilità di base (librerie, tools, ...)● Applicativi● Il tutto compilato (per i386, sparc…)● un sistema di gestione dei pacchetti● programmi di installazione e configurazioneAnche sotto questo aspetto, linux is about choice:Fedora, Mandrivia, Debian, Ubuntu, RedHat, SuSeKnoppix, dynebolic (live CD)

Page 5: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Il Kernel Linux● Il kernel Linux è Modulare, ovvero ha la capacità di

caricare/scaricare parti di codice (moduli) secondo necessità e richieste. modprobe nomemodulo carica un modulo e quelli necesarirmmod nomemodulo scarica un modulo (se possibile)

● In fase di compilazione è possibile decidere se ciascuna funzionalità deve essere inclusa nel kernel, compilata come modulo o omessa del tutto

● Ogni distribuzione fornisce un kenel precompilato, ma è sempre possibile (talvolta necessario) compilarne uno su misura

● Leggere il Version Number del kernel Linux (es: 2.6.12):– 2 - Il major number– 6 - Il minor number

Pari: kernel stable e pronto per sistemi in produzione; Dispari: kernel in development, da usare con cautela

– 12 – patch level

Page 6: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Documentazionecomando -h|--help help in linea

man <comando> (dovrebbe esistere per tutti i programmi)

info <command> (programmi GNU)

/usr/share/doc/<pacchetto>

/usr/doc/<pacchetto> Le directory dove risiedono le documentazioni per programmi specifici in diversi formati (txt,html,pdf etc..)

internet (google is your friend)

Page 7: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Utenti• Unix è un sistema operativo multi-utente. • Ogni utilizzo del sistema operativo è associato ad un

particolare utente (processi, file). • Ciascun utente ha un nome testuale (username) ed un numero

(UID), che viene utilizzato internamente al sistema operativo.• Esiste un “super-user” (“root”), preposto all’amministrazione

e alla supervisione del sistema. • Potere <-> Responsabilità• (rischio di perdita di dati o di produttività, privacy)

• L'accesso al sistema (login) si esegue tipicamente digitando user name e password.

• Ad ogni utente del sistema viene assegnata una directory di sua proprietà (HOME DIRECTORY). All’interno l’utente potràcreare tutti i files (e sottodirectory) che desidera.

Page 8: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

File

● In unix, gli oggetti del sistema operativo sono rappresentatidalla metafora omogenea del file:

– Archivio di dati su disco– Connessione di rete– Canale di comunicazione (tastiera / schermo, stampante,

scanner)– Dispositivo (tastiera, disco, partizione, bus,…)

Page 9: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Processi● Ciascun programma viene eseguito in una struttura del

sistema operativo chiamata processo, caratterizzata da:

– Spazio di memoria (codice, stack, heap)

– File aperti (filedescriptors)

– utente che ha lanciato il processo

– priorità

● PID: identificativo numerico del processo

● per generare un processo, un altro processo deve usare fork (crea copia di un processo) ed exec (esegui un programma)

● I processi “discendono” tutti da init, che ha PID 1 e rimane sempre in esecuzione

● PPID: PID del processo padre

Page 10: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Stati di un processo● In un dato istante, è fisicamente in esecuzione un solo

processo (per processore)

● Lo stato di un processo può essere:

– R - running, il processo è in esecuzione;

– S - sleeping, il processo è in attesa (input dell'utente, conclusione di altri processi, CPU libera ecc..)

– Z - zombie, il processo è morto ed aspetta che il parent chieda un codice d'uscita.

– T – stoppato (ad esempio con ctrl-z, o da strace)

Page 11: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

FileDescriptorsOgni programma lanciato ha per default 3 descrittori di file aperti:● standard input (stdin - file descriptor 0), è il canale attraverso il

quale il programma riceve i dati di ingresso (generalmente la tastiera).

● standard output (stdout - file descriptor 1), è il canale di uscita del risultato dell'elaborazione del programma, di solito il video.

● standard error (stderr - file descriptor 2), è dove il programma stampa eventuali errori durante l'esecuzione, di solito il video.

Page 12: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

gestione dei processips [opzioni]

visualizza la lista dei processi attualmente presenti sul sistema

top [opzioni] visualizza la lista dei processi presenti sul sistema, in costante aggiornamento

kill -[signal] pidinvia un segnale ad un processo, principalmente utilizzato per "uccidere“, o meglio terminare, (SIGKILL) un processo

nohup <command> esegue un programma rendendolo immune da segnali, e anche alla chiusura del terminale

nice <priority> <command> modifica la priorità di un processo (numeri + bassi = priorità maggiore). solo root può assegnare priorità < 0

Page 13: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Terminale• Un terminale è un canale per interagire con il sistema

operativo in modalità testuale. Questa è la modalità più comune e più potente di utilizzo di un sistema unix.

• Diverse forme di terminale• Seriale (terminale seriale, o altro calcolatore con emulatore,

connesso a porta seriale)raramente usato, salvo sistemi embedded (e apparati di rete)

• virtuale (TTY): tipicamente 6 terminali virtuali sulla console di un sistema linux (ALT-n: n-esimo TTY)

• grafico: in ambiente grafico all'interno di un emulatore di terminale (xterm, rxvt, gnome-terminal...)

• remoto: accesso remoto ad un sistema (con telnet o ssh)• Un terminale può avere capacità grafiche più o meno ricche

• solo linea di comando/applicazioni a pieno schermo• In un terminale viene tipicamente eseguita una shell...

Page 14: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

La shell● La shell o interprete dei comandi è un programma che serve ad

impartire comandi al sistema operativo.● Linux is about choice: Bash, [t]csh, ….● I comandi sono righe di testo inserite al prompt ($), che

vengono interpretate eseguite quando si preme invio.● La shell supporta variabili di ambiente

VAR=valore assegnamentoecho $VAR lettura

● Funzionalità ergonomiche: ● auto completion (TAB) su comandi, nomi di file, di variabli● history dei comandi (freccia su, ctrl-r per cercare nell'history)

● job control: ● mandare un programma in background (&)● Arrestare l’esecuzione di un programma (sospendere) (ctrl-z)● jobs lista dei programmi sospesi● bg manda un programma in background● fg riporta un programma in foreground

Page 15: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Redirezione● E' possibile redirezionare stdin, stout e sterr su un file

tramite gli operatori di redirezionamento:

● > redirige lo standard output di un comando su un file o dispositivo

● >> redirige l'output di un comando su un file o dispositivo, ma se il file esiste già i dati vengono aggiunti alla fine del file. Se il file non esiste viene creato

● < redirige lo standard input da un file o dispositivo

● 2> redirige lo standard error di un comando su un file o dispositivo

● | operatore pipe, concatena standard output e standard input di due programmi

Page 16: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

File System● E' il componente del sistema operativo che si occupa di

organizzare i dati sui dispositivi di archiviazione● Due livelli di astrazione:

– Dal dispositivo a blocchi alla collezione di archivi didimensioni arbitrarie

– Spazio dei nomi gerarchico● Permessi e attributi● Choice: diversi tipi di filesystem

– Disco: ext2, ext3, reiserfs, xfs, vfat, ntfs, iso, udf,…– Virtuali: proc, sys, dev, tmpfs– Di rete: nfs, coda, smb/cifs

● Tutti i dispositivi in un unico albero di nomi– mount: collega lo spazio di nomi di un dispositivo

Page 17: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Gestire Directory & File● ls [opzioni] [path]

Elenca contenuto di una directory o file

● cd directory Cambia la directory corrente

● cp [opzioni] sorgente destinazioneCopia file o directory

● mv [opzioni] sorgente destinazione Sposta (rinomina) file o directory

● rm [opzioni] file Rimuovi file o directory

● mkdir [opzioni] directory Crea una directory

● rmdir [opzioni] directory Elimina una directory

Page 18: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Visualizzare File● cat [opzioni] [file] Visualizza il contenuto di un file

● less [file] Visualizza il contenuto di un file, pagina per pagina.

● tail [opzioni] file Visualizza l'ultima parte di un file

● head [opzioni] file Visualizza la prima parte di un file

● file [opzioni] file Visualizza il tipo di un file

● grep [opzioni] PATTERN [file]Elenca righe di un file che contengono il PATTERN specificato

● wc [opzioni] [file]Visualizza numero di byte, parole e righe in un file

Page 19: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Struttura File System● / Radice (root)

● /root Home dell'utente root

● /boot Contiene tutte le immagini del kernel e file indispensabili al bootstrap

● /etc Contiene i file di configurazione del sistema e dei programmi installati

● /home Contiene le home degli utenti tranne quella di root

● /usr Contiene binari, documentazione, librerie e sorgenti della maggior parte dei programmi (e i sorgenti del kernel)

● /var Conitiene tutti file che contengono informazioni dinamiche come log, pid file, directory di spool.

Page 20: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Struttura File System (2)● /proc File system virtuale. Contiene, come se fossero file e

directory, dati dinamici sul sistema e sui processi

● /dev Contiene i file per la gestione dei dispositivi sia a blocchi (hdd) che a carattere (tty) oltre a file speciali (/dev/null)

● /sbin Contiene comandi e programmi riservati a root ( altri comandi sono in /usr/sbin/ )

● /bin Contiene comandi e programmi base per tutti gli utenti (altri comandi sono in /usr/bin/ )

● /usr/local Contiene programmi installati localmente(senza usare gli strumenti della distribuzione)

Page 21: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Gestione dei File System● Molteplici dispositivi, ognuno con un filesystem (di diversi tipi).

● Un unico albero di directory per trovare i file.

mount -t [tipo fs] [opzioni] device dir Monta un file system su una directory

umount [ opzioni ] deviceSmonta un dispositivo (necessario prima di estrarre un dispositivo rimuovibile)

df [opzioni][file] Verifica lo spazio libero su ciascun filesystem

du [opzioni][file] Visualizza lo spazio occupato da file e directory

fsck [opzioni] dispositivoVerifica l'integrità e ripara il Filesystem

mkfs [opzioni] dispositivo Crea un Filesystem (formattazione)

Page 22: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Attributi E Permessi● Ogni file è di proprietà di un utente.

● Permessi: read|write|execute per user|group|otherses: -rw-r-----: il proprietario legge e scrive, il gruppo legge, gli altri nessun accesso

chown [-R][utente] fileAssegna un nuovo proprietario

chgrp [-R][gruppo] file Assegna un nuovo gruppo

chmod [-R] [modo] file Modifica i permessi sul file.

Page 23: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Ricerca e Confronto● find [path][expression]

Ricerca di file o directory in tutto il file system in base a uncerto numero di criteri, come il nome, la data di creazione e la dimensione...

● locate filenameRicerca file o directory tramite il db costruito da Updatedb

● sort [opzioni] [file] Ordina le righe di un file

● diff nomefile1 nomefile2confronto fra il contenuto di due file di testo. Utilizzato per creare una patch dei sorgenti.

● md5sum nomefilecalcola un checksum standard, utile per verificare l'integrità e confrontare file di qualsiasi natura

Page 24: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Archiviazionetar [opzioni] filearchivio files

crea/scompatta un file archivio tar

gzip [num] [opzioni] filenamecomprime file (ed archivi) in formato gz

gunzip [opzioni] filename.gz inverso di gzip

bzip2 [opzioni] filename comprime file (ed archivi) in formato bz2, con rapporto di compressione maggiore di gz

bunzip2 [opzioni] filename.bz2 inverso di gzip

zip [opzioni] filename Comprime file e archivi, è basato sull'algoritmo standard per PC pkzip, raramente si utilizza questo formato in ambiente linux e unix

unzip [opzioni] filename.zip Comando inverso di unzip

Page 25: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Tool testualiecho [args] dalla riga di comando allo standard outputuniq elimina le righe duplicatecut seleziona solo alcune “colonne”sed elaborazione testuale delle righeawk elaborazione testuale delle righexargs dallo standard output alla riga di comando● Tutti questi strumenti sono predisposti per lavorare in una

pipeline: leggere dati in input dallo standard input e scrivere l’output sullo standard output

● Per farlo si utilizza il carattere |, chiamato pipe.es: cat pippo.txt|grep paperino

Page 26: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

shell scripting

● la shell definisce un linguaggio di programmazione● strutture di controllo● espressioni aritmetiche● array

● Una lista di comandi può essere salvata in un file per essere rieseguita (shell script)

● Usato per automatizzare compiti semplici, per la configurazione del sistema operativo

Page 27: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Un package manager: RPM● Scopo: aiutare nella gestione dei pacchetti installati e degli

aggiornamenti● Formato di archiviazione di pacchetti per distribuzione (programmi

precompilati)● Script di installazione/disinstallazione● Gestisce le dipendenze tra pacchetti installati● Database dei pacchetti installati● Usato da un gran numero di distribuzioni, derivate da RedHat

(Mandrake, Mandrivia, Fedora), SuSe... alternative: apt (debian), tgz (solo archivi senza metadati –Slackware)

rpm -i [opzioni] [pacchetti] Installa pacchetti RPMrpm -U [opzioni] [pacchetti] Aggiorna pacchetti RPMrpm -e [opzioni] [pacchetti] Disinstalla pacchetti RPMrpm -q [opzioni] [pacchetti] Interroga pacchetti RPMrpm -V [pacchetto] Verifica pacchetto RPM

Page 28: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Installare una applicazione● se è esiste, usare la versione nella distribuzione installata

(ma potrebbe essere la versione sbagliata, o mancare qualche opzione di compilazione...)

● installare dai sorgenti– scaricare il sorgente (tipicamente, un archivio .tgz)– scompattarlo: tar -zxvf package.tar.gz– cd package/, leggere file README, INSTALL e

seguire le istruzioni. tipicamente:– configurarlo per la propria piattaforma: ./configure

● potrebbero esserci opzioni da impostare:./configure --help

● potrebbe essere necessario installare altri pacchetti– compilare: make– installare: make install

Page 29: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

debugging● leggere il manuale (era meglio farlo prima!)

● leggere i log di sistema (in /var/log)

● eseguire il programma in modalità debug (log sul terminale)

● cercare su internet i messaggi di errore

● strace comando traccia le chiamate di sistema e i segnali del programma specificato mentre lo esegue.

● ldd comando Stampa l'elenco delle librerie condivise utilizzate dal comando specificato

● lsof [opzioni] Elenca i file aperti. file normali, directory, file speciale a blocchi o caratteri, librerie, socket Internet, socket Unix domain...

Page 30: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Configurazione rete● devono esistere ed essere configurati i driver per i dispositivi

hardware usati per accedere a una rete (tipicamente moduli del kernel)

● per ciascun dispositivo di rete disponibile, il sistema operativo crea una interfaccia, ad esempio:

– eth0, eth1, ...: ethernet– ppp0, ppp1, ... : PPP (connessioni via modem, alcune

configurazioni ADSL, linee seriali)● a ciascuna interfaccia può essere assegnato uno o più

indirizzi IP● per ciascuna interfaccia configurata viene creata

automaticamente una rotta (route) verso la relativa sottorete● defalut route (verso il default gateway)

Page 31: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Configurare le interfacce● due sintassi alternative● ifconfig <interface> up|downip link set dev <interface> up|downabilita o disabilita una interfaccia

● ifconfig <interface> <address>ip address add <interface> <address>associa un indirizzo IP ad una interfaccia

● route add -net default gw <address>ip route add default via <address>imposta la default route

● route add -net <network> gw <address>ip route add <network> via <address>imposta una route specifica

Page 32: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

configurare le interfacce con dhcp● dhcp assegna automaticamente la configurazione ad una

interfaccia chiedendola ad un apposito server

● il server deve essere attivo e raggiungibile

● occorre usare un client dhcp – ne esistono diversi:dhclient|pump|dhcpcd <interface>

● viene assegnato l'indirizzo IP, il default gw, il dns...

configurare il DNS● Risoluzione da nomi simbolici (www.uninsubria.it)

in indirizzi IP (193.206.179.145)

● in /etc/resolv.conf:nameserver 10.0.0.150 ; IP del DNS server primarionameserver 192.168.1.10 ; IP del DNS server secondario domain dominio.it ; Nome del dominio dove si trova l'host

Page 33: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

diagnostica di rete

● ping <host> verifica se un host è raggiungibile (usa ICMP)

● traceroute <host> visualizza il percorso verso un host

● host, dig effettuano query DNS

● netstat , lsof -i visualizza le connessioni attive (vedere le diverse opzioni)

● tcpdump, ethereal (wireshark)analizzatori del traffico di rete (sniffer)normalmente richiedono i permessi di rootrichiedono di mettere l'interfaccia in modo promiscuo non tutte le religioni lo permettonopossono essere usati anche per visualizzare un file di pacchetticatturati in precedenza

Page 34: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Terminale remoto sicuro: SSH● Scopo: aprire un terminale per eseguire una shell o un’altra

applicazione su un altro host connesso via rete● Lo strumento classico è telnet

– Comunicazione in chiaro, insicuro● Oggi viene preferito ssh

– Comunicazione cifrata (protegge le password e i dati)– Verifica l’autenticità del server

ssh [user@]<host>

● Funziona solo con applicazioni ad interfaccia testuale● Permette di trasportare applicazioni X con un tunnel

Page 35: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Ambiente graficocomponenti

● Sever X: interazione con la scheda video

– offre primitive di basso livello: rettangoli, testo

● Client X: applicazione che vuole visualizare finestre e ricevere input dall'utente

● Window manger: è un particolare client X, che permette di far convivere diverse applicazioni, ciascun in una o più finestre

● Desktop Environment (gnome, KDE): ambiente integrato con pannelli, icone, temi grafici...

● Display Manager: esegue il login grafico

● Toolkit grafico (gtk, qt): librerie di primitive grafiche di livello più alto (controlli: tasti, menu, caselle di testo...)

Page 36: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

iptables - firewall con linux● linux contiene strumenti avanzati di packet filter, che si

amministrano con iptables● un host linux può essere usato come router (inoltrare

pacchetti tra diverse interfacce). per abilitare questa funzione: echo 1 > /proc/sys/net/ipv4/ip_forward

● tabella filter– INPUT: pacchetti in ingresso verso l'host– OUTPUT: pacchetti in uscita dall'host– FORWARD: pacchetti in transito

● tabella nat (POSTROUTING, PREROUTING, OUTPUT)● tabella mangle (altre modifiche ai pacchetti) (INPUT, OUTPUT, FORWARD, POSTROUTING, PREROUTING)

● priorità e traffic shaping: tc

Page 37: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

iptables – percorso dei pacchetti

pacchetti dalla rete

pacchetti verso la rete

Page 38: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

iptables● ciascuna catena è una ACL: una sequenza di regole tipo

condizione/azione (TARGET). La catena viene attraversata fino a quando una condizione non è verificata

● opzioni di iptables:

-A catena regola Aggiunge una o più regole alla fine

-D catena regola Cancella una o più regole

-F [catena] Cancella tutte le regole o solo quelle della catena indicata

-L [catena] Elenca tutte le regole

-v con contatori

-P catena target Definisce il target di default per la catena indicata (policy della catena)

-N catena Crea una nuova catena definita dall'utente

Page 39: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

iptables - condizioni-i [!] interfaccia[+] I pacchetti ricevuti in

entrata sull'interfaccia definita. Il + è una wildcard (es: eth+ per tutte le ethernet)

-o [!] interfaccia[+] Tutti i pacchetti in uscita sull'interfaccia specificata.

-p [!] protocollo I pacchetti che corrispono al protocollo definito: tcp, udp, icmp, all (default)

-s [!] indirizzo[/mask] I pacchetti che hanno l'IP sorgente specificato.

-d [!] indirizzo[/mask] I pacchetti che hanno l'IP e/o la porta di destinazione specificati.

-m tcp|udp –sport porta sorgente del protocollo tcp|udp

-m tcp|udp –dport porta destinazione tcp|udpand many more...

Page 40: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

-j TARGET Salta al TARGET indicato o ad una catena definita dell'utente.

TARGET può essere:

● ACCEPT accetta il pacchetto

● DROP scarta il pacchetto

● LOG Registra tramite syslog il matching del pacchetto

● REJECT Elimina il pacchetto e, eventualmente, restituisce un messaggio ICMP (icmp-*-unreachable) configurabile.

● SNAT|DNAT Modifica l'IP sorgente|destinazione (nella catena POSTROUTING|PREROUTING della tabella nat)

and many more...

iptables - targets

Page 41: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

NAT● Nelle configurazioni di rete in cui interviene il NAT, è utile

considerare il mondo diviso in due parti dal router NAT

rete interna

● connettività parziale (solo via NAT)

● nascosta dall'esterno (“general internet”)

● tipicamente indirizzi IP privati

● i casi reali possono essere anche molto più complessi (es: livelli multipli di NAT)

● con iptables, il NAT è configurato nella tabella nat (-t nat)

rete esterna

● connettività completa

● visibile dall'esterno (“general internet”)

● tipicamente indirizzi IP pubblici

Page 42: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

iptables – Connection tracking● NAT usa il connection tracking per ricordarsi le traduzioni

effettuate e tradurre di conseguenza anche i pacchetti di risposta (modulo ip_conntrack)

● La tabella delle connessioni TCP e UDP è leggibile dallo pseudo-file /proc/net/ip_conntrack

● Alcuni protocolli applicativi trasmettono indirizzi IP e numeri di porta nel payload del pacchetto. Per farli funzionare con NAT sono necessarie estensioni del connection tracking per analizzare i pacchetti ed intercettare/modificare queste informazioni (ip_conntrack_ftp, ip_conntrack_irc, ip_conntrack_tftp, ip_conntrack_amanda).

Page 43: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

iptables – Source NAT● Source NAT: si modifica l'indirizzo sorgente del pacchetto

● si agisce dopo il processo di routing: -A POSTROUTING

● target: -j SNAT opzioni:--to-source ipaddr[-ipaddr][:port-port]

● esempio: i pacchetti che provengono da 192.168.10.1 vengono modificati in modo da uscire con l'IP 192.168.20.1

● iptables -t nat -A POSTROUTING -s 192.168.10.1 -j SNAT --to-source 192.168.20.1

● La corrispondenza tra indirizzi IP funziona solo per le connessioni “uscenti” (in questo caso, provenienti da 192.168.10.1)

Page 44: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

iptables – Source NAT (2)● esempio (2): i pacchetti che provengono dalla rete

192.168.10.0/24 vengono modificati in modo da uscire con gli IP 192.168.20.1-10

– iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 192.168.20.1-192.168.20.10

– 254 indirizzi IP vengono tradotti con 10 indirizzi IP: due host della rete 192.168.10.0/24 potrebbero venir presentati con lo stesso indirizzo della rete 192.168.20

– IP Overloading: i pacchetti di diverse connessioni vengono distinti sulla base dei numeri di porta TCP/UDP

● Il codice NAT modifica meno possibile il pacchetto, quindi se possibile preserva i numeri di porta. Questi vengono riscritti solo in caso di necessità.

Page 45: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

iptables – Masquerading

● Il Masquerading è una forma di Source NAT, in cui non viene specificato l'indirizzo con cui mascherare le connessioni.

● Utile per connessioni dial-up o con IP “pubblico” dinamico.● viene usato l'indirizzo dell'interfaccia usata per far uscire i

pacchetti● esempio: i pacchetti che provengono dalla rete 192.168.10.0/24 ed escono dall'interfaccia ppp0vengono modificati in modo da uscire con l'IP dell'interfaccia

● iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ppp0 -j MASQUERADE

● anche questo è un caso di IP Overloading● questa configurazione è quella tipicamente usata per router

ADSL SOHO

Page 46: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

iptables – Destination NAT● Destination NAT: si modifica l'indirizzo destinazione del

pacchetto● applicazioni:

– rendere accessibili dall'esterno alcuni host in una rete privata (port forwarding)

– “imbrogliare” le applicazioni (routing incompleto, server non configurabili)

● si agisce prima del processo di routing. – per un router che inoltra i pacchetti di altri host: -A PREROUTING

– per un host che vuole modificare i pacchetti generati dalle applicazioni locali: -A OUTPUT

● target: -j DNAT opzioni:--to-destination ipaddr[-ipaddr][:port-port]

Page 47: Linux - Introduzionecmp/CorsoReti/slides/lab/intro_linux.pdf · Linux • Linux è un kernel di sistema operativo • è una forma di unix, un membro di una complessa famiglia di

Bridge software● Consente di mettere più interfacce nella stessa rete● Configurato con brctl

– Brctl addbr <bridge> crea un bridge– Brctl delbr <bridge> elimina un bridge– Brctl addif <bridge> <device> aggiungi una

interfaccia ad un bridge– Brctl show mostra la lista dei bridge configurati– Brctl showmacs <bridge> mostra la tabella di

inoltro del bridge● Il bridge creato è a sua volta una interfaccia, cui si può

assegnare un indirizzo, regole iptables…