/loris/tissino /la/mia/cassetta/degli/attrezzi/linux.

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "/loris/tissino /la/mia/cassetta/degli/attrezzi/linux. www.tissino.it/docs/linux"

Transcript

1 /loris/tissino /la/mia/cassetta/degli/attrezzi/linux

2 Indice 1 Introduzione Questa cassetta A chi è rivolta Formati e diffusione Errori Licenza Bibliografia e documentazione PDF Libri Siti web Man Whatis Apropos Info help /usr/share/doc HOWTO e Il concetto di software libero Il software Programma Applicazione Sistema operativo Programma sorgente ed eseguibile Free Software Foundation Copyright e Copyleft Licenze Open Source Altri tipi di licenza Differenze tra Windows e GNU/Linux Differenze tra Microsoft Windows e GNU/Linux Sicurezza Disponibilità di software i18n e l10n Gestione del software File system Nomi di file e directory Estensioni Permessi su file e directory File nascosti e attributi File binari Flessibilità nell uso dell interfaccia grafica Interfaccia a riga di comando

3 Multiutenza Gestione dei processi Sistemi di autenticazione Lettere accentate Altre differenze Linux e scuola Software libero e scuola Software libero e scuola Il sito web linuxdidattica.org Dossier Scuola WiildSs Software utile italc italc Postazione del docente Postazione dell allievo Gestione Interfaccia a linea di comando e comandi basilari Introduzione alla Bash Tips and tricks Struttura dei comandi Pagine man I/O standard Pipeline Filtri Comandi interattivi Funzionamento alternativo StdIn e StdOut come file binari Attenzione ai nomi Unione dell output di più programmi Il comando tee Esercizi Gestione di file e directory Il filesystem Directory principali Utenti File per la gestione degli utenti Elenco dei file in una directory Creazione e rimozione di una directory Gestione di file Espansione dei nomi Comandi come parametri

4 Operazioni su molti file/directory contemporaneamente I nodi indice e altre amenità Permessi su file e directory Esercizi Permessi su file e directory Tipi di file Tipi di file (2) Tipi di file stat Tipi di file find Proprietari Permessi Permessi sulle directory Priorità delle appartenenze Bit SUID, SGID e Sticky Chmod con modalità simbolica o numerica UMask Altri permessi Esercizi Ricerche Find Find - permessi sui file Find - ricerche per intervalli temporali Find - esclusione di directory Ricerca interattiva all interno di un file di testo Grep con ricorsione Locate (Slocate) Whereis Which Type Lsof Df Du A caccia di elefanti Informazioni sul tipo di file Cancellazioni sicure Cambiare in blocco il nome di file Pgrep e Pkill Beagle (ricerche desktop) Operazioni programmate e periodiche Ora (e data) di sistema Rappresentazione delle date Formati di rappresentazione Fuso orario

5 3.5.5 Modifica dell ora di sistema L ora dell hardware clock L ora esatta Timestamp dei file Modifica della data di cambiamento di un file Creare un file impostandone la data Epoch Uptime Calendario Raffinatezze di ncal Misurazione del tempo di esecuzione Esecuzione programmata Esecuzione programmata (2) Esecuzione programmata (3) Esecuzione batch Sleep Lettura di variabile dalla shell con timeout Esecuzione periodica: watch Esecuzione periodica: cron Configurazione di cron E se il calcolatore è spento? Installazione e configurazione Installazione di Linux Verifica della configurazione hardware La directory /proc I comandi ls* Nomi dei dispositivi Partizioni Controllo del filesystem Impostazioni del filesystem (tuning) Debug Il file /etc/fstab Innesto di filesystem Sync Il Filesystem Hierarchy Standard Contenuto del FHS Distinzioni tra file Shareable vs. Unshareable Static vs. Variable Esempio di organizzazione Le directory principali Gestione pacchetti software Software da sorgenti non pacchettizzati

6 4.2.2 Checkinstall Il Makefile Librerie /etc/ld.so.conf Ltrace e Strace I pacchetti Cosa c è in un pacchetto Sistemi di gestione dei pacchetti Installazione di un nuovo pacchetto Aggiornamento di un pacchetto Installazione di un pacchetto con download da sorgente nota Da dove viene questo file? Cosa contiene questo pacchetto? Che pacchetti ho installato? Dove trovare i pacchetti? Il sistema APT Archivi APT Elenco dei pacchetti Firme dei pacchetti Altre cose utili Creazione e gestione di un mirror APT Amministrazione Gestione dei processi Gestione dei processi Definizione di processo PID (Process Identifier) PPID Fork Le chiamate della famiglia exec I processi adottati da Init I processi zombie L attesa da parte del processo padre Pstree La directory speciale /proc Informazioni sui processi: ps Ps: opzioni utili Esecuzione in background e foreground Gli stati di un processo Invio di segnali ai processi Segnali comuni Programmi utili per la gestione dei processi Gestione delle priorità Gestione interattiva dei processi

7 Esercizi Backup e compressione dati Tipi di backup Tar Tar (lista ed estrazione) Tar (estrazione singoli file) Tar e la compressione Tar: riepilogo azioni Compressione dei singoli file Decompressione dei singoli file Zip e Unzip Cpio Cpio (modalità copy-pass) Md5sum Rsync Rsync da/verso altro host Dump e Restore Partimage Backup su CD/DVD DVDisaster Sistemi avanzati per il backup Attenzione a Esercizi Gestione degli utenti e dei gruppi Utenti e gruppi Il file /etc/passwd Il file /etc/group Leggere i dati dei database di sistema Modificare i dati degli utenti e dei gruppi Aggiungere utenti Aggiungere utenti - pattern per gli username Aggiungere utenti - valori di default Aggiungere utenti - operazioni batch Aggiungere gruppi Modificare le informazioni sugli utenti Eliminare utenti e gruppi Gestione delle quote disco Impostare e gestire le quote disco Concetti importanti relativi alle quote disco Il comando Quota I comandi Quotaon e Quotaoff Il comando Quotacheck Il comando Edquota

8 5.4.7 Il comando Setquota Sforamento quota Impostazione del Grace period Rapporto con Repquota Quote disco - esercitazione (1) Quote disco - esercitazione (2) Quote disco - esercitazione (3) Quote disco - esercitazione (4) Quote disco - esercitazione (5) Autorizzazioni e deleghe Permessi sui file Privilegi utente Corrispondenza tra privilegi e gruppi Su Su -c Sudo Il file /etc/sudoers Esercizio delle deleghe Esecuzione di comandi a nome di altri utenti Registrazione delle operazioni basate su delega Sudo e ridirezione dell output Fakeroot Attributi ext Access Control List Visualizzare le ACL ACL e permessi standard Ereditarietà delle ACL Copia di file con ACL PolicyKit Init e il processo di avvio Il processo di avvio (prima parte) Il processo di avvio (seconda parte) Avvio e distribuzioni GNU/Linux I bootloader Configurazione di init I runlevel Gli script di avvio dei servizi Definizione dei runlevel Configurazione dei runlevel Chkconfig Informazioni negli script di avvio Sequenze di avvio moderne Spegnere il sistema

9 Esercizi Inetd e Xinetd Servizi, démoni e processi serventi Il superdemone Configurazione di un servizio gestito dal super-démone TCP wrappers Kernel, gestione, configurazione e compilazione Kernel monolitici vs. kernel modulari Che kernel sto usando? Impostazioni dinamiche del kernel Moduli Elenco dei moduli caricati Caricamento di un modulo Rimozione di un modulo Informazioni su un modulo Installazione e rimozione semplificate Tipi e formati di kernel I sorgenti del kernel Verifica della firma digitale Le fasi della compilazione del kernel Configurazione del kernel (1) Configurazione del kernel (2) Compilazione Compilazione Debian-way e Fedora-way Initrd e Initramfs Rete Configurazione di rete Concetti importanti Maschera di rete Interfacce di rete Gestione interfacce Gestione indirizzo gateway Corrispondenza tra indirizzo MAC e IP Ip Risoluzione dei nomi di host Programmi di utilità Netstat Connessioni PPP Ottenimento di indirizzo IP Configurazione tramite interfaccia grafica Strumenti di rete Risoluzione dei nomi in una rete locale Clienti di rete

10 6.2.1 Clienti per la posta elettronica Programmi per la consegna locale della posta Clienti FTP Clienti web Clienti Telnet, SSH ecc Accesso da sistemi Windows NetCat Posta elettronica MTA, MDA e MUA Mail Transport Agent Configurazione di un MTA Mail User Agent Mail retrieval Mail management Organizzazione delle cartelle di posta elettronica Formati delle mailbox Procmail Esempio di.procmailrc (1) Esempio di.procmailrc (2) Esempio di.procmailrc (3) Esempio di.procmailrc (4) File di log di procmail Mailfilter Esempio di script per estrarre gli allegati Servizi di rete Nota preliminare Servizi importanti: MTA Configurazione di Postfix Uso di Postfix con relay host esterno Postfix con relay host esterno: credenziali Servizi importanti: Apache web server Servizi importanti: Network File System (lato server) Servizi importanti: Network File System (lato client) Servizi importanti: Samba Servizi importanti: DNS Log e gestione degli eventi Tipi di log Dmesg Dove sono i file di log Organizzazione in facility Priorità delle registrazioni di log Configurazione delle attività di log Logger

11 6.5.8 xconsole Lastlog Rotazione dei file di log Reazione ad eventi File di log delle applicazioni Netfilter e Iptables Tra noi e il mondo Routing NAT / Masquerading Source NAT / PAT Destination NAT Filtering In base a cosa filtrare? Netfilter e Iptables Le tabelle La tabella filter La tabella nat La tabella mangle Le catene Comandi Iptables Alcuni esempi di comandi Save e Restore Il problema dell FTP passivo I proxy server Samba Samba Pdbedit Pdbedit - blocco account dopo X tentativi Pdbedit - scadenza password Pdbedit - lunghezza minima password Pdbedit - obbligo cambio password Scripting Personalizzazione dell ambiente di shell Variabili e valori Variabili Esportazione delle variabili Variabili d ambiente Variabili d ambiente interessanti Modificatori di variabili I prompt della shell Personalizzazione del prompt Personalizzazione della variabile PATH Personalizzazione dei colori della lista dei file

12 Alias Funzioni Funzioni wrapper Ordine di ricerca Qual è l ambiente? Esecuzione con ambiente modificato Shebang indipendente dalle locazioni dei file Impostazioni della shell Bash File di configurazione Introduzione allo scripting bash Codice di uscita dei programmi Utilizzo del codice di uscita Utilizzo del codice di uscita (2) Il programma test Comparazione di valori Uso dei codici di uscita test, /usr/bin/test o [? Esecuzione degli script Debugging degli script Costrutti importanti Parametri della riga di comando Guida avanzata di scripting Bash Grep, Sed, Gawk e altri utili filtri Filtri Cut Expand e Unexpand Fmt Head e Tail Join Nl Od Paste Pr Uniq e Wc Grep Gawk Gawk, estrazione di campi Gawk, estrazione di campi (2) Gawk, test sui campi Gawk, operazione sui valori dei campi Gawk, separatore Gawk, espressioni regolari Gawk, controllo del tipo di file

13 Gawk, riformattazione Sed, lo stream editor Sed, selezione di gruppi di righe Applicazioni Vim, l editor di riferimento Introduzione a VIM Le basi Ripetizione dell ultimo comando Corrispondenza delle parentesi Modalità visuale Macro e registri Selezione primaria e clipboard di sistema Modalità last-line Ricerche Sostituzioni Impostazione di opzioni Divisione della finestra Alcune opzioni interessanti Altre cose utili (1) Altre cose utili (2) Per maggior aiuto Sicurezza Codice in materia di protezione dei dati personali La cosiddetta Legge sulla privacy Principio di necessità Dati personali Sanzioni Soggetti coinvolti Istruzioni operative Misure minime di sicurezza Obblighi di sicurezza Misure minime Sicurezza informatica Sicurezza informatica Sicurezza informatica / Strategie per la protezione dei dati Norme, obblighi di legge, buone pratiche Gestione del rischio Sicurezza fisica Sicurezza logica Sicurezza fisica - Integrazione di sistemi Sicurezza fisica - Gestione dei server

14 Sicurezza fisica - Gestione dei dati Sicurezza fisica - Backup Sicurezza logica - Credenziali di autenticazione Sicurezza logica - Dominio di autenticazione Sicurezza logica - Autorizzazioni Sicurezza logica - Cifratura dati Sicurezza logica - Protezione della postazione di lavoro Sicurezza logica - Sicurezza di rete Sicurezza logica - Social Engineering Sicurezza e GPG GPG Cifratura simmetrica Decifrazione simmetrica Generazione della chiave con GPG Tipo, lunghezza, durata della chiave Dati personali Generazione effettiva Rapporto di generazione Firma digitale di un documento Firma in file separato Verifica della firma digitale Fallimento della verifica Cifratura per un particolare destinatario Decifrazione del contenuto da parte del destinatario Trasformazione dei file binari in file di testo (e viceversa) Esportazione della propria chiave pubblica Importazione della chiave pubblica altrui nel proprio portachiavi Elenco delle chiavi del proprio portachiavi Sicurezza e SSH SSH Server SSH Client SSH Esecuzione di comandi su calcolatore remoto Autenticazione senza password Autenticazione senza verifica chiave host Basi di dati MySQL Introduzione Ripristino password di root Visualizzazione riferimenti esterni con phpmyadmin Stored procedures - Funzioni (creazione) Stored procedures - Funzioni (uso) Stored procedures - Parametri in ingresso (creazione)

15 Stored procedures - Parametri in ingresso (uso) Stored procedures - Parametri in uscita (creazione) Stored procedures - Parametri in uscita (uso) Stored procedures - Creazione di API per l accesso al DB (1/2) Stored procedures - Creazione di API per l accesso al DB (2/2) Stored procedures - Cicli e cursori PostgreSQL Introduzione Impostazione della password Avvio del server Creazione di un utente e di un database X Window e GNOME Il sistema grafico XWindow Componenti del sistema X Window File di configurazione Configurazione di X Window Avvio di X Window Accesso da sistemi remoti La variabile DISPLAY Programmi utili Alcune cose da sapere Xnest Xnest - GIMP in una sola finestra tdfsb Cattura di una schermata Cattura video desktop GNOME, l interfaccia standard di Ubuntu GNOME Personalizzazione di GNOME Aree di lavoro e finestre Tastiera e caratteri speciali Combinazione di tasti Compose key Esempi di composizione Usare i codici UNICODE Definizione di una tastiera personalizzata Nautilus Informazioni aggiuntive su file e directory Editor di configurazione gconftool Impostazione della modalità di visualizzazione dei permessi Compiz Compiz - effetto desktop cubico

16 Compiz - finestre tremolanti Beagle Accessibilità Tecnologie assistive Configurazione di sistema

17 1 Introduzione 1.1 Questa cassetta A chi è rivolta Questa raccolta di appunti, che ho chiamato cassetta degli attrezzi per sottolinearne l aspetto pragmatico/operativo, serve a dare un po di organicità a degli appunti su cose che mi sembra possano servire ad un sistemista Linux, ma anche ad un utente casalingo curioso. Non vuole essere un documento tecnico complesso, con la spiegazione di tutta la teoria che c è dietro le cose, ma solo un riferimento agile e snello da consultare alla bisogna. Là dove è stato possibile, ho pensato che fosse meglio rinviare ad altre fonti, innumerevoli, per approfondimenti Formati e diffusione Visto che uso questi appunti sia a mo di presentazione sia per fornire dispense a studenti ed allievi di corsi di formazione, ho pensato che fosse utile avere a disposizione uno strumento che mi consentisse di generare, in maniera semplice ed agevole, entrambe le cose a partire da un unica fonte. Dopo un po di ricerche, ho optato per un mix di strumenti (che dovrò documentare qui... ) che mi consentono di partire da semplici file di testo in formato markdown per ottenere presentazioni in formato S5 e un documento PDF: pandoc, per la traduzione di markdown in S5 e latex latex, per ottenere il file PDF pdftk, per mettere la copertina uno script bash, per tenere il tutto insieme Il meccanismo di conversione non è esente da difetti Errori Probabilmente ce ne sono diversi. Se ne trovate, segnalatameli. Grazie. Ovviamente, qualsiasi problema sorga nel vostro calcolatore utilizzando quello che trovate qui descritto non mi dovrà essere attribuito. Leggete tutto come se fosse un romanzo di fantascienza, e fate delle prove solo su calcolatori in cui non avete nessun documento importante Licenza Figura 1: Licenza CC La mia cassetta degli attrezzi Linux è rilasciata ai sensi della licenza Creative Commons Attribuzione-Non commerciale-condividi allo stesso modo Bibliografia e documentazione PDF Alcuni libri completi disponibili in PDF: Daniele Giacomini, Appunti di informatica libera

18 Simone Piccardi, Amministrare GNU/Linux 3 Keir Thomas, Ubuntu Pocket Guide and Reference 4 Daniele Medri, Linux facile 5 Javier Fernández-Sanguino Peña, Securing Debian Manual 6 Riccardo Cavalieri, Ubuntu per tutti! Libri Alcuni libri (di carta!) per approfondire: Nemeth, Snyder e Hein, Linux Administration Handbook (2nd Edition) Widling e Behman, Self Service Linux Siti web Sono ovviamente moltissimi. Per cominciare: The Linux Documentation Project 8 Linux Journal Man Le pagine man costituiscono la tradizionale fonte di informazione per i sistemi Un*x. Ogni pagina di manuale descrive un programma, un comando, il formato di un file di configurazione, ecc. Le pagine sono suddivise in diverse sezioni. Se per una parola chiave esiste sia un comando sia un nome di file, può essere necessario specificare la sezione. $ man crontab # equivale a "man 1 crontab": descrive come si usa il comando $ man 5 crontab # descrive il formato del file usato dal comando crontab TIP: All interno delle pagine di manuale si possono fare ricerche (basate su espressioni regolari) digitando / e il termine da cercare. Digitando n si passa al successivo termine trovato. TIP: Se si desiderano pagine man colorate, si può installare il programma most e impostare export PAGER=most nella propria configurazione bash Whatis Il programma whatis consulta il database delle pagine man e restituisce la descrizione del comando. $ whatis more more (1) $ whatis less less (1) $ whatis man man (1) man (7) - file perusal filter for crt viewing - opposite of more - an interface to the on-line reference manuals - macros to format man pages main.html pdf

19 1.2.6 Apropos Il programma apropos fa una ricerca nelle descrizioni delle pagine man in base alla parola chiave specificata. È l equivalente di man -k. $ apropos sudoers sudoers (5) visudo (8) $ man -k sudoers sudoers (5) visudo (8) - list of which users may execute what - edit the sudoers file - list of which users may execute what - edit the sudoers file Info Una parte della documentazion del software della Free Software Foundation è mantenuta in formato Texinfo, che permette una produzione di documentazione ipertestuale e con formati multipli di output (pagine info, pagine web, documentazione cartacea). Vi si accede con il programma info. Per navigare le pagine info sono utili i seguenti comandi: Tab (passare al link successivo) Enter (seguire il link corrente) p e n (pagina precedente e successiva)? (informazioni sui comandi) q (uscita) help Alcuni programmi hanno pagine man stringate e rendono disponibile la documentazione tramite l opzione -help, --help o -h sulla riga di comando. Altri (ad esempio, less) offrono una sintesi dei comandi principali. $ convert -help Version: ImageMagick /03/07 Q16 Copyright: Copyright (C) ImageMagick Studio LLC Usage: convert [options...] file [ [options...] file...] [options...] file Where options include: -adjoin -affine matrix [snip] join images into a single multi-image file affine transform matrix /usr/share/doc Molta documentazione è disponibile, spesso in formato ipertestuale o di testo puro, nella directory /usr/share/doc HOWTO e WWW Una fonte notevole di documentazione, dagli HOWTO su particolari dispositivi o programmi ai post nei blog degli utenti, è disponibile su Web. In particolare, merita di essere segnalato il Linux Documentation Project 10, con le traduzioni in italiano a cura del PLUTO. Suggerimento: se si cercano informazioni su un messaggio di errore che appare con l esecuzione di un programma, è meglio che questo messaggio non sia localizzato (tradotto). Si può invocare il programma premettendo la stringa LANG=C

20 1.3 Il concetto di software libero Il software Classificazioni del software: per tipologia per licenza per metodologia di sviluppo per Programma Un programma è un insieme di istruzioni che devono essere eseguite da un calcolatore. Esistono programmi di diversa natura e di diversa complessità. Un programma può: essere interattivo o meno esporre diversi tipi di interfaccia utente (es. a riga di comando, grafica, web) Applicazione Per applicazione si intende un programma (o un insieme di programmi) che svolgono qualcosa di concretamente utile per l utente finale Sistema operativo Un sistema operativo è un programma (o un insieme di programmi) che ha lo scopo di permettere l uso concreto di un calcolatore e l accesso alle sue risorse. I compiti fondamentali di un sistema operativo sono: mascherare la complessità dell hardware, fornendo appositi livelli di astrazione fornire meccanismi per la condivisione (nel tempo e nello spazio) di risorse tra diversi programmi/utenti Programma sorgente ed eseguibile Un esempio di programma: #include <stdio.h> int main() printf("hello, world!\n"); return 0; Il programma sorgente viene compilato per ottenere un programma eseguibile (dalla ricetta si ottiene la torta). Mangereste un alimento (o assumereste un farmaco) di cui nessuno conosce la ricetta (salvo chi l ha prodotto)? 20

21 1.3.6 Free Software Foundation La Free Software Foundation è un organizzazione senza scopo di lucro che ha come obiettivo la promozione dello sviluppo di software libero, definito tramite le seguenti caratteristiche: libertà di eseguire il programma per qualsiasi scopo libertà di studiare il programma e modificarlo libertà di copiare il programma in modo da aiutare il prossimo libertà di migliorare il programma e di distribuirne pubblicamente i miglioramenti, in modo tale che tutta la comunità ne tragga beneficio La FSF ha, tra le altre cose, promosso la creazione di una versione di sistema operativo completo, ispirato a Linux, chiamato GNU (GNU s Not Unix) Copyright e Copyleft Il software, come qualsiasi opera d ingegno, è tutelato dal diritto d autore: chi lo produce ha il diritto di: essere riconosciuto come autore diritti morali diritti patrimoniali indicare limiti e condizioni nell utilizzo Nel mondo anglosassone esiste il concetto di copyright (lett. diritto sulle copie ), sulla base del quale sono state elaborate delle licenze che, a determinate condizioni, concedono diritti anziché limitarli. Con un gioco di parole, si parla di copyleft Licenze La FSF ha promosso alcuni tipi di licenze con cui un programmatore può distribuire il software prodotto: GNU GPL (General Public License) GNU LGPL (Lesser General Public License) GNU AGPL (Affero General Public License) Altre licenze (non FSF) prevedono la distribuzione del codice sorgente, con maggiori o minori restrizioni Open Source L Open Source Initiative ha stilato una lista di caratteristiche che una licenza deve avere per essere considerata open source: libera ridistribuzione disponibilità del codice sorgente permesso di ottenere prodotti derivati eventuale possibilità di garantire l integrità del codice sorgente originale non discriminazione contro persone o gruppi non discriminazione per campo d applicazione distribuzione della licenza con il programma specificità ad un prodotto divieto di vincoli su altro software neutralità rispetto alle tecnologie 21

22 Altri tipi di licenza Molto software viene distribuito con licenze diverse, che solitamente vengono raggruppate nelle seguenti categorie: shareware pizzaware postcardware... freeware public domain 1.4 Differenze tra Windows e GNU/Linux Differenze tra Microsoft Windows e GNU/Linux Tra i sistemi operativi Windows e GNU/Linux esistono differenze notevoli in termini di: licenze e modalità di distribuzione costi sicurezza flessibilità disponibilità di aggiornamenti disponibilità di software i18n e l10n filosofia implementativa organizzazione del filesystem Sicurezza Virus e malware. Con Windows ci sono più rischi a causa di: maggior diffusione minore sicurezza intrinseca (es. frequente necessità di lavorare come amministratore) Al riguardo, può essere utile la lettura di Linux, Unix e i virus Disponibilità di software A seconda del tipo di software, può esserci una disponibilità maggiore per Windows o per Linux. Ad esempio, è lecito aspettarsi un maggior numero di programmi di contabilità per Windows e un maggior numero di applicazioni scientifiche per Linux. I driver (programmi per l uso di determinate periferiche) spesso sono resi disponibili (dal produttore hardware) solo per Windows i18n e l10n I programmi per Linux sono molto spesso internazionalizzati e localizzati nelle diverse lingue (e/o per le diverse culture). È possibile usare uno stesso programma in diverse lingue, e l intera interfaccia utente può seguire le preferenze dell utente. 11 Unix e i virus 22

23 1.4.5 Gestione del software Il software viene gestito da Linux, generalmente, in maniera centralizzata. Con un paio di clic si può aggiornare il sistema operativo e anche tutto il software applicativo. In Windows invece ogni applicazione ha storia a sé. In Windows il programma X viene installato in una directory con tutto ciò che gli compete (es. documentazione, file di esempio, ecc.). In Linux il software è installato con una suddivisione dei file tra diverse directory (eseguibili in una directory, documentazione in un altra, file di configurazione in un altra ancora, ecc.) File system In Windows vi è il supporto solo di NTFS e FAT32. Linux supporta oltre cento diversi tipi di filesystem (es. ext2, ext3, reiserfs, hfs, hpfs, ecc.). In Windows il file system è organizzato in maniera dipendente dalla posizione fisica dei dischi (es. disco C, D, E, ecc.), mentre Linux gestisce un unico file system gerarchico, con un unica radice ed un meccanismo di punti di innesto (detti mount points). Linux gestisce i link simbolici, Windows solo i collegamenti (che sono cosa ben diversa). Linux usa tabelle di nodi indice con meccanismi di indirizzamento ai blocchi, che non crea necessità di deframmentazione del disco Nomi di file e directory Linux, per quanto riguarda i nomi dei file e delle directory, è case-sensitive (sensibile alla differenza tra maiuscole e minuscole). In una stessa directory posso avere i file lettera, Lettera e LETTERA. Windows invece è case-preserving: memorizza i nomi con le maiuscole così come li si scrive (salvo qualche caso), ma non tiene in considerazione la differenza quando si fanno ricerche. Il carattere separatore nei percorsi per Linux è la barra ordinaria (/ ), mentre per Windows è quella rovescia (\) Estensioni In Windows il concetto di estensione per i nomi dei file è parte integrante del sistema operativo. Ad esempio, un programma eseguibile deve avere l estensione.exe, un file batch deve avere l estensione.bat, ecc. In Linux il sistema operativo in quanto tale non usa il concetto di estensione. Sono le singole applicazioni che, se lo desiderano, possono usare le estensioni a qualche fine. Ad esempio, un compilatore di programmi C potrebbe rifiutarsi di compilare un file sorgente se questi non ha l estensione.c Permessi su file e directory I permessi su file e directory di Windows sono più granulari e dettagliati di quelli tradizionali di Unix (per le versioni di Windows che usano NTFS, come Windows 2000, XP, Vista, ecc.). Linux permette di ottenere granularità paragonabili tramite strumenti aggiuntivi (attributi estesi, access control lists, meccanismi di delega) File nascosti e attributi In Windows i file hanno degli attributi speciali, quali nascosto, da archiviare, di sistema. In Linux i file vengono considerati nascosti quando il loro nome inizia con un punto. Gli altri attributi non esistono, poiché non servono (si possono utilizzare le date o le posizioni per ottenere le informazioni necessarie) File binari In Windows vi è una differenza nel modo in cui vengono considerati file binari e file di testo. In Linux non c è questa distinzione (in un certo senso, tutti i file sono considerati binari). 23

24 Flessibilità nell uso dell interfaccia grafica Windows impone l uso di un interfaccia grafica, che è integrata con il sistema operativo. Il crash dell interfaccia, o di una qualsiasi applicazione, compromette la stabilità dell intero sistema. In Linux l ambiente grafico è applicazione separata e può essere attivata o meno, a scelta. Inoltre: il server grafico può essere attivato su un calcolatore remoto esistono diversi tipi di Desktop Manager tra cui l utente può scegliere un utente ha a disposizione più desktop Interfaccia a riga di comando Linux mette a disposizione un ampia gamma di interfacce di amministrazione (shell). La shell più comunemente usata si chiama bash (Bourne Again Shell) ed è flessibile e potente. In Windows esiste un interprete dei comandi (cmd.exe), poco pratico, oppure, ma come componente aggiuntivo da installare separatamente, Windows PowerShell Multiutenza Linux è intrinsecamente multiutente: sullo stesso calcolatore possono lavorare, contemporaneamente, più utenti, sia con interfaccia grafica sia in emulazione di terminale. In Windows la multiutenza è tale solo nel senso che utenti diversi possono succedersi nell uso del calcolatore, a turno (salvo il caso di uso dei Remote Desktop Services, componenti aggiuntive) Gestione dei processi I processi in Linux sono organizzati in maniera gerarchica: ogni processo discende da un processo padre. Terminando un processo, si terminano tutti i suoi discendenti (salvo casi particolari appositamente gestiti). In Windows tutti i processi hanno lo stesso livello Sistemi di autenticazione Linux usa un sistema di autenticazione modulare (Pluggable Authentication Module), che consente diverse modalità (file semplici, LDAP, dominio Windows, ecc.). Windows è molto più limitato in proposito Lettere accentate Con Linux è facile scrivere una È! (basta usare il tasto fissa-maiuscole) Altre differenze Ulteriori informazioni si possono trovare su Why Linux is better Linux e scuola 2.1 Software libero e scuola Software libero e scuola Esistono molti validi motivi per usare software libero nella scuola: educazione alla legalità 12 it.php 24

25 educazione alla libertà educazione alla collaborazione educazione alla curiosità intellettuale economicità Il sito web linuxdidattica.org Il sito web linuxdidattica.org 13 contiene informazioni e risorse legate alle attività nelle scuole basata sul software libero. È raccomandabile iscriversi alla mailing list 14, collegata al sito web Dossier Scuola Il Dossier Scuola 15 è un opera collettiva che mira a documentare motivazioni, software, esperienze, progetti nell ambito della scuola e della didattica WiildSs WiildOs è una distribuzione Linux pensata per l uso delle lavagne multimediali interattive nella scuola. È supportata da una comunità molto attiva Software utile italc 16 può essere utilizzato per monitorare i calcolatori di un laboratorio didattico ed effettuare presentazioni SchoolTool 17 è una suite di programmi liberi per l amministrazione delle scuole 2.2 italc italc italc è uno strumento che consente di operare in un laboratorio scolastico gestendo da remoto le postazioni di lavoro degli studenti. Vedremo come installare e gestire italc sotto Ubuntu. Ulteriori informazioni si possono trovare in Informazioni sull installazione sotto Ubuntu Postazione del docente Sulla postazione del docente installare i pacchetti italc-client e italc-master. Poi: $ sudo ica -role teacher -createkeypair creating new key-pair......done, saved key-pair in /etc/italc/keys/private/teacher/key and /etc/italc/keys/public/teacher/key $ sudo addgroup italc $ sudo adduser <usernamedocente> italc $ sudo chown root:italc -R /etc/italc/keys/public $ sudo chown root:italc -R /etc/italc/keys/private $ sudo chmod -R 750 /etc/italc/keys/private $ sudo chmod -R 755 /etc/italc/keys/public html 25

26 2.2.3 Postazione dell allievo Sulla postazione dell allievo installare il pacchetto italc-client. Poi sovrascrivere il file /etc/italc/keys/public/teacher/key con il file corrispondente generato sul calcolatore del docente Gestione La gestione è sufficientemente intuitiva. Figura 2: italc 3 Interfaccia a linea di comando e comandi basilari 3.1 Introduzione alla Bash Tips and tricks Esiste l autocompletamento: dei comandi dei nomi di file e directory pdf[tab][tab] ls /etc/a[tab][tab] Esistono scorciatoie: alt +. freccia su e freccia giù history 26

27 3.1.2 Struttura dei comandi La struttura base dei comandi è la seguente: impostazione di variabili percorso comando parametri opzioni argomenti Alcuni esempi: /bin/cat -n /etc/services cat --number /etc/services tar xvzf archivio.tgz # diverso da tar xvfz archivio.tgz, non corretto tar -xvzf archivio.tgz tar -x -v -z -f archivio.tgz tar --extract --verbose --ungzip --file archivio.tgz LC_TIME=POSIX cal ls unarchivio -l chmod unarchivio +x # possibile # errato Pagine man Una pagina man ha normalmente le seguenti sezioni: name (nome) synopsis (sintesi della sintassi) description (descrizione) options (opzioni) see also (vedere anche) author (autore) copyright I/O standard Esistono tre file standard per l I/O: standard input (0) standard output (1) standard error (2) Esempio: cal > calendario sort < calendario ls /directory_non_esistente 2> errore Pipeline Le pipeline servono a far sì che l output di un programma diventi l input di un altro programma: getent services sort getent passwd grep bash wc -l 27

28 3.1.6 Filtri Molti programmi agiscono da filtro: ricevono un input eseguono delle azioni su di esso producono un output Alcuni esempi: cal tac cal rev cal tac rev getent passwd cut -d: -f1 tail -3 who wc -l Comandi interattivi I programmi interattivi non esauriscono il loro compito senza intervento dell utente: getent passwd more getent services less man passwd man 5 passwd Funzionamento alternativo Molti programmi possono agire in diverso modo a seconda del modo in cui sono invocati: lettura dello standard input o di un file? scrittura sullo standard output o su un file? funzionamento interattivo o come filtro? Alcuni esempi: grep testo miofile grep testo > miofile cat miofile grep testo StdIn e StdOut come file binari A differenza di quanto avviene nel mondo dos/windows, i file di standard input e di standard output possono essere file binari di contenuto arbitrario. Ad esempio, si può usare cat per concatenare pezzi di file binario (ottenuti con split) e ricostruire l originale. $ split --bytes numeric-suffixes /usr/bin/cal $ ls x00 x01 x02 x03 x04 x05 $ cat x* > my_cal $ ls my_cal x00 x01 x02 x03 x04 x Attenzione ai nomi Alcune cose a cui è necessario prestare attenzione: i nomi dei file (e dei comandi) sono case-sensitive (sensibili alla differenza tra maiuscole e minuscole) i parametri contenenti spazi devono essere gestiti con virgolette o con sequenze di escape Esempi: touch un\ nome\ con\ spazi touch "un altro nome con spazi" touch un terzo nome con spazi 28

29 Unione dell output di più programmi A volte può essere necessario considerare l output di due programmi come unico, per le elaborazioni successive. (cal 2006; cal 2007) tr [:lower:] [:upper:] Il comando tee A volte può essere necessario salvare su file l output di un programma, mantenendo l uscita comunque sullo standard output, per le elaborazioni successive. (cal 2006; cal 2007) tee copia tr [:lower:] [:upper:] Esercizi Alcuni esercizi: creare un file di testo usando cat per la lettura dello standard input e la ridirezione per la scrittura su file creare una pipeline per mostrare i primi cinque servizi internet in ordine alfabetico verificare cosa succede se si usa l operatore >> al posto del semplice > per la ridirezione dell output provare a ridirigere su un file sia lo standard output sia lo standard error, mediante la ridirezione 2>&1 3.2 Gestione di file e directory Il filesystem Il filesystem dei sistemi Un*x: è basato su un unico albero, con un unica radice è indipendente dalla collocazione fisica dei file sui vari dischi sfrutta un meccanismo di innesto, in directory tipicamente vuote, di filesystem subordinati Linux permette l uso di diversi tipi di filesystem (ext2, ext3, fat, reiserfs, ecc.) permette l uso di sistemi RAID (redundant array of independent disks) e di volumi logici Directory principali -- bin programmi eseguibili principali -- boot file per l avvio del calcolatore -- dev dispositivi -- etc file di configurazione di sistema -- home directory personali degli utenti -- lib librerie -- media dispositivi esterni -- mnt file system subordinati secondari -- opt eseguibili da pacchetti non standard -- proc directory virtuale per i processi -- root directory dell utente root -- sbin eseguibili per l amministrazione -- sys directory virtuale per i dispositivi -- tmp directory per file temporanei -- usr documentazione, librerie, programmi -- var dati delle applicazioni 29

30 3.2.3 Utenti Esistono tre categorie di utenti: root, l amministratore del sistema utenti di sistema (es. per gestione servizi) utenti ordinari (umani) (rinvio) Esistono dei meccanismi che consentono a root di delegare altri utenti a compiere delle operazioni File per la gestione degli utenti Tradizionalmente le informazioni sugli utenti del sistema sono mantenuti nei seguenti file: /etc/passwd /etc/shadow /etc/group L autenticazione può avvenire anche con sistemi diversi da quelli tradizionali (LDAP, SMB, ecc.) Elenco dei file in una directory Il comando ls permette di mostrare il contenuto di una directory: ls ls -l ls -a ls -F # elenco dei file # elenco con dettagli # mostra anche i file nascosti # mostra il tipo Altri comandi utili: tree find # visualizzazione ad albero # ricerca Creazione e rimozione di una directory Una directory è, nella sostanza, un file speciale che elenca altri file. creazione: mkdir nome_directory rimozione: rmdir nome_directory Le directory non vuote possono essere rimosse con la rimozione ricorsiva (rm -rf). Per spostarsi da una directory ad un altra, si usa il comando cd. I percorsi (path) indicati possono essere assoluti (se iniziano dalla radice, ad esempio /var/log) o relativi (ad esempio../lavori) Gestione di file Sui file si possono eseguire molte operazioni. copia: cp spostamento/ridenominazione: mv rimozione: rm controllo del tipo: file 30

31 visualizzazione di informazioni: stat aggiornamento ultima modifica/accesso: touch comparazione: cmp... A differenza che nel mondo dos/windows, l estensione nel nome di un file non ha significato a livello di sistema, ma solo a livello di singola applicazione. Si considerano file nascosti quelli il cui nome inizia con un punto Espansione dei nomi Per ottenere più parametri in modo sintetico, la bash offre il meccanismo dell espansione: con parentesi graffa: a{d,c,b}e è espanso in ade ace abe a{1..5}e è espanso in a1e a2e a3e a4e a5e della tilde: ~ è la propria home directory, ~mario è quella dell utente mario basata su pattern: * per qualsiasi stringa (compresa la stringa nulla),? per qualsiasi carattere basata sui nomi dei file effettivamente presenti: [a-z] per qualsiasi carattere tra la a e la z aritmetica: $((1+3)) corrisponde a 4 basata sull interpretazione di comandi: mkdir $(whoami) o mkdirwhoami crea una directory con il proprio identificativo Inoltre,. è un riferimento alla directory corrente,.. è un riferimento alla directory di livello superiore Comandi come parametri A volte è utile poter utilizzare l output di un comando come lista di parametri di un altro comando. $ cat elenco mario giorgio stefania donata $ mkdir $(cat elenco) $ mkdir $(date -I) $ mv $(cat elenco) $(date -I) Nota: per lo stesso scopo è possibile l uso del backtick Operazioni su molti file/directory contemporaneamente Molti comandi permettono di operare su diversi file contemporaneamente. mkdir uno due tre "quattro cinque" touch pagina{1..40}.html mkdir -p miadir/{a,b,c}/file{1,2,3,4} Se il comando accetta un solo parametro, lo si può utilizzare in un ciclo oppure con xargs. for utente in $(cat elenco); do useradd $utente; done cat elenco xargs useradd Nota: a differenza di quanto accade nel mondo dos/windows, l espansione è a carico della shell, non del singolo programma. 31

32 I nodi indice e altre amenità (rinvio) All interno di una directory viene creato un collegamento al nodo indice di un file Un file può avere più nomi Esistono link simbolici Permessi su file e directory I permessi vengono gestiti in tre terzetti: permessi del proprietario (owner) permessi del gruppo proprietario (group) permessi degli altri (others) In ogni terzetto sono presenti i seguenti permessi: lettura scrittura esecuzione Il comando chmod permette di cambiare i permessi Esercizi Esplorare il filesystem con i comandi cd e ls Creare un file di testo con un elenco di nomi e cognomi su più righe (nomecognome); utilizzare il file per creare una directory per ogni coppia nome-cognome (suggerimento: usare la variabile d ambiente IFS, un ciclo for, oppure xargs) Scaricare con wget il file es_file_01.zip, scompattarlo con unzip e seguire le istruzioni contenute in esso 3.3 Permessi su file e directory Tipi di file In un sistema Un*x ogni dispositivo è visto come un file. Vi sono questi diversi tipi di file: file normali directory file speciali a blocchi file speciali a caratteri link simbolici fifo (named pipes) socket 32

33 3.3.2 Tipi di file (2) Con ls -l la prima colonna dell output mostra il tipo di file. Si veda il seguente esempio: $ ls -ld /etc/passwd /dev/hda /dev/lp0 /home /etc/rc0.d/k01gdm \ /usplash_fifo /dev/log brw-rw root disk 3, :23 /dev/hda srw-rw-rw- 1 root root :24 /dev/log crw-rw root lp 6, :24 /dev/lp0 -rw-r--r-- 1 root root :42 /etc/passwd lrwxrwxrwx 1 root root :49 /etc/rc0.d/k01gdm ->../init.d/gdm drwxr-xr-x 14 root root :42 /home prw-r root root :49 /usplash_fifo Tipi di file stat Informazioni specifiche sui file si possono ottenere con stat: $ stat /dev/lp0 File: /dev/lp0 Size: 0 Blocks: 0 IO Block: 4096 file speciale a caratteri Device: dh/13d Inode: Links: 1 Device type: 6,0 Access: (0660/crw-rw----) Uid: ( 0/ root) Gid: ( 7/ lp) Access: :24: Modify: :24: Change: :24: $ stat /dev/hda File: /dev/hda Size: 0 Blocks: 0 IO Block: 4096 file speciale a blocchi Device: dh/13d Inode: 7552 Links: 1 Device type: 3,0 Access: (0660/brw-rw----) Uid: ( 0/ root) Gid: ( 6/ disk) Access: :24: Modify: :23: Change: :24: Tipi di file find Si possono cercare file di un determinato tipo con find: $ find / -type c 2> /dev/null /lib/udev/devices/net/tun /lib/udev/devices/ppp /lib/udev/devices/kmem /lib/udev/devices/console /lib/udev/devices/null Proprietari Ogni file è di proprietà di un determinato utente e di un determinato gruppo. I permessi sul file sono relativi all utente proprietario e al gruppo proprietario. Root può cambiare il proprietario di un file con chown. Un utente può cambiare il gruppo proprietario di un file con chgrp (scegliendo tra i gruppi a cui appartiene) $ ls -l unfile -rw-r--r-- 1 loris jasiu :31 unfile $ id uid=1000(loris) gid=1004(jasiu) gruppi=4(adm),6(disk),20(dialout),21(fax),24(cdrom),25(floppy),26(tape), 29(audio),30(dip),40(src),44(video),46(plugdev),104(lpadmin),105(scanner),128(admin),1004(jasiu) $ chgrp audio unfile $ ls -l unfile -rw-r--r-- 1 loris audio :31 unfile Sono possibili comandi ricorsivi e abbreviati (vedere man page). 33

34 3.3.6 Permessi I permessi sono di tre tipi e sono organizzati in terzetti di bit: lettura (primo bit, r) scrittura (secondo bit, w) esecuzione (terzo bit, x) Ci sono tre terzetti, riferiti al proprietario, al gruppo proprietario, agli altri. $ ls -l silence -rwxr-xr-- 1 loris audio :21 silence Il file silence è leggibile, scrivibile ed eseguibile dal suo proprietario, leggibile ed eseguibile dagli appartenenti al gruppo audio, solo leggibile dagli altri utenti del sistema Permessi sulle directory Nelle directory, i permessi significano: lettura: accedere all elenco dei contenuti di una directory scrittura: aggiungere o eliminare file alla directory esecuzione: entrare nella directory (es. con cd) Immaginandosi una directory come una tabella contenente i nomi dei file e i relativi i-node, leggere una directory significa poter scorrere l elenco dei nomi, mentre scrivere in una directory significa poter aggiungere, modificare o eliminare righe nella tabella. Il permesso di esecuzione consente di accedere alla parte della tabella contenente gli i-node Priorità delle appartenenze I permessi vengono valutati a partire dal proprietario. Se si è proprietari di un file e quel file non è leggibile dal proprietario ed è leggibile dal gruppo cui si appartiene, quest ultima cosa non viene tenuta in considerazione. $ id uid=1000(loris) gid=1004(jasiu)... $ ls -l documento ----r loris jasiu :29 documento $ cat documento cat: documento: Permesso negato Bit SUID, SGID e Sticky Sono presenti anche i seguenti bit: SUID (Set User ID): permette l esecuzione di programmi con i permessi del proprietario del file eseguibile, anziché con quelli dell utente SGID (Set Group ID): permette l esecuzione di programmi con i permessi del gruppo proprietario del file eseguibile, anziché con quelli dell utente; inoltre, permette la gestione di directory di lavoro comune tra più utenti (ereditarietà dei permessi di gruppo) Sticky: un tempo era impostato per i programmi che dovevano rimanevano in memoria al termine del lavoro; ora viene usato per impedire la cancellazione di file da parte di non proprietari in directory comuni 34

35 Chmod con modalità simbolica o numerica Il comando chmod può essere usato in modalità simbolica (assoluta o relativa) o numerica. $ chmod 777 unfile $ ls -l unfile -rwxrwxrwx 1 loris jasiu :08 unfile $ chmod o-w unfile $ ls -l unfile -rwxrwxr-x 1 loris jasiu :08 unfile $ chmod g=rx unfile $ ls -l unfile -rwxr-xr-x 1 loris jasiu :08 unfile UMask Normalmente, i file vengono creati dai programmi con permessi 666 e le directory con permessi 777. L impostazione di una umask permette di decidere quali permessi sottrarre a quelli standard. Ad esempio: $ umask 0 $ touch file1 $ mkdir dir1 $ umask 22 $ touch file2 $ mkdir dir2 $ umask 77 $ touch file3 $ mkdir dir3 $ ls -ld dir* file* drwxrwxrwx 2 loris jasiu :50 dir1 drwxr-xr-x 2 loris jasiu :51 dir2 drwx loris jasiu :51 dir3 -rw-rw-rw- 1 loris jasiu :50 file1 -rw-r--r-- 1 loris jasiu :51 file2 -rw loris jasiu :51 file Altri permessi (rinvio) Nella presentazione sulle autorizzazioni verranno introdotti altri permessi, basati su bit speciali dei file system ext2 ed ext3 e sulle ACL (access control list). Inoltre, verrà introdotto il meccanismo delle deleghe, che può essere usato per consentire determinate operazioni (sui file, ma non solo) ad alcuni utenti Esercizi 1. Creare un file con permessi -w e aggiungervi qualche riga. 2. Creare una directory con permessi r e provare ad accedervi e a leggerne i contenuti. 3. Creare una directory con permessi -w e provare ad accedervi e a leggerne i contenuti. 4. Provare lo scenario di directory condivisa con sticky bit impostato. 5. Provare lo scenario di directory condivisa e SGID bit impostato e gruppi primari di appartenenza diversi 6. Cercare con find tutti i programmi che hanno il bit SUID impostato. 7. Creare un file fifo e, da due terminali diversi, usarlo per fare comunicare tra loro due processi. 8. Provare il comando newgrp per creare file con gruppo proprietario diverso dal proprio gruppo primario. 35

36 3.4 Ricerche Find Find è il più potente fra i programmi di ricerca. Importante la possibilità di eseguire automaticamente determinate operazioni su tutti i file trovati, tramite: le azioni exec e execdir le azioni ok e okdir il piping con xargs (sconsigliato, vedi Find: Security Considerations 19 ) Ad esempio: $ find -iname *.c -exec chmod 700 {} \; # imposta permessi 700 a tutti i file con estensione.c $ find -iname *.c -execdir chmod 700 {} \; # come sopra, ma con maggior sicurezza $ find -iname *.c -okdir chmod 700 {} \; # come sopra, ma chiede conferma ogni volta $ find -iname *.c -exec chmod 700 {} + # unica invocazione del comando, con la lista dei parametri Find - permessi sui file Il criterio di ricerca basato sui permessi può essere impostato sulla ricerca dei file che hanno esattamente determinati permessi, oppure che hanno (almeno) uno di o tutti i permessi specificati. $ find -type f -perm exec ls -l {} \; # trova solo i file con i permessi u=rx -r-x loris loris :17./0500_file $ find -type f -perm exec ls -l {} \; # trova i file con entrambi i permessi u=rx -rwx loris loris :17./0700_file -r-x loris loris :17./0500_file $ find -type f -perm /0500 -exec ls -l {} \; # trova i file con almeno uno dei permessi u=rx --wx loris loris :17./0300_file -r loris loris :17./0400_file -rwx loris loris :17./0700_file -r-x loris loris :17./0500_file ---x loris loris :17./0100_file -rw loris loris :17./0600_file Find - ricerche per intervalli temporali Quando si devono elencare tutti i file da un determinato momento ad un altro, può essere utile creare dei file segnatempo, in modo da poter fare un confronto basato sulle marche temporali. $ touch prima $ touch /tmp/start $ touch durante1 $ touch durante2 $ touch /tmp/stop $ touch dopo $ find. -cnewer /tmp/start! -cnewer /tmp/stop./durante1./durante Find - esclusione di directory Se si vuole effettuare una ricerca escludendo una directory, si può usare l opzione -prune. Ad esempio, per cercare i file con il bit SUID impostato in tutte le directory ad esclusione di /proc, si può impartire il comando: $ find / -path /proc -prune -o -perm -u+s 2> /dev/null /usr/bin/sudoedit /usr/bin/sudo [...] /sbin/mount.nfs Si noti l operatore logico -o (se il percorso è /proc non elencare il file; oppure in caso contrario elencalo se il file ha il bit SUID impostato). 19 node/find html/security-considerations.html#security-considerations 36

37 3.4.5 Ricerca interattiva all interno di un file di testo Se si sta usando vi o less per visualizzare un file di testo, premendo / si può attivare una funzione di ricerca all interno del file stesso. Digitando n si trova l occorrenza successiva del termine o dell espressione regolare cercato Grep con ricorsione Se si vuole fare una ricerca all interno di file di testo (ad esempio, nei file di configurazione delle varie applicazioni, in /etc), si può usare il programma Grep con l opzione di ricorsione. $ grep -R apache /etc 2> /dev/null head -5 /etc/apparmor.d/abstractions/svn-repositories: # it is intended to be included in profiles for svnserve/apache2 and maybe /etc/apache2/sites-available/default: # This directive allows us to have apache2 s default start page /etc/apache2/sites-available/default: # in /apache2-default/, but still have / go to the right place /etc/apache2/sites-available/default: #RedirectMatch ^/$ /apache2-default/ /etc/apache2/sites-available/default: ErrorLog /var/log/apache2/error.log Locate (Slocate) Si basa su un indice aggiornato periodicamente con updatedb. $ slocate gshadow /var/backups/gshadow.bak /usr/share/man/cs/man5/gshadow.5.gz /usr/share/man/man5/gshadow.5.gz /usr/share/man/fr/man5/gshadow.5.gz /usr/share/man/sv/man5/gshadow.5.gz /usr/share/man/ru/man5/gshadow.5.gz /etc/gshadow /etc/gshadow Whereis Cerca programmi basandosi sul path corrente. $ whereis cat cat: /bin/cat /usr/share/man/man1/cat.1.gz $ PATH= $ whereis cat bash: whereis: No such file or directory Which Indica che programma verrebbe eseguito con un determinato comando (a meno che non si tratti di un built-in della shell). $ which cat /bin/cat $ which echo /bin/echo $ type echo # echo in realtà è un built-in echo is a shell builtin Type Il comando type serve a indicare di che tipo è il comando indicato come parametro: $ type dd dd is /bin/dd $ type echo echo is a shell builtin $ type if if is a shell keyword $ type cal cal is hashed (/usr/bin/cal) I comandi già impartiti nella shell corrente vengono organizzati in un hash, in modo che sia più veloce il reperimento del relativo file binario in occasione dei richiami successivi. 37

38 Lsof Elenca i file correntemente aperti. $ lsof grep services soffice.b 7373 loris mem-r REG 8, /usr/lib/openoffice/program/services.rdb soffice.b 7373 loris 51rR REG 8, /usr/lib/openoffice/program/services.rdb Df DiskFree. Quanto spazio su disco rimane nelle diverse partizioni? $ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda % / varrun % /var/run varlock % /var/lock udev % /dev devshm % /dev/shm lrm % /lib/modules/ generic/volatile /dev/sdb % /media/disk Du DiskUsage. Quanto spazio su disco è effettivamente occupato da una directory e/o da un file? $ du -hs /etc/apache2/ 12K /etc/apache2/sites-available 4,0K /etc/apache2/mods-enabled 356K /etc/apache2/mods-available 4,0K /etc/apache2/sites-enabled 8,0K /etc/apache2/conf.d 24K /etc/apache2/ A caccia di elefanti Esempio tratto dal libro di Paolo Attivissimo e Roberto Odoardi Da Windows a Linux 20. $ sudo du m S x /home sort n r head /home/loris/desktop/torrents/torrents_nv/docs 6806 /home/loris/importanti/qemu/os 4457 /home/images/raw_ /home/images/raw_ Informazioni sul tipo di file Il programma file consente di determinare il tipo di file (file compresso gzip, immagine jpeg, ecc.), e di indicare il corrispondente tipo MIME. È bene precisare che si basa sul contenuto del file, non sull estensione: $ file Test.odt Test.rtf Test.odt: OpenDocument Text Test.rtf: Rich Text Format data, version 1, ANSI $ file --mime Test.odt Test.rtf Test.odt: application/vnd.oasis.opendocument.text Test.rtf: text/rtf $ cp Test.odt Test.jpg # verifichiamo che file non viene imbrogliato... $ file Test.jpg Test.jpg: OpenDocument Text 20 books/w2l1/index.htm 38

39 Cancellazioni sicure Se si vogliono eliminare dei file in maniera sicura (con sovrascrittura di dati casuali, anziché logica), si può usare il programma wipe. $ wipe documentoriservato.odt Okay to WIPE 1 regular file? (Yes/No) yes Operation finished. 1 file wiped and 0 special files ignored in 0 directories, 0 symlinks removed but not followed, 0 errors occured. $ wipe -q -Q 1 docum_riserv.pdf # sovrascrittura una sola volta Okay to WIPE 1 regular file? (Yes/No) yes Operation finished. 1 file wiped and 0 special files ignored in 0 directories, 0 symlinks removed but not followed, 0 errors occured Cambiare in blocco il nome di file Capita spesso di dover ridenominare una serie di file in base a qualche criterio. Anziché usare una serie di mv, si può ricorrere al programma rename (che funziona in maniera leggermente diversa nei sistemi RedHat/Fedora e in quelli Debian/Ubuntu). $ rename.jpg.jpeg *jpg # RedHat/Fedora $ rename s/.jpg/.jpeg/ *jpg # Debian/Ubuntu Se si hanno dei file numerati in maniera naturale si possono sistemare con un paio di comandi: $ ls foto100.jpeg foto104.jpeg foto12.jpeg foto1.jpeg foto5.jpeg foto9.jpeg foto101.jpeg foto105.jpeg foto13.jpeg foto2.jpeg foto6.jpeg foto102.jpeg foto10.jpeg foto14.jpeg foto3.jpeg foto7.jpeg foto103.jpeg foto11.jpeg foto15.jpeg foto4.jpeg foto8.jpeg $ rename s/foto/foto0/ foto?.jpeg $ rename s/foto/foto0/ foto??.jpeg $ ls foto001.jpeg foto006.jpeg foto011.jpeg foto100.jpeg foto105.jpeg foto002.jpeg foto007.jpeg foto012.jpeg foto101.jpeg foto003.jpeg foto008.jpeg foto013.jpeg foto102.jpeg foto004.jpeg foto009.jpeg foto014.jpeg foto103.jpeg foto005.jpeg foto010.jpeg foto015.jpeg foto104.jpeg Pgrep e Pkill Può capitare di dover cercare un processo in base al nome dell utente, al nome dell eseguibile, al terminale. Lo si può fare agevolmente con il programma pgrep. Si presti attenzione alla differenza tra utente effettivo, specificato con -u (ad esempio, root per il programma passwd che ha il bit SUID impostato), e l utente reale (-U). Con -l si ottiene il nome dell eseguibile oltre al PID. Con il programma pkill si possono inviare segnali ai processi trovati. $ pgrep -u loris -l head gnome-keyring-d 6886 x-session-manag 6928 ssh-agent Beagle (ricerche desktop) Per effettuare ricerche generiche all interno di testi presenti nella nostra directory e/o nei nostri messaggi di posta, possiamo utilizzare beagle, un programma che indicizza i nostri documenti. Ne parleremo nella sezione su GNOME. 39

40 3.5 Operazioni programmate e periodiche Ora (e data) di sistema L ora e la data di sistema possono essere visualizzate con il comando date. In assenza di indicazioni, il formato di visualizzazione rispetta il locale corrente. $ date ven feb 22 09:37:09 CET 2008 $ LANG=POSIX date Fri Feb 22 09:38:18 CET Rappresentazione delle date È importante che nella rapppresentazione di date e ore non vi siano ambiguità. Ciò è valido soprattutto nei casi in cui è prevista una qualche forma di elaborazione automatica. I problemi più comuni riguardano: formati di rappresentazione fusi orari Formati di rappresentazione Il comando date permette di usare alcuni formati standard predefiniti o di crearne di personalizzati: $ date --rfc-2822 # formato usato per l Fri, 22 Feb :57: $ date --utc # riferimento al tempo coordinato universale ven feb 22 09:42:32 UTC 2008 $ date +"Settimana n. %U dell anno %Y" # formato personalizzato Settimana n. 07 dell anno 2008 $ date +%s # numero di secondi dall Epoch Nota: i secondi possono andare da 0 a 60 per tener conto del secondo intercalare 21 (supportato solo in rappresentazione) Fuso orario Informazioni sui fusi orari attivabili si possono trovare nel file /usr/share/zoneinfo/zone.tab. Il file /etc/localtime è una copia del (o un link simbolico al) file corrispondente della directory /usr/share/zoneinfo Modifica dell ora di sistema L ora di sistema può essere modificata con il comando sudo date --set L ora dell hardware clock L orologio hardware, in funzione a calcolatore spento, cede il passo all orologio di sistema quando questo viene avviato. Si può vedere o impostare l ora dell orologio hardware con il comando hwclock. $ hwclock -r ven 22 feb :54:06 CET seconds $ sudo hwclock --systohc # imposta l ora dell hc basandosi su quella di sistema $ sudo hwclock --hctosys # imposta l ora di sistema basandosi su quella dell hc 21 intercalare 40

41 3.5.7 L ora esatta Può essere utile recuperare l ora esatta da un server apposito, rintracciabile consultando la lista di server pubblici disponibili 22. Per visualizzare l ora può essere dato il comando rdate -p <servername>. Per impostarla si dovrà dare il comando sudo rdate <servername> (o l analogo sudo ntpdate <servername>. Ovvie norme di buona condotta prevedono che si evitino richieste troppo frequenti. Per sistemi comuni può essere utile impostare l ora all avvio (eventualmente gestendo ritardi sistematici con adjtimex). Per sistemi server, che rimangono sempre accesi ed hanno necessità di precisione maggiore (e di modifiche meno drastiche all ora di sistema), è consigliabile una gestione tramite un demone ntp, che tiene in considerazione il ritardo dell orologio di sistema ed effettua aggiustamenti graduali Timestamp dei file Ad ogni file sono associati tre timestamp riportanti data e ora di: ultimo accesso ultima modifica ultimo cambiamento Ad esempio: $ stat documento.txt File: documento.txt [...] Access: :41: Modify: :41: Change: :42: Modifica della data di cambiamento di un file È possibile visualizzare la data di ultimo cambiamento di un file anche con il comando date -r: $ date -r documento.txt ven feb 22 14:41:01 CET 2008 Con touch si possono modificare i timestamp di un file copiandoli da quelli di un altro file preso come riferimento. $ touch -r documento.txt altrodocumento.txt $ stat altrodocumento.txt [...] Access: :30: Modify: :41: Change: :31: Creare un file impostandone la data È possibile creare un file indicando la data di modifica (o di accesso/modifica). Ciò si può rivelare utile per effettuare delle ricerche (vedi find). $ touch --date 12 February :30 /tmp/12feb $ touch -t /tmp/21mar $ ls -l /tmp/12feb /tmp/21mar -rw-r--r-- 1 loris docenti :30 /tmp/12feb -rw-r--r-- 1 loris docenti :30 /tmp/21mar

42 Epoch I sistemi Unix memorizzano le date come numero di secondi passati dall inizio dell anno 1970 (epoch). Attualmente vengono supportate date comprese nell intervallo dal 13 dicembre 1901 al 19 gennaio 2038 (il numero di secondi è memorizzato in un campo di 32 bit con segno). $ touch -t /tmp/begin # data valida: 13 dicembre 1901, ore 21:45:52 $ touch -t /tmp/begin # data non valida:... ore 21:45:51 touch: invalid date format $ touch -t /tmp/end # data valida: 19 gennaio 2038, ore 04:14:07 $ touch -t /tmp/end # data non valida:... ore 04:14:08 touch: invalid date format Uptime Con il comando uptime si può sapere da quanto tempo il sistema è in uso, nonché il carico di lavoro nell ultimo minuto, negli ultimi cinque minuti, nell ultimo quarto d ora. $ uptime 17:02:36 up 3:08, 3 users, load average: 1.19, 1.09, Calendario Se si desidera ottenere un calendario si può usare il programma cal o ncal: $ cal febbraio 2008 do lu ma me gi ve sa $ ncal febbraio 2008 lu ma me gi ve sa do Raffinatezze di ncal Il programma ncal permette di: visualizzare la data in cui cade la Pasqua occidentale (ncal -e) e ortodossa (ncal -o) tenere in considerazione le date in cui nei diversi Paesi è stato adottato il calendario gregoriano Esempi: $ seq xargs -i ncal -e {} 23 marzo aprile aprile 2010 $ ncal # in Italia il passaggio al calendario gregoriano è avvenuto nel 1582 ottobre 1582 lu ma me gi ve sa do

43 Misurazione del tempo di esecuzione Con il comando time si può misurare il tempo impiegato per l esecuzione di un programma. $ time echo "scale=2000; 4*a(1)" bc -l \ \ [...] real 0m5.579s user 0m5.520s sys 0m0.012s Attenzione: la Bash ha un proprio comando time implementato internamente: se si vuole usare il programma esterno time, lo si deve richiamare esplicitamente con /usr/bin/time Esecuzione programmata Se si vuole eseguire un comando ad una certa ora, si può usare il comando at. $ at 17:30 warning: commands will be executed using /bin/sh at> echo questo è un test at> echo dovrebbe essere eseguito alle at> <EOT> job 2 at Fri Feb 22 17:30: L output del comando viene inviato via posta elettronica. $ mail "/var/mail/loris": 1 message 1 new >N 1 Loris Tissino ven feb 22 17:30 13/435 Output from your job & 1 Subject: Output from your job 2 To: Date: Fri, 22 Feb :30: (CET) From: (Loris Tissino) questo è un test dovrebbe essere eseguito alle & q Held 1 message in /var/mail/loris Esecuzione programmata (2) Il comando at dispone di alcune abbreviazioni. Ad esempio: $ at noon $ at teatime tomorrow $ at now + 2 minutes Nota: visto che at legge i comandi da eseguire dallo standard input, si possono sfruttare i meccanismi di ridirezione. $ at midnight < listacomandi $ echo cp -v file1 file2 at 12: Esecuzione programmata (3) Il comando atq permette di vedere quali sono i lavori programmati: $ atq 6 Fri Feb 22 17:43: a loris 5 Sat Feb 23 16:00: a loris 4 Tue Feb 26 12:00: a loris Per la cronaca, i lavori da eseguire vengono salvati come script sh nella directory /var/spool/cron/atjobs. Con il comando atrm si può rimuovere un lavoro dalla coda. I file /etc/at.allow e /etc/at.deny permettono di indicare, rispettivamente, quali siano gli utenti a cui è permesso o non permesso accodare lavori con at. 43

44 Esecuzione batch Il comando batch permette di impostare l esecuzione di un programma attendendo il momento opportuno (quando cioè il carico di lavoro del calcolatore scende sotto un certo livello). $ batch warning: commands will be executed using /bin/sh at>./bigcompile at> <EOT> job 12 at Sat Feb 23 11:44: Sleep Il programma sleep consente di sospendere l esecuzione di uno script per un determinato numero di secondi, minuti, ore o giorni. $ date +%H:%M:%S.%N; sleep 2s; date +%H:%M:%S.%N 11:26: :26: Lettura di variabile dalla shell con timeout In uno script bash, può essere comodo porre un timeout quando viene chiesto in input un valore: $ read -p Inserisci nome (hai cinque secondi per farlo): -t 5 NOME Inserisci nome (hai cinque secondi per farlo): john Esecuzione periodica: watch Se si vuole eseguire un certo comando ogni x secondi, watch è il programma da usare. $ watch ls -l /tmp $ watch --differences ls -l /tmp # evidenzia le differenze dall ultimo output $ watch --differences=cumulative ls -l /tmp # evidenzia le diff. dall inizio $ watch -n 20 ls -l /tmp # esegue ls -l ogni 20 secondi Esecuzione periodica: cron Se si vuole eseguire un certo comando ogni giorno ad una certa ora, oppure ogni x ore, e cose del genere, ci si deve affidare al demone crond. Per modificare i propri comandi programmati, l utente deve usare il comando interattivo crontab $ crontab -e # per modificare la propria programmazione $ sudo crontab -e john # per modificare la programmazione dell utente john $ crontab -l # per visualizzare la propria programmazione $ sudo crontab -u john -l # per visualizzare la programmazione dell utente john Configurazione di cron Ogni riga del file di conigurazione della programmazione di cron è composta da cinque campi: minuto (0 59) ora (0 23) giorno del mese (1 31) mese (1 12) giorno della settimana (0 7) 0 e 7 significano entrambi domenica Ulteriori informazioni si possono trovare in crontab(5). 44

45 E se il calcolatore è spento?... viene in soccorso anacron. 4 Installazione e configurazione 4.1 Installazione di Linux Verifica della configurazione hardware A volte capita, per la risoluzione di problemi hardware, di dover verificare la configurazione, magari confrontandola con quella di una macchina simile. A tale scopo si possono usare: le informazioni della directory /proc i comandi ls* La directory /proc Alcune informazioni utili che si trovano in /proc: $ cat /proc/interrupts $ cat /proc/ioports $ cat /proc/dma $ cat /proc/usb $ cat /proc/pci I comandi ls* Alcuni comandi utili: $ whatis lsmod lspci lsdev lsusb lshal lspcmcia lsmod (8) - program to show the status of modules in the Linux Kernel lspci (8) - list all PCI devices lsdev (8) - display information about installed hardware lsusb (8) - list USB devices lsusb (1) - list USB devices lshal (1) - List devices and their properties lspcmcia (8) - PCMCIA card control utility Nomi dei dispositivi I dispositivi hardware di un sistema Linux vengono visti come file: /dev/ttys0, /dev/ttys1, ecc. (porte seriali) /dev/lp0, /dev/lp1 (porte parallele) /dev/eth0, /dev/eth1, ecc. (interfacce di rete) /dev/hda, /dev/hdb, ecc. (dischi IDE) /dev/sda, /dev/sdb, ecc. (dischi SCSI o equiparati) Partizioni I dischi possono essere partizionati da riga di comando (es. con fdisk) o con strumenti grafici. Per essere utilizzate, le partizioni devono essere formattate con i comandi mkfs.*. Ci si può esercitare con un file creato appositamente: 45

46 $ dd if=/dev/zero of=discosimulato.dsk bs=512 count= records in records out bytes (51 MB) copied, 0, seconds, 59,0 MB/s $ fdisk discosimulato.dsk Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel [snip] $ mkfs.ext3 -F discosimulato.dsk $ sudo mount -t ext3 -o loop discosimulato.dsk /media/cdrom Controllo del filesystem Il controllo del filesystem può essere fatto con i comandi appropriati (a seconda del tipo di filesystem): $ sudo umount /media/cdrom $ fsck.ext3 discosimulato.dsk e2fsck 1.40-WIP (14-Nov-2006) discosimulato.dsk: clean, 11/12544 files, 6499/50000 blocks Il controllo va fatto su un filesystem non innestato (unmounted) Impostazioni del filesystem (tuning) Per controllare in maniera fine come un filesystem ext2 o ext3 deve essere gestito, si può usare il comando tune2fs, che permette ad esempio di: decidere cosa fare quando al controllo vengono trovati degli errori (continue, remount-ro, panic) decidere la quantità di blocchi riservati a root decidere chi (gruppo) può usare i blocchi riservati, oltre a root Debug Un filesystem ext2 o ext3 può essere ispezionato con il programma interattivo debugfs Il file /etc/fstab Il file /etc/fstab contiene le indicazioni su quali filesystem devono essere innestati nel filesystem principale all avvio del sistema (o possono essere innestati successivamente in forma semplificata). Si veda fstab(5) per ulteriori dettagli Innesto di filesystem Un filesystem secondario può essere innestato (mounted) nel filesystem principale tramite il comando mount e disinnestato tramite umount (operazioni privilegiate). Il file /etc/fstab può prevedere la possibilità di innesto da parte di utenti non privilegiati. Per i dispositivi hotplug si possono usare i comandi pmount e pumount, a patto di appartenere al gruppo plugdev Sync Normalmente le operazioni di scrittura su disco vengono ritardate per questioni di efficienza, sfruttando meccanismi di caching. Se si desidera forzare le operazioni di scrittura, si può impartire il comando sync Il Filesystem Hierarchy Standard Il FHS 23 ha lo scopo di fornire una serie di indicazioni vincolanti (requirements) e di linee guida per la posizione di file e directory nei sistemi operativi UNIX-like. L intenzione è di supportare l interoperabilità tra applicazioni, strumenti di sviluppo e script, nonché di garantire una maggior uniformità sulla documentazione per questi sistemi

47 Contenuto del FHS Il FHS contiene: principi guida per ogni area del filesystem specificazione dei file e delle directory richieste come requisito minimo indicazione di eventuali eccezioni ai principi indicazione di casi specifici in cui ci sono stati conflitti Distinzioni tra file Il FHS prevede le seguenti distinzioni tra tipologie di file: shareable vs. unshareable static vs. variable Shareable vs. Unshareable I file condivisibili sono quelli che possono risiedere su un calcolatore ed essere usati su di un altro (ad esempio, i documenti degli utenti). I file non condivisibili sono quelli che ha senso vengano usati solo sul calcolatore in cui risiedono (ad esempio, i file di lock relativi ai dispositivi). In pratica, mentre i primi possono essere in directory condivise in rete, (es. via NFS), i secondi saranno file locali Static vs. Variable I file statici sono quelli che non cambiano senza l intervento dell amministratore di sistema (ad esempio, i programmi eseguibili, le librerie, i file di documentazione). I file variabili sono gli altri. In pratica, i primi, a differenza dei secondi, potrebbero essere posti in filesystem montati in sola lettura (salvo le operazioni di aggiornamento); inoltre, il loro backup ha un rilievo minore Esempio di organizzazione Use Shareable Unshareable static /usr, /opt /etc, /boot variable /var/mail, /var/spool/news /var/run, /var/lock In linea di massima, in ogni directory dovrebbero essere posti file della medesima categoria (individuata in base ai due criteri esposti). In realtà esistono delle eccezioni per questioni di compatibilità storica Le directory principali Per avere informazioni specifiche sulle linee guida, è consigliabile leggere il documento nella sua interezza (esistono anche delle sintesi in italiano). È particolarmente importante prestare attenzione alla differenza tra le directory: /bin (eseguibili essenziali, unshareable) /usr/bin (altri eseguibili, shareable) /sbin (eseguibili essenziali per l utente root, unshareable) /usr/sbin (altri eseguibili per l utente root, shareable) /usr/local/bin e /usr/local/sbin (eseguibili locali, separati per evitare sovrascritture in occasione di aggiornamento) 47

48 4.2 Gestione pacchetti software Software da sorgenti non pacchettizzati Gran parte dei programmi sono normalmente disponibili in formato sorgente (in file tgz) e si possono recuperare via http o con programmi clienti di sistemi di controllo versione. Per i programmi in formato sorgente, si procede spesso così: tar xvzf nomepacchetto.tgz cd nomepacchetto./configure # crea il Makefile make # compila i sorgenti sudo make install # installa il software make clean # rimuove i file temporanei Checkinstall Se il programma usa gli strumenti autoconf e automake, è possibile creare velocemente un pacchetto a partire dai sorgenti con checkinstall. tar xvzf nomepacchetto.tgz cd nomepacchetto./configure # crea il Makefile make # compila i sorgenti sudo checkinstall # crea il pacchetto deb e lo installa make clean # rimuove i file temporanei Il Makefile Il Makefile di un programma serve a indicare cosa deve essere fatto per compilare ed installare un programma partendo dai sorgenti. Normalmente viene creato da uno script, chiamato configure, in base all hardware presente e alle opzioni passate da riga di comando. Il primo argomento del comando make specifica cosa deve essere fatto esattamente. In caso di problemi, cercare in rete (es. pagine del wiki di Ubuntu 24 ) Librerie Le funzionalità più comuni e generiche dei programmi vengono spesso compilate in librerie dinamiche (raccolte di moduli oggetto), dette shareable objects. I programmi che sono compilati con l uso di librerie dinamiche non possono essere eseguiti senza che la libreria sia presente. Il programma ldd permette di vedere da quali librerie dipende un programma e se esse vengono trovate. $ ldd evolutolib_d libloris.so => not found libc.so.6 => /lib/tls/libc.so.6 (0x00cd8000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00a57000) /etc/ld.so.conf Il file /etc/ld.so.conf indica i percorsi dove vengono cercate le librerie al caricamento di un programma. Si tratta di un file di testo da cui viene ricavato il file binario /etc/ld.so.cache (tramite il comando sudo ldconfig). È anche possibile specificare dove cercare le librerie indicando il loro percorso nella variabile d ambiente LD LIBRARYPATH. $ export LD_LIBRARY_PATH=. $ ldd evolutolib_d libloris.so =>./libloris.so (0x005ed000) libc.so.6 => /lib/tls/libc.so.6 (0x0017b000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00b31000) $./evolutolib_d Hello, world! 24 https://help.ubuntu.com/community/compilingsoftware 48

49 4.2.6 Ltrace e Strace A fini di debug, o per conoscere meglio il funzionamento di un programma, può essere utile ricorrere a due programmi che tracciano in un file di testo tutte le chiamate a funzioni di libreria (ltrace) e di sistema (strace). $ ltrace -o chiamatelibreria cal > /dev/null $ strace -o chiamatesistema cal > /dev/null $ head -3 chiamate* ==> chiamatelibreria <== libc_start_main(0x402960, 1, 0x7fff0c423bd8, 0x403640, 0x <unfinished...> setlocale(6, "") = "it_it.utf-8" setlocale(2, NULL) = "it_it.utf-8" ==> chiamatesistema <== execve("/usr/bin/cal", ["cal"], [/* 31 vars */]) = 0 brk(0) = 0x mmap(null, 4096, PROT_READ PROT_WRITE, MAP_PRIVATE MAP_ANONYMOUS, -1, 0) = 0x2b4dd I pacchetti Le distribuzioni Linux mettono a disposizione (spesso, non sempre) sistemi di pacchettizzazione del software che permettono una più agevole amministrazione. La pacchettizzazione infatti prevede: un database dei programmi installati la gestione delle dipendenze tra pacchetti un sistema coerente di gestione delle alternative il controllo delle versioni il raggruppamento in categorie Cosa c è in un pacchetto In un pacchetto sono presenti, solitamente, file che devono essere posti in diverse directory. Ad esempio: programmi eseguibili (-> /usr/bin/... ) librerie (-> /usr/lib/... ) file di configurazione (-> /etc/... ) documentazione (-> /usr/share/doc/... ) pagine di manuale (-> /usr/share/man/... ) script di installazione e configurazione Sistemi di gestione dei pacchetti Esistono due livelli di gestione dei pacchetti: installazione / rimozione (es. dpkg per Debian/Ubuntu e rpm per RedHat/Fedora) recupero da deposito noto, gestione dipendenze, installazione (es. apt-get per Debian/Ubuntu e yum per Fedora) Inoltre, vi è la possibilità di recuperare i file sorgente e di compilarli, in modo da ottimizzarne o personalizzarne le prestazioni (cosa che si può fare con i pacchetti sorgente rpm e deb, ma è la norma con il sistema Portage della distribuzione Gentoo). 49

50 Installazione di un nuovo pacchetto Fedora/RedHat: rpm -i nomepacchetto rpm Debian/Ubuntu: dpkg --install nomepacchetto deb Eventuali problemi di dipendenza verranno segnalati. Per le dipendenze incrociate (A dipende da B, B dipende da A), normalmente basta indicare sulla riga di comando l insieme dei pacchetti necessari Aggiornamento di un pacchetto Fedora/RedHat: rpm -U nomepacchetto rpm Debian/Ubuntu: dpkg --install -G nomepacchetto deb Installazione di un pacchetto con download da sorgente nota Fedora: yum install nomepacchetto Debian/Ubuntu: apt-get install nomepacchetto Le sorgenti note sono indicate in /etc/yum.conf (Fedora) e in /etc/apt/sources-list (Debian) Da dove viene questo file? Fedora/RedHat: rpm -q -f nomefile Debian/Ubuntu: dpkg -S nomefile Cosa contiene questo pacchetto? Fedora/RedHat: rpm -q --provides -p nomepacchetto rpm Debian: dpkg --contents nomepacchetto deb 50

51 Che pacchetti ho installato? Fedora/RedHat: rpm -q -a Debian: dpkg --list Dove trovare i pacchetti? Fedora/RedHat: Debian: packages.debian.org, Ubuntu: packages.ubuntu.com Il sistema APT Il file /etc/apt/sources.list contiene righe come le seguenti (per Ubuntu): deb jaunty main restricted deb-src jaunty main restricted Queste righe specificano, rispettivamente, dove devono essere prelevati i pacchetti binari e dei sorgenti. In particolare, sono indicati l URL di riferimento, il nome della distribuzione e le sezioni per cui quella riga va considerata Archivi APT Gli archivi (ad esempio, sono organizzati in directory: dists (informazioni sulle distribuzioni) indices pool (file dei pacchetti) project La directory pool è suddivisa in directory corrispondenti alle sezioni: main (software open source supportato da Canonical) universe (software open source mantenuto dalla comunità) multiverse (software con restrizione per copyright o motivi legali) restricted (driver proprietari per i dispositivi) Per Debian, le sezioni sono invece main, contrib e non-free. 51

52 Elenco dei pacchetti L elenco dei pacchetti, con le relative descrizioni, è posto in file compressi (Packages.gz oppure Packages.bz2 ) posti dentro dists. Ad esempio, Le traduzioni nelle diverse lingue delle descrizioni sono presenti in file Translation-it.gz, Translation-fr.gz, ecc., presenti nella directory i18n Firme dei pacchetti APT dispone di un meccanismo per la gestione delle firme relative ai pacchetti e delle relative fonti, basato su GPG. Un elenco delle chiavi correntemente ritenute fidate si può ottenere con apt-key list Per importare una chiave dal keyserver di Ubuntu si può dare il comando sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key [keyid] Altre cose utili Con Debian/Ubuntu, si può: simulare l aggiornamento con l opzione apt-get upgrade --dry-run ottenere un elenco dei pacchetti da recuperare con apt-get upgrade --print-uris fare ricerche sui metadati dei pacchetti con apt-cache convertire pacchetti RPM in formato deb con alien scaricare i pacchetti in formato sorgente con apt-get source Creazione e gestione di un mirror APT Può essere utile gestire una copia dei pacchetti per la propria distribuzione, ad esempio per poterla sfruttare all interno di una rete locale. A tale scopo si può usare il programma apt-mirror. I passi da compiere sono i seguenti: 1. installare apt-mirror (sudo apt-get install apt-mirror) 2. modificare, se necessario, il file di configurazione /etc/apt/mirror.list 3. verificare che l utente apt-mirror sia il proprietario e abbia il permesso di scrittura nella directory indicata nel file di configurazione (di default /var/spool/apt-mirror) 4. avviare il programma per il recupero dei pacchetti (sudo -u apt-mirror apt-mirror) per Ubuntu Jaunty vengono scaricati 25 GiB di dati 5. creare in /var/www i link simbolici necessari per rendere disponibili via HTTP i file (ad esempio, /var/- www/ubuntu deve essere un link a /var/spool/apt-mirror/mirror/archive.ubuntu.com/ubuntu) Sulle altre macchine della rete bisognerà poi avere righe come la seguente (ovviamente l indirizzo IP sarà diverso): deb jaunty main restricted universe multiverse 52

53 5 Amministrazione 5.1 Gestione dei processi Gestione dei processi definizione di processo gerarchia dei processi e forking la directory /proc lista dei processi attivi esecuzione in background e in foreground stati di un processo (running, sleeping, stopped, zombie) invio di segnali modifica delle priorità gestione interattiva dei processi programmi utili Definizione di processo Un processo è, essenzialmente, un programma in esecuzione. Ad ogni processo vengono associati: uno spazio di indirizzamento (programma eseguibile, dati, stack) un insieme di registri (stack pointer, program counter, ecc.) PID (Process Identifier) Ad ogni processo è associato un identificativo numerico, chiamato PID. Per visualizzare il PID della propria shell Bash, si può impartire il comando ps: $ ps PID TTY TIME CMD pts/3 00:00:00 bash pts/3 00:00:00 ps... oppure sfruttare la variabile $$: $ echo $$ PPID Nei sistemi Un*x, quando un processo ne crea un altro, padre e figlio rimangono in qualche modo associati. Per ogni processo, infatti, è noto qual è il processo padre (detto PPID, Parent PID). Il rapporto gerarchico può essere osservato lanciando una nuova shell dalla shell corrente: $ bash $ ps PID TTY TIME CMD pts/3 00:00:00 bash pts/3 00:00:00 bash pts/3 00:00:00 ps $ ps --ppid # elenca i processi che hanno come padre il processo PID TTY TIME CMD pts/3 00:00:00 bash 53

54 5.1.5 Fork La creazione di un nuovo processo da parte del processo padre viene effettuata con la chiamata di sistema fork. Vediamo un semplice esempio in C. #include <stdio.h> int main(int argc, char **argv) int child_pid = fork(); if (child_pid == -1) { printf("fork() fallita\n"); return 1; } else if (child_pid) { printf("sono il padre, il PID di mio figlio è %d.\n", child_pid); } else { printf("sono il figlio.\n"); } Le chiamate della famiglia exec Spesso il processo figlio ha bisogno di un codice eseguibile diverso da quello del processo padre. Eseguirà allora una chiamata di sistema dela famiglia exec, con la quale il sistema sostituirà l intera immagine di memoria con il file nominato nel suo primo parametro. Un semplice esempio: #include <stdio.h> int main(int argc, char **argv, char **envp) int child_pid = fork(); if (child_pid) { printf("sono il padre, il PID di mio figlio è %d.\n", child_pid); } else { printf("dovrei eseguire cal\n"); static char *arguments[]={"cal"}; execve("/usr/bin/cal", arguments, envp); printf("questa istruzione non verrà eseguita\n"); } } I processi adottati da Init Se un processo fa un fork e termina prima del processo figlio generato, il processo figlio viene adottato dal processo init (l antenato comune di tutti i processi, che ha PID 1). Lo schema è il seguente. PPPPPPPPPPPPP FFFFAAAAAAAAAAAAAAAAA P = processo padre F = processo figlio A = processo figlio adottato da init quando il padre termina I processi zombie Se un figlio termina il lavoro prima del processo padre, rimane nello stato c.d. zombie fino al termine di quest ultimo. Lo schema è il seguente. PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP FFFFFFFFZZZZZZZZZZZZZZZZZZZZZZZZZ P = processo padre F = processo figlio Z = processo figlio che diventa zombie al suo termine 54

55 5.1.9 L attesa da parte del processo padre Più correttamente, il processo padre dovrebbe porsi in attesa del processo figlio, con una chiamata di sistema waitpid. Il caso, a seconda di chi tra padre e figlio finisce prima il proprio lavoro, potrebbe essere uno dei seguenti: a) PPPPPPPPPPPPPPPPWWWWWWWWWWWWWWWWWWWWWWWWWP FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF b) PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPWPPPPPPPPPPP FFFFFFFZZZZZZZZZZZZZZZZZZZZZZZ P = processo padre F = processo figlio W = processo padre in attesa Pstree La gerarchia dei processi può essere visualizzata con il comando pstree. $ pstree init---networkmanager---{networkmanager} +-firefox---run-mozilla.sh---firefox-bin---10*[{firefox-bin}] +-gdm---gdm-+-xorg---xorg +-5*[getty] +-gnome-terminal-+-bash---ssh +-bash +-bash---cat +-bash---pstree +-{gnome-terminal} +-quanta +-wpa_supplicant (output ridotto) Con il comando pstree -p si può visualizzare il PID di ogni processo La directory speciale /proc I sistemi Linux mettono a disposizione una speciale directory, denominata /proc, contenente informazioni, in forma di file, sui processi. Per ogni processo, nella directory /proc/pid, si hanno ad esempio: lo pseudofile cmdline, con la riga di comando completa lo pseudofile environ, con le variabili d ambiente cwd, un link simbolico alla directory di lavoro corrente exe, un link simbolico al programma in esecuzione Si veda proc(5) per ulteriori informazioni Informazioni sui processi: ps Il programma ps è lo strumento principale di visualizzazione delle informazioni relative ai processi. Il comando ps funziona con opzioni espresse in tre forme diverse: opzioni Unix98 (precedute da trattino) opzioni BSD (senza trattino) opzioni in formato lungo GNU (con due trattini) Le opzioni hanno significati diversi in Unix98 e BSD. Ad esempio: 55

56 $ ps a PID TTY STAT TIME COMMAND 4449 tty4 Ss+ 0:00 /sbin/getty tty tty7 SL+ 0:00 /usr/bin/x :0 -br -audit 0 -auth /var/lib/gdm/:0.xaut 5825 pts/0 Ss+ 0:00 bash 6611 pts/1 Ss 0:00 bash 7328 pts/1 R+ 0:00 ps a $ ps -a PID TTY TIME CMD 5570 tty7 00:00:00 Xorg 7329 pts/1 00:00:00 ps Ps: opzioni utili Alcune opzioni frequentemente utilizzate sono: a: mostra tutti i processi di tutti gli utenti u: usa un formato di visualizzazione orientato all utente x: mostra anche i processi senza un terminale Notare la quasi completa equivalenza di ps aux e ps -ef Esecuzione in background e foreground Un intera pipeline può essere eseguita in background posponendo un ampersand alla fine del comando. Un lavoro (job) in background può essere riportato in foreground con il comando fg. Il lavoro in foreground può essere sospeso premendo ctrl-z (^Z). $ yes > /dev/null & [1] 7489 $ fg %1 yes > /dev/null (ctrl-z) [1]+ Stopped yes > /dev/null $ bg %1 [1]+ yes > /dev/null & Gli stati di un processo Un processo può trovarsi in uno dei seguenti stati: D R S T W X Z Uninterruptible sleep (usually IO) Running or runnable (on run queue) Interruptible sleep (waiting for an event to complete) Stopped, either by a job control signal or because it is being traced. paging (not valid since the 2.6.xx kernel) dead (should never be seen) Defunct ("zombie") process, terminated but not reaped by its parent. (da ps(1)) Invio di segnali ai processi Un meccanismo fondamentale nella comunicazione tra processi consiste nell invio di segnali. I segnali possono essere inviati: dalla riga di comando, con kill 56

57 da terminale, con la pressione di determinate combinazioni di tasti (vedi stty -a) da programma (con la funzione di libreria kill) Per inviare il segnale SIGHUP al processo 9876 si può digitare: kill -SIGHUP 9876 kill -HUP 9876 kill Segnali comuni L elenco completo dei segnali inviabili può essere visualizzato con il comando kill -l. I segnali più importanti sono: SIGHUP (hangup) - disconnessione (di solito usato per riavviare il processo e/o fargli rileggere il file di configurazione) SIGINT (interrupt) - si desidera l interruzione SIGQUIT (quit) - termine immediato con scrittura di un file core SIGKILL (non-graceful termination) - termine immediato, non gestibile SIGUSR1 (user signal 1) - segnale n. 1 a uso dell utente SIGUSR2 (user signal 2) - segnale n. 2 a uso dell utente SIGSTOP (stop) - sospensione del processo, non gestibile Programmi utili per la gestione dei processi Alcuni programmi che possono essere utili: pgrep, per trovare un processo in base a determinati criteri pkill, per inviare un segnale ai processi individuati in base a determinati criteri killall, per inviare un segnale a tutti i processi di un determinato programma nohup, per avviare un programma in modo che non termini quando viene chiuso il terminale da cui è stato lanciato lsof -p, per avere un elenco dei file utilizzati da un determinato processo Gestione delle priorità Ad ogni processo è associato un livello di priorità. -20 (alta) 0 (normale) 19 (bassa) I programmi possono essere avviati con bassa priorità (da tutti) o con alta priorità (da root) tramite il comando nice Ai processi può essere cambiata la priorità con il comando renice Gestione interattiva dei processi Per una gestione interattiva dei processi, può essere utile il programma top. Alcune opzioni interessanti possono essere attivate con la pressione di: [spazio], per aggiornare il display h, per ottenere aiuto k, per inviare un segnale ad un processo i, per mostrare/nascondere i processi in stato Sleep/Zombie n, per indicare quanti processi mostrare r, per cambiare la priorità di un processo 57

58 Esercizi Provare diverse opzioni del comando ps, aiutandosi con la guida in linea. Attivare un processo in background, portarlo in foreground, sospenderlo, riattivarlo in background e/o in foreground. Usare il comando jobs per visualizzare l elenco dei lavori in esecuzione in background. Inviare segnali di tipo SIGSTOP, SIGINT, SIGKILL ad un processo. Verificare con ps gli stati Running, Interruptible sleep, Stopped, Defunct (zombie) di processi appositamente creati. Verificare come i segnali possono essere gestiti da un programma Inviare un segnale di tipo SIGUSR1 ad un processo di dd Usare il programma bc per calcolare le prime 2000 cifre di Pi Greco, misurando il tempo impiegato con time, prima in maniera normale e poi con bassa priorità 5.2 Backup e compressione dati Tipi di backup Le strategie di backup possono essere diverse a seconda delle necessità e delle quantità di dati da gestire. Si suole distinguere tra le seguenti modalità: backup completo (d1, d2, d3, d4, d5...) backup incrementale (d1, d2-d1, d3-d2, d4-d3, d5-d4...) backup differenziale (d1, d2-d1, d3-d1, d4-d1, d5-d1...) Tar Il comando tar serve a riunire in un unico file il contenuto di una o più directory. $ tar -cvf archivio.tar documenti/ documenti/ documenti/elencoutenti.txt documenti/elencoservizi.txt documenti/protocolli.txt Di default tar non si occupa della compressione e non dereferenzia i link simbolici Tar (lista ed estrazione) Per vedere i contenuti di un file tar si usa il comando tar -t, per estrarli il comando tar -x. $ tar -tvf archivio.tar drwxr-xr-x loris/jasiu -rw-r--r-- loris/jasiu -rw-r--r-- julie/jasiu lrwxrwxrwx loris/jasiu :52 documenti/ :27 documenti/elencoutenti.txt :27 documenti/elencoservizi.txt :52 documenti/protocolli.txt ->../../fuoristruttura/protocolli.txt $ tar -xvf archivio.tar documenti/ documenti/elencoutenti.txt documenti/elencoservizi.txt documenti/protocolli.txt 58

59 5.2.4 Tar (estrazione singoli file) I singoli file o le singole directory possono essere estratte usando la modalità interattiva (tar -xw) oppure specificandone il nome. $ tar -xvwf archivio.tar extract documenti?y documenti/ extract documenti/elencoutenti.txt?y documenti/elencoutenti.txt extract documenti/elencoservizi.txt?n extract documenti/protocolli.txt?n $ tar -xvf archivio.tar documenti/elencoutenti.txt documenti/elencoutenti.txt Tar e la compressione I file tar spesso vengono compressi. Normalmente si usa compress, gzip o bzip2. Il comando tar può essere usato direttamente con i rispettivi filtri: $ tar -cvzf archivio.tar.gz documenti # gzip $ tar -cvjf archivio.tar.bz2 documenti # bzip2 $ tar -cvzf archivio.tar.z documenti # compress $ file archivio* archivio.tar: POSIX tar archive archivio.tar.bz2: bzip2 compressed data, block size = 900k archivio.tar.gz: gzip compressed data, from Unix, last modified: Thu Mar 22 18:24: archivio.tar.z: compress d data 16 bits È buona prassi comprimere una tutti i file di una directory dall esterno (includendo quindi anche la directory stessa) Tar: riepilogo azioni Il comando tar va sempre usato con una delle seguenti azioni da specificare come prima opzione: A (--concatenate): aggiunge un archivio tar ad un altro c (--create): crea un file tar d (--diff): mostra le differenze tra un archivio e un file system, riportando le differenze r (--append): aggiunge dei file ad un archivio t (--list): elenca i contenuti di un archivio u (--update): aggiorna un archivio con file nuovi o modificati x (--extract): estrae i contenuti di un archivio Compressione dei singoli file Anche i singoli file possono essere compressi, direttamente con i programmi gzip, bzip2 e compress. Di default, i file originali vengono sostituiti con le copie compresse, ma è possibile fare altrimenti con l opzione -c (--stdout): $ ls elencoservizi.txt elencoutenti.txt $ gzip elencoservizi.txt $ ls elencoservizi.txt.gz elencoutenti.txt $ gzip -c elencoutenti.txt > elencoutenti.gz $ ls elencoservizi.txt.gz elencoutenti.gz elencoutenti.txt 59

60 5.2.8 Decompressione dei singoli file I file compressi possono essere estratti con i comandi gunzip, bunzip2, uncompress. I file compressi con gzip e compress possono essere visualizzati al volo con zcat e zless Zip e Unzip Il popolare formato zip è utilizzabile con Linux attraverso i programmi zip e unzip, che permettono di avere una certa compatibilità con il mondo windoze. Da tenere presenti alcune differenze fondamentali nelle modalità predefinite: zip dereferenzia i link simbolici zip non opera ricorsivamente È possibile però ovviare con le opportune opzioni: $ zip documenti.zip documenti # senza ricorsione adding: documenti/ (stored 0%) $ zip -r documenti.zip documenti # i link simbolici vengono dereferenziati updating: documenti/ (stored 0%) adding: documenti/elencoutenti.txt (deflated 61%) adding: documenti/elencoservizi.txt (deflated 77%) adding: documenti/protocolli.txt (deflated 66%) $ zip -ry documenti.zip documenti # i link simbolici non vengono dereferenziati updating: documenti/ (stored 0%) updating: documenti/elencoutenti.txt (deflated 61%) updating: documenti/elencoservizi.txt (deflated 77%) updating: documenti/protocolli.txt (stored 0%) Cpio Il programma cpio è a volte usato per la sua caratteristica di ottenere i file da archiviare dallo standard input (per questo lo si usa spesso con find). Ha tre modalità di lavoro: cpio -o serve ad archiviare cpio -i serve ad estrarre cpio -p serve a trasferire Un esempio d uso: $ find struttura cpio -o gzip > struttura.cpio.gz # archiviazione 71 blocks $ zcat struttura.cpio.gz cpio -i # estrazione 71 blocks Cpio (modalità copy-pass) La modalità copy-pass effettua un archiviazione in una directory diversa. $ find documenti -name *txt cpio -pd destinazione/ 36 blocks L opzione -d serve a creare le eventuali directory intermedie necessarie. 60

61 Md5sum Il controllo dell integrità di un file, soprattutto dopo che esso è stato trasferito via rete o su un supporto rimovibile, può essere importante. Per esso è conveniente l uso del programma md5sum, che calcola un checksum a 128 bit di un file o del proprio standard input, secondo quanto previsto dall RFC $ md5sum mybackup.tgz 09b8cab ff054957bc5 mybackup.tgz Spesso l output viene reindirizzato su un file chiamata MD5SUMS, usato poi per il controllo: $ md5sum mybackup.tgz > MD5SUMS $ md5sum -c MD5SUMS mybackup.tgz: OK Rsync Il programma rsync può essere utilizzato per diversi scopi. È utilissimo per mantenere sincronizzati due filesystem (o due alberi di directory), copiando solo i file modificati dopo l ultima operazione di backup. $ rsync -avz documenti documenti_copia # copia la directory documenti building file list... done sent 220 bytes received 20 bytes bytes/sec total size is speedup is $ rsync -avz documenti/ documenti_copia # copia i contenuti della direcory documenti building file list... done sent 209 bytes received 20 bytes bytes/sec total size is speedup is Rsync da/verso altro host La sincronizzazione può essere fatta anche da o verso un altro host raggiungibile via ssh. $ rsync -avz documenti # copia la directory documenti # sull host mercurio Per operazioni di sincronizzazione periodiche conviene usare meccanismi di login senza invio di password (vedi ssh-keygen) Dump e Restore Il backup di dati da partizioni ext2 ed ext3 può essere fatto con il programma dump, che permette backup interi e incrementali. dump -0uf boot.dump /boot DUMP: Date of this level 0 dump: Thu Mar 22 21:51: DUMP: Date of this level 0 dump: Thu Mar 22 21:51: DUMP: Date this dump completed: Thu Mar 22 21:51: DUMP: Average transfer rate: 4302 kb/s DUMP: DUMP IS DONE Il ripristino va fatto con il comando restore Partimage Partimage è un programma interattivo che può fare un backup completo (ed il successivo ripristino) dei blocchi utilizzati di una partizione. Il backup e il ripristino possono essere fatti su/da un altro host, tramite rete

62 Backup su CD/DVD A volte può essere comodo fare il backup dei dati su CD-ROM o DVD-ROM. Esistono a tale scopo le utility mkisofs e cdrecord per, rispettivamente, creare le immagini ISO dei dischi da produrre e successivamente masterizzarli. $ mkisofs -o backup.iso -JRAVv dir1 # crea l immagine ISO di un cd-rom $ cdrecord -v -eject speed=4 dev=0,3,0 backup.iso # masterizza il cd DVDisaster Il programma dvdisaster 26 consente di inserire nell immagine ISO di un DVD dei dati di controllo che permettono il ripristino completo dei dati principali nel malaugurato casa di corruzione (es. superficie graffiata) Sistemi avanzati per il backup Per esigenze di più alto livello, si può pensare di utilizzare software specifici, come ad esempio: Bacula 27 Amanda Attenzione a... Nel definire le procedure di backup e ripristino bisogna ricordarsi di conrollare che vengano preservati: proprietari dei file permessi e ACL timestamp link simbolici percorsi dei file (assoluti o relativi) Esercizi 1. comprimere un file di testo con zip, gzip, compress e bzip2, provando le diverse opzioni per la compressione; verificare i risultati ottenuti 2. creare un archivio tar non compresso a partire da una directory 3. elencare i file appartenenti ad un archivio tar 4. estrarre i file appartenenti ad un archivio tar 5. scaricare il file all url [[TODO]], determinare con file di che tipo è il suo contenuto e procedere in una sorta di caccia al tesoro 5.3 Gestione degli utenti e dei gruppi Utenti e gruppi Utenti e gruppi sono normalmente memorizzati nei file /etc/passwd e /etc/group. I numeri identificativi dell utente (User Id, o UID) e del gruppo (Group Id, o GID) possono andare da 0 a (nei sistemi tradizionali). L utente root ha UID 0. Tra gli altri utenti tipicamente presenti vi sono:

63 utenti di sistema (di solito con UID inferiori a 100); utenti umani (di solito con UID superiori a 500, a 1000, a 10000, a seconda delle configurazioni); un utente nobody, per la gestione di attività che si vogliono mantenere anonime (es. anonymous ftp) Il file /etc/passwd Il file /etc/passwd contiene le informazioni sugli utenti del sistema. Ogni riga contiene le informazioni su un utente. Ad esempio: alice:x:1011:10006:alice Alessandrini:/home/alice:/bin/bash La riga contiene i seguenti campi (delimitati da :) username (alice); segnaposto per la password (x) - sempre più frequentemente le password (cifrate) vengono memorizzate nel file /etc/shadow; UID (1011) GID (10006) - gruppo primario campo commento / nome completo (Alice Alessandrini) - anche detto gecos per motivi storici (da General Electrics Comprehensive Operating System) home directory (/home/alice) shell predefinita (/bin/bash) Il campo gecos a volte viene suddiviso in sottocampi separati da virgole (vedi chfn(1) o finger(1)) Il file /etc/group Il file /etc/group contiene le informazioni sui gruppi. Ogni riga contiene le informazioni su un utente. Ad esempio: contab:x:10007:alice,carlo produz:x:10008:berto La riga contiene i seguenti campi (delimitati da :) groupname (contab); segnaposto per la password (x) - sempre più frequentemente le password, se utilizzate, vengono memorizzate nel file /etc/gshadow; username delle persone che appartengono al gruppo come gruppo secondario. I gruppi possono contenere solo utenti, non altri gruppi Leggere i dati dei database di sistema I database di sistema, come /etc/passwd, /etc/group, /etc/services, /etc/protocols, /etc/hosts, possono essere letti direttamente oppure con il programma getent. getent presenta i dati del database di sistema corrente nella forma tradizionalmente impiegata nei file di testo, eliminando eventuali righe di commento presenti. È particolarmente utile quando il sistema usa altre forme di autenticazione (es. un server LDAP). $ getent passwd [...] alice:x:1035:1005:alice,,,:/home/alice:/bin/bash bob:x:1036:1013:bob,,,:/home/bob:/bin/bash [...] 63

64 5.3.5 Modificare i dati degli utenti e dei gruppi È in genere poco raccomandabile modificare manualmente i file contenenti i dati relativi agli utenti e ai gruppi. In genere è preferibile: usare gli appositi comandi (es. useradd, usermod, ecc.) per agire sulle righe dei singoli utenti; usare i programmi dedicati per agire su tutto il file (es. vipw, vigr) Aggiungere utenti Gli utenti possono essere aggiunti con uno dei seguenti comandi: useradd (comando di basso livello) adduser (comando di alto livello) Ad esempio: $ sudo useradd james $ sudo adduser jenny Adding user jenny... Adding new group jenny (1002)... Adding new user jenny (1001) with group jenny... Creating home directory /home/jenny... Copying files from /etc/skel... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for jenny Enter the new value, or press ENTER for the default Full Name []: Jenny Smith Room Number []: 12 Work Phone []: Home Phone []: Other []: Is the information correct? [y/n] y Aggiungere utenti - pattern per gli username Evitate di creare utenti il cui username è basato sul pattern cognome-nome. Se un utente si chiama Aldo Bianchi andranno evitati bianchia, bianchi.a, bianchialdo, bianchi.aldo, bianchi aldo, ecc. Andrà invece adottato uno username come aldo, abianchi, a.bianchi, aldobianchi, aldo.bianchi, aldo bianchi, ecc. (a meno che esso non debba essere completamente scollegato dal nome reale, come succede spesso con i nickname). Ulteriori informazioni al riguardo di questo argomento, anche di tipo informatico, si trovano nel blog nome-ecognome Aggiungere utenti - valori di default Per useradd i valori di default sono definibili con l opzione -D (vengono inseriti nel file /etc/default/useradd). I valori di default per adduser sono invece nel file /etc/adduser.conf

65 5.3.9 Aggiungere utenti - operazioni batch Quando si devono inserire molti utenti, ad esempio leggendo le informazioni su di loro da altre fonti, si possono usare comandi per operazioni batch. In particolare, possono essere utili chpasswd e newusers. $ cat nuoviutenti jackie:segreto:2000::jackie White:/home/jackie:/bin/bash freddie:segretissimo:2001::freddie Bloom:/home/freddie:/bin/bash $ sudo newusers nuoviutenti $ getent passwd tail -2 jackie:x:2000:65538:jackie White:/home/jackie:/bin/bash freddie:x:2001:65535:freddie Bloom:/home/freddie:/bin/bash $ echo julie:pulcinella sudo chpasswd Aggiungere gruppi I gruppi possono essere aggiunti con uno dei seguenti comandi: groupadd (comando di basso livello) addgroup (comando di alto livello) Ad esempio: $ sudo groupadd bureau $ sudo addgroup office Adding group office (GID 1004)... Done Modificare le informazioni sugli utenti Le informazioni sugli utenti possono essere modificate con il programma usermod. $ getent group grep office office:x:1004:jenny $ sudo usermod -l jay jenny $ getent group grep office office:x:1004:jay $ getent passwd jay jay:x:1001:1002:jenny Smith,12, , :/home/jenny:/bin/bash Eliminare utenti e gruppi Poco sorprendentemente, gli utenti e i gruppi possono essere eliminati con i programmi userdel e groupdel (basso livello), deluser e groupdel (alto livello). Quando gli utenti vengono rimossi, bisogna decidere cosa fare delle loro cose (es. la home directory). N.B. Se si vuole disattivare un account temporaneamente, è sufficiente effettuare il lock della password (usermod -L <username l unlock viene effettuato con usermod -U <username>. 5.4 Gestione delle quote disco Impostare e gestire le quote disco Spesso capita, in un sistema multiutente, di dover limitare lo spazio su disco disponibile per ogni singolo utente o gruppo. Le quote disco (per utente e/o per gruppo) possono essere abilitate sui singoli filesystem innestati (non sulle directory). 65

66 Per attivare in maniera permanente le quote disco è necessario agire sul file /etc/fstab. Ad esempio, potrebbe essere presente una voce come /dev/hdc0 /home/users ext3 defaults,usrquota,grpquota 0 0 Più avanti vedremo un esempio su un disco fittizio che possiamo usare per delle prove Concetti importanti relativi alle quote disco È bene distinguere: per-user hard limit (non superabile) per-user soft limit (superabile per un certo periodo) per-group hard limit per-group soft limit grace period (il periodo di cui sopra) Il comando Quota Con il comando quota si può verificare qual è la situazione del singolo utente o gruppo. $ quota Disk quotas for user loris (uid 1000): Filesystem blocks quota limit grace files quota limit grace /dev/loop1 3516* days $ sudo quota -u jackie Disk quotas for user jackie (uid 2000): Filesystem blocks quota limit grace files quota limit grace /dev/loop1 1005* days (N.B.) Il comando indicato, così come quelli presentati successivamente, funziona a patto di avere una partizione o un disco innestato (mounted) con le quote attivate e definite. Nell esercitazione che segue vengono date indicazioni in merito I comandi Quotaon e Quotaoff Con i comandi quotaon e quotaoff si può abilitare e disabilitare, rispettivamente, la gestione delle quote sui filesystem precedentemente configurati. $ sudo quotaon -v --all /dev/loop1 [/home/discoq]: group quotas turned on /dev/loop1 [/home/discoq]: user quotas turned on $ sudo quotaoff -v --all /dev/loop1 [/home/discoq]: group quotas turned off /dev/loop1 [/home/discoq]: user quotas turned off quotaon di solito è attivato automaticamente al boot grazie alla configurazione degli script di avvio in /etc/init.d, che si possono anche chiamare direttamente: $ sudo /etc/init.d/quota start * Checking quotas... [ OK ] * Turning on quotas... [ OK ] $ sudo /etc/init.d/quota stop * Turning off quotas... [ OK ] 66

67 5.4.5 Il comando Quotacheck Con il comando quotacheck si controlla la coerenza del database delle quote: eventuali problemi vengono segnalati e, se possibile, risolti. È raccomandabile eseguire quotacheck con le quote disattivate: $ sudo quotaoff -av /dev/loop1 [/home/discoq]: group quotas turned off /dev/loop1 [/home/discoq]: user quotas turned off $ sudo quotacheck -aguv quotacheck: Scanning /dev/loop1 [/home/discoq] done quotacheck: Checked 3 directories and 4 files $ sudo quotaon -av /dev/loop1 [/home/discoq]: group quotas turned on /dev/loop1 [/home/discoq]: user quotas turned on Il comando Edquota Con il comando edquota si impostano le quote degli utenti e dei gruppi. Si tratta di un comando interattivo, che avvia l editor di riferimento: Disk quotas for user loris (uid 1000): Filesystem blocks soft hard inodes soft hard /dev/loop ~ "/tmp//edp.acpxrao" 3L, 217C Per ogni utente/filesystem, si possono impostare i limiti soft e hard (sia per i blocchi, sia per gli inode), avendo come riferimento le quantità attualmente impegnate Il comando Setquota Il comando setquota permette di impostare gli stessi limiti di edquota, ma senza interattività: $ sudo setquota -u loris /home/discoq Sforamento quota Se si eccede il proprio limite, le operazioni di scrittura vengono bloccate: $ dd if=/dev/zero of=grandefile count=5000 loop1: write failed, user block limit reached. dd: writing to grandefile : Disk quota exceeded records in records out bytes (493 kb) copied, seconds, 8.3 MB/s Se non si supera la quota disponibile di inode, si possono ancora creare file (vuoti). Attenzione: non sempre il fallimento della scrittura che fallisce per motivi di quota superata viene chiaramente indicato Impostazione del Grace period La durata del Grace period può essere impostata interattivamente con edquota -t o da riga di comando con setquota -t. 67

68 Rapporto con Repquota Con il comando repquota si può avere un rapporto sullo stato di uso del disco: $ sudo repquota -a *** Report for user quotas on device /dev/loop1 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace root loris days jackie days Quote disco - esercitazione (1) Per potersi esercitare senza creare appositamente una partizione vera, è possibile creare un file su disco che verrà considerato a tutti gli effetti come una partizione: $ sudo dd count=20000 if=/dev/zero of=/home/discovirtuale records in records out bytes (10 MB) copied, seconds, 11.9 MB/s $ sudo mkfs.ext3 -F /home/discovirtuale mke2fs 1.40-WIP (14-Nov-2006) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 2512 inodes, blocks... This filesystem will be automatically checked every 25 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override Quote disco - esercitazione (2) Per abilitare la gestione delle quote disco, il file /etc/fstab deve contenere una riga dove questo supporto è dichiarato. Ad esempio, si potrebbe aggiungere una riga come la seguente: /home/discovirtuale /home/discoq ext3 defaults,usrquota,grpquota 0 0 Il disco creato e formattato può essere innestato in una directory vuota con il comando mount. $ sudo mount -o loop /home/discoq # l opzione -o loop è necessaria perché in questo caso si tratta di un file Se per il file system è abilitato il journaling, si possono usare le opzioni usrjquota e grpjquota:... defaults,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 La voce jqfmt serve a specificare il formato per il file delle quote, da usare al posto di quello di default Quote disco - esercitazione (3) La radice del file system innestato, su cui opera la gestione delle quote, deve contenere i due file (o uno solo, dipende dalle esigenze) aquota.user e aquota.group, leggibili solo da root. $ sudo touch /home/discoq/aquota.user $ sudo touch /home/discoq/aquota.group $ sudo chmod 600 /home/discoq/aquota.* Se si desidera che gli utenti possano verificare la loro situazione autonomamente, i permessi dovranno essere impostati a

69 Quote disco - esercitazione (4) Per inizializzare i due file, si usa il programma quotacheck. $ sudo quotacheck -avug quotacheck: Scanning /dev/loop1 [/home/discoq] done quotacheck: Checked 3 directories and 4 files Nota: alla prima esecuzione, viene emesso un warning, perché i file sono vuoti. Dopo l inizializzazione, non lo sono più: $ ls -l /home/discoq/aquota.* -rw root root :02 /home/discoq/aquota.group -rw root root :02 /home/discoq/aquota.user Quote disco - esercitazione (5) Per attivare il controllo delle quote, si usa quotaon: $ sudo quotaon /home/discoq Si può ottenere un rapporto sullo stato corrente con repquota: $ sudo repquota -v /home/discoq *** Report for user quotas on device /dev/loop1 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace root Statistics: Total blocks: 6 Data blocks: 1 Entries: 1 Used average: Autorizzazioni e deleghe Permessi sui file Un primo importante livello di autorizzazioni è quello impostato con i permessi sui file e le directory (rwx: read, write, execute), in abbinamento all utente proprietario, al gruppo proprietario, agli altri (ugo: user, group, others). Un secondo livello è impostabile con i bit SUID e SGID, che consentono, come visto, di far eseguire programmi con i permessi del proprietario (o del gruppo proprietario) del file eseguibile Privilegi utente Nei sistemi Debian/Ubuntu è possibile impostare privilegi particolari per gli utenti di un sistema desktop facendo appartenere o meno questi ultimi a determinati gruppi: $ groups alice studenti plugdev lpadmin Corrispondenza tra privilegi e gruppi Nei sistemi Debian/Ubuntu i privilegi corrispondono all appartenenza ai gruppi indicati qui di seguito. plugdev: Accedere automaticamente a dispositivi di memoria esterni video: Acquisire video da TV o Webcam e usare l accelerazione 3d 69

70 Figura 3: Proprietà dell account admin: Amministrare il sistema sambashare: Condividere i file con la rete locale lpadmin: Configurare le stampanti dip: Connettere a Internet usando un modem netdev: Connettere a reti wireless ed ethernet fax: Inviare e ricevere fax adm: Monitorare i registri di sistema fuse: Montare i filesystem in userspace scanner: Usare gli scanner audio: Usare i dispositivi audio dialout: Usare i modem tape: Usare le unità a nastro cdrom: Usare le unità CD-ROM Su Il programma su (switch user) consente di impersonare un altro utente, aprendo una shell o eseguendo un determinato comando, a patto di conoscerne la password (a meno di non essere root, che può impersonare chiunque anche senza conoscerne la password). In assenza di indicazione, viene impersonato l utente root, per cui erroneamente a volte il nome del programma viene considerato con il significato di super user. Con l opzione -l la shell viene aperta con le impostazioni dell utente impersonato : $ pwd /tmp $ su Password: # pwd /tmp # exit $ su -l Password: # pwd /root 70

71 5.5.5 Su -c Tramite il programma su è possibile eseguire un comando per conto di un altro utente: # whoami root # su -l loris -c whoami loris Sudo Il programma sudo (switch user and do) consente ad un utente di esercitare una delega (cioè di eseguire un programma che non potrebbe altrimenti eseguire) predisposta per lui da root. I vantaggi: è possibile delegare un utente a fare alcune operazioni e non altre non è necessario che la password di root sia nota (e neppure che essa esista) viene tenuta traccia nei file di log delle operazioni svolte Nella configurazione standard, per esercitare una delega l utente deve digitare la propria password (in modo da evitare il problema del terminale lasciato aperto ) Il file /etc/sudoers Il file contenente le deleghe è /etc/sudoers. È consigliabile modificare tale file con il comando visudo (che effettua dei controlli al momento del salvataggio). Un esempio di contenuto potrebbe essere il seguente, con si autorizzano gli utenti del gruppo contab ad eseguire il comando /bin/cat per visualizzare il file /tmp/rootfile.txt. # Host alias specification Host_Alias SCHOOL=biegacz,geeky # User alias specification # Cmnd alias specification Cmnd_Alias TMPVIEW = /bin/cat /tmp/rootfile.txt # User privilege specification root ALL=(ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL %contab SCHOOL=(ALL) TMPVIEW Si veda sudoers(5) per esempi approfonditi Esercizio delle deleghe Un utente può sapere di quali deleghe dispone con il comando sudo -l ed esercitarne una con il comando sudo: $ cat /tmp/rootfile.txt cat: /tmp/rootfile.txt: Permission denied $ sudo cat /tmp/rootfile.txt [sudo] password for john: [...] [Contents of the file...] $ sudo -l User john may run the following commands on this host: (ALL) /bin/cat /tmp/rootfile.txt 71

72 5.5.9 Esecuzione di comandi a nome di altri utenti Può essere comodo (o necessario) eseguire comandi impersonando altri utenti, reali o di sistema. $ sudo -u www-data whoami www-data $ sudo -u alice whoami alice $ sudo -u alice touch /tmp/file_di_alice.txt $ ls -l /tmp/file_di_alice.txt -rw-r--r-- 1 alice studenti :04 file_di_alice.txt Sulla base di questo si possono predisporre degli script che testano i permessi degli utenti: $ sudo -u alice touch /tmp/prova.txt && \ echo alice riesce a scrivere in /tmp \ echo alice non riesce a scrivere in /tmp alice riesce a scrivere in /tmp $ sudo -u alice touch /etc/prova.txt && \ echo alice riesce a scrivere in /etc \ echo alice non riesce a scrivere in /etc touch: cannot touch /etc/prova.txt : Permission denied alice non riesce a scrivere in /etc Registrazione delle operazioni basate su delega Il file /var/log/auth.log contiene informazioni su chi e quando ha esercitato una delega: Jul 8 15:14:30 biegacz sudo: john : TTY=ttyp5 ; PWD=/tmp ; USER=root ; COMMAND=/bin/cat /tmp/rootfile.txt Sudo e ridirezione dell output Se si vuole scrivere in una directory in cui non si hanno permessi di scrittura si può sfruttare sudo, ma non con il classico meccanismo dello standard output. Ad esempio, immaginiamo di dover scrivere un file con data e ora corrente nella directory /root: $ date > /root/operazioni.txt # manca il permesso di scrittura bash: /root/operazioni.txt: Permission denied $ sudo date > /root/operazioni.txt # non va bene... bash: /root/operazioni.txt: Permission denied $ date sudo tee /root/operazioni.txt >/dev/null # bingo! In alternativa, si potrebbe usare dd, con il bonus di poter accodare i dati (modalità append): $ date sudo dd of=/root/operazioni.txt conv=notrunc oflag=append 2>/dev/null Fakeroot Può capitare che alcuni programmi richiedano permessi di root per svolgere alcune operazioni legate alla manipolazione dei file. L esempio tipico è quello di un utente che vuole creare un archivio compresso contenente dei file che devono risultare dell utente root quando (sulla macchina in cui) viene decompresso. La soluzione è di usare il programma fakeroot, che lavora sostituendo provvisoriamente le librerie usate per le funzioni di manipolazione dei file. Naturalmente nessun permesso reale viene acquisito. Si veda come esempio la seguente sessione: charlie$ whoami # verifico di essere l utente charlie charlie charlie$ ls -l bashrc # nella directory corrente ho un file di mia proprietà -rw-r--r-- 1 charlie studenti :22 bashrc charlie$ fakeroot # divento root (ma è una finzione) root# whoami # sembra vero, cambia anche il prompt :-) root root# ls -l bashrc # il file sembra diventato di root 72

73 -rw-r--r-- 1 root root :22 bashrc root# tar czf bashrc.tgz bashrc # creo un archivio con tar root# touch /root/qualcosa # provo a fare qualcos altro come root, ma fallisco touch: cannot touch /root/qualcosa : Permission denied root# exit # termino il lavoro come finto root charlie$ tar tvzf bashrc.tgz # verifico i permessi all interno del file tar -rw-r--r-- root/root :22 bashrc Attributi ext2 I filesystem di tipo ext2 e successivi permettono di imporre attributi speciali ai file mediante il comando chattr. In particolare, possono rivelarsi utili: a: apertura in scrittura solo in modalità append i: il file è immodificabile e non può essere cancellato o rinominato S: ogni modifica al file viene immediatamente scritta su disco Gli attributi possono essere visualizzati con il comando lsattr: $ sudo chattr +i documento $ lsattr documento ----i documento $ mv documento documento2 mv: cannot move documento to documento2 : Operation not permitted Access Control List Se una partizione è innestata (mounted) con l opzione acl, su di essa è possibile operare usando delle access control list per consentire di specificare in maniera più granulare quali utenti (o quali gruppi) possono accedere (in lettura, scrittura e/o esecuzione) su determinati file o directory. Ad esempio, supponiamo che Alice abbia il file documento.txt, al momento leggibile solo da lei: alice$ ls -l documento.txt -rw alice studenti :27 documento.txt alice$ cat documento.txt Questo è un documento di Alice. Ma anche Bob deve poterlo leggere. Alice può aggiungere il permesso di lettura per Bob con il programma setfacl: alice$ setfacl -m user:bob:r documento.txt alice$ ls -l documento.txt -rw-r alice studenti :27 documento.txt Bob potrà quindi leggere il documento: bob$ cat documento.txt Questo è un documento di Alice. Ma anche Bob deve poterlo leggere Visualizzare le ACL Per visualizzare le ACL impostate, si usa il programma getfacl: alice$ getfacl documento.txt # file: documento.txt # owner: alice # group: studenti user::rw- user:bob:r-- group::--- mask::r-- other::--- 73

74 Può essere comoda anche una visione tabulare: alice$ getfacl --tabular documento.txt # file: documento.txt USER alice rwuser bob r-- GROUP studenti r-- mask r-- other r ACL e permessi standard Il programma ls mostra un segno + dopo la lista dei permessi standard per segnalare la presenza di ACL, che avvertono di eventuali problemi: alice$ ls -l documento.txt -rw-r alice studenti :27 documento.txt Da questo output sembrerebbe che un utente del gruppo studenti, come Charlie, possa accedere in lettura al file, ma così non è: charlie$ id uid=1007(charlie) gid=1014(studenti) groups=1014(studenti) charlie$ cat documento.txt cat: documento.txt: Permission denied Perché questo avviene? I bit standard riservati al gruppo vengono usati per indicare i permessi massimi consentiti dalle ACL agli utenti (mask) Ereditarietà delle ACL È possibile specificare, con l opzione -d, un default per una directory, in modo che esso venga applicato a tutti i file in essa creati: alice$ setfacl -d -m user:bob:rx lettere alice$ fortune > lettere/doc1.txt bob$ cat lettere/doc1.txt You display the wonderful traits of charm and courtesy Copia di file con ACL Per copiare file preservando le ACL è necessario usare l opzione -a del programma cp, oppure -A di rsync. Il programma tar supporta le ACL, ma non (ancora) in Ubuntu (8.10). Si può ovviare al problema creando un file di testo contenente le ACL, facendo il backup anche di quello e ripristinando le ACL dopo il ripristino dei file: $ getfacl -R * > ACLs.txt # backup delle ACL (con ricorsione) $ sudo setfacl --restore=acls.txt # ripristino delle ACL PolicyKit (rinvio) Un sistema più granulare di autorizzazioni, soprattutto legate all uso in ambiente desktop, è quello previsto dal progetto PolicyKit

75 5.6 Init e il processo di avvio Il processo di avvio (prima parte) Il processo tradizionale di avvio (boot) prevede i seguenti passi: accensione hardware caricamento BIOS (basic input/output system) caricamento del MBR (master boot record) dai primi 512 byte del primo settore del disco cofingurato come disco di avvio esecuzione del codice del boot loader (es. lilo o grub) esecuzione del kernel compresso inizializzazione dispositivi, caricamento moduli, ricerca e attivazione dell initrd (initial RAM disk), attivazione del file system principale (/ ) attivazione del processo 1 (/sbin/init) Il processo di avvio (seconda parte) Successivamente al caricamento di init vengono compiuti i seguenti passi: init legge il proprio file di configurazione (/etc/inittab) init esegue lo script /etc/init.d/rcs (Debian/Ubuntu) oppure /etc/rc.d/init.d/rc.sysinit (RedHat/Fedora/CentOS) controllo del file system, innesto (mount) dei file system locali, attivazione della rete, innesto file system remoti passaggio al runlevel di default, con esecuzione degli script relativi attivazione dei terminali attivazione (se prevista) di X Window (es. con GDM ) Avvio e distribuzioni GNU/Linux La seconda parte del processo di avvio avviene in maniera diversa a seconda della distribuzione. In particolare: i sistemi basati sul modello Debian hanno gli script relativi ai servizi da avviare in /etc/init.d (con link simbolici in /etc/rc0.d, /etc/rc1.d ecc.), mentre i sistemi basati sul modello RedHat li hanno in /etc/rc.d/init.d (con link simbolici in /etc/rc.d/rc0.d, /etc/rc.d/rc1.d ecc.) la definizione dei runlevel è differente (sotto RedHat è più dettagliata) Ubuntu, a partire dalla versione 7.04 Feisty, ha adottato un modello alternativo, basato su eventi, denominato Upstart, compatibile ma di impostazione diversa I bootloader I due bootloader (caricatori del sistema operativo) più comunemente usati con Linux sono LILO (Linux Loader) e GNU GRUB (GRand Unified Bootloader): il file di configurazione di LILO è /etc/lilo.conf ; perché le modifiche abbiano effetto, bisogna impartire il comando lilo il file di configurazione di GRUB è /boot/grub/menu.lst; le voci di menù possono essere modificate all avvio (ad esempio con l aggiunta di parametri) ed è a disposizione una piccola shell. 75

76 5.6.5 Configurazione di init Il file di configurazione di init è /etc/inittab: esso contiene informazioni sul runlevel di default, sul numero di terminali da attivare, sul trap della combinazione di tasti ctrl-alt-del ecc I runlevel Un runlevel consiste nella definizione dello stato di un sistema mediante l indicazione di quali programmi devono essere eseguiti (eventualmente, in quale ordine) e di quali servizi devono essere attivati. Tradizionalmente, vengono individuati i seguenti runlevel: 0 (system halt) nessun processo in esecuzione, ma calcolatore acceso) 1 (single-user) modalità manutenzione straordinaria 2 (multi-user) default sistemi Debian 3 (text-mode multi-user) su sistemi RedHat 4 non usato 5 (graphic-mode multi-user) su sistemi RedHat 6 (reboot) su sistemi RedHat Per sapere qual è il runlevel corrente si può impartire il comando runlevel (che mostra anche il runlevel precedente, oppure N se questo è assente). $ runlevel N 2 Per passare da un runlevel ad un altro si può usare il comando telinit Gli script di avvio dei servizi Gli script di avvio/terminazione dei servizi (o, in generale, dei programmi) da eseguire quando si entra o esce in un determinato runlevel sono posti nella directory /etc/init.d (Debian) o /etc/rc.d/init.d (RedHat). Si tratta di script impostati in modo da poter essere invocati anche manualmente per avviare (parametro start), terminare (parametro stop), riavviare (parametro restart) un servizio (oppure, con il parametro reload, fargli rileggere il file di configurazione). $ sudo /etc/init.d/apache2 start * Starting web server apache2 [ OK ] $ sudo /etc/init.d/apache2 reload * Reloading web server config apache2 [ OK ] $ sudo /etc/init.d/apache2 restart * Restarting web server apache2 [ OK ] $ sudo /etc/init.d/apache2 stop * Stopping web server apache2 [ OK ] Le varie distribuzioni mettono a disposizione scorciatoie per invocare questi script, come service e invoke-rc.d Definizione dei runlevel Cosa esattamente avviare quando il sistema entra in un particolare runlevel è determinato dai link simbolici presenti nella directory di quel runlevel. I link simbolici hanno un nome che inizia per S (start) o per K (kill), più un numero che indica la priorità (utile se si vuole garantire che un determinato servizio parta solo dopo un altro). $ ls /etc/rc2.d/ K74bluetooth S11klogd S20hotkey-setup S20samba S89anacron S99rc.local README S12dbus S20incron S22consolekit S89atd S99rmnologin S05vbesave S12hal S20makedev S23ntp S89cron S99stop-readahead S10acpid S16ssh S20nvidia-kernel S24avahi-daemon S91apache2 S10powernowd.early S19cupsys S20postfix S24dhcdbd S98usplash S10sysklogd S20apmd S20powernowd S30gdm S99acpi-support S10xserver-xorg-input-wacom S20apport S20rsync S65firestarter S99laptop-mode 76

77 5.6.9 Configurazione dei runlevel La configurazione dei runlevel può essere fatta: manualmente, tramite modifica dei link simbolici presenti da riga di comando, con strumenti quali chkconfig (RedHat), update-rc.d (Debian) ecc. tramite GUI, con strumenti quali ntsysv (RedHat), sysv-rc-conf, sysvconfig (Debian), services-admin (Gnome) Figura 4: Uso di sysvconfig Chkconfig La configurazione dei vari servizi può essere agevolmente effettuata con chkconfig, strumento tipico dei sistemi RedHat ma portato anche su Ubuntu. $ sudo chkconfig --add verysimplewebserver Adding system startup for /etc/init.d/verysimplewebserver... $ sudo chkconfig --del verysimplewebserver Removing any system startup links for /etc/init.d/verysimplewebserver... $ sudo chkconfig --level 234 verysimplewebserver on Adding system startup for /etc/init.d/verysimplewebserver... $ chkconfig --list grep verysimplewebserver verysimplewebserver 1:none 2:on 3:on 4:on 5:none 6:none S:none Sotto Ubuntu, con l opzione --dryrun si può vedere quali comandi verrebbero eseguiti Informazioni negli script di avvio Gli script relativi ai servizi contengono delle informazioni, sotto forma di commento, che vengono utilizzate per sapere quali sono i livelli di priorità di default. Le prime righe dello script httpd di un sistema Fedora 8 : #!/bin/bash # httpd Startup script for the Apache HTTP Server # chkconfig: Le prime righe dello script apache2 di un sistema Ubuntu 7.10 : #!/bin/sh -e [snip] # Default-Start: # Default-Stop: ### END INIT INFO 77

78 Sequenze di avvio moderne I sistemi moderni (specialmente desktop e laptop) hanno bisogno di gestire la sequenza di avvio: secondo un modello ad eventi, ad esempio facendo avviare un servizio quando viene collegato un disco USB o a seconda della presenza o meno di un collegamento di rete con una gestione chiara delle dipendenze (da cui determinare l ordine di avvio, in luogo dell ordine numerico tradizionale) con la possibilità di un avvio in parallelo dei servizi Sono state studiate diverse forme moderne di gestione della sequenza di avvio: initng 31 Apple Launchd 32 Solaris Service Management Facility 33 Ubuntu Upstart 34, usato anche da Fedora kyuba 35 Nei sistemi che usano Upstart, la configurazione di init viene fatta attraverso i file presenti nella directory /etc/event.d Spegnere il sistema Per spegnere il sistema si deve impartire il comando shutdown. $ sudo shutdown -h now # spegne il sistema immediatamente $ sudo shutdown -r now # riavvia il sistema dopo averlo spento $ sudo shutdown -t 10 # spegne il sistema dopo 10 secondi Per altre opzioni interessanti, si veda shutdown(8). Sono normalmente a disposizione anche le forme sintetiche halt, reboot e poweroff Esercizi Verificare la corrispondenza tra link simbolici della directory del runlevel corrente e processi attivi. Provare ad avviare/terminare uno dei servizi presenti con i comandi della directory init.d. Cambiare l impostazione di un runlevel (ad es. eliminando da esso l attivazione di un servizio) e verificare il cambiamento dei link simbolici (ad esempio usando find). 5.7 Inetd e Xinetd Servizi, démoni e processi serventi Per servizio si intende un programma che, su richiesta di un programma cliente, effettua qualche tipo di lavoro (e solitamente fornisce un feedback). Per quanto riguarda questa definizone, non importano i dettagli tecnici dell implementazione. Per démone (daemon) si intende un programma che è in esecuzione continua in background, in attesa di richieste di attivazione da parte di qualche cliente. I servizi possono essere implementati: come démoni (c.d. servizi stand-alone) come processi serventi (server processes, c.d. servizi on-demand) La differenza fondamentale consiste nel fatto che i servizi on-demand non sono costantemente in esecuzione, ma vengono invocati solo quando necessario

79 5.7.2 Il superdemone Ad occuparsi dell invocazione dei processi serventi, quando necessario, è un super-démone, che rimane in ascolto per conto terzi. Questo super-démone è, a seconda della distribuzione/configurazione, inetd oppure xinetd. Concettualmente, i due superdemoni sono simili. La differenza sta in una configurazione più precisa che si può avere con il secondo (non a caso: la x sta per extended). La configurazione è: per inetd, nel file /etc/inetd.conf (una riga per ogni servizio) per xinetd, nella directory /etc/xinetd.d (un file per ogni servizio) Configurazione di un servizio gestito dal super-démone La configurazione di un servizio stand-alone (nell esempio, swat) può essere fatta in uno dei modi seguenti. Se si usa inetd, con una riga tipo: swat stream tcp nowait.400 root /usr/sbin/tcpd /usr/sbin/swat Se si usa xinetd, con un file tipo: # default: off service swat } disable = no port = 901 socket_type = stream wait = no only_from = user = root server = /usr/sbin/swat log_on_failure += USERID TCP wrappers È possibile configurare da quali host è possibile la connessione a servizi gestiti dal super-démone (o che usano la libreria librwap. I due file che controllano le connessioni possibili sono: /etc/hosts.allow (letto per primo) /etc/hosts.deny (letto per secondo) Valgono i seguenti criteri: prima corrispondenza (per quanto riguarda l ordine di lettura dei file e delle righe dei file) lettura ad ogni richiesta (modifiche con impatto immediato) lettura solo in caso di esistenza Per dettagli sui file, si veda hosts_access(5). 5.8 Kernel, gestione, configurazione e compilazione Kernel monolitici vs. kernel modulari Un kernel (nucleo del sistema operativo) può essere compilato come: monolitico (se include staticamente il codice per tutti i possibili dispositivi hardware a disposizione) modulare (se include solo il codice per l hardware principale, e ha a disposizione dei moduli, da caricare quando necessario, per la gestione di vari altri dispositivi) La maggior parte degli utenti Linux usa kernel modulari, perché ciò garantisce una maggior flessibilità. 79

80 5.8.2 Che kernel sto usando? Per sapere qual è il kernel in uso si può usare il comando uname -r: $ uname -r generic N.B. Da non confondersi con la versione della distribuzione usata: $ lsb_release -a Distributor ID: Ubuntu Description: Ubuntu 8.10 Release: 8.10 Codename: intrepid A partire dal kernel ci sono state modifiche importanti alla gestione dei moduli (estensione.ko, versioni diverse dei programmi di gestione, ecc.) Impostazioni dinamiche del kernel Con il programma sysctl si possono impostare o leggere i valori di configurazione del kernel. $ sudo sysctl -w kernel.hostname=biegacz kernel.hostname = biegacz $ sudo sysctl kernel.hostname kernel.hostname = biegacz Il file /etc/sysctl.conf contiene la configurazione letta all avvio del calcolatore Moduli I moduli disponibili sono nella directory /lib/modules, all interno di una sottodirectory per la specifica versione di kernel: $ ls -F /lib/modules/$(uname -r) madwifi/ modules.ieee1394map modules.pcimap net/ extra/ modules.alias modules.inputmap modules.seriomap ubuntu/ initrd/ modules.ccwmap modules.isapnpmap modules.symbols volatile/ kernel/ modules.dep modules.ofmap modules.usbmap Nella maggior parte dei casi, i moduli vengono caricati automaticamente quando necessario. In casi di particolari necessità, può essere utile saper elencare, caricare o rimuovere moduli dal kernel Elenco dei moduli caricati L elenco dei moduli caricati si ottiene con il comando lsmod (oppure, con output diverso, visualizzando il file /proc/modules). $ lsmod head -10 Module Size Used by vesafb wlan_tkip aes_i geode_aes blkcipher geode_aes aes_generic wlan_ccmp af_packet binfmt_misc

81 5.8.6 Caricamento di un modulo I moduli possono essere caricati direttamente con insmod, che però non risolve automaticamente le dipendenze: $ cd /lib/modules/ uname -r $ find. -iname msdos./kernel/fs/msdos $ sudo insmod./kernel/fs/msdos/msdos.ko insmod: error inserting./kernel/fs/msdos/msdos.ko : -1 Unknown symbol in module $ sudo insmod./kernel/fs/fat/fat.ko $ sudo insmod./kernel/fs/msdos/msdos.ko (Teoricamente dovrebbe essere possibile inserire i moduli usando solo il loro nome, senza il percorso completo) Rimozione di un modulo I moduli possono essere rimossi con rmmod, che però fallisce se ci sono dipendenze: $ sudo rmmod fat ERROR: Module fat is in use by msdos $ sudo rmmod msdos $ sudo rmmod fat Informazioni su un modulo Si possono ottenere informazioni su un modulo (ad esempio le sue dipendenze) con modinfo: $ modinfo msdos filename: /lib/modules/ generic/kernel/fs/msdos/msdos.ko description: MS-DOS filesystem support author: Werner Almesberger license: GPL srcversion: 4BF E22266BA734C0 depends: fat vermagic: generic SMP mod_unload Installazione e rimozione semplificate Con il comando modprobe si possono installare e rimuovere i moduli con il riconoscimento automatico delle dipendenze: $ sudo modprobe -v msdos insmod /lib/modules/ generic/kernel/fs/fat/fat.ko insmod /lib/modules/ generic/kernel/fs/msdos/msdos.ko $ sudo modprobe -rv msdos rmmod /lib/modules/ generic/kernel/fs/msdos/msdos.ko rmmod /lib/modules/ generic/kernel/fs/fat/fat.ko Tipi e formati di kernel Il kernel di Linux è un file eseguibile risultante dalla compilazione dei sorgenti del kernel stesso. Bisogna distinguere: vmlinux, il kernel in forma non compressa e non avviabile (dove vm sta per virtual memory, caratteristica gestita fin dalle primissime versioni), stadio intermedio del processo di generazione del kernel zimage, una versione compressa (con gzip) e avviabile del kernel, usata in vecchi calcolatori (per i quali è necessario la scompattazione in memoria bassa, sotto i 640 KiB) bzimage, una versione compressa (sempre con gzip) e avviabile del kernel, usata nei calcolatori moderni (la b sta per big) vmlinuz*, le versioni di kernel effettivamente avviabili al boot (possono essercene diverse) 81

82 I sorgenti del kernel Il codice sorgente del kernel linux è disponibile nei Linux Kernel Archives 36. Sono molte le patch rese disponibili da programmatori e aziende di tutto il mondo. Il kernel ufficiale, senza queste patch, è detto kernel vanilla. I numeri di versione hanno la forma major.minor.patchlevel. Un valore pari per minor indica un kernel indicato come stabile, un valore dispari un kernel di sviluppo (non c è ancora un kernel 2.7) Verifica della firma digitale I file disponibili su sono firmati digitalmente con gpg da Dopo aver scaricato un file, è consigliabile verificarne la firma digitale: $ wget -c [snip] 16:09:32 (65.55 KB/s) - "patch gz" salvato [ / ] $ wget -c [snip] 16:09:52 (7.88 MB/s) - "patch gz.sign" salvato [248/248] $ gpg --verify patch gz.sign patch gz # dopo aver importato la chiave pubblica... gpg: Firma fatta da gio 17 apr :23:09 CEST usando DSA ID chiave 517D0F0E gpg: Good signature from "Linux Kernel Archives Verification Key Le fasi della compilazione del kernel Per ricompilare il kernel, si deve procedere in questo modo: 1. scaricare gli strumenti di lavoro (compilatore, linker ecc.) 2. scaricare i sorgenti del kernel (della propria distribuzione o vanilla) e scompattarla 3. scaricare eventuali patch che si desiderano utilizzare 4. applicare le patch 5. fare la configurazione (vedi oltre) 6. compilare (approfondimento successivo) 7. installare e testare (approfondimento successivo) Configurazione del kernel (1) La configurazione avviene tramite appositi strumenti (alternativi tra loro) che aiutano a creare il file.config. make config (interfaccia testuale di base) make menuconfig (interfaccia testuale semigrafica, basata su ncurses) make xconfig (interfaccia grafica Xwindow) make gconfig (interfaccia grafica basata su librerie gtk) make oldconfig (partenza dalla configurazione corrente, crea il file.config senza fare domande)

83 Configurazione del kernel (2) Per ogni caratteristica distintiva (feature) bisogna indicare se si desidera che essa: venga inclusa in maniera statica venga inclusa come modulo non venga inclusa Può essere utile: copiare il catalogo della localizzazione in italiano 37 dare un occhiata ad una guida che spiega nel dettaglio le voci più interessanti, come quella di sevencapitalsins 38 leggere il capitolo sulla Lettura dei codici sorgente del Kernel 39 della Wikiversity Compilazione La compilazione attraversa tradizionalmente le seguenti fasi: 1. make dep (genera le dipendenze) 2. make clean (elimina file creati provvisoriamente in compilazioni precedenti) 3. make bzimage (genera il kernel compresso e avviabile) 4. make modules (genera i moduli) 5. make modules_install (installa i moduli nella directory /lib/modules/... ) Se tutto è andato a buon fine, si deve ancora: 1. copiare il file bzimage nella directory /boot/ (con un nome tipo vmlinuz-versionex 2. aggiornare la configurazione del bootloader (lilo o grub) 3. riavviare la macchina scegliendo il nuovo kernel, testandone le funzionalità Compilazione Debian-way e Fedora-way Compilazione ed installazione sono resi più semplici da appositi programmi che permettono di creare normali pacchetti deb o rpm da installare e rimuovere nella maniera consueta. $ make-kpkg clean $ fakeroot make-kpkg --revision ~ append-to-version -versione01 hernel_image kernel_headers modules_image $ cd.. $ sudo dpkg -i linux-headers-*.deb $ sudo dpkg -i linux-image-*.deb $ sudo dpkg -i modules-image-*.deb Al termine, ci si troverà un nuovo kernel installato e selezionabile dal menù di grub, e che potrà essere disinstallato come qualsiasi altro pacchetto. $ dpkg --list grep linux.*versione0 ii linux-headers versione0 ~0.00 Header files related to Linux kernel, specifically, ii linux-image versione0 ~0.00 Linux kernel binary image for version versione0 Qualcosa di analogo si può fare con Fedora the Linux Kernel Sources 40 compilation fedora 83

84 Initrd e Initramfs Nella directory /boot trovano normalmente posto anche i file initrd (initial ram disks), filesystem minimali completi necessari per un primo avvio della macchina (che può così avvenire anche con un kernel in cui il supporto per particolari filesystem sia compilato come modulo). Questi file sono normalmente (dal kernel 2.6) in formato cpio compresso con gzip e sfruttano il filesystem initramfs. $ file /boot/initrd.img generic /boot/initrd.img generic: gzip compressed data, from Unix, last modified: Wed Apr 30 22:40: $ zcat /boot/initrd.img generic cpio --extract blocks $ ls -F bin/ conf/ etc/ init* lib/ modules/ sbin/ scripts/ usr/ var/ 6 Rete 6.1 Configurazione di rete Concetti importanti Questi concetti dovrebbero essere noti: network host subnet indirizzo IP DHCP maschera di rete ( sottorete nella terminologia MS) gateway protocollo (TCP, UDP, ICMP) porta Per approfondimenti, si vedano le pagine della Wikipedia, a partire da quella sull IPv Maschera di rete Una maschera di rete può essere definita secondo la notazione decimale completa (es / ) oppure con una notazione abbreviata, indicando il numero di bit che identificano la rete (es /19). Il programma ipcalc può aiutare nei calcoli necessari alla gestione degli indirizzi IP: $ ipcalc /19 Address: Netmask: = Wildcard: => Network: / HostMin: HostMax: Broadcast: Hosts/Net: 8190 Class C, Private Internet Interfacce di rete Le interfacce di rete ethernet sono di norma indicate come eth0, eth1, ecc. L interfaccia wireless è indicata come wlan0, oppure con un nome che indica il chipset usato (es. ath0 per le interfacce Atheros). Esiste inoltre, in tutti i sistemi, un interfaccia di loopback, denominata lo

85 6.1.4 Gestione interfacce È possibile visualizzare (e modificare) la configurazione delle interfacce di rete tramite il programma ifconfig. $ ifconfig ath0 ath0 Link encap:ethernet HWaddr 00:C0:A8:FD:AC:47 inet addr: Bcast: Mask: inet6 addr: fe80::2c0:a8ff:fefd:ac47/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets: errors:0 dropped:0 overruns:0 frame:0 TX packets: errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes: (321.9 MB) TX bytes: (111.3 MB) La configurazione da usare all avvio del sistema è memorizzata nei file della directory /etc/sysconfig/networkscripts (sistemi RedHat/Fedora) o nel file /etc/network/interfaces (sistemi Debian/Ubuntu) Gestione indirizzo gateway È possibile visualizzare (e modificare) l indirizzo del gateway di default tramite il programma route. $ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface * U ath0 link-local * U ath0 default UG ath0 La modifica può avvenire tramite i file di configurazione delle interfacce di rete oppure con il comando: route add default gw Corrispondenza tra indirizzo MAC e IP Per ottenere una tabella con le corrispondenze tra indirizzi fisici delle interfacce di rete (MAC addresses) e indirizzi IP, si può consultare la tabella ARP: $ arp -n Address HWtype HWaddress Flags Mask Iface ether 00:15:f2:70:0f:4a C wlan ether 00:0c:f6:39:8e:da C wlan Ip Il modo più moderno per operare sull infrastruttura IP della propria macchina è tramite il programma ip, che consente di gestire interfacce di rete, rotte, ecc. $ ip addr show [...] 4: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:c0:a8:fd:ac:47 brd ff:ff:ff:ff:ff:ff i$ ip route show [...] default via dev wlan0 proto static default dev eth0 scope link metric Risoluzione dei nomi di host L attività con cui ad un nome di dominio pienamente qualificato viene fatto corrispondere un determinato indirizzo IP è detta risoluzione del nome. Essa avviene basandosi su un file di testo (/etc/hosts) presente sulla macchina, oppure interrogando un nameserver (server DNS), indicato nel file /etc/resolv.conf. L ordine di ricerca è specificato nel file /etc/nsswitch.conf. 85

86 $ cat /etc/nsswitch.conf [...] hosts: networks: [...] files mdns4_minimal [NOTFOUND=return] dns mdns4 files Nota: le voci mdns4 hanno a che fare con il sistema di risoluzione di nomi e servizi nelle reti locali Avahi Programmi di utilità Esistono innumerevoli programmi di utilità che possono essere impiegati per la configurazione e per la diagnosi di problemi inerenti la rete. La nostra cassetta degli attrezzi contiene: ifconfig ip route dhcpcd, dhclient, pump host, nslookup, dig hostname netstat ping traceroute tcpdump, ethereal, wireshark, nmap Curiosità: apparentemente, nmap 43 è il programma più usato per la rappresentazione delle attività di hacking nei film Netstat Il programma netstat mostra informazioni su tutte le connessioni attive: $ netstat --protocol=inet,inet6 -n Active Internet connections (senza server) Proto Recv-Q Send-Q Local Address Foreign Address State tcp : :443 TIME_WAIT tcp : :443 ESTABLISHED È anche possibile elencare i servizi in ascolto (con le relative porte occupate): $ netstat --protocol=inet,inet6 -nl tcp : :* LISTEN tcp : :* LISTEN tcp6 0 0 :::80 :::* LISTEN

87 Connessioni PPP Per configurare una connessione di rete tramite modem o su reti ISDN (o, in generale, tramite porta seriale) si usa il PPP (Point-to-Point Protocol). La configurazione più semplice di un modem seriale può essere fatta con il programma wvdialconf e le connessioni possono essere avviate con il programma wvdial. Altrimenti, si può usare il programma setserial per configurare il modem (ad esempio impostando il baud rate), uno script per il programma chat per impostare il dialogo di connessione e il programma pppd per gestire la connessione stessa. Linux supporta i seguenti metodi di autenticazione PPP: PAP (Password Authentication Protocol) CHAP (Challenge Handshake Authentication Protocol) MSCHAP (Microsoft CHAP) Ottenimento di indirizzo IP Per ottenere tramite DHCP un indirizzo IP in una rete, è sufficiente eseguire il comando dhclient: $ sudo dhclient Internet Systems Consortium DHCP Client V Listening on LPF/wlan0/00:c0:a8:fd:ac:47 Sending on LPF/wlan0/00:c0:a8:fd:ac:47... Sending on Socket/fallback DHCPDISCOVER on eth0 to port 67 interval 7 DHCPOFFER of from DHCPREQUEST of on eth0 to port 67 DHCPACK of from bound to renewal in seconds Configurazione tramite interfaccia grafica Naturalmente, è possibile la configurazione di molti aspetti relativi all ambiente di rete tramite interfaccia grafica. È sufficiente usare il programma network-admin (Sistema/Amministrazione/Rete). Figura 5: Configurazione di rete con GNOME Strumenti di rete Il programma gnome-nettool (Sistema/Amministrazione/Strumenti di rete) consente di effetuare in modo grafico alcune operazioni di test. 87

88 Figura 6: Strumenti di rete con GNOME Risoluzione dei nomi in una rete locale In una rete locale senza server DNS e con indirizzi IP assegnati dinamicamente, la risoluzione dei nomi può avvenire grazie ad Avahi. Le query DNS avvengono in maniera multicast e i vari host rispondono al nome assegnato a ciascuno con il suffisso.local. $ ping uczen.local PING uczen.local ( ) 56(84) bytes of data. 64 bytes from uczen.local ( ): icmp_seq=1 ttl=64 time=0.037 ms Clienti di rete Clienti per la posta elettronica I programmi clienti per la posta elettronica vengono chiamati, in generale, MUA (Mail User Agents). Tra essi vale la pena di ricordare: mutt e pine (testuali) evolution, thunderbird e kmail (grafici) Può inoltre rivelarsi utile il programma uuenview, che permette di inviare messaggi con allegati binari da riga di comando Programmi per la consegna locale della posta Nei sistemi Un*x esiste una categoria particolare di programmi: quelli che si occupano della consegna della posta. Sono detti MDA (Mail Delivery Agents). Il più famoso è procmail, che permette di configurare quali azioni devono essere intraprese all arrivo di messaggi con determinate caratteristiche Clienti FTP Le connessioni FTP possono essere avviate con programmi grafici (es. gftp) o da riga di comando (es. ftp) Clienti web L accesso ai documenti presenti sul web può avvenire con i classici browswer grafici. Vale la pena di segnalare però anche: wget e curl (per recuperare da riga di comando pagine web e documenti vari da siti web e FTP) 88

89 lynx e elinks (per navigare con interfaccia testuale o ottenere una visualizzazione in puro testo del contenuto di una pagina web) Con curl si possono anche fare agevolmente dei post, e la cosa può tornare utile per automatizzare operazioni su web (con degli script) Clienti Telnet, SSH ecc. È possibile naturalmente accedere a sistemi remoti con il classico programma telnet o con il più sicuro ssh Accesso da sistemi Windows Se si è costretti ad usare un sistema Windows, è possibile effettuare connessioni a server SSH tramite gli utilissimi: putty 44 (per connessioni testuali) WinSCP 45 (per trasferimento di file) XMing 46 (server XWindow per Windows) NetCat Il programma NetCat, il coltellino svizzero della rete, permette di effettuare connessioni TCP o inviare datagrammi UDP ed è altamente configurabile. Ad esempio, per avere informazioni sulla data di ultima modifica di un certo documento su web, si può impartire il seguente comando: $ echo $ HEAD /graphics/gnu-head-mini.png HTTP/1.1\nHost: \ nc 80 -q 1 grep ^Last-Modified Last-Modified: Mon, 14 Jun :25:31 GMT 6.3 Posta elettronica MTA, MDA e MUA Nel contesto delle applicazioni legate alla posta elettronica, si distinguono tre diversi tipologie: MDA (Mail Delivery Agent) con il compito di consegnare la posta al destinatario, quando questa giunge sul sistema (e quando è generata sul sistema stesso) MTA (Mail Transport Agent) con il compito di far sì che i messaggi giungano a destinazione (ossia fino al sistema sul quale è presente la casella di posta del destinatario) MUA (Mail User Agent), il programma usato effettivamente dall utente per gestire la propria corrispondenza elettronica Mail Transport Agent La comunicazione tra MTA avviene con il protocollo SMTP (Simple Mail Transfer Protocol). Molto spesso un MTA integra le funzioni di MDA. Esempi noti di MTA: Sendmail Postfix Exim 44 sgtatham/putty/ sourceforge.net/projects/xming 89

90 6.3.3 Configurazione di un MTA La posta viene consegnata al sistema configurato come gestore della posta per un determinato dominio nei record MX (Mail exchange) del DNS. $ dig virgilio.it MX ; <<>> DiG P2 <<>> virgilio.it MX [snip] ;; QUESTION SECTION: ;virgilio.it. IN MX ;; ANSWER SECTION: virgilio.it IN MX 10 mxrm.virgilio.it. Un MTA può essere configurato per tentare una consegna diretta dei messaggi, oppure per usare altri host specifici (seguendo apposite tabelle di routing dei messaggi), oppure ancora per affidarsi sempre ad un singolo smarthost (ad esempio, quello del provider). Inoltre, l MTA può essere configurato per rifiutare/respingere messaggi con determinati contenuti, riscrivere intestazioni, ecc Mail User Agent È il programma con il quale l utente (umano) interagisce effettivamente. Permette di comporre messaggi e spedirli (tramite un MTA), di accedere alla posta locale e, in alcuni casi, di connettersi tramite protocollo POP3 o IMAP per la ricezione/visualizzazione dei messaggi. Esempi noti di MUA: mutt kmail mozilla-thunderbird evolution I messaggi di posta elettronica possono essere anche composti e letti con il comando mail Mail retrieval Può capitare che il sistema di gestione della posta di un dominio non corrisponda ad una macchina della rete locale (casalinga o aziendale), ma che sia invece fuori (tipicamente, presso un provider). In questo caso, è necessario recuperare la posta esternamente, direttamente con un MUA (se supporta questa funzionalità) o con un programma specifico, che può anche gestire caselle multidrop (l idea è che la posta non viene scaricata dal MUA quando l utente umano preme il pulsante Scarica posta, ma ad intervalli regolari da un programma apposito, che la fa trovare già scaricata al MUA). Può essere utile tenere in considerazione: mailfilter (cancella i messaggi indesiderati prima di scaricarli) fetchmail (recupera i messaggi via POP3 o IMAP) retchmail (recupera i messaggi via POP3, opera in multi-thread) Mail management La posta in arrivo nella propria casella può essere gestita in maniera più o meno efficace e organizzata. Il file /.forward permette di indicare: a chi reindirizzare la posta in arrivo (specificando un normale indirizzo di posta elettronica) quale programma invocare per la gestione della posta in arrivo (usando una pipe) 90

91 6.3.7 Organizzazione delle cartelle di posta elettronica In un sistema con un server di posta elettronica configurato e con degli utenti che lavorano in locale, la posta è in genere organizzata in questo modo: /var/spool/mail/ : contiene i messaggi destinati ad utenti locali che ancora non sono stati letti/prelevati (anche se è comunque possibile, per l utente, leggerli lasciandoli lì) /mbox: è il file in cui i messaggi letti vengono spostati dopo essere stati letti tramite il comando mail /mail: è la directory che contiene i messaggi di posta gestiti da programmi come pine o kmail /Mail: è la directory che contiene i messaggi di posta gestiti da mutt (ma l impostazione può essere cambiata in.muttrc Altri programmi organizzano la posta in directory diverse: evolution usa /.evolution/mail/local thunderbird usa /.mozilla-thunderbird/*.default/mail/local Folders (dove * indica una sequenza di caratteri che identifica il profilo) Formati delle mailbox I formati delle mailbox variano, ma in genere sono riconducibili ad uno dei seguenti standard: mbox: il formato tradizionale Unix, in cui i messaggi sono disposti uno dopo l altro in un file di testo, con una intestazione formata da una riga From MMDF: una variante del formato mbox, in cui i messaggi sono separati l uno dall altro tramite una sequenza di quattro <ctrl>-a MH: si tratta di una directory in cui i messaggi sono registrati ognuno in un file separato, con un numero progressivo come nome di file Maildir: introdotto da Qmail, è simile a MH, ma gestisce tre ulteriori sottodirectory (cur, tmp, new) e nomi di file per i singoli messaggi si cui è garantita l unicità (utile in ambienti condivisi) I MUA inoltre introducono spesso, per ottimizzare le prestazioni, dei file indice nascosti (.inbox.index,.inbox.index.ids,.inbox.index.sorted). Inoltre, si deve tenere presente che con il formato maildir una cartella ne può contenere un altra (e si avrà quindi anche.nomecartella.directory) Procmail Procmail può essere invocato a livello di sistema (in combinazione con il MTA) oppure singolarmente dal singolo utente. Qui analizziamo il secondo caso. Il file.forward dell utente conterrà (le virgolette sono comprese): " exec /usr/bin/procmail" Nella home directory dell utente sarà poi presente il file di configurazione.procmailrc, che conterrà le regole da applicare ai messaggi in ingresso. 91

92 Esempio di.procmailrc (1) Il file è unico: qui viene mostrato in più parti per esigenze di organizzazione dello spazio. Configurazione iniziale PATH=$HOME/bin:/usr/local/bin:/usr/bin:/bin MAILDIR=$HOME/mail # assicurarsi che ci sia! LOGFILE=$HOME/.procmail/log # molto utile IMPURI=$HOME/impuri METAMAIL_TMPDIR=$HOME/estratti Poi si inizia con le diverse regole. I messaggi con il subject indicato (espressione regolare) devono essere cestinati :0 * ^Subject.*MAKE.*MONEY.*FAST /dev/null Esempio di.procmailrc (2) Tutti i messaggi che arrivano da Julie vanno nella mailbox indicata (che deve esistere) :0 * ^From.*julie $MAILDIR/julie Tutti i messaggi che contengono la parola delivery vengono messi, ognuno in un file a sé stante, nella directory indicata :0 * ^Subject.*delivery $MAILDIR/delivery Esempio di.procmailrc (3) I messaggi con contenuto in formato MIME vengono passati a gzip che li comprime aggiungendoli al file indicato. L elaborazione continua con le regole successive (a causa del flag c). :0 c * ^Content-Type gzip >> $IMPURI/impuri.gz Tutti i messaggi che hanno julie nell oggetto vengono rispediti a :0 c * ^Subject.*julie! Esempio di.procmailrc (4) Tutti i messaggi che contengono la parola allegato vengono passati a metamail, che tramite variabile d ambiente è informato di usare una directory specifica per i file temporanei I flag BH indicano di effettuare il test sia su body sia su head del messaggio I flag bh indicano di passare all elaborazione successiva sia il body sia lo head :0 bhhb * ^Subject.*allegato metamail -q -w -x 92

93 File di log di procmail Il file di log generato da procmail può essere analizzato con il programma mailstat: $ mailstat log Total Number Folder /dev/null gzip >> $IMPURI/impuri.gz /home/loris/mail/delivery/ /home/loris/mail/julie /var/mail/loris Mailfilter Permette di cancellare i messaggi prima di scaricarli da un server POP3. Un esempio di file di configurazione: LOGFILE=/home/john/.mailfilter/log SERVER=popmail.qualcuno.net USER=john PASS=segretodipulcinella PROTOCOL=pop3 PORT=110 SHOW_HEADERS=yes VERBOSE= Esempio di script per estrarre gli allegati (Non pubblico) 6.4 Servizi di rete Nota preliminare Questa sezione è in via di sviluppo. Se e quando sarà necessario, la aggiornerò con informazioni specifiche per i vari servizi da installare/configurare Servizi importanti: MTA I server che si occupano di trasportare messaggi di posta elettronica da un host all altro vengono chiamati MTA (Mail Transfer Agent). Usano in genere il protocollo SMTP (porta 25) e si basano sul meccanismo del cosiddetto store and forward. I più famosi MTA nel mondo Un*x sono: sendmail postfix exim Alcune cose importanti da sapere: cosa sono gli alias cos è uno smart host cosa sono i file.forward 93

94 6.4.3 Configurazione di Postfix Per una configurazione basilare di Postfix, può essere utile usare il comando sudo dpkg-reconfigure postfix Ulteriori configurazioni andranno fatte modificando il file /etc/postfix/main.cf Uso di Postfix con relay host esterno Nel caso si usi un relay esterno che richiede autenticazione si può usare una configurazione come la seguente: myhostname = beamer relayhost = mail.example.com smtp_use_tls=no smtp_sasl_type = cyrus smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd smtp_sasl_security_options = noanonymous # evita ntlm smtp_sasl_mechanism_filter = LOGIN Postfix con relay host esterno: credenziali Il file /etc/postfix/sasl/saslpasswd contiene le credenziali di autenticazione Ad esempio: mail.example.com john.doe:pulcinella Il file hash delle password dev essere generato con il comando sudo postmap /etc/postfix/sasl/sasl_passwd (Attenzione che entrambi poi devono avere come permessi 600) Può essere poi necessario impostare un nome del dominio gestito nel file /etc/mailname Servizi importanti: Apache web server Il server web più diffuso in assoluto è Apache Servizi importanti: Network File System (lato server) La condivisione in rete di directory può essere fatta con NFS (Network File System). L esportazione avviene configurando opportunamente il file /etc/exports (si veda in proposito exports(5)). $ cat exports # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). /home/exported/writable /home/exported/readable *.local(rw,sync,no_subtree_check) *.local(ro,sync,no_subtree_check) Servizi importanti: Network File System (lato client) Sul client, l accesso alla directory condivisa avviene con un operazione di innesto (mount). Tipicamente, si aggiungerà una riga simile alla seguente al file /etc/fstab: nfsserver.local:/home/exported/writable /home/remote/writable nfs rw,lock,cto,actimeo= nfsserver.local:/home/exported/readable /home/remote/readable nfs ro,lock,cto,actimeo=

95 6.4.9 Servizi importanti: Samba Il colloquio con sistemi Windows può avvenire grazie alla suite di programmi Samba, che permettono ad un calcolatore Un*x di accedere a reti SMB/CIFS (Server Message Block / Common Internet File System) sia come cliente sia come servente (ad esempio, emulando un PDC) Servizi importanti: DNS I serventi DNS (Domain Name System) hanno come compito primario quello di fornire l indirizzo IP di un host dato il suo nome. Il programma tipicamente usato nei sistemi Un*x si chiama named. 6.5 Log e gestione degli eventi Tipi di log Su una macchina Linux sono presenti diversi tipi di file di log: log delle applicazioni (status delle applicazioni, eventi, richieste ecc.) log di sistema (stato dei dischi, dell hardware, dei processi di sistema) log del kernel (statistiche relative ai processi e cose del genere) Dmesg I messaggi diagnostici del kernel, emessi all avvio e in occasione di particolari operazioni hardware (ad esempio, quando viene collegata una nuova periferica USB), possono essere visualizzati con il comando dmesg. $ dmesg head -5 [ ] Linux version generic (gcc version (prerelease) (Ubuntu ubuntu2)) #1 SMP Tue Feb 12 07:42:25 UTC 2008 (Ubuntu generic) [ ] BIOS-provided physical RAM map: [ ] BIOS-e820: dc00 (usable) [ ] BIOS-e820: dc a0000 (reserved) [ ] BIOS-e820: e (reserved) Dove sono i file di log Il file di log di default è /var/log/messages. In generale, i file di log sono mantenuti tutti nella directory /var/log Organizzazione in facility Le operazioni di cui prendere nota sono organizzate in diverse facility, corrispondenti ad alcune operazioni di base e tradizionali. Le facility definite sono le seguenti: auth (login, logout ecc.) authpriv (informazioni riservate) cron (operazioni periodiche e pianificate) daemon (servizi che non hanno un file di log privato ) ftp kern (messaggi del kernel) lpr (demone di stampa) mail (sottosistema di gestione della posta elettronica) 95

96 news (sottosistema usenet per i newsgroup) syslog (messaggi gestiti da syslogd) user (messaggi di livello utente) uucp (sottosistema UUCP) Sono inoltre previste le facility da local0 a local7, che possono essere usati per scopi particolari Priorità delle registrazioni di log Le registrazioni effettuate nei file di log sono associate ad uno dei seguenti livelli di priorità: emerg (sistema inutilizzabile) alert (si deve intervenire al più presto) crit (condizioni critiche) err (condizione di errore) warning (avvertimento) notice (condizione normale) info (messaggio informativo) debug (messaggio di debug) Configurazione delle attività di log Il file /etc/syslog.conf contiene l indicazione di dove registrare i messaggi di una determinata facility con una particolare priorità. Ad esempio, righe di questo genere daemon.* kern.* -/var/log/daemon.log -/var/log/kern.log indicano che i messaggi relativi alle facility daemon e kernel, di qualsiasi priorità (ad eccezione del livello debug) devono essere registrate nei file indicati (il segno - indica che non deve essere fatto il sync dopo ogni operazione di scrittura). Oltre che su file, le registrazioni di log possono essere mandate ad un terminale, ad un altra macchina, a una lista di utenti collegati ecc. In proposito, si veda syslog.conf(5) Logger Con il programma logger si possono registrare operazioni per una determinata facility/priorità. Ad esempio: $ logger -p local0.notice aggiornato orologio di sistema $ tail -1 /var/log/messages Mar 30 22:33:06 localhost loris: aggiornato orologio di sistema xconsole Da una sessione grafica, è possibile monitorare le registrazioni di log tramite xconsole, tramite il comando xconsole -file /dev/xconsole &. Si può determinare quali registrazioni far comparire sull xconsole impostando il file /etc/syslog.conf con /dev/xconsole per le facility/priorità desiderate. 96

97 6.5.9 Lastlog Può essere utile sapere quando è stato fatto l ultimo login da un determinato utente. Quest informazione si può ottenere con il comando lastlog. $ lastlog --user loris Nome utente Porta Da Ultimo accesso loris tty1 dom mar 30 22:39: $ lastlog --user dino Nome utente Porta Da Ultimo accesso alice pts/4 07ud-w-l d mar mar 25 14:59: Si veda lastlog(8) per ulteriori informazioni Rotazione dei file di log La rotazione/compressione dei file di log è affidata al programma logrotate, invocato da cron a scadenze regolari e configurato tramite il file /etc/logrotate.conf (e i file della directory /etc/logrotate.d per i log delle applicazioni). Si veda lastlog(8) per ulteriori informazioni Reazione ad eventi Potrebbe essere utile avviare uno script o, in generale, compiere una determinata azione, quando si verifica un determinato evento registrato in un file di log. Una strategia possibile è quella di usare il programma inotifywait, come nel seguente esempio: #!/bin/sh while inotifywait -e modify /var/log/messages; do if tail -n1 /var/log/messages grep httpd; then gdialog --msgbox "Apache needs love!" fi done File di log delle applicazioni Molte applicazioni server registrano i propri log in directory separate. Ad esempio: il server web Apache in /var/log/apache2 il server proxy Squid in /var/log/squid il server di database MySQL in /var/log/mysql 6.6 Netfilter e Iptables Tra noi e il mondo Figura 7: Schema di rete Un calcolatore con il sistema operativo Linux può operare in diversi modi e con diverse funzioni all interno di una rete: Routing NAT / Masquerading SNAT, DNAT, Port Forwarding 97

98 Filtering Logging Intrusion detection Load balancing / Traffic shaping Routing Un calcolatore con due interfacce di rete può agire da router facendo transitare i pacchetti dall una all altra. Allo scopo, è necessario abilitare il cosiddetto ip forwarding, in maniera statica agendo sulla configurazione del kernel (file /etc/sysctl.conf ) con l impostazione net.ipv4.ip_forward=1 oppure in maniera dinamica impartendo il comando: sudo sysctl -w net.ipv4.ip_forward=1 Gli altri calcolatori dovranno indicarlo come (default) gateway NAT / Masquerading Un calcolatore può: nascondere gli indirizzi IP di una rete verso l esterno, mascherandoli con il proprio (SNAT, Source Network Address Translation) fingere (nei confronti del mondo esterno) di offrire dei servizi, che in realtà sono offerti da un calcolatore della rete interna (DNAT, Destination Network Address Translation) Nel caso di calcolatori con indirizzo IP assegnato dinamicamente (tipicamente dal fornitore di connettività), il source NAT viene chiamato masquerading. Quando ce n è bisogno, nei pacchetti viene alterato anche il numero della porta (PAT, Port Address Translation) Source NAT / PAT connessioni TCP viste connessioni TCP viste all esterno localmente : : < > < > cliente : : NAT/PAT : : < > < > cliente : : Immagine tratta dagli Appunti di informatica libera 47 di Daniele Giacomini Destination NAT connessione TCP vista connessione TCP vista all esterno localmente : :1045 < > NAT/PAT < :80 : : : V : servente HTTP interno

99 Immagine tratta dagli Appunti di informatica libera 48 di Daniele Giacomini Filtering Il filtraggio consiste nel decidere se far passare o no determinati pacchetti / segmenti. Le decisioni possono essere prese: a livello hardware (es. sul MAC address) a livello di pacchetto / segmento (liv. 3 4 ISO/OSI) ispezione stateless ispezione stateful a livello applicativo (es. server proxy) In base a cosa filtrare? Per decidere della sorte di un pacchetto / segmento ci si può basare: sui contenuti interfaccia di rete mac address indirizzo ip sorgente/destinazione protocollo (TCP, UDP, ICMP) porta sorgente/destinazione sullo stato (ispezione stateful) new established related invalid Netfilter e Iptables Netfilter è la componente del kernel che si occupa del transito dei pacchetti IP. Iptables è il comando con cui si amministrano le tabelle che usa Netfilter Le tabelle Iptables gestisce tre tabelle in cui vengono definite le catene: filter (default) nat mangle La tabella filter La tabella filter ha lo scopo di determinare quali pacchetti / segmenti devono essere fatti transitare. Contiene le catene: INPUT (pacchetti destinati all host) FORWARD (pacchetti in transito) OUTPUT (pacchetti in uscita dall host)

100 La tabella nat La tabella nat ha lo scopo di determinare che tipo di operazioni sugli indirizzi IP e sulle porte TCP/UDP devono essere fatte sui pacchetti in transito. Contiene le catene: PREROUTING (pacchetti in ingresso, DNAT) OUTPUT (pacchetti originati nell host, DNAT) POSTROUTING (pacchetti in uscita, SNAT, MASQUERADE) La tabella mangle La tabella mangle ha lo scopo di determinare quali operazioni di manipolazione devono essere fatte sui pacchetti in transito (ad esempio, modifica del TTL, time to live). Contiene le catene: PREROUTING (pacchetti in ingresso) OUTPUT (pacchetti originati nell host) Le catene Di ogni pacchetto IP, viene decisa la sorte tramite il controllo di regole organizzate in catene. Le regole hanno la forma descrizione -> azione Alla prima corrispondenza della descrizione, si applica l azione (le regole successive vengono ignorate, tranne nel caso in cui l azione sia una registrazione dell evento nel file di log). In assenza di corrispondenze si applica la policy di default Comandi Iptables Vediamo alcuni semplici comandi di iptables: visualizzazione delle regole correnti sudo iptables -nl INPUT sudo iptables -nl -t nat PREROUTING cancellazione di tutte le regole sudo iptables -F INPUT inserimento di una regola iptables -A INPUT [match] [operazione] eliminazione di una regola iptables -D INPUT [match] [operazione] impostazione di regole di default (policies) iptables -P INPUT [operazione] creazione di proprie catene iptables -N MiaCatena 100

101 Alcuni esempi di comandi Qui di seguito sono riportati alcuni comandi con cui è possibile iniziare ad esercitarsi. Una lettura di iptables(8) è quanto mai raccomandabile. $ sudo iptables -nl INPUT # mostra le regole correnti per la tabella filter $ sudo iptables -F INPUT # cancella la catena INPUT della tabella filter $ sudo iptables -A INPUT -p tcp --dport 80 -j REJECT # aggiunge la regola per rifutare tutti i pacchetti TCP # destinati alla porta 80 $ sudo iptables -A INPUT -p tcp --syn -j REJECT # aggiunge la regola per rifiutare tutti i pacchetti TCP # con il bit syn impostato (che serve a iniziare una # connessione) $ sudo iptables -t nat -A OUTPUT -p tcp --dport j REDIRECT --to-port 80 # aggiunge la regola per cui tutti i pacchetti TCP # destinati alla porta 7080 vengono reindirizzati alla # porta 80 $ sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination :80 # aggiunger la regola per cui tutti i pacchetti TCP # destinati alla porta 80 vengono reindirizzati al calcolatore # con indirizzo IP Save e Restore La situazione corrente delle regola impostate può essere fotografata con il programma iptables-save, che produce un file di testo leggibile dal programma iptables-restore. $ sudo iptables-save > config $ sudo iptables-restore < config Il problema dell FTP passivo In alcune connessioni FTP, il client comunica al server FTP il numero di una porta sulla quale si pone in attesa di connessione per ricevere i dati (FTP passivo). Questa porta è bloccata per i pacchetti che iniziano connessioni dall esterno. Per fortuna esistono moduli del kernel che ci aiutano: sudo modprobe ip_nat_ftp sudo modprobe ip_conntrack_ftp I proxy server I proxy server (serventi intermediari) funzionano in userspace, a livello applicativo: interpretano alcuni particolari protocolli (es. HTTP, FTP) possono avere funzioni di cache collettiva possono essere fatti funzionare in maniera trasparente 6.7 Samba Samba Su Samba, il software che consente di effettuare molte cose per lo scambio di informazioni tra Windows e Linux, ci sarebbero molte cose da dire. Qui appunterò soprattutto quelle per cui esiste poca documentazione. 101

102 6.7.2 Pdbedit Gli account utenti possono essere registrati in file di testo, in file binari (tdb) o gestiti tramite LDAP. Per modificare le impostazioni di un utente nei file tdb si usa il programma pdbedit Pdbedit - blocco account dopo X tentativi La politica impostata correttamente si visualizza con il comando: sudo pdbedit -P "bad lockout attempt" Per impostare 3 tentativi si può impartire il comando: sudo pdbedit -P "bad lockout attempt" -C Pdbedit - scadenza password La politica impostata correttamente si visualizza con il comando: sudo pdbedit -P "maximum password age" Per impostare l obbligo di cambiare la password dopo 90 giorni si può impartire il comando: sudo pdbedit -P "maximum password age" -C Pdbedit - lunghezza minima password La politica impostata correttamente si visualizza con il comando: sudo pdbedit -P "min password length" Per impostare la lunghezza minima della password a 8 caratteri si può impartire il comando: sudo pdbedit -P "min password length" -C Pdbedit - obbligo cambio password Per impostare per l utente mario l obbligo di cambiare la password al primo accesso si può impartire il comando: sudo pdbedit -u mario --pwd-must-change-time 0 7 Scripting 7.1 Personalizzazione dell ambiente di shell Variabili e valori Le variabili sono dei contenitori di valori. Nella bash si possono assegnare valori alle variabili in maniera molto semplice. Bisogna però ricordarsi di non mettere spazi prima o dopo il segno =: $ NOME = mario bash: NOME: command not found $ NOME= mario bash: mario: command not found $ NOME=mario Per recuperare il valore di una variabile, si deve anteporre il segno $ al nome: $ echo $NOME mario 102

103 7.1.2 Variabili Esistono due tipi di variabili: variabili della shell (non ereditate dai processi figli) variabili d ambiente (ereditate) Nell esempio che segue, viene assegnato un valore a una variabile, viene visualizzato il valore della variabile (insieme al PID della shell), viene aperta una shell figlia e viene mostrato che il valore non è stato ereditato in quest ultima: $ NOME=mario # quando si assegna un valore non bisogna mettere uno spazio prima dell uguale! $ echo Nella shell $$ NOME è $NOME Nella shell NOME è mario $ bash $ echo Nella shell $$ NOME è $NOME Nella shell NOME è Esportazione delle variabili Le variabili possono essere esportate per far sì che il loro valore sia letto anche dai processi figli (incluse le sottoshell). L esportazione è unidirezionale (le sottoshell non possono esportare le variabili verso la shell genitore). L esportazione si effettua con il comando export (anche direttamente in sede di assegnazione del valore). $ export NOME=mario $ echo Nella shell $$ NOME è $NOME Nella shell NOME è mario $ bash $ echo Nella shell $$ NOME è $NOME Nella shell NOME è mario Variabili d ambiente Le variabili d ambiente sono disponibili per i processi figli. Molte variabili si trovano già preimpostate (grazie ai file di configurazione). Per vedere il valore delle variabili correntemente impostate, si può usare il comando set (che mostra anche le variabili di shell) o il comando env (che mostra solo le variabili d ambiente); per vedere il valore di una singola variabile, il comando echo. $ set head -5 BASH=/bin/bash BASH_ARGC=() BASH_ARGV=() BASH_COMPLETION=/etc/bash_completion BASH_COMPLETION_DIR=/etc/bash_completion.d $ echo $BASH /bin/bash Variabili d ambiente interessanti Alcune variabili degne di nota: HOSTNAME: il nome del sistema PATH: il percorso di ricerca degli eseguibili HOME: la propria home directory USERNAME: il proprio nome utente TERM: il tipo di terminale LANG: la lingua scelta EDITOR: l editor preferito IFS: internal field separator, il carattere usato come separatore 103

104 7.1.6 Modificatori di variabili Può capitare di voler accedere solo a parte di variabile (una sottostringa). La cosa è fattibile tramite i modificatori di variabile. Eccone alcuni: rimozione del minor suffisso ($ x=file.c; echo ${x%.c}.o --> file.o) rimozione del maggior suffisso ($ x=posix/src/std; echo ${x%%/*} --> posix) rimozione del minor prefisso ($ x=$home/src/cmd; echo ${x#$home} --> /src/cmd) rimozione del maggior prefisso (x=/one/two/three; echo ${x##*/} --> three) estrazione di parte di stringa ($ x=abcdef; echo ${x:4} --> ef) estrazione di parte di stringa ($ x=abcdef; echo ${x:2:3} --> cde) valori di default ($ unset x; echo ${x:-altro} --> altro) I prompt della shell La Bash mette a disposizione quattro messaggi di sollecito (prompt) che possono essere personalizzati: 1. PS1 (primario) 2. PS2 (usato per il completamento delle stringhe su più righe) 3. PS3 (usato per la gestione dei menù con select) 4. PS4 (usato per la traccia di esecuzione) Personalizzazione del prompt I prompt possono essere personalizzati modificando il valore delle variabili d ambiente corrispondenti: PS1= \W (\t)\$ # directory di lavoro, più ora corrente intro-linux (15:16:37)$ $ PS1= \d \u \$ # data corrente, più nome utente ven mar 21 loris $ $ PS2= (continua...) > $ mkdir "una directory che (continua...) > nel nome... (continua...) > ha dei caratteri di ritorno carrello" Personalizzazione della variabile PATH La variabile PATH è usata per specificare in quale directory devono essere cercati gli eseguibili. Ad esempio, si può impostare la variabile aggiungendo la directory corrente ai valori attuali: $ echo $PATH /home/loris/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games $ PATH="$PATH:." $ echo $PATH /home/loris/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:. In questo modo sarà possibile eseguire gli script della directory corrente senza dover digitare./ prima del nome del file (non che questo sia raccomandabile, però). 104

105 Personalizzazione dei colori della lista dei file Il comando ls mostra i nomi dei file colorati a seconda dell estensione, basandosi sul valore della variabile LS_COLORS. Il valore di tale variabile può essere modificato sfruttando il programma dircolors. 1. digitare dircolors -p > elencocolori per produrre un file contenente le corrispondenze attuali 2. modificare il file elencocolori con l editor preferito 3. digitare dircolors elencocolori > comandi per far leggere il file di configurazione e produrre i comandi necessari per l uso da parte della Bash 4. eseguire source comandi per eseguire i comandi e impostare la variabile LS COLORS Alias È possibile definire delle scorciatoie per l esecuzione di alcuni comandi, o di alcuni comandi con determinate opzioni predefinite. Queste scorciatoie sono chiamate alias. $ alias ll= ls -l $ ll total 8 -rw-r--r-- 1 loris loris :48 uno -rw-r--r-- 1 loris loris :45 due -rw-r--r-- 1 loris loris :45 tre Note: con gli alias non viene attivato l autocompletamento specifico della shell. gli alias non possono essere usati all interno di script Funzioni È possibile definire delle funzioni. $ function saluta { ORA=$(date + %k ); [[ $ORA < 13 ]] && echo buongiorno echo buon pomeriggio; } $ saluta buon pomeriggio Le funzioni possono essere utilizzate passando loro dei parametri (che vedranno come $1, $2 ecc.). Le funzioni possono essere esportate con export -f Funzioni wrapper Una funzione può costituire un wrapper per un comando builtin. All interno della definizione della funzione, si dovrà usare il comando builtin per richiamare il comando built-in stesso. $ cd() { builtin cd "$1" && echo "cambiata directory in $1"; } $ cd.. cambiata directory in Ordine di ricerca Dove verrà cercato il comando da eseguire? L ordine di ricerca dovrebbe essere il seguente: 1. alias 2. funzione 3. comando built-in 4. hash 5. path 105

106 Qual è l ambiente? Un programma può sapere quali sono le variabili d ambiente impostate. Il prototipo di un programma C potrebbe essere questo: #include <stdio.h> int main(int argc, char **argv, char **envp) int x; for (x=0; envp[x]!= 0; ++x){ printf("%d: %s\n", x, envp[x]); } Esecuzione con ambiente modificato Un comando può essere eseguito in un ambiente modificato (eliminando alcune delle o tutte le variabili d ambiente): $ env -i date # esecuzione con ambiente "svuotato" Fri Mar 21 17:57:29 CET 2008 $ env -u LANG cal # esecuzione con variabile "disimpostata" March 2008 Su Mo Tu We Th Fr Sa Shebang indipendente dalle locazioni dei file Un motivo per usare il programma env è anche quello di poter predisporre degli script la cui prima riga (nota come bang path o shebang) sia indipendente dalla locazione dei programmi eseguibili. Ad esempio, spesso la prima riga di uno script python contiene nella prima riga: #!/usr/bin/env python Questo fa sì che lo script possa essere eseguito indipentemente dalla posizione dell interprete python (che potrebbe essere /usr/bin/python, /usr/local/bin/python ecc.) Impostazioni della shell Bash Alcuni comportamenti della Bash possono essere impostati agendo su delle opzioni interne. Particolarmente interessanti risultano: set -o allexport (set -a): esporta automaticamente le variabili create set -o noclobber (set -C): fa sì che non vengano sovrascritti file con la ridirezione dell output set -o nounset (set -u): fa sì che venga considerato errore riferirsi ad una variabile non impostata set -o ignoreeof: fa sì che venga ignorato un eventuale (accidentale) EOF (ctrl-d) Le opzioni sono impostate con set -o e disimpostate con set +o. $ touch uno $ set -o noclobber $ cal > uno bash: uno: cannot overwrite existing file $ set +o noclobber $ cal > uno $ set -o nounset $ echo $NONESISTENTE bash: NONESISTENTE: unbound variable 106

107 File di configurazione I file di configurazione dove è possibile impostare variabili, alias, funzioni, ecc. sono diversi (alcuni di sistema, altri gestibili dal singolo utente). /etc/profile (letto all avvio di ogni shell di login) /etc/bashrc o /etc/bash.bashrc (letto all avvio di ogni nuova shell bash) /etc/inputrc (letto all avvio di ogni nuova shell) /.bash profile (opzionale) /.bash login (opzionale) /.profile (letto all avvio di ogni shell di login) /.bashrc (letto all avvio di ogni nuova shell) /.bash logout (letto al logout delle shell di login) /.inputrc (all avvio di ogni nuova shell) 7.2 Introduzione allo scripting bash Codice di uscita dei programmi Normalmente i programmi, al termine della loro esecuzione, restituiscono un valore numerico intero, detto codice di uscita (exit code). Si pensi ad esempio al classico Hello world! : #include <stdio.h> int main(int argc, char **argv) } printf("hello, world!\n"); return 0; Utilizzo del codice di uscita Dalla shell si può sapere qual è il codice di uscita dell ultimo programma eseguito tramite il valore della variabile?. $./hellow Hello, world! $ echo $? Utilizzo del codice di uscita (2) Molti programmi usano i codici di uscita per comunicare informazioni nascoste. Si provi ad esempio a usare grep: $ grep http /etc/services www 80/tcp http # WorldWideWeb HTTP https 443/tcp # http protocol over TLS/SSL https 443/udp $ echo $? $ grep nonesistente /etc/services $ echo $? $ grep qualcosa /file/nonesistente grep: /file/nonesistente: No such file or directory $ echo $? 107

108 7.2.4 Il programma test Il programma test comunica il proprio risultato solo attraverso il codice di uscita. $ test -d /home $ echo $? $ test -d /casa $ echo $? $ test 4 = 4 $ echo $? $ test 4 = 5 $ echo $? Comparazione di valori Quando si usa test, bisogna ricordarsi che l espansione delle variabili viene fatta dalla shell. $ test A = B $ test A = B C bash: test: too many arguments $ test A = "B C" $ VAR1="B C" $ test A = $VAR1 bash: test: too many arguments $ test A = "$VAR1" Uso dei codici di uscita I codici di uscita possono essere usati tramite la cosiddetta valutazione di corto circuito. $ test A = B && echo uguali echo diversi diversi $ test A = A && echo uguali echo diversi uguali test, /usr/bin/test o [? Quando si usa il comando test in realtà si usa il comando incorporato della Bash. Inoltre, si tenga presente che esiste anche la forma abbreviata [, sia come programma esterno che come comando interno. $ [ A = B ] && echo uguali echo diversi diversi $ [ A = A ] && echo uguali echo diversi uguali La bash, inoltre, dispone di un equivalente più semplice da usare, [[ Esecuzione degli script Gli script della Bash sono semplici file ASCII. Si possono eseguire in tre modi diversi: bash mioscript (invocazione esplicita di una subshell) source mioscript o. mioscript (esecuzione nell ambito della shell corrente)./mioscript o mioscript (esecuzione autonoma, con specificazione o meno del path: funziona a patto che lo script sia stato reso eseguibile) 108

109 7.2.9 Debugging degli script Il debug può essere effettuato mostrando passo l istruzione che verrà eseguita (prima o dopo l espansione). $./saluta #esecuzione semplice ciao, loris! $ bash -x saluta #debugging con -x + echo ciao, loris! ciao, loris! $ bash -v saluta #debugging con -v #!/bin/bash echo ciao, $USER! ciao, loris! Costrutti importanti Nell ambito della Bash si fa uso dei classici costrutti della programmazione imperativa: if...; then...; else...; fi (selezione) while...; do...; done (ciclo while) until...; do...; done (ciclo while con test negativo) for... in...; do...; done (ciclo for) Si possono inoltre definire funzioni, usare variabili (non tipizzate), ecc Parametri della riga di comando Si possono ovviamente valutare i parametri della riga di comando. $0: nome del programma invocato $#: il numero di parametri da $1 a $9: gli altri parametri, in ordine da ${1} a ${$#}: tutti i parametri Guida avanzata di scripting Bash... per imparare veramente lo scripting, l unico modo è quello di scrivere script (Mendel Cooper, autore della Guida avanzata di scripting Bash 49 ) 7.3 Grep, Sed, Gawk e altri utili filtri Filtri I programmi che funzionano come filtro agiscono facendo delle modifiche a quello che leggono dal proprio standard input e generando di conseguenza uno standard output. Alcuni esempi semplici: cat -n tac rev sort, sort -n, sort -r head tail

110 7.3.2 Cut Il programma cut preleva alcuni campi delle righe di input. $ getent passwd root cut -d: -f7 /bin/bash Expand e Unexpand Il programma expand converte i caratteri di tabulazione in spazi. Il programma unexpand fa l opposto. $ cat bashscript #!/bin/bash for i in do echo $i done $ cat bashscript expand -t4 #!/bin/bash for i in do echo $i done $ cat bashscript expand -t1 #!/bin/bash for i in do echo $i done Fmt Il programma fmt formatta il testo a una specifica lunghezza della riga. $ cat testolungo.txt Un filtro software è un programma che trasforma dati in base a criteri predeterminati. Tra i programmi di tipo filtro, esistono dei software in grado di selezionare pagine su Internet in base ad alcuni [snip] (dalla Wikipedia) $ cat testolungo.txt fmt Un filtro software è un programma che trasforma dati in base a criteri predeterminati. Tra i programmi di tipo filtro, esistono dei software in grado di selezionare pagine su Internet in base ad alcuni [snip] giochi, ecc.). (dalla Wikipedia) $ cat testolungo.txt fmt -w 40 Un filtro software è un programma che trasforma dati in base a criteri predeterminati. Tra i programmi di [snip] (dalla Wikipedia) Head e Tail I programmi head e tail mostrano, rispettivamente, le prime e le ultime righe (o i primi e gli ultimi byte, a seconda dell opzione) di un file. Se si indica di leggere più di un file, viene mostrata una riga di intestazione per ciascun file. $ head -n2 /etc/services /etc/protocols ==> /etc/services <== # Network services, Internet style ==> /etc/protocols <== # Internet (IP) protocols $ tail -n2 /etc/services /etc/protocols ==> /etc/services <== fido 60179/tcp # fidonet EMSI over TCP # Local services ==> /etc/protocols <== sctp 132 SCTP # Stream Control Transmission Protocol fc 133 FC # Fibre Channel 110

111 Notare che l opzione abbreviata -2 funziona con head ma non con tail. Il programma tail può funzionare anche per seguire in tempo reale la crescita di un file (utile per i log) Join Il programma join stampa una linea per ciascuna coppia di linee provenienti da due file con un campo in comune (con lo stesso valore), un po come con un join tra tabelle in una base di dati. $ cat tipi-mime image/gif image/jpeg image/png image/tiff image/x-ms-bmp image/x-photoshop $ cat lista-defaults image/bmp eog image/gif eog image/jpeg eog image/jpg eog image/png eog image/tiff gimp-2.2 image/x-psd gimp-2.2 $ join tipi-mime lista-defaults image/gif gif eog image/jpeg jpeg jpg jpe eog image/png png eog image/tiff tiff tif gimp-2.2 gif jpeg jpg jpe png tiff tif bmp psd Importante: i due file devono essere ordinati rispetto ai campi di join Nl Il programma nl numera le righe dei file di input tenendo in considerazione l eventuale presenza di stringhe speciali (es. \:) per la delimitazione di intestazione, corpo e piè di pagina. $ cat testo.txt \:\:\: I filtri \:\: Un filtro software è un programma che trasforma dati in base a criteri predeterminati. \: Filtro (wikipedia) $ nl testo.txt I filtri 1 Un filtro software è un 2 programma che trasforma 3 dati in base a criteri 4 predeterminati. Filtro (wikipedia) Od Il programma od mostra il contenuto di un file in ottale, esadecimale e in vari altri formati. $ cat testoacapo testo capo $ od -t a testoacapo t e s t o nl a nl c a p o nl $ od -t c testoacapo t e s t o \n a \n c a p o \n

112 $ od -t x1 testoacapo f 0a 61 0a f 0a $ od -t x4 testoacapo a610a6f 6f a Paste Il programma paste accosta le linee corrispondenti di uno o più file. $ cat nomi mario giovanni luisa $ cat cognomi rossi bianchi neri $ paste nomi cognomi mario rossi giovanni bianchi luisa neri $ paste -d nomi cognomi mario rossi giovanni bianchi luisa neri $ paste -s -d\; nomi cognomi mario;giovanni;luisa rossi;bianchi;neri Pr Il programma pr converte il file di input in una versione impaginata, con intestazioni e piè di pagina. $ cat testolungo.txt fmt -w 30 pr -l 12 -W 30 -h "Documento sui filtri software" Uniq e Wc Il programma uniq elimina righe duplicate adiacenti; per questo motivo è spesso usato dopo sort. Il programma wc conta i caratteri, le parole e le righe. $ getent passwd cut -d: -f7 sort uniq # quali sono le shell impostate /bin/bash /bin/false /bin/sh /bin/sync /usr/sbin/nologin $ getent passwd cut -d: -f7 sort uniq wc -l # quante sono le shell impostate Grep Il programma grep mantiene le righe che soddisfano (o non soddisfano) un certo criterio costituito da una espressione regolare. $ getent services grep http www 80/tcp http https 443/tcp https 443/udp getent services grep ^http https 443/tcp https 443/udp $ getent services head -5 grep -v udp tcpmux 1/tcp echo 7/tcp discard 9/tcp sink null Con grep è anche possibile contare le righe in cui c è la corrispondenza, mostrare le righe adiacenti, ecc. 112

113 Gawk Il programma gawk agisce sui singoli campi, riformattandoli, usandoli per fare delle operazioni, ecc. Per i prossimi esempi, immaginiamo di avere un file di testo chiamato datipersonali. Innanzitutto diamo un occhiata al suo contenuto: $ cat datipersonali 12 alice pordenone 24 berto udine 36 camilla trieste 48 daniele gorizia 60 elisabetta treviso Gawk, estrazione di campi Con gawk possiamo estrarre i singoli campi: $ cat datipersonali gawk { print $3 } pordenone udine trieste gorizia treviso $ cat datipersonali gawk { print $2 } alice berto camilla daniele elisabetta Gawk, estrazione di campi (2) Con gawk possiamo estrarre i singoli campi: $ cat datipersonali gawk {print $0} # tutti i campi 12 alice pordenone 24 berto udine 36 camilla trieste 48 daniele gorizia 60 elisabetta treviso $ cat datipersonali gawk BEGIN {n=3} {print $n} pordenone udine trieste gorizia treviso Gawk, test sui campi Con gawk possiamo fare dei test sul valore dei singoli campi: $ cat datipersonali gawk { if ($2 == "alice") print $3 } pordenone $ cat datipersonali gawk { if ($1 <= 40) print $2 } alice berto camilla Gawk, operazione sui valori dei campi Con gawk possiamo fare operazioni sui valori dei singoli campi: $ cat datipersonali gawk {s += $1} END {print s} 180 $ cat datipersonali gawk BEGIN {s=10000} {s += $1} END {print s}

114 Gawk, separatore Possiamo indicare ciò che consideriamo separatore dei campi: $ getent passwd gawk BEGIN {FS=":"} {print $1} tail -5 andrea_p federica_p marco_p monica_s mattia_z Gawk, espressioni regolari Possiamo lavorare solo sulle righe che contengono una determinata espressione regolare: $ cat datipersonali gawk /ab/ {print $3} treviso... oppure controllare la corrispondenza di un singolo campo: $ cat datipersonali gawk {if ($2 ~ /a/) print $3} pordenone trieste gorizia treviso $ cat datipersonali gawk {if ($2!~ /a/) print $3} udine Gawk, controllo del tipo di file Si supponga di voler trovare tutti i file di un certo tipo (restituito dal comando file) in una directory e in tutte le sue sottodirectory. Ad esempio, tutti i file di tipo text della directory /sbin. Una pipeline risolve il problema: $ find /sbin -type f xargs -i file {} gawk \ { FS=":"; if ($2 ~ /text/) print $1} /sbin/makedev /sbin/insmod_ksymoops_clean /sbin/kernelversion /sbin/shadowconfig /sbin/fsck.nfs /sbin/hotplug /sbin/mdrun /sbin/update-modules.modutils /sbin/update-modules Gawk, riformattazione I campi dell input possono essere ricalcolati/riformattati. Ad esempio, il log di squid presenta righe in cui nel primo campo c è il numero di secondi dall epoch, ma potremmo desiderare dei valori più comprensibili: $ cat squid_access.log TCP_MISS/ TCP_MISS/ TCP_MISS/2... $ cat squid_access.log gawk {$1=strftime("%F_%T",$1); print $0} _12:02: TCP_MISS/ _12:02: TCP_MISS/ _12:02: TCP_MISS/

115 Sed, lo stream editor Sed agisce sulle righe dell input in diversi modi. L uso più comune ha a che fare con la sostituzione di stringhe: $ getent services head -3 sed s/echo/ecco/ tcpmux 1/tcp ecco 7/tcp ecco 7/udp... ma anche: $ getent services head -3 sed sa/a a tcpmux 1 tcp echo 7 tcp echo 7 udp Sed, selezione di gruppi di righe Sed può selezionare gruppi di righe. In base al contenuto: $ getent services sort sed -n /^fido/,/^ftp/p fido 60179/tcp finger 79/tcp font-service 7100/tcp xfs font-service 7100/udp xfs frox 2121/tcp fsp 21/udp fspd ftp 21/tcp... oppure in base al numero di riga: $ getent services sort cat -n sed -n 12,18p 12 afs3-callback 7001/udp 13 afs3-errors 7006/tcp 14 afs3-errors 7006/udp 15 afs3-fileserver 7000/tcp bbs 16 afs3-fileserver 7000/udp bbs 17 afs3-kaserver 7004/tcp 18 afs3-kaserver 7004/udp 8 Applicazioni 8.1 Vim, l editor di riferimento Introduzione a VIM VIM, o VI improved, è un editor di testo che migliora l editor vi, a sua volta un programma che ha migliorato l editor a righe ed facendolo diventare un editor visuale (caratteristica da cui deriva il nome). Vi è l unico editor che è presente in praticamente tutte le versioni di Unix e Linux, ed è spesso impostato come editor di default per le operazioni di amministrazione. Caratteristica importante di Vi è che si tratta di un programma che opera in base alla modalità corrente: la pressione dello stesso tasto ha significati diversi a seconda del contesto operativo Le basi Si può iniziare a capire come funziona VIM con il programma vimtutor, che avvia un esercitazione a copertura dei seguenti aspetti: movimenti del cursore editing di testi (inserimenti e cancellazione) 115

116 comandi e oggetti (undo, put, replace, change) posizionamento e situazione file ricerche esecuzione comandi esterni gestione di file impostazione di opzioni Ripetizione dell ultimo comando Un qualsiasi comando complesso appena impartito può essere ripetuto. Ad esempio, il comando vai alla fine della riga, elimina l ultimo carattere, vai a capo, aggiungi le graffe di apertura e chiusura può essere impartito per la prima di queste righe e poi successivamente senza alcuna fatica digitando semplicemente il carattere punto. void function_one(int a, int b); void function_two(char a, char *b); void function_three(void); diventa... (digitando la prima volta A, <backspace>, <newline>, {, }, <newline> e per le righe successive solo.): void function_one(int a, int b) void function_two(char a, char *b) } void function_three(void) Corrispondenza delle parentesi Il comando % sposta il cursore alla prima parentesi chiusa rilevante (e alla successiva pressione alla corrispondente aperta). Ad esempio, digitando % con il cursore sopra la A, il cursore si sposta sopra la B: function_one(function_two()); A B Si può utilizzare questo fatto per tagliare il testo selezionato automaticamente selezionato con c% Modalità visuale Le operazioni di selezione possono essere fatte in maniera agevole e chiara nella modalità visuale (a carattere con v, a linea con V, a blocco con <control>-v Macro e registri Si può registrare una macro premendo q seguito da una lettera (al termine della registrazione, si preme di nuovo q). Per eseguire la macro, si e la lettera corrispondente. Quando si taglia un testo, questo viene posto in un registro senza nome. Se lo si desidera, si possono usare i registri con nome da a a z mediante, ad esempio, "cdd (taglia la riga corrente e mettila nel registro c). Se si vuole accodare il testo al registro, si usa la lettera maiuscola per indicare il registro stesso. Per incollare, si può usare il corrispondente "cp. 116

117 8.1.7 Selezione primaria e clipboard di sistema La selezione primaria e la clipboard di sistema sono dei registri speciali, accessibili con il nome * e +, rispettivamente. Ad esempio, per copiare due righe come selezione primaria si può digitare "*2yy (il contenuto della selezione primaria è reso disponibile nelle altre applicazioni Xwindow premendo il pulsante centrale del mouse) Modalità last-line La modalità last-line è quella in cui si impartiscono comandi complessi che necessitano di parametri da specificare (es. ricerche di testo, sostituzioni, impostazione opzioni). In modalità last-line vale una history locale Ricerche Le ricerche (basate sulle espressioni regolari) possono avvenire: in modalità last-line (in avanti, es. /void, oppure in indietro, es.?void) in modalità comando (n per l occorrenza successiva, N per la precedente, * per la prossima occorrenza della parola sulla quale si trova il cursore) Con il comando :set hlsearch si fa in modo che tutte le occorrenze vengano evidenziate, con il comando :set incsearch si vedono le occorrenze al volo Sostituzioni La sostituzione di un testo (trova e sostituisci) avviene: sulla riga corrente (es. :s/anna/anna/ per la prima occorrenza, oppure :s/anna/anna/g per tutte le occorrenze) sull intero testo (es. :%s/anna/anna/ per la prima occorrenza, oppure :%s/anna/anna/g per tutte le occorrenze) Impostazione di opzioni Le opzioni si possono impostare: a tempo di esecuzione, in modalità last-line (es. :set number) nei file di configurazione (di sistema, come /etc/vim/vimrc o personali, come /.vimrc) al momento dell esecuzione (es. vi +"set number" documento.txt) Divisione della finestra Una finestra si può dividere orizzontalmente (:split) o verticalmente (:vsplit). Per passare da una sottofinestra all altra si deve premere due volte <ctrl>-w. Utili sono poi i comandi :close e :only Alcune opzioni interessanti Alcune opzioni di VIM che potrebbe valere la pena di impostare: :set cursorline (evidenzia la riga in cui si trova il cursore) :set cursorcolumn (evidenzia la colonna in cui si trova il cursore) :highlight CursorLine ctermbg=lightgray (es. di impostazione del colore) :syntax on (abilita l evidenziazione sintattica) :set mouse=a (abilita l uso del mouse in tutte le modalità di lavoro) 117

118 Altre cose utili (1) Varie cose che possono tornare utili: :cmap <F2> :w<cr> (mappatura di comandi) :iab perche perché (sostituzione di caratteri) <ctrl>-a (incrementa numero) <ctrl>-x (decrementa numero) ~ (maiuscolo/minuscolo) Altre cose utili (2) Alcune cose che si possono fare: aprire un file binario con vim -b (utile con file zip/tar) aprire più file contemporaneamente (si passa da uno all altro con :1b, :2b ecc.) aprire un file con una ricerca impostata (vim +/_stringa nomefile_) aprire un file posizionando il cursore su una riga (vim +_num nomefile_) passare da less a VIM (premendo v) usare un interfaccia grafica (gvim) Per maggior aiuto Nel caso in cui si vogliano sfruttare al meglio le possibilità di VIM, si può consultare la guida in linea: :help :help <argomento> (aiuto su argomento) :help! (aiuto in casi disperati) 9 Sicurezza 9.1 Codice in materia di protezione dei dati personali La cosiddetta Legge sulla privacy Il Codice in materia di protezione dei dati personali 50 (D. Lgs. 196/2003), noto anche come Legge sulla privacy, prevede l obbligatorietà di alcune misure di sicurezza per tutte le organizzazioni (e, in alcuni casi, anche per i privati cittadini) che trattano dati personali. Quelli che seguono sono solo degli appunti veloci e non pretendono di essere corretti, completi, esaustivi ed aggiornati Principio di necessità È necessario ridurre al minimo i dati personali e identificativi. (vedi art. 3) Dati personali I dati personali sono tutti quelli che riguardano le persone (fisiche e giuridiche) e/o che ne consentono l identificazione. Particolare importanza e necessità di tutela hanno i dati sensibili e quelli giudiziari. (vedi art. 4)

119 9.1.4 Sanzioni Un organizzazione che non rispetta la normativa è soggetta a due tipi di conseguenze giuridiche: richiesta di risarcimento danni, con inversione dell onere della prova (art. 15) sanzioni penali per omissione delle misure minime di sicurezza (art. 169) Soggetti coinvolti In un organizzazione, i soggetti coinvolti sono: il titolare (l organizzazione stessa, nella persona del suo legale rappresentante) i responsabili (persone preposte al trattamento dei dati) a) interne b) esterne gli incaricati (persone fisiche autorizzate materialmente a gestire i dati, svolgendo compiti definiti) gli amministratori di sistema (coloro che gestiscono i sistemi informativi, sia dal punto di vista dell hardware sia da quello del software) I responsabili vengono nominati, gli incaricati e gli amministratori vengono designati (ma per questi ultimi la designazione deve essere individuale) Istruzioni operative Le istruzioni operative date agli incaricati comprendono informazioni su: tipo di dati da trattare operazioni da eseguire software e funzionalità da utilizzare buone pratiche da seguire Possono essere generiche, per aree omogenee di trattamento (es. per tutti gli incaricati di un determinato settore/ufficio) Misure minime di sicurezza Le misure minime di sicurezza sono stabilite: nel Codice a) per il trattamento con strumenti elettronici (art. 34) b) per il trattamento senza strumenti elettronici (art. 35) nell allegato B al Codice in diversi Provvedimenti del Garante a) attribuzione di funzioni di amministratore di sistema b) internet e posta elettronica c) videosorveglianza d) dati genetici 119

120 9.1.8 Obblighi di sicurezza È necessario ridurre al minimo (art. 31) i rischi di: distruzione dei dati (incendi, allagamenti, alluvioni, terremoti) perdita dei dati (cancellazione accidentale, guasti, perdita fisica dei supporti) accesso non autorizzato ai dati (attacchi esterni e interni, accessi fisici in locali riservati) trattamento non consentito dei dati La diligenza richiesta dipende da: progresso tecnico natura dei dati caratteristiche specifiche del trattamento Misure minime Le misure minime di sicurezza (art. 4, comma 3, lettera A) sono di tipo: tecnico (serrature, accesso con badge, ecc.) informatico organizzativo (personale suddiviso in categorie omogenee) logistico (posizione fisica dei dati) procedurali 9.2 Sicurezza informatica Sicurezza informatica Cosa si intende per sicurezza informatica? In genere, si fa riferimento a questi aspetti: confidenzialità o riservatezza (accesso in maniera esclusiva alle informazioni) integrità (garanzia che i dati non siano stati alterati da chi non doveva) disponibilità (possibilità effettiva di accesso ai dati nel momento in cui servono) Sicurezza informatica / 2 Altre cose possono essere tenute in considerazione, come ad esempio: non ripudiabilità (impossibilità di sottrarsi alla responsabilità) interoperabilità (semplicità nella comunicazione tra applicazioni) coerenza delle informazioni (detta a volte, erroneamente, consistenza) manutenibilità del software (possibilità di apportare modifiche) accessibilità ai dati a lungo termine (supporti, formati) 120

121 9.2.3 Strategie per la protezione dei dati Una efficace protezione dei dati ha a che fare con: sicurezza fisica (disastri, attacchi, manomissioni) backup (locale, geografico, incrociato) disaster recovery business continuity Norme, obblighi di legge, buone pratiche In Italia, aziende ed enti che trattano dati personali sono obbligate a misure minime di sicurezza dal Codice in materia di protezione dei dati personali 51. Il codice prevedeva, tra l altro, che venisse predisposto annualmente un Documento programmatico sulla sicurezza 52, ma il D.L. 5/2012, convertito con modificazioni dalla Legge 35/2012, ha abolito l obbligo. Le organizzazioni che vogliono certificare il loro sistema informatico come sicuro possono farlo seguendo le indicazioni dello standard ISO 27001: Ovviamente, tutte le organizzazioni possono seguire le buone pratiche definite nelle checklist anche senza puntare alla certificazione Gestione del rischio Assodato che la sicurezza assoluta non esiste, ciò a cui si punta è un sistema ragionevolmente sicuro. Per ogni problema individuato, è possibile: risolverlo ridurre il rischio trasferire il rischio Sicurezza fisica Per sicurezza fisica si intende la protezione materiale dei dati. I possibili problemi fisici includono: guasti hardware incidenti mancanza di elettricità allagamenti incendi furti Sicurezza logica Per sicurezza logica si intende la protezione dei dati dall accesso abusivo da parte di persone non autorizzate. login non autorizzato furto di credenziali virus e, in generale, malware (cavalli di Troia, spyware, keyloggers, ecc.) programmatico sulla sicurezza

122 9.2.8 Sicurezza fisica - Integrazione di sistemi Per la sicurezza fisica, le buone pratiche consigliano sistemi integrati che consentono di tenere sotto controllo: violazione dello spazio fisico (es. sistemi antifurto) problemi ambientali (es. impianto climatizzazione, sistemi per la domotica) problemi hardware (surriscaldamenti, problemi ai dischi) eventuali fallimenti nei backup Sicurezza fisica - Gestione dei server I calcolatori adibiti a server devono avere caratteristiche hardware adeguate e ridondate, in modo che sia possibile sopperire a problemi che si presentano senza che il servizio venga interrotto. Vanno ridondati: dischi memoria alimentatori (hot swap) schede di rete Vanno tenuti sotto controllo: gruppi di continuità (integrati con il software per garantire l eventuale spegnimento automatico) generatori diesel Sicurezza fisica - Gestione dei dati La gestione dei dati del server è particolarmente critica. Le tecnologie da considerare sono: RAID (Redundant Array of Independent Disks) DAS (Direct Attached Storage) NAS (Network Attached Storage) SAN (Storage Area Network) cloud computing (IaaS, PaaS, SaaS, per l accesso a servizi di infrastruttura, di piattaforma o software su calcolatori esterni) Inoltre, andranno previste adeguate politiche di backup, possibilmente incrociato e/o geografico Sicurezza fisica - Backup Nelle politiche di backup, va definito cosa va protetto e dov è ciò che va protetto. Le informazioni possono essere: strategiche importanti utili rinunciabili Il luogo (quale calcolatore? quale file e/o quale base di dati?) in cui si trovano le informazioni spesso non è così ovvio / noto. 122

123 Sicurezza logica - Credenziali di autenticazione Le credenziali di autenticazione si possono basare su: qualcosa che sai (password, passphrase) qualcosa che hai (O-key, file su chiavetta USB) qualcosa che sei (biometria) In Italia, le credenziali di tipo biometrico sono implementabili solo in casi particolari, per questioni legate alla privacy 54. Può essere utile usare un password manager Sicurezza logica - Dominio di autenticazione In linea di massima, le buone pratiche suggeriscono che esista, nella rete aziendale, un dominio di autenticazione con una gestione centralizzata degli account. In ambiente Linux, normalmente si usa un server LDAP Sicurezza logica - Autorizzazioni Oltre ad essere autenticati (per l accesso al calcolatore e/o alla rete), gli utenti devono essere autorizzati a compiere determinate operazioni. Le autorizzazioni possono avere a che fare con l accesso: ai documenti (permessi sul file system) ai dati (privilegi nei database) ai singoli moduli delle applicazioni software (quando previsti) Sicurezza logica - Cifratura dati Al fine di garantire riservatezza e integrità dei dati si può ricorrere alla crittografia, che può essere simmetrica o asimmetrica. Possono essere cifrati: singoli file (es. gpg) interi dischi / partizioni (es. truecrypt) messaggi di posta elettronica documenti allegati ai messaggi di posta elettronica dati in transito (es. ipsec, ssl, https) Sicurezza logica - Protezione della postazione di lavoro Le singole postazioni di lavoro andranno opportunamente configurate. Vanno tenute in considerazione: le politiche di aggiornamento del sistema operativo le politiche di aggiornamento dei programmi applicativi la configurazione corretta di: a) software antivirus b) personal firewall c) antimalware In ambiente Linux queste problematiche sono più facilmente gestibili che con altri sistemi operativi

124 Sicurezza logica - Sicurezza di rete La sicurezza di rete può essere implementata con: firewall aziendali politiche di controllo degli apparati di rete (switch, router, ecc.) IDS (Intrusion Detection System) IPS (Intrusion Prevention System) NIPS (Network Intrusion Prevention System) Sicurezza logica - Social Engineering Il fattore umano rischia di essere comunque quello più vulnerabile, soprattutto perché non si possono mettere in atto sistemi automatici di verifica. Le tecniche che sfruttano la fiducia umana per trarne un vantaggio indebito vanno sotto il nome di Social engineering (l esempio più comune è il phishing). 9.3 Sicurezza e GPG GPG Il programma standard usato per la crittografia privata è GPG (GNU Privacy Guard), implementazione libera di PGP. GPG offre funzionalità di cifratura a chiave simmetrica e a chiave pubblica Cifratura simmetrica Per cifrare un documento si può utilizzare l opzione -c (--symmetric): $ ls miodocumento.txt $ gpg --symmetric --force-mdc miodocumento.txt Enter passphrase: Repeat passphrase: $ ls miodocumento.txt miodocumento.txt.gpg (MDC sta per modification detection code: usando l opzione --force-mdc vengono introdotti dei controlli aggiuntivi relativi all assenza di modifiche al documento) Decifrazione simmetrica Per decifrare il documento si utilizza gpg senza opzioni: $ ls miodocumento.txt.gpg $ gpg miodocumento.txt.gpg gpg: CAST5 encrypted data gpg: encrypted with 1 passphrase Enter passphrase: $ ls miodocumento.txt miodocumento.txt.gpg 124

125 9.3.4 Generazione della chiave con GPG Per la generazione di una coppia di chiavi si usa il programma gpg con l opzione --gen-key (Quando molti utenti generano le coppie di chiavi su un calcolatore raggiunto via ssh può essere utile avviare rngd -r /dev/urandom al fine di non incappare nel problema della mancanza di un numero sufficiente di valori casuali. Questo però solo a scopo di test/esercitazione, visto che /dev/random non è valida fonte di entropia 55.) Tipo, lunghezza, durata della chiave Innanzitutto, viene chiesto di scegliere il tipo di chiave, la lunghezza, la durata. $ gpg --gen-key Please select what kind of key you want: (1) DSA and Elgamal (default) (2) DSA (sign only) (5) RSA (sign only) Your selection? 1... What keysize do you want? (2048) 1024 Requested keysize is 1024 bits Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) 0 Key does not expire at all Is this correct? (y/n) y Dati personali Successivamente, vengono richiesti i dati personali (nome, indirizzo , commento) e la passphrase: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Address in this form: "Heinrich Heine (Der Dichter) Real name: Bob address: Comment: You selected this USER-ID: "Bob Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o You need a Passphrase to protect your secret key Generazione effettiva Infine, le chiavi vengono effettivamente generate. Per aumentare la casualità dei valori, viene raccomandato di muovere il mouse e/o premere dei tasti durante la fase di generazione: We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy > > Rapporto di generazione Infine, viene mostrato il rapporto di su cosa è stato creato: 55 https://bugs.launchpad.net/ubuntu/+source/gnupg/+bug/

126 gpg: /home/bob/.gnupg/trustdb.gpg: trustdb created gpg: key 0488EA60 marked as ultimately trusted public and secret key created and signed. gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u pub 1024D/0488EA Key fingerprint = 5ACD FD1E A2F9 BE7E 9A4A B2A4 DD20 6BA EA60 uid Bob sub 1024g/42257BFD Firma digitale di un documento Per firmare digitalmente un documento si usa l opzione -s (o --sign): $ ls miodocumento.txt $ gpg --sign miodocumento.txt You need a passphrase to unlock the secret key for user: "Bob 1024-bit DSA key, ID 0488EA60, created $ ls miodocumento.txt miodocumento.txt.gpg Firma in file separato Se lo si desidera, la firma può consistere in un file separato: $ gpg --sign --detach-sign miodocumento.txt $ ls miodocumento.txt miodocumento.txt.sig Verifica della firma digitale Una firma digitale può essere verificata con l opzione --verify: $ gpg --verify miodocumento.txt.sig gpg: Signature made sab 16 mag :18:57 CEST using DSA key ID 0488EA60 gpg: Good signature from "Bob Nel caso di un file che incorpora documento e firma, il documento può essere estratto direttamente: $ ls miodocumento.txt.gpg $ gpg miodocumento.txt.gpg gpg: Signature made sab 16 mag :22:16 CEST using DSA key ID 0488EA60 gpg: Good signature from "Bob $ ls miodocumento.txt miodocumento.txt.gpg Fallimento della verifica Se il file originale viene modificato, la verifica ovviamente fallisce: $ # dopo aver modificato il file miodocumento.txt... $ gpg miodocumento.txt.sig gpg: Signature made sab 16 mag :55:26 CEST using DSA key ID 0488EA60 gpg: BAD signature from "Bob 126

127 Cifratura per un particolare destinatario Per cifrare un documento in modo che possa essere letto solo da un particolare destinatario, è necessario specificare il suo ID e usare l opzione -e (--encrypt): $ ls miodocumento.txt $ gpg --encrypt --recipient "Bob" miodocumento.txt $ ls miodocumento.txt miodocumento.txt.gpg L ID è la combinazione del nome e del commento (quest ultimo tra parentesi) Decifrazione del contenuto da parte del destinatario Il legittimo destinatario può usare gpg per decifrare il contenuto del file, usando la passphrase per sbloccare la chiave privata: $ gpg miodocumento.txt.gpg You need a passphrase to unlock the secret key for user: "Bob 1024-bit ELG-E key, ID 42257BFD, created (main key ID 0488EA60) gpg: encrypted with 1024-bit ELG-E key, ID 42257BFD, created "Bob Trasformazione dei file binari in file di testo (e viceversa) I file binari prodotti da gpg possono essere trasformati in file di testo mediante la loro codifica in base 64: $ gpg --enarmor miodocumento.txt.sig $ ls miodocumento.txt miodocumento.txt.sig miodocumento.txt.sig.asc $ cat miodocumento.txt.sig.asc -----BEGIN PGP ARMORED FILE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Use "gpg --dearmor" for unpacking ieyeabecaayfakoou5uacgkq3sbrogsi6mczgwcfwktu4b659p8qvbhowchj6p7l Mt4AmgMAsQUr7RuxB50ZDB0RBOIVauj2 =V1yF -----END PGP ARMORED FILE Esportazione della propria chiave pubblica Se vogliamo esportare la nostra chiave pubblica (per consegnarla ad un nostro corrispondente) possiamo usare l opzione --export di gpg. Ad esempio, Alice potrebbe esportare la propria chiave così: gpg --output alice_pubkey.txt --armor --export Importazione della chiave pubblica altrui nel proprio portachiavi Avendo a disposizione una chiave pubblica altrui possiamo importarla semplicemente con l opzione --import di gpg: $ gpg --import alice_pubkey.txt gpg: key 65BC13ED: public key "Alice (Ufficio Acquisti) imported gpg: Total number processed: 1 gpg: imported: 1 127

128 Elenco delle chiavi del proprio portachiavi L elenco delle chiavi a disposizione può essere ottenuto con l opzione --list-keys: $ gpg --list-keys /home/bob/.gnupg/pubring.gpg pub 1024D/0488EA uid Bob sub 1024g/42257BFD pub 1024D/65BC13ED uid Alice (Ufficio Acquisti) sub 1024g/D67E74AF Sicurezza e SSH SSH SSH è un protocollo per la comunicazione cifrata e autenticata tra due host, che sfrutta la riga di comando Server SSH L host con cui si vuole comunicare deve avere in funzione il server SSH (con Ubuntu è sufficiente installare il pacchetto openssh-server) Client SSH Per avviare la sessione di lavoro, da un terminale si digita ssh dove utente e hostname sono rispettivamente il nome dell utente e il nome (o l indirizzo IP) dell host. Alla prima connessione, viene richiesto di confermare l autenticità della controparte: The authenticity of host ****.local ( ) can t be established. RSA key fingerprint is 09:61:6d:8e:6f:79:a7:a5:6d:f7:91:1c:a2:cc:8c:35. Are you sure you want to continue connecting (yes/no)? L impronta digitale RSA viene memorizzata nel file locale ~/.ssh/known_hosts Esecuzione di comandi su calcolatore remoto È possibile specificare un comando da eseguire sul calcolatore remoto: ssh ls Autenticazione senza password Un utente può generare una coppia di chiavi RSA su un host e sfruttare un meccanismo di sfida per ottenere l autenticazione su un altro host senza bisogno di password. Supponendo di voler amministrare (con privilegi di root) un altro host, dovremo seguire i seguenti passi. Sul nostro calcolatore generare una coppia di chiavi RSA: ssh-keygen -t rsa Copiare il file ~/.ssh/id_rsa.pub nella directory.ssh dell utente con il quale ci vogliamo autenticare sull host remoto (nel nostro caso, l utente root). Sul calcolatore da gestire, accodare il file copiato al file ~/.ssh/authorized_keys dell utente con il quale ci vogliamo autenticare (il file deve risultare di sua proprietà). 128

129 9.4.6 Autenticazione senza verifica chiave host In alcune situazioni, può essere necessario evitare che venga chiesta la conferma dell autenticità della controparte (ad esempio, nel caso di host il cui indirizzo IP è ottenuto via DHCP). Si può disabilitare la richiesta con i seguenti parametri sulla riga di comando: ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no Oppure, su base permanente, si può modificare il proprio file ~/.ssh/config con il seguente contenuto: Host *.local StrictHostKeyChecking no UserKnownHostsFile=/dev/null Ovviamente, il rischio è di essere soggetti ad attacchi di tipo Man in the middle. 10 Basi di dati 10.1 MySQL Introduzione Quelle che seguono sono solo brevi note su cose che si possono fare e potrebbero non essere del tutto ovvie Ripristino password di root Per ripristinare la password di root è necessario fermare il demone, riavviarlo con l opzione --skip-grant-tables, effettuare la query di update della password, fermarlo e riavviarlo. sudo service mysql stop sudo mysqld --skip-grant-tables & sleep 5 echo "UPDATE mysql.user SET Password=PASSWORD( SeKRetPwd ) WHERE User= root ;" mysql -u root echo "FLUSH PRIVILEGES;" mysql -u root sudo killall mysqld sudo service mysql start Visualizzazione riferimenti esterni con phpmyadmin Se si usa phpmyadmin, può essere utile definire per le tabelle un campo da mostrare (in Struttura / Vedi relazioni), in modo da facilitare l inserimento dei dati. Figura 8: Riferimenti con phpmyadmin Questa informazione è interna a phpmyadmin e viene memorizzata nella tabella pma_table_info. 129

130 Stored procedures - Funzioni (creazione) È possibile creare una funzione con un codice simile al seguente: delimiter $$ create function quality(n INT) returns varchar(30) begin if isnull(n) then return "not set"; elseif n<6 then return "bad quality"; elseif n<8 then return "good quality"; else return "best quality"; end if; end$$ delimiter ; Stored procedures - Funzioni (uso) L uso di una funzione personalizzata è equivalente a quello che si farebbe di una funzione predefinita: select quality(mark) as markdescription from marks where... ; Stored procedures - Parametri in ingresso (creazione) Si possono naturalmente definire dei parametri, come nell esempio che segue per il quale si assume che esistano una tabella friends (id, name, city_id) e una tabella cities (id, name): DELIMITER $$ CREATE PROCEDURE FriendsByCity(IN city_id INTEGER) BEGIN SELECT friends.name, cities.name FROM friends LEFT JOIN cities on friends.city_id = cities.id WHERE cities.id = city_id; END$$ DELIMITER ; Stored procedures - Parametri in ingresso (uso) Una stored procedure si richiama con CALL: CALL FriendsByCity(1); Stored procedures - Parametri in uscita (creazione) Se la stored procedure deve restituire dei valori, è necessario dichiarare gli appositi parametri, preceduti dall indicazione OUT: DELIMITER $$ CREATE PROCEDURE CountFriendsByCity(IN city_id INTEGER, OUT number INT) BEGIN SELECT COUNT(*) INTO number FROM friends LEFT JOIN cities on friends.city_id = cities.id WHERE cities.id = city_id; END$$ DELIMITER ; 130

131 Stored procedures - Parametri in uscita (uso) Quando una stored procedure calcola qualche valore, è necessario richiamare prima la procedura per l esecuzione, e poi fare una selezione per ottenere i valori calcolati: CALL AS friends_count; Stored procedures - Creazione di API per l accesso al DB (1/2) Un buon uso delle stored procedures è quello di consentire la costruzione di interfacce per l accesso al database che mascherino la struttura interna dello stesso. Un esempio potrebbe essere quello di far sì che si possa inserire nel database degli amici, con la loro città di residenza, tramite chiamate simili a questa: CALL AddFriendWithCity( Giulio, Udine ); CALL AddFriendWithCity( Alice, Treviso ); Deve essere la procedura a verificare se la città è già presente o meno, recuperandone l id oppure procedendo a un nuovo inserimento, prima di inserire l amico Stored procedures - Creazione di API per l accesso al DB (2/2) Per ottenere quanto descritto, si può scrivere una stored procedure di questo tipo: DELIMITER $$ CREATE PROCEDURE AddFriendWithCity(IN friend_name VARCHAR(50), IN city_name VARCHAR(50)) BEGIN DECLARE city_id INT; SELECT id INTO city_id FROM cities WHERE name = city_name; IF city_id IS NULL THEN INSERT INTO cities(name) VALUES (city_name); SELECT LAST_INSERT_ID() INTO city_id; END IF; INSERT INTO friends(name, city_id) VALUES(friend_name, city_id); END$$ DELIMITER ; Stored procedures - Cicli e cursori Può essere necessario prevedere che la procedura effettui dei cicli sulle tuple estratte con una selezione. Il seguente esempio mostra come questo possa essere ottenuto (il fine della procedura è di inserire in una nuova tabella l id, il nome e la città degli amici si potrebbe ottenere la stessa cosa con puro SQL, ma qui si vuole illustrare il funzionamento dei cicli). DELIMITER $$ CREATE PROCEDURE TakeSnapshotForFriends() BEGIN DECLARE city_name VARCHAR(100); DECLARE friend_name VARCHAR(100); DECLARE friend_id INT; DECLARE city_id INT; DECLARE job_done INT DEFAULT 0; DECLARE cur_friends CURSOR FOR SELECT friends.id AS id, friends.name AS friend_name, cities.name AS city_name FROM friends INNER JOIN cities on friends.cit DECLARE CONTINUE HANDLER FOR NOT FOUND SET job_done = 1; OPEN cur_friends; 131

132 WHILE job_done = 0 DO FETCH cur_friends INTO friend_id, friend_name, city_name; INSERT INTO friends_snapshot(friend_id, friend_name, city_name) VALUES (friend_id, friend_name, city_name); END WHILE; CLOSE cur_friends; END$$ DELIMITER ; 10.2 PostgreSQL Introduzione Quelle che seguono sono solo brevi note su cose che si possono fare e potrebbero non essere del tutto ovvie Impostazione della password $ sudo -u postgres psql template1 Welcome to psql 8.3.8, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit template1=# ALTER USER postgres WITH PASSWORD mysekret ; ALTER ROLE template1=# \q e poi $ sudo passwd postgres New UNIX password: Retype new UNIX password: passwd: password aggiornata correttamente Avvio del server $ sudo service postgresql-8.3 start * Starting PostgreSQL 8.3 database server [ OK ] Creazione di un utente e di un database sudo -u postgres createuser -D -A -P mynewuser # (-A non è documentato, ma evita che venga chiesto # "Shall the new role be a superuser? (y/n) n" sudo -u postgres createdb -O mynewuser mydatabase 11 X Window e GNOME 11.1 Il sistema grafico XWindow Componenti del sistema X Window Quando si parla di X Window bisogna distinguere le seguenti componenti: il protocollo definito per la comunicazione e l interazione (X display protocol) le applicazioni serventi (diverse implementazioni: XFree86, Xorg) i gestori di finestre (es. Afterstep, Blackbox, Enlightment, Twm, Icewm, Kwin, Compiz) gli ambienti desktop (es. GNOME, KDE, XFCE) 132

133 i gestori del login, detti display manager (GDM, XDM, KDM ) Gli ambienti desktop si appoggiano ai gestori di finestre (es. GNOME a Metacity, KDE a Kwin, XFCE a Xfwm4) File di configurazione Il file di configurazione principale del servente X è, a seconda del sistema usato, /etc/x11/xf86config oppure /etc/x11/xorg.conf. Ad esempio, le sezioni sul mio calcolatore sono: $ cat /etc/x11/xorg.conf grep Section grep -v End uniq Section "Files" Section "Module" Section "InputDevice" Section "Device" Section "Monitor" Section "Screen" SubSection "Display" Section "ServerLayout" Section "DRI" Configurazione di X Window Solitamente non si modifica il file di configurazione a mano, visto che esistono ottimi strumenti per farlo in maniera interattiva Avvio di X Window X Window si può avviare: da terminale, con il comando startx (script che invoca il programma xinit) da init (con l avvio del gestore di login) Accesso da sistemi remoti L accesso ad applicazioni grafiche su di un sistema può avvenire: dopo aver avviato una sessione telnet da altro host, a patto di digitare il comando xhost +remote_host_name dopo aver avviato una sessione ssh da altro host, a patto di abilitare l X forwarding con ssh -X tramite XDMCP (login remoto) da macchine Windows, con putty affiancato dal servente XMing La variabile DISPLAY La variabile d ambiente DISPLAY indica su quale host/monitor deve essere eseguito l output grafico. Ad ogni modo, si può fare in modo che un applicazione grafica mostri l output su un determinato display anche indicandolo espicitamente: $ xmessage "testo del messaggio" -display :0.0 $ gedit --display :0.0 # 133

134 Programmi utili Alcuni programmi si possono rivelare particolarmente utili per una configurazione personalizzata di X Window. xmodmap (carica un layout di tastiera personalizzato) xkeycaps (permette di generare graficamente un file di layout di tastiera da far leggere a xmodmap) xeyes (utile quanto meno per testare il funzionamento del mouse) xnest (un gestore annidato di server X Window) xsel (permette di leggere e scrivere sulla selezione primaria e secondaria) Alcune cose da sapere Piccole cose da sapere quando si usa X Window: per ottenere le lettere maiuscole accentate, è sufficiente usare il fissamaiuscolo e il tasto con la lettera accentata minuscola (in questo modo è facile ottenere caratteri come ÈÉÀÒÌ) oltre alla clipboard (luogo dove vanno a finire le cose copiate e/o tagliate), esiste la selezione primaria (se in un applicazione si seleziona un testo, lo si può incollare in un altra applicazione senza averla prima copiata: è sufficiente premere il pulsante centrale del mouse, o la rotellina) in alcune vecchie applicazioni X Window, la barra di scorrimento laterale si muove premendo il pulsante sinistro del mouse per scendere e quello destro per salire se un applicazione grafica si pianta la si può far terminare graficamente con il comando xkill uno script bash può utilizzare un interfaccia X Window grazie al programma xdialog (o altri equivalenti) Xnest Xnest permette di fare degli esperimenti con le applicazioni X Window (e diversi window manager). $ Xnest :1 -ac & #-ac disabilita i controlli di accesso $ xclock -display :1 $ xclock -foreground "Red" -geometry display :1 $ twm -display :1 & $ xterm -display :1 Da un altro host, si può provare xeyes -display hostname:1.0 (Esempi tratti da un articolo sul LinuxJournal 56 ) Xnest - GIMP in una sola finestra Se si vuole fare in modo che le finestre di GIMP siano raggruppate in un unica finestra, si può ricorrere a questo piccolo script: #!/bin/sh Xnest :3 -ac -kb -name GIMP -geometry 1200x740 & metacity --display :3 & wmpid=$! gimp --display :3 & wait $wmpid (Esempio tratto da un post su teleperion 57 ) tdfsb Se si vuole provare l ebbrezza di volare sul proprio file system, si può installare e usare il programma tdfsb

135 Figura 9: Navigazione 3d con tdfsb Cattura di una schermata Il programma import permette di catturare una schermata di XWindow: import -window root ~/Immagini/screenshot.png Cattura video desktop Il programma ffmpeg può essere usato per catturare le operazioni effettuate sul desktop in un file video: ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq ~/Video/sequence.mpg 11.2 GNOME, l interfaccia standard di Ubuntu GNOME GNOME (GNU Network Object Model Environment) è il Desktop Environment ufficiale del progetto GNU Personalizzazione di GNOME Sul web si trovano molti documenti sul tema della personalizzazione di GNOME. Si può partire, ad esempio, da Customize your Ubuntu GNOME theme Aree di lavoro e finestre Il Desktop di GNOME è diviso in aree di lavoro, all interno delle quali sono presenti le finestre delle applicazioni. Agendo sulla barra del titolo (con il pulsante destro del mouse), le finestre possono essere spostate da un area di lavoro all altra. Se la barra del titolo non dovesse essere visibile, si può spostare una finestra tenendo premuto il tasto alt Tastiera e caratteri speciali Se si ha la necessità di inserire in un testo caratteri speciali (ad esempio, una ï, oppure una ł) GNOME ci mette a disposizione diverse possibilità: usare la Tabella caratteri (menù Accessori) aggiungere al pannello, ed eventualmente personalizzare, la Tavolozza caratteri usare particolari combinazioni di tasti (es. con Alt Gr) usare il tasto definito come Compose Key e delle particolari sequenze di tasti usare i codici Unicode definire una propria tastiera personalizzata

136 Combinazione di tasti Per verificare che caratteri si possono ottenere con la disposizione dei tasti in uso, procedere come segue: 1. Sistema/Preferenze/Tastiera 2. Disposizione/Italy/Stampa diagramma disposizione 3. Anteprima di stampa Tenere presente che le lettere accentate maiuscole possono essere ottenute usando il fissa-maiuscole Compose key Le tastiere di molti sistemi Unix mettono a disposizione un tasto, detto Compose key, che permette di comporre dei caratteri con delle sequenze particolari. Su PC si può sfruttare un tasto inutilizzato (ad esempio quello con la bandierina di Windows). Per farlo: 1. Sistema/Preferenze/Tastiera 2. Disposizioni/Altre opzioni Compose key position/left Win Key is Compose Dopo aver attivato il tasto compose, si possono ottenere alcuni caratteri tramite la sequenza compose/tasto1/tasto2 (si deve premere il tasto compose, rilasciarlo e poi premere gli altri tasti della sequenza). Ad esempio, per una i con dieresi, si può premere compose e poi e i Esempi di composizione La tabella completa delle composizioni disponibili è disponibile in: GtkComposeTable 59 Linux Compose Key Sequences 60. Particolarmente comodo è: usare le sequenze --- e --. per, rispettivamente, il trattino lungo da usare per incisi come questo e quello medio, da usare per gli intervalli (es. pagg ). usare le sequenze 1 e 2 per ottenere 1 2, 3 e 4 per 3 4, x e x per il segno di moltiplicazione ( ), ecc Usare i codici UNICODE Per esigenze particolari si possono usare direttamente i codici UNICODE. Ad esempio, dovendo inserire il simbolo dello Yen (codice esadecimale 00A5, o 0x00A5), si può procedere come segue: 1. premere ctrl-shift-u (compare una lettera u sottolineata) 2. digitare il codice esadecimale 3. premere la barra spaziatrice Definizione di una tastiera personalizzata Il programma xkeycaps permette di definire una propria disposizione di tasti personalizzata, da sfruttare con il programma xmodmap. 59 https://help.ubuntu.com/community/gtkcomposetable

137 Nautilus Nautilus è la componente di GNOME che si occupa della gestione di file e directory. Le operazioni fatte sui file tramite Nautilus sono generalmente intuitive. Vale la pena di sottolineare alcune particolarità: i link (collegamenti) possono essere creati facendo clic con il pulsante centrale del mouse (la rotellina) sull icona di un file, trascinandola sulla destinazionee scegliendo la voce Collega qui dal menù contestuale, oltre che facendo clic con il pulsante destro e scegliendo la voce Crea collegamento la cartella Modelli può contenere dei modelli di documento che vengono proposti quando si fa clic con il pulsante destro del mouse in una cartella e si sceglie la voce Crea documento se per una cartella si dispone dei permessi di lettura ma non di esecuzione, Nautilus la mostra vuota Informazioni aggiuntive su file e directory Tramite Nautilus si possono impostare informazioni aggiuntive su file e directory, quali simboli speciali, annotazioni, ecc. Tali informazioni vengono memorizzate in appositi metafile, in formato XML, nella directory.nautilus dell utente, non nella directory stessa Editor di configurazione Il comando gconf-editor lancia l editor di configurazione di GNOME, con il quale è possibile accedere a vari parametri di configurazione dell ambiente di lavoro. Ad esempio: impostando il valore /apps/nautilus/preferences/desktop is home dir a true, si indica a Nautilus di usare la propria cartella home come scrivania. impostando il valore /apps/metacity/general/button layout a menu:minimize,maximize,close si cambia l ordine in cui compaiono il menù e i pulsantini di minimizzazione, massimizzazione e chiusura delle finestre gconftool 2 I parametri di configurazione possono essere visualizzati e/o modificati anche direttamente da riga di comando, grazie al programma gconftool 2. La visualizzazione di tutte le impostazioni si ottiene in forma di file XML con gconftool-2 --dump / Mentre un impostazione puù essere cambiata con, ad esempio, un comando come il seguente: gconftool-2 --type bool --set /apps/nautilus/preferences/desktop_is_home_dir True Impostazione della modalità di visualizzazione dei permessi I permessi su file e directory vengono normalmente visualizzati in modalità sintetica. Questa impostazione si può cambiare con il comando gconftool-2 --type bool --set /apps/nautilus/preferences/show_advanced_permissions True La modalità predefinita può essere ripristinata con gconftool-2 --type bool --set /apps/nautilus/preferences/show_advanced_permissions False 137

138 Figura 10: Permessi con GNOME Compiz Compiz è un programma che permette di ottenere accattivanti effetti grafici sul proprio desktop. Per usarlo è necessario impostare (menù Sistema/Preferenze/Aspetto/Effetti visivi) la modalità Aggiuntivi, altrimenti alcuni efetti non funzionerebbero. Gli effetti specifici da attivare devono essere impostati tramite la voce di menù Sistema/Preferenze/Gestore configurazione CompizConfig (tenere presente che il tasto super è quello, a fianco del tasto ALT, con l icona di Windows, mentre button1, button2 e button3 sono rispettivamente i tasti sinistro, centrale e destro del mouse) Compiz - effetto desktop cubico Figura 11: Desktop cubico Uso combinato di Desktop cubico, Ruota cubo e Finestre 3D. Per ruotare il cubo, premere Ctrl-Alt e trascinare il mouse. Premendo il tasto Super e il tabulatore si può passare da un applicazione all altra Compiz - finestre tremolanti Uso di Finestre tremolanti Beagle Beagle è uno strumento per effettuare ricerche full text nei propri documenti. È utilizzabile anche dalla riga di comando: 138

139 Figura 12: Desktop cubico Figura 13: Ricerca con Beagle $ beagle-query potenza sonora file:///home/loris/scaricati/all1t.pdf file:///home/loris/scaricati/all1-2x1.pdf file:///home/loris/scaricati/all1.pdf Accessibilità Il progetto GNOME dedica grande attenzione al tema dell accessibilità. È possibile selezionare: temi ad alto contrasto ingranditori Riferimenti: Ubuntu e l accessibilità 61 Guida all accessibilità di Fedora 62 Anche in Compiz è presente una sezione dedicata all accessibilità Tecnologie assistive Utilizzando GNOME, si può far uso delle tecnologie assistive, che consentono di: avere un contrasto elevato ingrandire i testi utilizzare la sintesi vocale Guide/Fedora 14-Accessibility Guide-it-IT.pdf 139

140 usare un terminale Braille impostare modificatori di tastiera gestire il mouse (o altro puntatore) in maniera personalizzata È sufficiente selezionare le voci appropriate nelle Preferenze. Figura 14: Accessibilità Configurazione di sistema Alcune impostazioni di sistema, ad esempio relative alla schermata di login (gestita da gdm) possono essere modificate via riga di comando agendo come utente gdm. Ad esempio, per abilitare o disabilitare l ingrandimento in fase di login, si può ricorrere al seguente comando (impostando true o false): sudo -u gdm gconftool-2 /desktop/gnome/applications/at/screen_magnifier_enabled --type bool --set false 140

Shell di Linux e Comandi Utente

Shell di Linux e Comandi Utente Shell di Linux e Comandi Utente Sistemi Operativi Roberto Aringhieri DTI Crema - Università degli Studi di Milano Sistemi Operativi - Shell di Linux e Comandi Utente Roberto Aringhieri p.1/23 Outline Accesso

Dettagli

Reti Informatiche. Corso di Laurea Triennale in Ingegneria Informatica. Ing. Domenico De Guglielmo. 2008 Vanessa Gardellin & Sara Lioba Volpi

Reti Informatiche. Corso di Laurea Triennale in Ingegneria Informatica. Ing. Domenico De Guglielmo. 2008 Vanessa Gardellin & Sara Lioba Volpi Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica Ing. Domenico De Guglielmo 2008 Vanessa Gardellin & Sara Lioba Volpi Informazioni Generali (1/2) Ricevimento su appuntamento (tramite

Dettagli

Corso base GNU/Linux 2014. Latina Linux Group. Sito web: www.llg.it. Mailing list:http://lists.linux.it/listinfo/latina

Corso base GNU/Linux 2014. Latina Linux Group. Sito web: www.llg.it. Mailing list:http://lists.linux.it/listinfo/latina Corso base GNU/Linux 2014 Latina Linux Group Sito web: www.llg.it Mailing list:http://lists.linux.it/listinfo/latina Corso Base 2014 Lezione 3 15/04/2014 1 / 21 Obiettivi di questo incontro Conoscere cosa

Dettagli

I.S. Sobrero. Dipartimento di Informatica. Utilizzo. install.linux@home. 16/02/2007 install.linux@home Marco Marchisotti

I.S. Sobrero. Dipartimento di Informatica. Utilizzo. install.linux@home. 16/02/2007 install.linux@home Marco Marchisotti I.S. Sobrero Dipartimento di Informatica Utilizzo install.linux@home 1 La shell La shell di Linux è a linea di comando. Appare obsoleta e difficile da usare, ma in realtà è molto più potente e versatile

Dettagli

Utilizzo di putty. L uso base e molto semplice: richiede solo di specificare:

Utilizzo di putty. L uso base e molto semplice: richiede solo di specificare: Utilizzo di putty Client ssh liberamente utilizzabile (www.chiark.greenend.org.uk/~sgtatham/putty/download.html) Tra le molte opzioni di configurazione di putty sono utili: Window - Translation: per selezionare

Dettagli

GNU/Linux Concetti di base

GNU/Linux Concetti di base GNU/Linux Concetti di base Sommario GNU/Linux Open Source e GPL Login/Logout Shell e comandi Files Stdin, stdout Redirezione e pipe Filesystem 2 Cos'è Linux Linux è basato su UNIX (filosofia, comandi,

Dettagli

Permessi, utenti e gruppi

Permessi, utenti e gruppi Permessi, utenti e gruppi Daniele Venzano 9 novembre 2003 Indice 1 Introduzione 1 2 Concetti generali 2 2.1 Esempio..................................... 2 3 File importanti 2 3.1 /etc/group...................................

Dettagli

Il Sistema Operativo Linux

Il Sistema Operativo Linux Il Sistema Operativo Linux Sistema Linux storia Unix deriva da Unix open source software libero software open source GNU, GPL, LGPL storia Linux amministrazione struttura concetti base comandi shell Unix

Dettagli

Corso Linux base: primo incontro. Sommario. Alessandro Pasotti (apasotti@gmail.com) License: Creative Commons Attribution Share Alike 3.

Corso Linux base: primo incontro. Sommario. Alessandro Pasotti (apasotti@gmail.com) License: Creative Commons Attribution Share Alike 3. Corso Linux base: primo incontro Alessandro Pasotti (apasotti@gmail.com) License: Creative Commons Attribution Share Alike 3.0 Sommario 1. hardware 2. software 3. concetti base 4. cos'è GNU/Linux 5. le

Dettagli

fare hard link fra file system diversi e su directory.

fare hard link fra file system diversi e su directory. Un sistema GNU/Linux, come ogni Unix, ha una directory principale, chiamata root ed indicata con / sotto la quale si trovano TUTTE le altre directory e TUTTI gli altri filesystems eventualmente montati

Dettagli

SHELL GNU/Linux Bash. Conoscere e configurare il proprio ambiente bash. Kernel speaks: dmesg

SHELL GNU/Linux Bash. Conoscere e configurare il proprio ambiente bash. Kernel speaks: dmesg SHELL GNU/Linux Bash Obiettivi : Gestire i permessi sui file Conoscere e configurare il proprio ambiente bash Editare testi Capire ed utilizzare i redirezionamenti Kernel speaks: dmesg Init e Runlevels

Dettagli

Ca ra tteristiche dei sistem i GN U/L inux. Struttura di un sistema GNU/Linux Il filesystem La shell

Ca ra tteristiche dei sistem i GN U/L inux. Struttura di un sistema GNU/Linux Il filesystem La shell Struttura di un sistema GNU/Linux Il filesystem La shell 1 GNU/Linux è un sistema operativo, cioè un insieme di programmi che collaborano fra di loro rendendo utilizzabile un calcolatore, infatti senza

Dettagli

GNU/Linux 101. intro to system administration. SaLUG! @ Manifatture KNOS 22 Gennaio 2015. This work is licensed under a

GNU/Linux 101. intro to system administration. SaLUG! @ Manifatture KNOS 22 Gennaio 2015. This work is licensed under a GNU/Linux 101 intro to system administration SaLUG! @ Manifatture KNOS 22 Gennaio 2015 This work is licensed under a Creative Commons by-nc-sa 4.0 International License by ALCA Società Cooperativa About

Dettagli

Università degli Studi di Verona. Linux Ubuntue ilcompilatorec. Dicembre 2014 - Sergio Marin Vargas. Dipartimento di Biotecnologie

Università degli Studi di Verona. Linux Ubuntue ilcompilatorec. Dicembre 2014 - Sergio Marin Vargas. Dipartimento di Biotecnologie Università degli Studi di Verona Dipartimento di Biotecnologie Laurea in Biotecnologie Corso di Informatica2014/2015 Linux Ubuntue ilcompilatorec Dicembre 2014 - Sergio Marin Vargas Caratteristiche di

Dettagli

Indice 1 L architettura di un sistema GNU/Linux 1 1.1 L architettura del sistema................................ 1 1.1.1 L architettura di base.............................. 1 1.1.2 Il funzionamento del

Dettagli

Introduzione ai sistemi UNIX/Linux

Introduzione ai sistemi UNIX/Linux Introduzione ai sistemi UNIX/Linux Corso di laurea magistrale in Ingegneria Elettronica Ing. Simone Brienza E-mail: simone.brienza@for.unipi.it Pervasive Computing & Networking Lab () http://www.perlab.it

Dettagli

Installazione di Ubuntu 10.04. Mauro Piccolo piccolo@di.unito.it

Installazione di Ubuntu 10.04. Mauro Piccolo piccolo@di.unito.it Installazione di Ubuntu 10.04 Mauro Piccolo piccolo@di.unito.it Operazioni preliminari Backup di tutti i dati dalla partizione Windows Deframmentazione di tutte le partizioni Windows (n volte...) Abilitare

Dettagli

Cosa e come installare (Definire cosa si vuole fare - Sapere cosa si può installare - Selezione dei pacchetti)

Cosa e come installare (Definire cosa si vuole fare - Sapere cosa si può installare - Selezione dei pacchetti) Lunedì 12 aprile 2010 Introduzione a Linux - Sapere cos'è Linux, come è nato e si è evoluto - Avere riferimenti sulla diffusione e l'uso di Linux nel mondo - Conoscere la differenza fra kernel e distribuzioni

Dettagli

Terza lezione: Directory e File system di Linux

Terza lezione: Directory e File system di Linux Terza lezione: Directory e File system di Linux DIRECTORY E FILE SYSTEM Il file system di Linux e Unix è organizzato in una struttura ad albero gerarchica. Il livello più alto del file system è / o directory

Dettagli

PRECORSO DI INFORMATICA. Laboratorio Prima Parte

PRECORSO DI INFORMATICA. Laboratorio Prima Parte PRECORSO DI INFORMATICA Laboratorio Prima Parte ARGOMENTI DI OGGI Avviare Linux KDE e gli altri D.E. Bash Gestione file system Redirezione input/output Gestione dei processi Man Info Configurazione del

Dettagli

Università degli Studi di Verona. Dipartimento di Biotecnologie. BreveguidaLinux. Ottobre 2014 - Sergio Marin Vargas

Università degli Studi di Verona. Dipartimento di Biotecnologie. BreveguidaLinux. Ottobre 2014 - Sergio Marin Vargas Università degli Studi di Verona Dipartimento di Biotecnologie Biologia molecolare Laboratorio di Bioinformatica II BreveguidaLinux Ottobre 2014 - Sergio Marin Vargas Caratteristiche di Linux Nel 1991,

Dettagli

Sequenza di avvio di Linux:

Sequenza di avvio di Linux: Sequenza di avvio di Linux: Il BIOS esegue una serie di test ed inizializzazione di tutti i dispositivi del computer; quindi, carica in memoria il BOOT loader del sistema operativo e gli cede il controllo.

Dettagli

Corso di Laboratorio di Sistemi Operativi

Corso di Laboratorio di Sistemi Operativi Corso di Laboratorio di Sistemi Operativi Alessandro Dal Palù email: alessandro.dalpalu@unipr.it web: www.unipr.it/~dalpalu Qualche link utile Informazioni sull utilizzo della shell Unix/Linux http://www.pluto.it/ildp/howto/bash-prog-intro-howto.html

Dettagli

Corso UNIX avanzato. Utente avanzato. Amministratore. Gestione proprio account Gestione dei propri processi Ricerca e manipolazione file

Corso UNIX avanzato. Utente avanzato. Amministratore. Gestione proprio account Gestione dei propri processi Ricerca e manipolazione file Corso UNIX avanzato Corso UNIX avanzato Utente avanzato Gestione proprio account Gestione dei propri processi Ricerca e manipolazione file Amministratore Gestione utenti Aggiunta rimozione hardware Backup

Dettagli

PROGRAMMAZIONE CONSUNTIVA Codice Mod. RQ 23.2 Pag 1/5. Sistemi e Reti (articolazione Telecomunicazione) Classe

PROGRAMMAZIONE CONSUNTIVA Codice Mod. RQ 23.2 Pag 1/5. Sistemi e Reti (articolazione Telecomunicazione) Classe I.T.C.S. ERASMO DA ROTTERDAM Liceo Artistico indirizzo Grafica - Liceo delle Scienze Umane opz. Economico sociale ITI Informatica e telecomunicazioni - ITI Costruzioni, ambiente e territorio Edile Elettronico

Dettagli

Lezione T11 Virtual File System

Lezione T11 Virtual File System Lezione T11 Virtual File System Sistemi Operativi (9 CFU), CdL Informatica, A. A. 2013/2014 Dipartimento di Scienze Fisiche, Informatiche e Matematiche Università di Modena e Reggio Emilia http://weblab.ing.unimo.it/people/andreolini/didattica/sistemi-operativi

Dettagli

Università degli Studi di Messina Facoltà di Scienze MM. FF. NN. Corso di Laurea Triennale in Informatica (D.M. 270)

Università degli Studi di Messina Facoltà di Scienze MM. FF. NN. Corso di Laurea Triennale in Informatica (D.M. 270) Università degli Studi di Messina Facoltà di Scienze MM. FF. NN. Corso di Laurea Triennale in Informatica (D.M. 270) Sistemi Operativi + Laboratorio di Sistemi Programma del corso (anno accademico 2009

Dettagli

Utenti e gruppi. Ogni utilizzatore di UNIX ha associato: Nomeutente nome alfanumerici UID identità numerica

Utenti e gruppi. Ogni utilizzatore di UNIX ha associato: Nomeutente nome alfanumerici UID identità numerica Utenti e gruppi Utenti e gruppi Ogni utilizzatore di UNIX ha associato: Un identità univoca Nomeutente nome alfanumerici UID identità numerica Uno o più gruppi Nomegruppo nome alfanumerico GID identità

Dettagli

Sequenza di avvio di Linux:

Sequenza di avvio di Linux: Sequenza di avvio di Linux: Il BIOS esegue una serie di test ed inizializzazione di tutti i dispositivi del computer; quindi, carica in memoria il BOOT loader del sistema operativo e gli cede il controllo.

Dettagli

Introduzione alla. Alessandra Giordani agiordani@disi.unitn.it Lunedì 27 febbraio 2012 http://disi.unitn.it/~agiordani/ 1

Introduzione alla. Alessandra Giordani agiordani@disi.unitn.it Lunedì 27 febbraio 2012 http://disi.unitn.it/~agiordani/ 1 Introduzione alla Shell di UNIX Alessandra Giordani agiordani@disi.unitn.it Lunedì 27 febbraio 2012 http://disi.unitn.it/~agiordani/ 1 Composizione di un sistema informativo: Hardware (CPU, periferiche,

Dettagli

Il software del PC. Il BIOS

Il software del PC. Il BIOS Il software del PC La parola software è un neologismo che è stato coniato in contrapposizione all hardware (ferraglia). L hardware si può prendere a calci, contro il software si può solo imprecare. Il

Dettagli

Linux. Linux. Paolo Zatelli. Dipartimento di Ingegneria Civile ed Ambientale Università di Trento. Paolo Zatelli Università di Trento 1 / 24

Linux. Linux. Paolo Zatelli. Dipartimento di Ingegneria Civile ed Ambientale Università di Trento. Paolo Zatelli Università di Trento 1 / 24 Linux Linux Paolo Zatelli Dipartimento di Ingegneria Civile ed Ambientale Università di Trento Paolo Zatelli Università di Trento 1 / 24 Linux Outline 1 Linux 2 Interfaccia 3 File e directory 4 Comandi

Dettagli

Interfaccia del file system

Interfaccia del file system Interfaccia del file system Concetto di file Modalità di accesso Struttura delle directory Montaggio di un file system Condivisione di file Protezione 9.1 File E un insieme di informazioni correlate e

Dettagli

Corso di Linux. Dott. Paolo PAVAN pavan@netlink.it

Corso di Linux. Dott. Paolo PAVAN pavan@netlink.it Corso di Linux Dott. Paolo PAVAN pavan@netlink.it Origini di Linux Nasce a fine anni 1980 ad opera del finlandese Linus Torvalds Linux non è gratis e neanche freeware è protetto da licenza GNU: "GNU non

Dettagli

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate.

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate. Comandi filtro: sed Il nome del comando sed sta per Stream EDitor e la sua funzione è quella di permettere di editare il testo passato da un comando ad un altro in una pipeline. Ciò è molto utile perché

Dettagli

17.2. Configurazione di un server di Samba

17.2. Configurazione di un server di Samba 17.2. Configurazione di un server di Samba Il file di configurazione di default (/etc/samba/smb.conf) consente agli utenti di visualizzare le proprie home directory di Red Hat Linux come una condivisione

Dettagli

Se state utilizzando la shell bash, ovvero la shell di riferimento per questo manuale, il terminale visualizzerà il seguente output:

Se state utilizzando la shell bash, ovvero la shell di riferimento per questo manuale, il terminale visualizzerà il seguente output: CAPITOLO 5 LA SHELL BASH Pietro Buffa Con questo capitolo comincia il nostro viaggio nel mondo delle Command Line Interface (CLI), ovvero le interfacce testuali a linea di comando tipiche dei sistemi UNIX

Dettagli

Il laboratorio virtuale VLAB

Il laboratorio virtuale VLAB Il laboratorio virtuale VLAB Vlab è un sistema che permette di creare delle macchine virtuali connesse tra loro mediante hub virtuali. Poiché le macchine virtuali non sono altro che dei pc Linux virtuali

Dettagli

GLI SCRIPT DI SHELL. Lucidi a cura di B.De Carolis. UNIX shell script UdB- Dip Informatica

GLI SCRIPT DI SHELL. Lucidi a cura di B.De Carolis. UNIX shell script UdB- Dip Informatica GLI SCRIPT DI SHELL Lucidi a cura di B.De Carolis Shell Unix - Linux comandi Interfaccia di alto livello tra utente e SO. Il processore interpreta e mette in esecuzione comandi da: 1) standard input o

Dettagli

Gestione degli Utenti e dei Permessi

Gestione degli Utenti e dei Permessi Corsi Linux Amministrazione di Sistema Seconda Lezione Prima Parte Gestione degli Utenti e dei Permessi C2011 Salvatore Mesoraca UTENTI Linux è un S.O. multiutente, questo significa

Dettagli

Ridirezione su/da file

Ridirezione su/da file Combinare i comandi Ogni processo è associato a tre flussi di I/O standard: lo standard input dal quale riceve gli ingressi (normalmente la tastiera) lo standard output sul quale produce le uscite regolari

Dettagli

Elementi di Informatica e Programmazione

Elementi di Informatica e Programmazione Elementi di Informatica e Programmazione Il Sistema Operativo Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente: Daniela Fogli Cos

Dettagli

Linux-Unix. Pregi di Linux

Linux-Unix. Pregi di Linux Linux-Unix Linux è un termine che può assumere più di un significato. A seconda del contesto infatti può indicare il kernel originariamente sviluppato da Linus Torvalds, oppure il sistema operativo basato

Dettagli

Struttura del sistema operativo GNU/Linux

Struttura del sistema operativo GNU/Linux Struttura del sistema operativo GNU/Linux http://www.glugto.org/ Cos'è un filesystem Cosa vuol dire FHS Composizione albero di directory Concetto di Mount Utente root Permessi su files e directory GNU/Linux

Dettagli

Indice. settembre 2008 Il File System 2

Indice. settembre 2008 Il File System 2 Il File System Indice 4. Il File System 5. Vantaggi del FS 6. Protezione 7. Condivisione 8. I file - 1 9. I file - 2 10. Attributi dei file 11. Directory 12. Livelli di astrazione - 1 13. Livelli di astrazione

Dettagli

Informatica Generale 1 - Esercitazioni Introduzione all uso della command-line shell

Informatica Generale 1 - Esercitazioni Introduzione all uso della command-line shell Informatica Generale 1 - Esercitazioni Introduzione all uso della command-line shell Daniele Pighin pighin@fbk.eu FBK Via Sommarive, 18 I-38050 Trento, Italy March 5, 2008 Outline 1 Sistema operativo e

Dettagli

LINUX - *** KIT DI MINIMA SOPRAVVIVENZA *** - UNIX - v0.05 -

LINUX - *** KIT DI MINIMA SOPRAVVIVENZA *** - UNIX - v0.05 - LINUX - *** KIT DI MINIMA SOPRAVVIVENZA *** - UNIX - v0.05 - Created by GT, 28/10/2002 l.r. bycg, 14/11/2005 1 - INFORMAZIONE SUI FILES ls : lista i files presenti nel direttorio dove ci si trova, in ordine

Dettagli

cambiare utente mediante il comando su verificare chi siete e su che dir state lavorando Chi siete e che dir? (Inserisci la risposta)

cambiare utente mediante il comando su verificare chi siete e su che dir state lavorando Chi siete e che dir? (Inserisci la risposta) Collegamento al server LINUX Segui le seguenti istruzioni per accedere al server LINUX. Da WINDOWS Lancia telnet dalla riga di comando telnet 10.15.1.5, 10.15.1.12, 10.15.1.18, 10.15.1.23 aula boole telnet

Dettagli

Informatica di Base. Il software

Informatica di Base. Il software di Base 1 Sistemi informatici Hardware Microprocessore Memoria Periferiche di input e output Software Software di sistema Programmi applicativi 2 Il sw applicativo Il sw applicativo è costituito dall insieme

Dettagli

Note sull ambiente di lavoro utilizzato ai Laboratori di Fondamenti di Informatica I

Note sull ambiente di lavoro utilizzato ai Laboratori di Fondamenti di Informatica I Università di Pisa Corso di Laurea in Ingegneria Informatica Note sull ambiente di lavoro utilizzato ai Laboratori di Fondamenti di Informatica I a cura di Marco Cococcioni a.a. 2013-2014 Un po di terminologia

Dettagli

Console, terminale e privacy (emulare un thin client per UNIX e GNU/Linux)

Console, terminale e privacy (emulare un thin client per UNIX e GNU/Linux) Console, terminale e privacy (emulare un thin client per UNIX e GNU/Linux) Augusto Scatolini (webmaster@comunecampagnano.it) (a.scatolini@linux4campagnano.net) Miniguida n. 150 Ver. 1.0 Ottobre 2011 Il

Dettagli

Sommario. 1. Introduzione. Samba - Monografia per il Corso di "Laboratorio di Sistemi Operativi".

Sommario. 1. Introduzione. Samba - Monografia per il Corso di Laboratorio di Sistemi Operativi. Sommario SAMBA Raphael Pfattner 10 Giugno 2004 Diario delle revisioni Revisione 1 10 Giugno 2004 pralph@sbox.tugraz.at Revisione 0 17 Marzo 2004 roberto.alfieri@unipr.it Samba - Monografia per il Corso

Dettagli

Utenti e File System

Utenti e File System Utenti e File System C. Baroglio a.a. 2002-2003 1 Gestione degli utenti Unix è un sistema multiutente ovvero più utenti possono lavorare su di una stessa macchina, anche contemporaneamente. Tutti gli utenti

Dettagli

Lezione 11. Sistemi operativi. Marco Cesati System Programming Research Group Università degli Studi di Roma Tor Vergata.

Lezione 11. Sistemi operativi. Marco Cesati System Programming Research Group Università degli Studi di Roma Tor Vergata. Lezione 11 system Sistemi operativi 12 maggio 2015 System Programming Research Group Università degli Studi di Roma Tor Vergata SO 15 11.1 Di cosa parliamo in questa lezione? L interfaccia : system 1 Il

Dettagli

L'ambiente UNIX: primi passi

L'ambiente UNIX: primi passi L'ambiente UNIX: primi passi Sistemi UNIX multiutente necessità di autenticarsi al sistema procedura di login Login: immissione di credenziali username: nome identificante l'utente in maniera univoca password:

Dettagli

By E.M. Comandi fondamentali per LINUX

By E.M. Comandi fondamentali per LINUX By E.M. Comandi fondamentali per LINUX Terminale... pg.2 Proprietà dei file... pg.5 Periferiche del computer... pg.7 Pulitura del disco... pg.8 Editor... pg.8 Wireless... pg.8 Terminali per Seriali...

Dettagli

Sicurezza su linux... e considerazioni varie. Gianluca Antonacci email: giaaan@tin.it

Sicurezza su linux... e considerazioni varie. Gianluca Antonacci email: giaaan@tin.it Sicurezza su linux... e considerazioni varie Gianluca Antonacci email: giaaan@tin.it Sommario Protezione del PC: firewall e antivirus - configurazione di Firestarter - configurazione di ClamAV Indicizzazione

Dettagli

Sistemi Operativi. Organizzazione logica ed implementazione di un File System

Sistemi Operativi. Organizzazione logica ed implementazione di un File System Modulo di Sistemi Operativi per il corso di Master RISS: Ricerca e Innovazione nelle Scienze della Salute Unisa, 17-26 Luglio 2012 Sistemi Operativi Organizzazione logica ed implementazione di un File

Dettagli

Introduzione Il sistema operativo Linux è oggi una delle principali distribuzioni di Unix, in grado di portare in ogni PC tutta la potenza e la flessibilità di una workstation Unix e un set completo di

Dettagli

Controllo di processi

Controllo di processi Controllo di processi Ogni processo del sistema ha un PID (Process Identity Number). Ogni processo può generare nuovi processi (figli). La radice della gerarchia di processi è il processo init con PID=1.

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione Federico Spizzo Dipartimento di Fisica / Edificio C Stanza 006 Tel: 0532 974231 E-mail: federico.spizzo@unife.it Gianluigi Cibinetto Dipartimento di Fisica / Edificio C Stanza

Dettagli

CAPITOLO 1 I SISTEMI OPERATIVI

CAPITOLO 1 I SISTEMI OPERATIVI CAPITOLO 1 I SISTEMI OPERATIVI Introduzione ai sistemi operativi pag. 3 La shell pag. 3 Tipi di sistemi operativi pag. 4 I servizi del sistema operativo pag. 4 La gestione dei file e il file system Il

Dettagli

LABORATORIO DI PROGRAMMAZIONE 1. Docente: Dr Damiano Macedonio Lezione 1 03/10/2013

LABORATORIO DI PROGRAMMAZIONE 1. Docente: Dr Damiano Macedonio Lezione 1 03/10/2013 LABORATORIO DI PROGRAMMAZIONE 1 1 Docente: Dr Damiano Macedonio Lezione 1 03/10/2013 Original work Copyright Sara Migliorini, University of Verona Modifications Copyright Damiano Macedonio, University

Dettagli

NOTE PER UTILIZZO COMPILATORE FORTRAN CON LINUX

NOTE PER UTILIZZO COMPILATORE FORTRAN CON LINUX NOTE PER UTILIZZO COMPILATORE FORTRAN CON LINUX Queste pagine sono estratte dalle note del corso "Abilità Informatiche: Introduzione a Unix", Alessandra Seghini Per stampare questo documento si consiglia

Dettagli

Installare GNU/Linux

Installare GNU/Linux Installare GNU/Linux Installare GNU/Linux Linux non è più difficile da installare ed usare di qualunque altro sistema operativo Una buona percentuale di utenti medi si troverebbe in difficoltà ad installare

Dettagli

PRECORSO DI INFORMATICA. Laboratorio Seconda Parte

PRECORSO DI INFORMATICA. Laboratorio Seconda Parte PRECORSO DI INFORMATICA Laboratorio Seconda Parte ARGOMENTI DI OGGI Configurazione delle stampanti Utilizzo della stampante Editor di testo Scrivere un semplice programma in C/C++ Compilazione Programmi

Dettagli

Il File System di Linux

Il File System di Linux Il File System di Linux La struttura ad albero / Cartella radice, detta ROOT DIRECTORY, di cui sono figlie tutte le altre Ci si muove nel file system con percorsi relativi o percorsi assoluti In un albero,

Dettagli

COPIARE FILE E DIRECTORY

COPIARE FILE E DIRECTORY COPIARE FILE E DIRECTORY Creiamo il file prova2.txt nella directory prove: touch prova2.txt Fare una copia del file prova1.txt assegnando il nome copia1bis.txt cp prova1.txt copia1bis.txt Se vogliamo che

Dettagli

Sistemi informatici. Informatica. Il software. Il sw di sistema. Il sw applicativo. Il sw di sistema. Il sistema operativo. Hardware.

Sistemi informatici. Informatica. Il software. Il sw di sistema. Il sw applicativo. Il sw di sistema. Il sistema operativo. Hardware. http://159.149.98.238/lanzavecchia/docum enti/sscta.htm Sistemi informatici Hardware Microprocessore Memoria Periferiche di input e output Software Software di sistema Programmi applicativi 1 2 Il sw applicativo

Dettagli

Introduzione...xv. I cambiamenti e le novità della quinta edizione...xix. Ringraziamenti...xxi. Condivisione delle risorse con Samba...

Introduzione...xv. I cambiamenti e le novità della quinta edizione...xix. Ringraziamenti...xxi. Condivisione delle risorse con Samba... Indice generale Introduzione...xv I cambiamenti e le novità della quinta edizione...xix Ringraziamenti...xxi Capitolo 1 Capitolo 2 Condivisione delle risorse con Samba...1 Reti Windows... 2 Struttura base

Dettagli

PC Crash Course: OBIETTIVI

PC Crash Course: OBIETTIVI PC Crash Course: OBIETTIVI 1. PC: uno strumento 2. Microsoft Windows XP: alcuni concetti chiave della interfaccia grafica 3. File System: file, direttori, link, 4. Il prompt dei comandi 5. Un occhiata

Dettagli

Corso di avvicinamento al Software Libero. Parte 3 Shell e Comandi

Corso di avvicinamento al Software Libero. Parte 3 Shell e Comandi Corso di avvicinamento al Software Libero Lunedi 6 Febbraio Parte 3 Shell e Comandi Formato comune dei comandi GNU/Linux-Unix comando -opz arg1 arg2... argn comando il comando che si intende dare corrisponde

Dettagli

LPIC-1 Junior Level Linux Certification

LPIC-1 Junior Level Linux Certification Corso 2012/2013 Introduzione a GNU/Linux Obiettivi Il percorso formativo ha l obiettivo di fornire ai partecipanti le competenze basilari necessarie per installare, configurare e gestire un server/workstation

Dettagli

INTRODUZIONE AI SISTEMI OPERATIVI

INTRODUZIONE AI SISTEMI OPERATIVI INTRODUZIONE AI SISTEMI OPERATIVI Il sistema operativo è il software che permette l esecuzione di programmi applicativi e lo sviluppo di nuovi programmi. CARATTERISTICHE Gestisce le risorse hardware e

Dettagli

Indice. Introduzione PARTE PRIMA ELEMENTI DI BASE DI SUSE LINUX 1

Indice. Introduzione PARTE PRIMA ELEMENTI DI BASE DI SUSE LINUX 1 Indice Introduzione XIII PARTE PRIMA ELEMENTI DI BASE DI SUSE LINUX 1 Capitolo 1 Installazione di SUSE 10 3 1.1 Scelta del metodo di installazione 3 1.2 Avvio dell installazione 5 1.3 Controllo del supporto

Dettagli

Indice. Indice V. Introduzione... XI

Indice. Indice V. Introduzione... XI V Introduzione........................................................ XI PARTE I Installazione di Linux come Server.............................. 1 1 Riepilogo tecnico delle distribuzioni Linux e di Windows

Dettagli

Usare Python in Linux

Usare Python in Linux Università di Bologna 24 febbraio 2012 Outline 1 2 Outline 1 2 Cos è? Un sistema operativo Open Source; uno dei sistemi operativi dominanti in ambito server, ma utilizzabile su desktop, notebook, netbook,...

Dettagli

Lab 01 Sistemi Operativi

Lab 01 Sistemi Operativi Informatica Grafica Ingegneria Edile-Architettura a.a. 2010/2011 Lab 01 Sistemi Operativi Lab01 1 Obiettivi Durante l'esercitazione vedremo come il sistema operativo si occupa di gestire: 1. i processi

Dettagli

Università degli Studi di Verona. Dipartimento di Biotecnologie. Introduzione a Linux. Dr. Sergio Marin Vargas

Università degli Studi di Verona. Dipartimento di Biotecnologie. Introduzione a Linux. Dr. Sergio Marin Vargas Università degli Studi di Verona Dipartimento di Biotecnologie Biochimica - Laboratorio di Bioinformatica I (CdL. Bioinformatica) Bioinformatica e banche dati biologiche (CdL. Biotecnologie) Modulo Laboratorio

Dettagli

Laboratorio Multimediale Lezione n. 2

Laboratorio Multimediale Lezione n. 2 Laboratorio Multimediale Lezione n. 2 Corso di Laurea in Matematica, a.a. 2006-2007 16 ottobre 2006 Il filesystem Il filesystem è una struttura dati che permette di organizzare grandi quantità di informazioni

Dettagli

Tipi di sistema operativo Sistema UNIX

Tipi di sistema operativo Sistema UNIX Tipi di sistema operativo Sistema UNIX Il sistema UNIX è stato sviluppato da ricercatori dei laboratori AT&T e Bell Labs negli anni sessanta, ed è stato un passo avanti significativo nel panorama dei sistemi

Dettagli

Appunti Corso Linux 2011 Lez. 6

Appunti Corso Linux 2011 Lez. 6 Utenti, Gruppi e Permessi elenco degli utenti - /etc/passwd Appunti Corso Linux 2011 Lez. 6 In un sistema Linux (ma anche Unix, *BSD, Mac) gli utenti locali del sistema operativo sono registrati in un

Dettagli

Software e Sistemi Operativi Prof. Maurizio Naldi A.A. 2015/16

Software e Sistemi Operativi Prof. Maurizio Naldi A.A. 2015/16 Software e Sistemi Operativi Prof. Maurizio Naldi A.A. 2015/16 Cosa vedremo Il software applicativo Categorie di SW Il sistema operativo Gestione programmi in esecuzione (processi) Gestione memoria Gestione

Dettagli

NOZIONI BASE SHELL E SCRIPT LINUX

NOZIONI BASE SHELL E SCRIPT LINUX NOZIONI BASE SHELL E SCRIPT LINUX Aggiornato al 11 gennaio 2006 Ermes ZANNONI (ermes@zannoni.to.it) (http://www.zannoni.to.it) Indice : 1. Introduzione 2. La Shell 2.1 Comandida Shell 2.1.1 File e directory

Dettagli

Cambiamenti e novità della terza edizione...xix. Condivisione delle risorse in un workgroup con Samba...1

Cambiamenti e novità della terza edizione...xix. Condivisione delle risorse in un workgroup con Samba...1 Introduzione...xv Cambiamenti e novità della terza edizione...xix Ringraziamenti...xxi Capitolo 1 Condivisione delle risorse in un workgroup con Samba...1 Reti Windows... 2 Struttura base di Samba... 3

Dettagli

Note operative per Windows XP

Note operative per Windows XP Note operative per Windows XP AVVIO E ARRESTO DEL SISTEMA All avvio del computer, quando l utente preme l interruttore di accensione, vengono attivati i processi di inizializzazione con i quali si effettua

Dettagli

Link e permessi. Corso di Laurea Triennale in Ingegneria delle TLC e dell Automazione. Corso di Sistemi Operativi A. A. 2005-2006

Link e permessi. Corso di Laurea Triennale in Ingegneria delle TLC e dell Automazione. Corso di Sistemi Operativi A. A. 2005-2006 Corso di Laurea Triennale in Ingegneria delle TLC e dell Automazione Corso di Sistemi Operativi A. A. 2005-2006 Link e permessi Link Un riferimento ad un file è detto link Ogni file può avere un numero

Dettagli

Parte V. Sistemi Operativi & Reti. Sistemi Operativi. Sistemi Operativi

Parte V. Sistemi Operativi & Reti. Sistemi Operativi. Sistemi Operativi Parte V & Reti Sistema operativo: insieme di programmi che gestiscono l hardware Hardware: CPU Memoria RAM Memoria di massa (Hard Disk) Dispositivi di I/O Il sistema operativo rende disponibile anche il

Dettagli

Sistemi operativi I: Windows. Lezione I

Sistemi operativi I: Windows. Lezione I Sistemi operativi I: Windows Lezione I Scopo della lezione Richiamare le principali funzionalità di un sistema operativo Esemplificarle descrivendo la loro implementazione in Windows Introdurre alcuni

Dettagli

QUICK START GUIDE F640

QUICK START GUIDE F640 QUICK START GUIDE F640 Rev 1.0 PARAGRAFO ARGOMENTO PAGINA 1.1 Connessione dell apparato 3 1.2 Primo accesso all apparato 3 1.3 Configurazione parametri di rete 4 2 Gestioni condivisioni Windows 5 2.1 Impostazioni

Dettagli

Sistema Operativo Compilatore

Sistema Operativo Compilatore MASTER Information Technology Excellence Road (I.T.E.R.) Sistema Operativo Compilatore Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Il Sistema

Dettagli

Sistemi operativi. Andrea Passerini passerini@disi.unitn.it. Informatica. sistemi operativi

Sistemi operativi. Andrea Passerini passerini@disi.unitn.it. Informatica. sistemi operativi Sistemi operativi Andrea Passerini passerini@disi.unitn.it Informatica Tipi di sistema operativo Sistema UNIX Il sistema UNIX è stato sviluppato da ricercatori dei laboratori AT&T e Bell Labs negli anni

Dettagli

Corso di Web programming Modulo T3 A2 - Web server

Corso di Web programming Modulo T3 A2 - Web server Corso di Web programming Modulo T3 A2 - Web server 1 Prerequisiti Pagine statiche e dinamiche Pagine HTML Server e client Cenni ai database e all SQL 2 1 Introduzione In questa Unità si illustra il concetto

Dettagli

Note operative per Windows 7

Note operative per Windows 7 Note operative per Windows 7 AVVIO E ARRESTO DEL SISTEMA All avvio del computer, quando l utente preme l interruttore di accensione, vengono attivati i processi di inizializzazione con i quali si effettua

Dettagli

Compilazione rapporto di Audit in remoto

Compilazione rapporto di Audit in remoto Compilazione rapporto di Audit in remoto Installazione e manuale utente CSI S.p.A. V.le Lombardia 20-20021 Bollate (MI) Tel. 02.383301 Fax 02.3503940 E-mail: info@csi-spa.com Rev. 1.1 23/07/09 Indice Indice...

Dettagli

I Metacaratteri della Shell Unix

I Metacaratteri della Shell Unix I Metacaratteri della Shell Unix La shell Unix riconosce alcuni caratteri speciali, chiamati metacaratteri, che possono comparire nei comandi. Quando l utente invia un comando, la shell lo scandisce alla

Dettagli

Raspberry Pi - Labolatorio Informatica

Raspberry Pi - Labolatorio Informatica Raspberry Pi - Labolatorio Informatica Indice 1 Prerequisiti 2 2 Installazione di Raspbian su scheda SD 2 2.1 Installazione con Linux...................................... 2 2.2 Installazione con Windows....................................

Dettagli

Corso ForTIC C2 LEZIONE n. 8. Cos'è la shell Le variabili d'ambiente L'uso della shell per la realizzazione di semplici script

Corso ForTIC C2 LEZIONE n. 8. Cos'è la shell Le variabili d'ambiente L'uso della shell per la realizzazione di semplici script Corso ForTIC C2 LEZIONE n. 8 Cos'è la shell Le variabili d'ambiente L'uso della shell per la realizzazione di semplici script I contenuti di questo documento, salvo diversa indicazione, sono rilasciati

Dettagli

Corso Linux Corso Online Amministratore di Sistemi Linux

Corso Linux Corso Online Amministratore di Sistemi Linux Corso Linux Corso Online Amministratore di Sistemi Linux Accademia Domani Via Pietro Blaserna, 101-00146 ROMA (RM) info@accademiadomani.it Programma Generale del Corso Linux Tematiche di Base MODULO 1

Dettagli