Linux guida e corso

Linux guida e corso

 

 

 

I riassunti , gli appunti i testi contenuti nel nostro sito sono messi a disposizione gratuitamente con finalità illustrative didattiche, scientifiche, a carattere sociale, civile e culturale a tutti i possibili interessati secondo il concetto del fair use e con l' obiettivo del rispetto della direttiva europea 2001/29/CE e dell' art. 70 della legge 633/1941 sul diritto d'autore

 

 

Le informazioni di medicina e salute contenute nel sito sono di natura generale ed a scopo puramente divulgativo e per questo motivo non possono sostituire in alcun caso il consiglio di un medico (ovvero un soggetto abilitato legalmente alla professione).

 

 

 

 

Linux guida e corso

Luglio 1991

Tutto inizia in un'estate finlandese, Linus Benedict Torvalds, ancora un giovane studente dell' Università di Helsinki, inizia a lavorare al suo hobby: Linux.
Il 3 Luglio lo si sente informarsi su usenet:
"Hello netlanders,
Due to a project I'm working on (in minix), I'm interested in the posix standard definition. Could somebody please point me to a (preferably) machine-readable format of the latest posix rules? Ftp-sites would be nice. "
Torvalds giustificherà poi la folle impresa con queste parole: "I couldn't afford some of the commercial OSes and I didn't want to run DOS or Windows -- I don't even know, did Windows really exist then?".

 

 

5 Ottobre 1991

Nello stesso anno viene rilasciata la versione 0.02. Il post su usenet che ne annuncia la presenza è diventato un classico.
Grazie all'archivo di 20 anni di storia di Usenet su Google possiamo ricordare.

 

 

Gennaio 1992

Viene rilasciata la versione 0.12. Risulta relativamente stabile e supporta vario hardware.
Da questa versione in poi la crescita di Linux inizia a diventare progressiva e dirompente, sia come numero di coder che supportano lo sviluppo, sia come utilizzatori.
"Earlier kernel releases were very much only for hackers: 0.12 actually worked quite well"

 

 

Aprile 1992

Rilasciate la versione 0.95 e 0.96. Il salto è diretto dalla 0.12. Nascono le prime distribuzioni: la MCC Linux e la SLS.

 

 

1994

Viene rilasciata la prima versione definitiva 1.0.
Nascono RedHat, Debian, SUSE tutt'ora fra le distribuzioni più diffuse.
Linux, che resta copyrighted by Linux Torvalds, diventa ufficialmente un software aperto, abbracciando in pieno la General Public License (GPL) del movimento GNU Open Source.
Grazie all'aumento esponenziale dell'interesse da parte della comunità mondiale nascono i primi LUGs (Linux User Groups), ormai diffusi anche in Italia.

 

 

1995

Compaiono sul mercato delle nuove distribuzione commerciali come Caldera Linux. Kernel 1.2 out in Marzo.
Dal kernel 1.3 in sviluppo si passerà direttamente al 2.0

 

 

1996

Rilasciata la versione 2.0.
Compaiono le prime versioni tradotte in più lingue.
Linux ha bisogno di una mascotte: nasce TUX, il pinguino più famoso del mondo.

 

 

1997

Da qui in poi la storia di Linux diventa sempre più Linus indipendent, nel 1997 lascia la Finlandia per raggiungere Santa Clara, Silicon Valley, dove lo aspetta, nella misteriosa start-up Transmeta, un ruolo che ai più non è chiaro.
Per anni, prima di annunciare al pubblico di produrre microprocessori a basso consumo e quotarsi al NASDAQ, Transmeta rimane un segreto impenetrabile intorno al quale si accumulano rumours e misteri:
- E' la società dove lavora Linus Torvalds (che continua a sviluppare Linux e non si capisce per cosa venga pagato)
- Fra i soci finanziatori figura Paul Allen (Microsoft co-founder)
- Assume programmatori e tecnici di altissimo livello
- Sfoggia per anni una home page che è un capolavoro di anti-marketing.

 

 

1999

Dopo lunga attesa il kernel 2.2 vede la luce.

 

 

2001

Agli inizi dell'anno, dopo varie pre-version, su kernel.org appare l'immagine da 19.788.626 byte del 2.4.0 La prima release di un altro stable thread.

 

 

Oggi

Linux è una reale alternativa al mondo Microsoft e Unix, si ritrova milioni di utenti, migliaia di sviluppatori e un mercato in espansione.
E' presente in sistemi integrati, è usato per il controllo di dispositivi robotizzati e ha volato a bordo dello shuttle, praticamente gira su oggetti elettronici di tutti i tipi, dai palmari alle workstation Alpha, risultando l'OS in assoluto più soggetto a porting.
Nessuno ormai si sogna di considerarlo un progetto sperimentale che non possa essere usato in applicazioni mission-critical, IBM "lo monta sui suoi server" (e lo pubblicizza pure), Microsoft lo considera il principale nemico da combattere (e non lesina risorse nel farlo), Oracle ci fa girare sopra il suo DB.

GNU General Public License

 

Il testo ufficiale della GPL

 

Linux non è l'unico sistema operativo Open source.
Ne esistono molti altri in circolazione ma quelli più conosciuti sono i dialetti *BSD (FreeBSD, OpenBSD, NetBSD).
Lo stesso kernel di Mac Os X, Darwin, è open source (è basato su FreeBSD e Mach 3.0).
The cathedral and the bazaar di Eric Raymond è un illuminante libro sui modelli di sviluppo di software di una grande software house con sorgenti segreti (la cattedrale) e di una community di sviluppatori (il bazaar) che condividono, debuggano, sviluppano un progetto dai sorgenti aperti.
Linux è l'esempio più clamoroso di cosa il bazaar può fare. Il libro aiuta a capire perchè tutto questo è potuto accadere.

GNU e Open Source

Nel 1985 Richard Stallman, ex ricercatore del MIT, fondò la Free Software Foundation (FSF), finanziata per donazioni, alla cui base c'era il progetto GNU, che ambiva alla realizzazione di un sistemaq operativo free, nel senso più esteso del termine.
Il software free, rilasciato con la GNU General Public Licence (GPL), in questo contesto, implica:
- Ridistribuzione Libera del software e del codice
- Il Codice Sorgente è Aperto e disponibile per lettura, modifiche, analisi, controllo
- Prodotti derivati da prodotti GPL devono avere licenza GPL
- Copyright dell'autore
Linux è il più famoso progetto GNU, di fatto è composto dal kernel di Torvalds e da molte altre utility e programmi di base, ispirate agli equivalenti Unix (Stallman insiste nel volerlo chiamare GNU/Linux, sarebbe effettivamente più corretto e rispettoso degli sforzi di moltissimi programmatori che non hanno la fama di Linux Torvalds, ma è oggettivamente un nome meno accattivante).
Spesso associato al concetto di free software è quello di opensource le differenze sono sottili, sotto certi aspetti inafferabili. Semplificando si può dire che l'Open Source si basa su principi pragmatici ed economici, mentre il Free Software (così come descitto nella GPL) ha radici più etiche e filosofiche.
In inglese si usa definire l'opensource come free as beer e il free software come free as speech.
Per l'OSI (Open Source Initiative) si dovrebbe rilasciare il codice del proprio software, perchè è una scelta commercialmente sostenibile e valida, per la FSF il codice dovrebbe essere aperto per rispettare la libertà degli autori e degli utenti.
Fra i fondatori dell'OSI figura Eric Raymond noto fra l'altro per aver scritto il libro/manifesto "The Cathedral and the bazaar" il cui percorso editoriale è emblematico su cosa può essere un modello di business basato sull'open source: il libro è liberamente disponibile, nella sua interezza, in rete e chiunque può leggerlo ma l'autore ha venduto i diritti di pubblicazione su carta alla O'Reilly (che ne vende parecchie copie).

Non essendoci dati di vendita centralizzati è difficile valutare la diffusione di Linux.
Informazioni e indicazioni utili vengono date da Linux Counter, dove viene oltretutto fatto un censimento (volontario) sul numero di utenti Linux: nel Gennaio 2002 risultavano 117.842 utenti registrati e 105.408 macchine registrate. Questo stima è ovviamente per difetto (la registrazione viene fatta sul sito stesso).
Il gestore di questo sito (ovviamente un Linux enthusiast) stima in 18.000.000 il numero di utenti Linux.
Altro indicatore interessante è Netcraft, che, pur senza fare riferimento a singoli OS, dà indicazioni utili sui server Web utilizzati in rete.
Recenti ricerche varie fatte sulla diffusione di Linux nel mondo danno risultati diversi:
- IDC stima 1.300.000 server Linux consegnati nel 1999;
- Dataquest ben più prudenzialmente stima in 543.778 il numero di server Linux consegnati nel 2001.
A titolo di curiosità Google, nel Gennaio 2002, conta circa 50.500.000 pagine contenenti la parola linux (e 43.000.000 pagine con la parola windows).
Sempre a Gennaio 2002 esistono 480 Linux User Groups (LUG), di cui 16 in Italia.
Comunque si vogliano considerare questi numeri il dato certo è:
- La crescita nella diffusione di Linux è innegabile;
- Il suo utilizzo in ambiti aziendale, corporate e accademico sempre maggiore;
- La conoscenza delle sue potenzialità è sempre più precisa e consapevole.


Per kernel si intende il cuore di un sistema operativo, il codice che gestisce le risorse presenti sul nostro sistema e le rende disponibili alle applicazioni.
Il kernel si occupa principalmente di gestire:
- le comunicazioni con l'hardware del sistema,
- i file system, la memoria,
- l'accesso a queste risorse da parte dei processi (le applicazioni che girano sul sistema)...

Le versioni del kernel Linux sono identificate con numeri dal significato ben preciso. Per esempio il kernel 2.4.15 ha:
2- Il major number. I kernel della serie 1.x sono ormai piuttosto vecchi e pochissimo usati.
4- Il minor number. Se è pari il kernel viene considerato stable e pronto per sistemi in produzione, se è dispari lo si considera in development e da usare con cautela o per sperimentazione. Le release stable sono sempre figlie delle devel precedenti. Per esempio al momento in cui si scrive, il kernel stable è alla versione 2.4.18, mentre quello in sviluppo è alla 2.5.7 (da cui deriverà la 2.6.x o direttamente la 3.0.x). Solitamente nei kernel stable si tende a fare maintenance ed a implementare solo le features strettamente necessarie, lasciando a quello in development lo sviluppo di nuove funzionalità.
15- E' la revisione (patch) corrente. Questo è un numero progressivo che parte da 0. Da una revisione alla successiva possono passare da pochi giorni a varie settimane.
Esistono inoltre varie patch temporanee, anche non di Torwalds stesso (comuni sono le -ac patch, di Alan Cox) che rappresentano stadi intermedi prima della release di una revisione definitiva.
Ha senso utilizzarle subito solo in caso di utilizzo di kernel con gravi problemi di sicurezza o stabilità (sul proprio sistema) che vengono risolte con le relative patch parziali.


Kernel Monolitico Vs Kernel Modulare

Esistono diversi tipi di kernel:


Monolitico

E' un singolo file binario eseguibile in modalità "kernel" che contiene il gestore del processo, della memoria, del sistema e tutto il resto.
Esempi di tali sistemi sono UNIX, Linux, MS-DOS.

Microkernel

E' un piccolo nucleo ridotto ai minimi termini che ha il compito di gestire le comunicazioni fra i gestori di sistema, processi separati eseguiti al di fuori dal kernel. Esempi di tali sistemi sono BE OS, GNU HURD, MINIX.

Modulare

Per kernel Modulare si intende un' estensione del kernel monolitico, con la capacità di caricare/scaricare parti di codice (moduli) secondo necessità e richieste. Può esserlo Linux se lo si definisce in fase di configurazione pre-compilazione.

Il kernel monolitico è più veloce, poichè tutto il codice è già stato caricato al bootstrap dell'OS, ma di contro occupa maggiori risorse del sistema.
Un altro punto a favore è la maggiore stabilità: non richiede moduli evitando così pericolose dipendenze.
Il kernel modulare è quello utilizzato da tutte le distribuzioni in fase di installazione di LINUX su una macchina.

Le distribuzioni

Una Distribuzione (distro) è un confezionamento (packaging) di Linux, con procedure che rendono comoda e semplice l'installazione.
Si consideri che il "Linux di Linus" non è veramente un OS ma il semplice kernel. A questo ogni distribuzione aggiunge tutto il software necessario per avere un sistema operativo completo di software applicativo e di servizio. Anche per questo Stallman insiste nel chiamarlo GNU Linux poiché tutte le utility di base, dal gcc (compilatore) alle utility di gestione file fanno parte del progetto gnu.
Notare che essendo queste utility (bash, vi, emacs, awk, gcc ecc.) scritte in tempi successivi rispetto agli equivalenti Unix, sono generalmente più evolute e migliori per l'inevitabile progresso della scienza informatica.
Le distribuzioni differiscono per:
- Numero e versioni dei programmi installabili;
- Versione del kernel utilizzata e modalità di pre-installazione (il kernel solitamente non viene compilato durante una normale installazione);
- Procedura di installazione (interfaccia utente e possibilità di definire opzioni e scegliere quale software installare);
- Organizzazione di file di configurazione, programmi, log nel file system;
- Configurazioni predefinite del software installato.
Le distribuzioni più note sono:


Red Hat

Red Hat è la più popolare distribuzione Linux e si adatta bene ad usi diversi (desktop, server, laptop). Pioniera nell'includere un meccanismo di update User Friendly e l'aggiornamento automatico tramite il RedHat Network. Ha introdotto il sistema di gestione di pacchetti software con estensione .RPM che facilita installazione e aggiornamento del software.

Debian

Distribuzione completamente sviluppata da una comunità che consta di centinaia di persone in tutto il mondo; fornisce un proprio sistema di pacchettizzazione simile all'RPM (pacchetti .DEB). Viene considerata per puristi ed esperti e risulta generalmente meno user-friendly delle altre.

S.U.S.E.

Distribuzione più diffusa in Europa, solida e ben accessoriata, RPM compatibile.
Utilizza un software di gestione e configurazione (YAST) completo, semplice, ma poco compatibile.

Mandrake

In crescente diffusione, usa pacchetti simili a RPM (MDK) che sono aggiornati molto rapidamente. E' molto user friendly e probabilmente è la più adeguata per un sistema desktop.

Slackware

Slackware è una delle prime distribuzioni. Si differenzia dalle altre per non usare package tipo RPM o DEB e viene generalmente considerata più ostica da installare. Per puristi.

Quale distribuzione usare?

E' difficile suggerire una specifica distribuzione da utilizzare per i propri server.
In questo corso viene utilizzata Red Hat perchè è la più diffusa, perchè è ben bilanciata per diversi campi di attività, è ben supportata dalla casa madre (che offre anche servizi di supporto a pagamento) e generalmente è ben strutturata.
In genere, la migliore distribuzione da usare è quella che meglio si conosce e se si devono gestire diverse macchine è opportuno averle tutte con la stessa distribuzione e possibilmente versione, per facilità di aggiornamente e manutenzione.
Qualunque sia la distro adottata è sempre consigliabile installarne l'ultima versione disponibile (contiene pacchetti e kernel più recenti) e seguirne sul relativo sito la segnalazione di eventuali aggiornamenti ( "errata"), possibilmente aspettando alcune settimane prima di metterla in produzione, visto che ogni nuova distribuzione tende ad avere bug e falle nella sicurezza che vengono aggiornate dopo l'iniziale diffusione pubblica.
Considerare che dopo l'installazione di una qualsiasi distribuzione, se si sta lavorando su un server che deve andare in produzione, sono auspicabili, consigliati e necessari una serie di interventi di post-installazione:
- Aggiornamento di tutti i pacchetti per i quali esistono degli errata (nuove versioni che aggiornano bug o buchi di quelle rilasciata con il CDROM originale);
- Rimozione di tutti i servizi non utilizzati;
- Eventuale aggiornamento del kernel;
- Implemementazione di script o configurazioni custom.

E' fondamentale essere ben preparati prima dell'installazione per evitare che ore di lavoro vadano in fumo per una mancata o sbagliata considerazione e analisi dei propri bisogni e del proprio hardware.
La raccolta di informazioni è il primo passo per evitare tutto ciò. Ecco cosa bisogna sapere per iniziare un'installazione:
- Conoscere l'hardware a disposizione. Solitamente durante l'installazione il proprio hardware viene rilevato automaticamente, ma possono esserci rari casi in cui questo non accade. In genere se si usa un PC standard con una nuova distribuzione non ci sono problemi nel riconoscimento di componenti e periferiche.
- Sapere quali e quanti Hard Disk sono presenti sul sistema, come sono partizionati, quali sono cancellabili.
- Il tipo di computer su cui viene fatta l'installazione (server, desktop, laptop)
- Configurazione di rete, se prevista (indirizzo IP, subnetmask, nome macchina, server DNS)
- Configurazioni base del sistema (layout di tastiera, nomi utenti e password, timezone)
- I servizi che dovrà offrire (deve diventare un server? Di che tipo?)
- I programmi che ci interessa installare (solitamente è possibile sceglierli singolarmente o per gruppi).

Hardware, quale scegliere?

Una scelta importantissima è quella della configurazione hardware, dal numero di interfacce di rete al numero di processori, dalla dimensione dei dischi fissi a quanta ram utilizzare.
Ormai Linux offre una vasta compatibilità con la maggior parte dell'hardware esistente, sia direttamente a livello di kernel ufficiale, sia con driver rilasciati direttamente dai produttori, inoltre, per il vero hacker, avendo a disposizione i sorgenti del kernel, c'è sempre la possibilità ultima di scriversi autonomamente i propri driver.
Un breve quadro sulla scelta dell'hardware, si rimanda ai link indicati per informazioni più dettagliate:


CPU

Le distribuzioni standard contengono un Linux predisposto per processori Intel Based a 32 bit. (dal 386 al Pentium 4 Intel, oltre a compatibili quali AMD Athlon, Cyrix, Transmeta ecc.) Se si vuole installare Linux su un Mac, una Sun o un Compaq Alpha si deve trovare una distribuzione per PowerPC, Sparc o Alpha.
La potenza del processore dipende ovviamente dalle applicazioni usate, un Pentium 2 o superiore basta per normali applicazioni server senza eccessivo carico. Esiste il supporto multiprocessore.

RAM

Come sempre, più ce n'è, meglio è. Se si usa Linux senza interfaccia grafica, le esigenze sono modeste: 64Mb bastano per un sistema base, ma sono ovviamente da aumentare per server che devono gestire volumi di traffico medio/alti o ospitare applicativi pesanti.

HARD DISK

La scelta fra un sistema (E)IDE o SCSI dipende essenzialmente dal budget a disposizione. In genere, prima di pensare ad un sistema SCSI è opportuno "carrozzare" la macchina con un buon processore e abbastanza memoria. Il supporto per schede SCSI è ottimo.

CDROM - FLOPPY

Un normale CD-ROM IDE basta e avanza (di fatto, per un server, serve solo in fase di installazione). Il floppy può mancare se la motherboard supporta il boot direttamente dal CD (funzione comune in tutte le motherboard non vecchie).

SCHEDA VIDEO

Per un server (su cui si avrà soltanto l'interfaccia a caratteri) basta una semplice VGA. Per un desktop con interfaccia visuale il minimo è una SVGA.
E' disponibile l'accelerazione 3D su schede che supportano OpenGL.

SCHEDA RETE

Si consiglia una scheda ethernet 10/100. Esistono driver per alcune schede gigabit, ma è opportuno verificarne l'esistenza per il proprio hardware.
Esiste anche il supporto per Token Ring e schede wireless (da verificare a seconda del modello).

ACCESSORI MULTIMEDIALI

Per un server non sono necessarie schede audio o accessori multimediali. I kernel dalla 2.4 in su, comunque supportano la Creative Sound Blaster live, schede audio meno recenti e le periferiche USB. Esiste anche il supporto Firewire.

MODEM

I modem esterni (analogici o ISDN) su interfaccia seriale (meglio) o USB sono normalmente utilizzabili.
Possibili complicazioni esistono per modem interni (Winmodem), che in genere sono sconsigliabili.

L'installazione di Linux si può eseguire seguendo metodi differenti: tramite CD-ROM (con boot diretto dal CD oppure via floppy) o via rete (ftp, nfs, smb).
In questo corso si affronta una normale installazione tramite CDROM.
Durante l'installazione viene chiesto quale utilizzo si deve fare della macchina e per alcuni casi comuni (server, desktop, laptop, stazione di sviluppo) ci sono delle impostazioni che installano automaticamente dei pacchetti (software) predefiniti.
Alternativamente è possibile una selezione custom di cosa si vuole installare: i pacchetti sono divisi per categoria ed è possibile sceglierli singolarmente. Il sistema provvede automaticamente ad installare le dependencies, pacchetti non selezionati necessari per poter far funzionare quelli scelti.
Se la macchina che si sta installando è destinata a diventare un server si consiglia di rimuovere ogni software relativo all'interfaccia a finestre Xwindows ed ogni applicazione ludica/multimediale.
In genere ogni server o macchina destinata ad avere indirizzo IP pubblico è bene (se non firewallata secondo altri criteri) che abbia attivi solo i servizi indispensabili per il suo funzionamento.
Se il computer è per un uso personale (desktop) e lo spazio su Hard Disk non manca ( > 2Gb ) si ci può sbizzarrire ad installare un po' di tutto, per verificare la funzionalità di programmi diversi.


Durante l'installazione di Linux viene richiesto come partizionare i(l) propri(o) hard disk, in modo da definire cosa formattare e dove installare il sistema operativo, se preservare le eventuali partizioni esistenti (contenenti altri OS) o ripulire completamente gli hard disk.
Gli strumenti generalmente disponibili per questa operazione sono:

fdisk

Tool testuale con la possibilità di operazioni avanzate per il partizionamento

diskdruid

Tool grafico fornito da RedHat, semplice ed intuitivo alternativa funzionale a fdisk se non si hanno bisogno di funzionalità avanzate

Partizioni

Con diskdruid e fdisk si ha la possibilità di decidere come partizionare i propri hard disk e decidere quale filesystem adottare per far girare linux.
Il minimo partizionamento richiesto prevede:
- una partizione generale (/, root) in cui saranno inseriti tutti i file.
- una partizion di swap (usata come Virtual Memory)
E' preferibile, nelle installazioni standard avere un miglior partizionamento cioè dedicare partizioni indipendenti per:
- / (la root, sotto la quale stanno tutte le altri directory
- /boot (partizione di boot, dove risiede kernel e file di boot. 20 Mb di spazio possono bastare)
- /var (partizione in cui vengono messi file che cambiano di dimensione, tipicamente i log. E' utile averla su partizione indipendente per evitare che un aumento dei log inattesi riempa tutto il filesystem. Farla almeno di 100 Mb)
- /home (dove risiedono i file di tutti gli utenti. Può essere piccola e praticamente inutilizzata (mail, dns server) o molto grossa e piena di documenti (web, file server)
- /tmp dove risiedono file temporanei.
In fase di partizionamento, oltre a decidere come partizionare gli hard disk bisogna assegnare ad ogni partizione un mount point.
Per esempio se abbiamo un hard disk da 10 Gb come primary master e lo vogliamo dividere in 6 partizioni, potremo ottenere:


Partizione

Mount Point

Partizione

Mount Point

Partizione

Mount Point

/dev/hda1

/

/dev/hda2

/boot

/dev/hda3

/var

/dev/hda4

/home

/dev/hda5

/tmp

/dev/hda6

SWAP

Notare che la partizione di SWAP non necessita di un mount point.
Considerare inoltre che possiamo formattare ogni partizione con un file system diverso.
Possiamo per esempio avere, nell'esempio sopra, tutte le partizioni in ext2 (File System nativo di Linux) e la partizione /dev/hda4 ( dove viene montala la /home ) formattata in FAT 32 (File System di Windows 98, supportato anche da Linux).

fdisk /dev/hda

 

lancia fdisk per partizionare hda

Linux

*nix

Win-DOS

fdisk

fdisk

fdisk

swap FS

 

pagefile.sys

Il codice esadecimale che identifica la partizione swap in fdisk è 82
Per evitare complicazioni che possono rendere impossibile l'avvio, è consigliabile installare sia il bootloader (LILO) che il kernel (partizione /boot ) nei primi 1024 cilindri dell'hard disk di boot.
Questo può diventare un issue su sistemi con doppio sistema operativo, dove, tipicamente, la partizione dedicata a Winodws è particolarmente grossa.
Linux, come ogni sistema Unix, da ad ogni dispositivo hardware un proprio nome.
Gli hard disk IDE hanno i seguenti nomi:


Primary Master: /dev/hda

Primary Slave: /dev/hdb

Secondary Master: /dev/hdc

Secondary Slave:
/dev/hdd

Le singole partizioni di un hard disk hanno nomi tipo:
- /dev/hda1 (prima partizione del primary master)
- /dev/hdc4 (quarta partizione del secondary master)


In ambienti Unix e quindi anche su Linux esistono differenze fra i vari utenti, definite dai permessi e dall'acceso ai file e comandi che un'utente può lanciare.
E' convenzione che i semplici utenti possono scrivere, leggere e modificare file solo all'interno del loro ambiente (home) e lanciare semplici comandi che non influiscono sulla configurazione del sistema.
Per poter accedere completamente alle risorse del sistema bisogna accedere al sistema come superuser ovvero impersonificando l'utente root.
In fase di installazione di una macchina Linux si consiglia di scegliere una password di root piuttosto complicata (ma ricordabile!) e di creare immediatamente un normale utente con il quale eseguire le proprie funzioni più comuni.
In particolare si consiglia, per motivi di sicurezza, di non lanciare mai Xwindows (l'interfaccia a finestre disponibile su Linux) come utente root su una macchina che ha accesso a reti esterne.

Chi è root?

L'utente root è l'amministratore del sistema con tutti i poteri che comporta questo ruolo, quindi è molto importante che l'accesso a root sia limitato solo al reale amministratore di sistema (sysadm).
L'utente root ha poteri assoluti sul sistema:
- Aggiungere, Eliminare e modificare account (altri utenti)
- Installare e configurare servizi
- Accesso completo (lettura e scrittura) di tutti i file presenti nel filesystem
- Aggiungere e Modificare il Filesystem
- Distruggere tutto con un solo comando (e tante altre brutte cose, il potere di root sul sistema è assoluto).

Linux

*nix

Win-DOS

root

root

Administrator

 

 

 

Per motivi di sicurezza è opportuno eliminare l'accesso di root da remoto (via telnet o ssh).
Attraverso tools come sudo è possibile fare in modo che semplici utenti possono lanciare comandi che solo root potrebbe lanciare.
Alcuni sysadm puristi ritengono che non si dovrebbe mai amministrare la macchina come utente root, ma utilizzare esclusivamente un utente normale e, quando è necessario, usare il comando sudo per le funzioni che solo root può gestire.

 

PRATICA

Installare Linux sul proprio PC - PARAMETRI PER L'AULA

Sulla base delle informazioni ottenute nel modulo 3 e con l'aiuto dell'istruttore procedere alla installazione di Linux sul proprio PC.
Parametri da utilizzare
Parametri variabili a seconda del PC:


Nome PC

Indirizzo IP

Login Utente aggiuntivo

Password Utente aggiuntivo

Password di root

box1

192.168.0.101

joe

joelinux

linux1

box2

192.168.0.102

joe

joelinux

linux2

box3

192.168.0.103

joe

joelinux

linux3

box4

192.168.0.104

joe

joelinux

linux4

...

...

...

...

...

Parametri uguali per ogni PC:
Netmask: 255.255.255.0
Default gateway: 192.168.0.1
IP DNS server: 192.168.0.2
Linguaggio da usare per l'installazione: INGLESE (N.B. Si consiglia sempre di effettuare installazioni usando l'inglese come lingua predefinita).
Tipo di Installazione: Server. Livello di sicurezza: nessuno.
Time zone: Rome GMT+1

VERIFICA

Domande sui moduli 2 e 3

A questo punto del corso il partecipante dovrebbe essere in grado di rispondere alle seguenti domande:


1 - Quali sono le principali caratteristiche di una licenza GPL?
Una licenza GPL implica: Ridistribuzione Libera del software e del codice; Il Codice Sorgente è Aperto e disponibile per lettura, modifiche, analisi, controllo; Prodotti derivati da prodotti GPL devono avere licenza GPL; Copyright dell'autore.

2 - Che differenza c'è fra kernel e distribuzione?
Il kernel è la parte del sistema operativo che gestisce i dispositivi hardware, le risorse di sistema e i processi.
Una distribuzione comprende il kernel Linux, una serie di programmi e software per utilizzarlo effettivamente e l'interfaccia di installazione e configurazione.

3 - Nomina almeno 4 nomi di distribuzioni esistenti per Linux
Red Hat - Caldera - Slackware - Debian - SUSE - Mandrake ... per una lista completa: http://www.distrowatch.com

4 - Cosa posso fare per installare Linux su un computer che non supporta il boot direttamente da CDROM?
Creare un floppy di boot tramite il comando DOS rawrite (o analoghi).

5 - Quanti filesystem possono esserci in una partizione? Quanti mount-point per ogni filesystem?
Ci può essere solo un file system in una partizione e questo ha un unico mount point.

6 - Com'è chiamata su Linux la terza partizione di un hard disk IDE secondary slave?
/dev/hdd3

7 - Che differenza c'è fra un utente normale e l'utente root?
L'utente root ha i permessi per effettuare l'amministrazione completa della macchina.
L'utente normale può eseguire comandi, agire sui file sui quali ha permessi per farlo e in genere nessun controllo su funzioni e servizi che riguardano l'intera macchina.

Linux è un sistema operativo multiutente, dove differenti utenti possono avere accesso al sistema avendo i propri dati, i propri programmi e impostazioni completamente separate da quelle di altri utenti oltre ad avere la possibilità di accedere alla risorse del sistema simultaneamente (sia direttamente tramite console (tastiera) sia da remoto via rete).
L'operazione di autenticazione dell'utente, tramite nome utente e password, che permette l'accesso alle risorse del sistema è detto login. L'interfaccia testuale di getione del sistema, a cui si accede tramite il login (in modalità testuale) è si chiama shell.
Il login può essere eseguito in ambienti diversi, grafici o testuali da locale o da remoto ma hanno tutti lo stesso scopo: verificare che l'utente abbia i requisiti per accedere al sistema o ad un suo servizio e metterlo in condizione di interagire con la macchina.
Il logout è esattamente l'opposto del login: chiude la shell aperta con il precedente login e tutti i successivi programmi lanciati dall'utente, e fa in modo che l'utente debba ripetere il login per riaccedere alla linea di comando o meglio shell.

Comandi legati ai processi di login e logout

su

Esegue una shell come un'altro utente. Se si esegue come utente normale senza parametri viene richiesta la password per aprire una sheel come root.

id

Visualizza lo UserID (UID) e il GroupID (GID) dell'utente corrente.
UID e GID sono identificativi numerici assegnati ad ogni utenti.

pwd

Mostra in quale directory ci si trova.

lastlog

Visualizza per ogni utente del sistema la data dell'ultimo log.

last

Visualizza tutti i login recenti sul sistema.

shutdown

Riavvia il sistema (è possibile specificare entro quanti secondi, se riavviare o stoppare).

who

Visualizza gli utenti correntemente loggati sul sistema.

ulimit

Visualizza/modifica i limiti di utilizzo di alcune risorse del sistema da parte dell'utente.

 

 

 

shutdown -r now

 

Arresta e riavvia il sistema

shutdown -h now

 

Arresta e spegne il sistema

last

 

Utile per capire velocemente chi si è loggato, quando e da dove.

ulimit -a

 

Visualizza tutte le impostazioni correnti sui limiti di utilizzo delle risorse del sistema.

 

Esistono altri comandi per spegnere il sistema:
- halt
- poweroff
- init 6 (passa al runlevel 6, corrisponde ad un reboot)
In molte distribuzioni Linux ai famigerati tasti CTRL+ALT+DELETE è associato il comando shutdown -t3 -r now che esegue un reboot entro 3 secondi.

Cosa è una shell?

Se il kernel è il nucleo, la shell è il guscio.
Per shell si intende la l'interfaccia (testuale) tramite la quale l'utente può operare sul sistema.
Il guscio esterno, accessibile all'umano, con cui è possibile interagire con le funzionalità offerte dal kernel, interprete e gestore dell'hardware.
La shell è un programma che gestisce la comunicazione fra utente e sistema operativo interpretanto ed eseguendo i comandi dell'utente (la shell viene chiamata anche command interpreter). Può avere diversi utilizzi:
- Uso interattivo, il sistema attende i comandi digitati dall'utente, che possono redirezionare input ed output;
- Configurazione della propria sessione, con cui definire variabili e parametri che vengono utilizzati in ogni interazione dell'utente con la macchina;
- Programmazione utilizzando comandi di sistema e funzionalità della shell è possibile realizzare piccoli programmi (script shell) in grado di automatizzare operazioni e reagire ad eventi.
Sulla gran parte delle distribuzioni Linux è preimpostata di default la shell bash.
La sintassi dei comandi presenti in questo corso è basata sulla bash.

Quali shell?

Esistono molteplici shell, ognuna delle quali presenta caratteristiche e peculiarità proprie.

sh

Bourne shell, è disponibile su qualsiasi ambiente UNIX, quindi è la più utilizzata per creare script shell compatibili e cross-platform.

csh

C shell, prende il nome dal linguaggio di programmazione, ovviamente le funzionalità di tale shell derivano in modo diretto dal C.

bash

Bourne Again Shell. Una delle ultime nate, offre le stesse capacità della C shell, con l'aggiunta di alcune funzionalità come l'history dei comandi e la TABcompletion

ksh

Korn shell. Largamente diffusa è compatibile con la sh sulla parte di scripting ed ha tutte le funzionalità di interazione della csh. http://www.kornshell.com/

tcsh

E' un'evoluzione della csh, con cui mantiene piena compatibilità e introduce feature come command line editing e name completion.

rsh
jsh
dtksh
rksh

Rispettivamente Restricted Bourne shell (da non confondere con il "remote shell"), Bourne Shell con Job control, Desktop Korn Shell, Restricted Korn Shell. Sono variazioni e derivazioni delle shell principali.

 

csh

 

Per passare da una shell all'altra, basta eseguire il nome della shell. In questo caso, se per esempio si sta utilizzando la bash, si passa alla csh semplicemente digitandone il nome.
Se si scrive poi exit, si esce dalla csh per tornare alla bash.

Default Shell

Linux

Solaris

Darwin

bash

sh

tcsh

Shell su Windows?

Il vecchio DOS e il più recente prompt dei comandi Windows, seppur simili come aspetto (testuale) e in parte come funzionalità non danno un'idea completa di cosa è possibile fare con una shell.
E' possibile sentirne l'ebbrezza con l'ottimo CYGWIN, che è molto di più di una shell, è un vero e proprio ambiente Unix, con tanto di compilatore, disponibile sotto Windows.

Quale shell usare?
Domanda quasi religiosa, paragonabile alla scelta fra emacs o vi o a quella fra Spectrum e C64.
Come al solito la shell migliore è quella che si conosce meglio. Se si opera esclusivamente su Linux ha senso pensare di specializzarsi sulla bash, se si lavora anche su Solaris, conoscere la ksh diventa fondamentale (non è di default ma viene preinstallata).

 

Panoramica bash, funzioni e caratteristiche

Bash acronimo di Bourne Again SHell, è la shell di gran lunga più utilizzata in ambiente Linux.
Alcune sue caratteristiche (presenti anche in altre shell):
- Possibilità di editare la command line
- Autocompletion dei comandi
- Possibilità di definire alias per i comandi
- History infinita dei comandi inseriti
- Funzionalità di scripting e funzioni condizionali e di ciclo.
- Possibilità di definire funzioni e alias
- Possibilità di gestire array indicizzati di dimensioni infinite
- Gestione e controllo dei job
- Espressioni aritmetiche
- Caratteri jolly (metacaratteri) nella gestione dei nomi di file
L'uso corrente della bash è l'unico vero modo per conoscerla.
Sui sistemi Linux viene lanciata automaticamente dopo il login, alternativamente basta scrivere bash (trovandosi in un'altra shell) per eseguirla.

 

 

 

bash -v

 

Esegue la bash in modalità interattiva visualizzando i contenuti tutti gli script di start-up che vengono eseguiti.

bash -r (--restrict)

 

Limita gli utenti a un ambiente sicuro e limitato come la home di un'utente o all'utilizzo del segno
">" per reinderizzare l'output.

 

Con le frecce di direzione (su e giu) è possibile richiamare i comandi lanciati precedentemente.
Tramite il tasto TAB è possibile completare il nome del file o del comando scritto in shell

Introduzione

Linux oltre ad offrire la possibilità di interagire con il sistema via linea di comando propone un ambiente grafico a finestre che è sicuramente più familiare per chi è abituato a Windows.
Questo ambiente viene comunemente chiamato X (X windows system) che nel tempo è diventato lo standard GUI
(graphic user interface) di Unix e Linux.
L'ambiente grafico X è composto essenzialmente da tre parti:


Windows manager

E' il gestore delle finestre, cioè fornisce un metodo per lavorare con le finestre. Esistono molteplici gestori: motif è lo standard commerciale più utilizzato ma i gestori più famosi utilizzati in ambiente Linux sono KDE, Enlightenment, Sawfish, AfterStep, e FVWM

Server X

E' il processo che si occupa di gestire il display, ovvero si occupa di far interagire l'utente con la GUI. Esistono molteplici server X, ma su Linux il più utilizzato è di gran lunga XFree86, fornito gratuitamente.
Alternative commerciali sono Accelerated-X e Metro-X.

Client X

Sono tutti i programmi eseguiti sotto X, con cui l'utente interagisce.

Gnome VS Kde

Kde

(K Desktop Enviroment) Comprende oltre un windows manager un'intero ambiente desktop molto user friendly, inoltre fornisce vari sistemi integrati per la gestione e configurazione del sistema

Gnome

(GNU Network Object Model Enviroment) è scritto e sviluppato dal Gnome Developer's project. A differenza di KDE Gnome è solo l'ambiente desktop per cui ha bisogno di un windows manager come FVWM (Fantastic Virtual Windows Manager). Anche Gnome offre dei propri sistemi integrati per la gestione della macchina. La sua architettura è completamente basata su CORBA.

Ogni distribuzione solitamente prevede la possibilità di installare ed utilizzare sia Gnome che KDE, è poi possibile modificarli e aggiornarli secondo le proprie necessità.
Un progetto degno di nota è la distribuzione di Gnome fatta da Ximian.
Prevede un completo restyle dell'aspetto grafico di Gnome, e l'introduzione di programmi dedicati come Evolution (con funzionalità di messaggistica alla Outlook) e Red Carpet (gestione dell'aggiornamento online di nuovi package).

 

 

 

xf86config (o Xconfigurator)

 

Programmi per la configurazione di X

/etc/X11/XF86Config

 

file di configurazione che viene caricato allo   start-up

startx

 

Script che avvia X Windows

 

Vi siete dimenticati di collegare il Mouse??
Non serve riavviare il sistema ma...
1- Inserire il mouse nella relativa porta
2- riavviate il demone gpm /etc/rc.d/init.d/gpm restart
3- Ecco magicamente che il puntatore compare sullo schermo
Per avere sul proprio Linux anche i font Windows (utili per visualizzare coerentemente vari siti web):
- Chiudere X e andare in modalità testo.
- Copiare i font da Windows (es: c:\windows\font ) ad una directory sul proprio Linux (es: /usr/local/lib/X11/fonts/TrueType/ )
- Generare la nuova lista di font: spostarsi nella directory in cui sono stati copiati e scrivere:
ttmkfdir -d
/usr/local/lib/X11/fonts/TrueType/
-o fonts.dir
- Aggiungere il nuovo path al font server:
chkfontpath --add
/usr/local/lib/X11/fonts/TrueType/
- Ristartare il font server:
/etc/rc.d/init.d/xfs restart

Introduzione a telnet

Telnet è un semplice programma di terminale oltre ad essere il nome del protocollo che utilizza questo programma.
Il suo uso primario è quello di aprire connessioni su macchine remote per permettere il login e quindi accedere alla shell come se fosse un'operazione eseguita in locale.
Con telnet i pacchetti contenenti login e password passano in chiaro nella rete, con i relativi rischi in termini di sicurezza informatica (esistono sniffer specifici per sessioni telnet, che evidenziano le password senza nemmeno la fatica di andare ad analizzare i singoli pacchetti telnet).
Un' alternativa valida per l'accesso ad host remoti via command-line è ssh, con il quale i dati trasferiti vengono criptati.
Il protocollo SSH (ora giunto alla versione 2, sensibilmente più affidabile e sicura della versione 1) su Linux è generalmente implementato con il pacchetto openssh, che ha sia una componente client che una server.

Uso

telnet <ip o nome host> <port>

Comando per connettersi da remoto attravero telnet

Scrivendo semplicemente telnet senza specificare l'host remoto, si entra in modalità comandi, da cui è possibile aprire o chiudere connessioni o effettuare altre operazioni (digitare help per l'elenco dei comandi in ambiente telnet).
Per chiudere una sessione telnet basta digitare logout (sulla macchina remota).
Se per qualche motivo la connessione telnet risulta bloccata, è possibile premere CTRL + ] per entrare in modalità comandi e da li scrivere quit per chiudere la sessione telnet bloccata. Se si hanno più sessioni telnet in successione, scrivere send escape per passare dalla prima aperta all'ultima.

ssh -l <nome_utente> <ip o nome host>

Comando per connettersi da remoto attravero ssh

 

 

 

telnet 192.168.0.2

 

Tenta di collegarsi via telnet alla macchina con indirizzo IP

ssh -l root 127.0.0.1

 

Via ssh ci si collega come root alla propria macchina (localhost). Utile solo per diagnostica.

 

Linux

*nix

Win-DOS

telnet

telnet

telnet

ssh

ssh

client vari

La porta a cui risponde un telnet server è la 23 e viene data per sottointesa.
E' comunque possibile effettuare un telnet ad altre well-known ports e digitare direttamente dei comandi validi per il protocollo utilizzato dal server a cui ci si è connessi.
Piuttosto utile, per diagnosticare velocemente il funzionamento di un server web è:
telnet 192.168.0.2 80 (o qualsiasi altro IP)
GET / (o qualsiasi altro comando HTTP)
Premendo INVIO due volte si visualizza il codice html della pagina richiesta (l'home page, in questo caso) e ci si assicura che il server web sta rispondendo

 

Comandi e risorse locali

Il successo di linux è da attribuirsi anche alla grande quantità di documentazione, How-to e risorse on-line che rendono relativamente semplice ricercare e trovare le soluzioni di molti problemi.
Di seguito vengono riportati alcuni comandi per richiamare manuali ed info di vario genere presenti in locale.

man <comando>

E' la fonte più rapida e semplice per apprendere delle informazioni riguardanti comandi, file di configurazioni, funzioni di sistema e altro.

info <command>

Info è un lettore di ipertesti gnu. Molti programmi hanno la loro documentazione anche in questo formato.

whatis <keyword>

Cerca la keyword specificata all'interno del database whatis (contiene una breve descrizione di tutti i comandi nel sistema). Equivalente a man -f

apropos <stringa>

Come whatis, ma cerca stringhe e non parole complete, di conseguenza può dare risultati più verbosi. Equivalente a man -k

/usr/share/doc
/usr/doc

Le directory dove risiedono le documentazioni per programmi specifici in diversi formati (txt,html,pdf etc..)

Risorse online

La rete pullula di siti di informazione, gruppi di discussione, mailing list, IRC chat rooms sul mondo Linux.
E' nella natura stessa di questo sistema operativo lo scambio di informazioni e conoscenze.
Per chi sa sfruttarle valgono quanto il supporto tecnico (a pagamento) di un normale vendor.

Linux Journal

La prima e la più autorevole rivista su Linux. Disponibile anche in rete.

www.linux.org

Ovviamente il sito di partenza per reperire tutte le informazioni riguardanti a Linux

Linux Document Project (LPD)

E' la collezione più vasta di documentazione su Linux.
Comprende FAQ, HOWTO, MiniHOWTO e i docs sui singoli programmi.

linux.html.it

Docs e istruzioni in italiano.

I gruppi di discussione
comp.os.linux.*

E' la fonte che senza dubbio fornisce più supporto ed inoltre ha il vantaggio di interagire direttamente con altri utenti.

www.google.com
groups.google.com

Sempre lui (in fondo è pur sempre basato su un cluster di Linux box). Se si incontra un problema o un errore di qualche tipo, provare a digitarlo così come è scritto: probabilmente si vedranno link a forum online, siti e luoghi dove il problema è stato già incontrato, discusso e risolto.

Risorse offline

Libri su Linux o argomenti attinenti sono ormai moltissimi, sia in italiano che in inglese.
Si trovano libri generali (con tanto di distribuzione su CDROM allegata) di diverso livello di difficoltà e libri su specifici argomenti, a volte molto dettagliati.
Anche il numero di riviste su Linux, in italiano o inglese, è ragguardevole.
Spesso queste riviste contengono CDROM con le distribuzioni più recenti e sono un'ottimo sistema per testare ed installare nuove distribuzioni senza doverle scaricare dalla rete.

http://www.linuxjournal.com

La prima e la più autorevole rivista su Linux. Disponibile anche in rete.

http://www.oltrelinux.com

Linux & C. La prima rivista in italiano su Linux. Indipendente e ben fatta.

http://www.linuxfocus.org/Italiano/

La versione italiana di LinuxFocus Magazine

http://www.linuxitaly.net/

La versione italiana di Linux Journal

http://linux.cassino.edu/lgei/

La versione italiana di Linux Gazette

 

 

 

man man

 

Leggete il manuale per il comando man

cd /usr/docs/ ; ls

 

Entra nella directory /usr/docs e verifica il suo contenuto

 

 

 

 

Innumerevoli comandi hanno la possibilità di richiamare un piccolo help integrato nel comando stesso, semplicemente scrivendo il comando seguito da --help o --h
Non è un trick ma un tip.
Non è un sito su Linux ma parla anche di Linux.
E' un punto di riverifmento per il "geek".
Qualsiasi cosa sia.
E' SLASHDOT, news for nerds, stuff that matters.
Se non ci si accontenta di libri, siti e riviste e si vuole il contatto umano per approfondire la propria conoscenza su Linux, il LUG (Linux User Group) locale può essere l'ideale.
Per una lista di quelli italiani:
http://www.linux.it/LUG/

 

PRATICA

Usare la shell... sul computer del vicino

Sulla base delle informazioni ottenute nel modulo 4 si invitano i partecipanti ad effettuare le seguenti operazioni:


1 - Eseguire il login sulla propria macchina come utente normale.

2 - Fare un telnet sulla macchina del vicino e loggarsi come utente normale.

3 - Sull'host remoto, visualizzare le seguenti informazioni riguardanti il proprio account: UID, GID, ulimit

4 - Sull'host remoto, visualizzare quali altri utenti sono loggati sul sistema remoto, notare le informazioni che vengono date sul tipo di terminale usato dai diversi utenti.

5 - Provare le seguenti funzionalità della bash: name auto completion, visualizzazione ed esecuzione dei comandi nella history

6 - Cercare informazioni sul comando ls ed eseguirlo per visualizzare l'elenco (in modalità estesa: "long listing format") dei file presenti nella root directory ( / ) in ordine di dimensione.

7 - Fare un secondo login sul proprio sistema. Entrare come utente normale e poi elevarsi a root.

8 - Visualizzare sul proprio sistema l'elenco di tutti i login recenti.

 

VERIFICA

Domande sul modulo 4

A questo punto del corso il partecipante dovrebbe essere in grado di rispondere alle seguenti domande:


1 - Cosa è la shell?
La shell è un programma che gestisce la comunicazione fra utente e sistema operativo interpretanto ed eseguendo i comandi dell'utente.

2 - Elencare almeno 3 tipi di shell esistenti ed indicare quella di default su Linux
Bash (di default su Linux), ksh, sh, csh...

3 - Con quale comando si visualizza l'elenco degli utenti presenti sul sistema?
who

4 - Con quale comando si visualizza lo storico degli utenti che si sono collegati al sistema?
last

5 - Che differenza c'è fra telnet e ssh?
La differenza sostanziale è che ssh cripta i dati trasmessi, telnet trasmette i dati in chiaro.

6 - Elencare i comandi comuni per ottenere informazioni sul sistema e altri comandi
info, man, apropos, whatis

7 - Come si chiama il progetto unificato di documentazione su Linux? Come si trova sul web?
Linux Documentation Project. Per trovare il sito basta cercare LDP su Google (o altri motori di ricerca)

Un sistema 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 filesystem eventualmente montati sul sistema (floppy, cdrom, condivisione di rete ecc.). Il principio è radicalmente diverso da quello presente nel mondo Windows, dove ogni device o risorsa ha un suo nome o lettera identificativa al cui interno si trovano le directory del relativo filesystem.


Directory e definizioni

pwd

Visualizza directory (dir) corrente

/

Indica la root, la dir principale alla base di tutto il filesystem

/etc/

La sottodirectory (subdir) etc rispetto alla root

../etc/

La subdir etc allo stesso livello della dir corrente.

etc/

La subdir etc rispetto alla dir corrente

.

La directory corrente

..

La directory parent

~

La home directory dell'utente corrente

Comandi di copia/modifica file e directory

cp [opzioni] sorgente destinazione

Copia di file o directory

mv [opzioni] sorgente destinazione

Sposta (rinomina) file o directory

rm [opzioni] file

Rimuovi file o directory
ATTENZIONE: Sul Linux come su Unix, di default, non esiste un concetto analogo al cestino.
I file cancellati sono (quasi) irrimedibilmente perduti.
Esistono sistemi per recuperarli, ma sono piuttosto laboriosi e non sempre efficaci.
Vedere il link segnalato nelle WEB RESOURCES per dettgli.

ls [opzioni] [path]

Elenca contenuto di una directory o file

tree [opzioni] directory

Elenca contenuto di una directory con visualizzazione ad albero

cd directory

Cambia directory corrente

mkdir [opzioni] directory

Crea una directory

rmdir [opzioni] directory

Elimina una directory

ls -latr

 

Per elencare TUTTI i file di una directory in ordine di data.

cp -a /etc/ /tmp/

 

Copia la directory /etc in /tmp mantenendo attributi dei file (-p), lasciando i link simbolici inalterati (-d) e includendo recursivamente le sottodirectory (-R).

mkdir -p /var/log/cisco/ext/2/

 

Crea la directory /var/log/cisco/ext/2/ e tutte le directory padre intermedie nel caso non esistano.

rm -rf /* DANGER!

 

Per distruggere il proprio sistema e, forse, esistenza. Ampiamene sconsigliato.

Linux

*nix

Win-DOS

..

..

..

.

.

.

ls

ls

dir

cd

cd

cd

cp

cp

copy (cp -r = xcopy)

mv

mv

move (ren)

rm

rm

del

mkdir

mkdir

md o mkdir

rmdir

rmdir

rmdir

alias

alias

doskey

Eseguire il comando alias per vedere gli alias impostati nel proprio ambiente bash.
Notare gli alias preimpostati per cp, mv, rm

Definizioni

Le informazioni riguardanti un oggetto (file o directory) di un filesystem cono contenute in un inode, che viene identificato da un numero progressivo e descrive le caratteristiche base di un oggetto: permessi, data di modifica, tipo, posizione ecc.
Il comando ln crea un link (alias) di un file o directory.
Quando si opera sul link è come se si operasse direttamente sul file tranne quando si rimuove il link (non si cancella il file).
Per default ln crea un hard link: di fatto un altro nome per un file esistente, originale e link sono indistinguibili, condividono lo stesso inode, non si possono fare hard link fra file system diversi e su directory.
Con l'opzione -s (molto usata) si crea un soft link o symlink: sono un tipo speciale di file che si riferiscono ad un file (inode) diverso, il symlink può essere fatto su filesystem diversi (nfs, cdrom ecc.) e su file che non esistono. Rispetto ad un hard link, è più facile capire di quale file sono un link.
L'uso di link è completamente trasparente e NON impatta sulle performance del sistema.

Comandi sui link

ln [opzioni] nome_sorgente [nome_destinazione]

Nella prima forma si crea un link da nome_sorgente a nome_destinazione dove nome_destinazione può essere omesso per fare un link alla directory corrente.

ln [-s] nomefile [nomelink]

Crea un link (simbolico con -s) a nomefile che si chiama nomelink (se omesso viene mantenuto nomefile)

 

 

 

ln -s dir_src_kernel /usr/src/linux

 

Quando si compila il kernel si deve sempre farlo con i sorgenti in /usr/src/linux.
Se si hanno sorgenti di diverse versioni, un symlink permette di gestirle senza problemi.

find / -lname start.sh

 

Cerca in tutto il file system symlinks al file start.sh.

 

Linux

*nix

Win-DOS

ln

ln

Shortcut (collegamento)
in Windows

Per trovare a quale file corrisponde un hard link eseguire: ls -i per visualizzare l'inode del link e find / -inum #inode per trovare tutti i file con l'inode specificato.
Se si crea un un link mettendo come nome_destinazione un file esistente tale file viene sovrascritto

Esistono svariati comandi Unix per visualizzare il contenuto di file, con diverse caratteristiche e modalità.
Tutti questi comandi hanno svariate opzioni e possibilità di eseguire operazioni anche complesse.
In genere si suggerisce di fare pratica con le funzionalità di base ed eventualmente usare le opzioni più evolute o rare in script shell o casi particolari.


Comandi comuni

cat [opzioni] [file]

Visualizza il contenuto di un file

less [file]

Visualizza il contenuto di un file, pagina per pagina.
Muovere UP e DOWN per scrollare il testo.
Con q si torna alla shell. Con h vi visualizza l'help delle opzioni disponibili.

more

Come less, ma con meno funzioni.

tail [opzioni] file

Visualizza l'ultima parte di un file

head [opzioni] file

Visualizza la prima parte di un file

file [opzioni] file

Visualizza il tipo di un file

grep [opzioni] PATTERN [file]

Elenca righe di un file che contengono il PATTERN specificato

wc [opzioni] [file]

Visualizza numero di byte, parole e righe in un file

wc [opzioni] [file]

Visualizza numero di byte, parole e righe in un file

cat -v

 

Visualizza il contenuto di un file con i caratteri solitamente non visualizzati (LB, LF ecc).

tail -f /var/log/maillog

 

Continua a visualizzare il log mentre vengono aggiunte nuove righe.
Con CTRL-C si torna alla shell.

grep bash /etc/passwd

 

Visualizza tutti gli utenti in /etc/passwd che hanno come shell preimpostata la bash.

wc -l /etc/passwd

 

Visualizza il numero degli utenti presenti sul sistema.

Linux

*nix

Win-DOS

cat

cat

type

more

more

more

Definizioni

Per file system si intende l'astrazione (metodo e protocolli) con cui si organizzano i file su un supporto fisico di memorizzazione ad accesso casuale (floppy, cdrom, memoria, hard disk..)
Linux grazie alla sua polivalenza permette di utilizzare quasi tutti i file system più diffusi, ma di default presenta il suo file system ext2
Dal kernel 2.4.x è disponibile il supporto per un'evoluzione dell'ext2, l'ext3 che, oltre ad essere convertibile facilmente in ext2, ha il vantaggio di essere un journal file system.

Directory

/

Radice (root)

swap

Partizione gestita a se tramite swapon , utilizzata come memoria virtuale.

/root

Home dell'utente root

/boot

Contiene tutte le immagini del kernel e file indispensabili al bootstrap

/etc

Contiene i file di configurazione del sistema e dei programmi installati

/home

Contiene le home degli utenti tranne quella di root

/usr

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

/var

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

/proc

File system virtuale. Contiene, come se fossero file e directory, dati dinamici sul sistema e sui processi

/dev

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

/sbin

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

/bin

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

cat /proc/...

 

Le meraviglie del proc filesystem si possono notare solo esplorandone le directory ed i file.

/dev/null

 

E' un file atipico. Praticamente un cestino, un buco nero, un punto di non ritorno: tutto quello che viene indirizzato a /dev/null sparisce. Per sempre.

File System nativi Supportati

Linux

*nix

Win-DOS

*

Vari

FAT,FAT32,NTFS.

Non fare confusione fra la root directory ( / ) e l'utente root (l'amministratore di sistema), che ha la sua home directory in /root

Comandi di gestione del File System

Prima di poter utilizzare un filesystem (es: CDROM, floppy, tape, condivisione di rete windows, directory nfs, partizione fat32 di un hard disk... ) questo deve essere formattato e montato in una subdir della root ( / ).
Una volta montato il filesystem risulta accessibile a programmi e utenti in modo trasparente e diventa parte integrante dell'albero delle dir sotto /
Dopo l'uso il filesystem può essere smontato (operazione necessaria per espellere un CDROM o un floppy).
La directory su cui viene montato un filesystem può anche non essere vuota, ma nel momento in cui ci viene montato un file system, i dati ivi contenuti non sono più visibili fino a quando non si smonta il fs.

mount -t [tipo fs] [opzioni] device dir

Monta un dispositivo a blocchi su un file system

umount [ opzioni ] device

Smonta un dispositivo (necessario)

df [opzioni][file]

Verifica lo spazio libero su disco

du [opzioni][file]

Visualizza lo spazio occupato da file e directory

fsck [opzioni] dispositivo

Verifica l'integrità e ripara il Filesystem

mkfs [opzioni] dispositivo

Crea un Filesystem (formatta)

fdformat device

Formatta a basso livello un floppy

Il file /etc/fstab

Nel file /etc/fstab vengono configurate le informazioni sui vari file system (da montare al boot o no) preimpostati sul sistema, vengono definiti i mount point, il tipo di file system ed altre informazioni.
Il suo formato prevede per ogni riga le seguenti informazioni:
1- Dispositivo da montare (es: /dev/hda1 o anche host:dir )
2- Mount point sul file system principale
3- File System Type da utilizzare (es: ext2, ext3, iso9660, nfs...)
4- Opzioni specifiche per il mount
5- Indica se il file system deve essere backuppato con il comando dump. Uno 0 indica NO.
6- Indica de deve essere fatto un file system check al boot. Uno 0 indica NESSUN CHECK.

mount /dev/cdrom

 

Monta il cdrom.

mount /dev/fd0

 

Monta il floppy.

eject

 

Smonta ed espelle il cdrom.

df -k

 

Verifica lo spazio libero con unità di misura il Kbyte.

Linux

*nix

Win-DOS

mount

mount

-

umount

umount

-

fsck

-

scandisk

mkfs

mkfs

format

Eseguire il comando mount per vedere quali partizioni sono montate.
Editare /etc/fstab per definire come e quali file system montare al boot.
Il file /etc/mtab mostra le informazioni relative ai file system in uso sul sistema. Viene modificato dinamicamente quando nuovi file system vengono montati.
Per usare un floppy disk vergine, bisogna prima formattarlo:
mkfs.ext /dev/fd0
e poi montarlo sul proprio file system:
mount -t ext2 /dev/fd0 /mnt/floppy
A questo punto il suo contenuto è visibile nella directory /mnt/floppy. PRIMA di rimuovere fisicamente il floppy disk bisogna smontarlo, per essere sicuri che il sistema finisca di scrivere eventuali dati rimasti in memeoria (flush del file system):
umount /dev/fd0

definizione di attributo e permesso

Linux è un sistema multiutente che offre la possibilità di associare permessi di azioni (lettura, scrittura , esecuzione) a singoli file e/o directory. Quando vengono applicati questi permessi ad un file o ad una directory, vengono applicati su tre livelli distinti:
- utente proprietario
- gruppo proprietario
- il resto degli utenti

I permessi di azione vengoni identificati nel seguente modo:
lettura definito dal flag r che tradotto in numero assume il valore 4
scrittuta definito dal flag w che tradotto in numero assume il valore 2
esecuzione definito dal flag x che tradotto in numero assume il valore 1

Out di ls -l /etc/passwd :
-rw-r--r-- 1 root root 77266 Dec 13 17:18 /etc/passwd
L'output esteso di ls da varie informazioni su un file:
- attributi (il primo carattere a sinistra);
- permessi (i successivi 9 caratteri, raggruppati per 3, indicano rispettivamente i permessi per l'owner, per il gruppo e per gli altri utenti (in questo caso l'owner può scrivere e leggere, e gli altri possono solo leggere);
- numero di file con lo stesso inode (in questo caso 1);
- nome dell'owner (in questo caso root);
- nome del gruppo (in questo caso root);
- dimensioni in byte del file (in questo caso 77266);
- data dell'ultima modifica (13 Dicembre dell'anno in corso alle 17:18);
- nome del file ( /etc/passwd ).

Comandi di assegnazione permessi

chown [-R][utente] file

Assegna un nuovo utente proprietario

chgrp [-R][gruppo] file

Assegna un nuovo gruppo proprietario

chmod [-R] [modo] file

Modifica i permessi sul file.

 

 

 

chown UID.GUI nomefile

 

Per cambiare direttamente owner e group di un file.

chown -R UID.GUI nomedir

 

Per cambiare direttamente owner e group di una directory e del suo contenuto

chmod -v 444 nomefile

 

Imposta permessi su nomefile solo in lettura per tutti gli utenti e visualizza le modifiche fatte.

 

Linux

*nix

Win-DOS

chown

chown

-

chmod

chmod

attribute

La sicurezza di un sistema Unix si fonda su un corretto uso dei permessi sui file.
E' possibile cambiare il proprietario di un file sia specificando l'UID sia il nome del nuovo proprietario
Utilizzando l'opzione -c in chown ,chgrp e chmod visualizza varie info riguardo al file che subisce il comando
La sintassi con cui definire utenti e permessi con CHMOD è duplice: octal mode, si usano tre numeri, riferiti rispettivamente a owner, group e altri; symbolic mode, si usano le lettere r (read), w (write), x (execute) per assegnare i permessi a u (user), g (group) e o (others).
I seguenti comandi eseguono tutti la stessa cosa, pur avendo diversa sintassi:
chmod 755 nomdefile
chmod u=rwx,go=rx nomefile.

Su Unix esistono molteplici comandi per la ricerca e il contronto di file. Possono, come sempre, essere utilizzati direttamente o in script.


Comandi di ricerca

find [path][expression]

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

updatedb

Crea/Aggiorna un database ( /var/lib/slocate/slocate.db ) contenente tutti i path di tutti i file nel file system

locate filename

Ricerca file o directory tramite il db costruito da Updatedb

whereis [opzioni] filename

Visualizza i path di binari,sorgenti e manuali per un comando

sort [opzioni] [file]

Ordina con un certo criterio le righe di un file ASCII

strings [opzioni] filename

Cerca pattern di testo nei file binari

Comandi di confronto file

 

diff nomefile1 nomefile2

La funzione diff permette di fare un confronto fra il contenuto di due file di testo. Utilizzato per creare la patch dei sorgenti.

md5sum nomefile

Funzione per verificare l'integrità e confronto file di qualsiasi natura

 

 

 

find / -name "*.log" -type f -print

 

Cerca in tutto il file system file che terminano con .log.

find / -name "messages" -type f -exec cat {} \;

 

Cerca in tutto il file system i file messages ed esegue il cat.

ls -al | sort +4nr

 

La lista dei file e directory con ordinamento decrescente, dal più grande al più piccolo.

 

Linux

*nix

Win-DOS

find

find

find

locate

-

-

sort

sort

sort

 

 

 

Il path di default del comando find è la directory corrente
Se si cerca un binario non incluso in una delle directory standard di linux (/etc,/bin,/usr/bin,/usr/sbin ecc) con il comando whereis è possibile che la ricerca fallisca, utilizzare l'opzione -B [directory] per limitare o cambiare directory di ricerca

 

 

 

 

PRATICA

Trattamento di file

Si chiede al partecipante di effettuare una serie di operazioni che richiedono l'uso di alcuni comandi trattati nel modulo 5.
ATTENZIONE: In questa esercitazione si prevede l'uso di alcuni comandi come utente root. In genere si consiglia di non loggarsi MAI come root sulla propria macchina, visto il potenziale distruttivo che ha il superuser. Si raccomanda estrema cautela.


1- Loggarsi come root sul proprio computer. Trovare la posizione del file messages, che contiene il log dei principali eventi del sistema.

2- Creare una nuova directory chiamata test in /tmp/ . Copiare il file messages nella nuova directory /tmp/test.

3- Provare a visualizzare, in modalità continua, le ultime righe di /tmp/test/messages. Provare a loggarsi su altre console del sistema per vedere se il file cambia.

4- Rimuovere il file /tmp/test/messages. Creare un link simbolico fra il messages nella posizione originaria e /tmp/test/messages

5- Provare a visualizzare, in modalità continua, le ultime righe di /tmp/test/messages. Provare a loggarsi su altre console del sistema per vedere se il file cambia.

6- Spiegare perchè i comportamenti sono diversi nei punti 3 e 5.

7- Visualizzare i permessi del file messages originario. Provare ad entrare sul sistema come utente normale. Provare a visualizzare il contenuto del messages originario.

8- Si riesce a visualizzarlo? Spiegare perchè.

9- Dalla shell aperta come root rendere leggibile a tutti gli utenti il file messages originario. Passare alla shell aperta come utente normale e visualizzarne il contenuto.

10- Reimpostare i permessi precedenti sul file messsages (contiente riservate informazioni sul sistema che non tutti gli utenti devono vedere).

11- Copiare il messages originario in /var/test/messages2

12- Visualizzare le righe di /var/test/messages2 che contengono la parola root

13- Cancellare la directory /var/test/ e il relativo contenuto.

 

VERIFICA

Domande sul modulo 5

A questo punto del corso il partecipante dovrebbe essere in grado di rispondere alle seguenti domande:


1 - Che cosa fa il comando rm?
Cancella, in modo definitivo, file o directory

2 - Che cosa è la root? Come si indica?
La root, indicata con la / è la directory principale di una macchina linux al cui interno sono presenti altre directory e, eventualmente, partizioni montate di altri file system.

3 - Che differenza c'e' fra soft symlink e hard symlink?
Il soft symlink, comunemente più utilizzato, è un file speciale che rappresenta un collegamento o alias di un'altro file o directory, l'hard symlink è un alias per un file di cui si mantiene lo stesso inode e è quindi indistinguibile dall'originale. Gli hard link non possono riferirsi a file system diversi o a file inesistenti, i soft link si.

4 - Come si visualizzano le ultime 20 righe del file /var/log/messages?
tail -20 /var/log/messages

5 - Qual è il comando più versatile per visualizzare il contenuto di un file ascii?
less

6 - Nominare almeno 3 directory principali presenti nella root di una macchina Linux e la loro funzione.
Per un elenco completo delle directory fare riferimento alla pagina STRUTTURA FILE SYSTEM

7 - In quale file vengono definite le informazioni relative ai file system del sistema? In quale file sono presenti le informazioni sui file system in uso (montati)?
/etc/fstab - /etc/mtab

8 - Con quale comando definisco permessi in lettura, scrittura, esecuzione per owner e group owner e sola lettura ed esecuzione per gli altri utenti al file /usr/bin/who ?
chmod 775 /usr/bin/who

Introduzione

Una delle caratteristiche della filosofia di Unix è che l'impostazione del sistema non vuole prevedere tutte le necessità dell'utente, ma tenta di rendere semplice per ciascuno modificarsi l'ambiente a seconda delle proprie necessità. Per questo vengono usati principalmente dei file di configurazione, noti anche come "file init'', "file rc'' (per "run control'', controllo dell'esecuzione) o anche "file punto'', perché il loro nome di solito inizia con ".'' .
La shell di default di Linux è la bash.
I file di configurazione della bash di default sono:

 

/etc/bashrc

contiene gli alias e le funzioni valide per l'intero sistema;

 

/etc/profile

contiene le variabili d'ambiente per l'intero sistema e i programmi di avvio;

 

$HOME/.bashrc

contiene gli alias e le funzioni dell'utente;

 

$HOME/.bash_profile

contiene le variabili d'ambiente e i programmi di avvio dell'utente;

 

$HOME/.inputrc

contiene definizioni di tasti e altre funzioni.

Per personalizzare il proprio ambiente bash è necessario modificare il file $HOME/.bashrc. E' possibile creare alias per comandi che vengono usati spesso (alias "alias"= "comando") o modificare il prompt utilizzando il linguaggio bash.
Oltre agli script eseguiti al login, la shell può eseguire uno script al momento del logout da parte dell'utente.
Questo script, se esiste, è : $HOME/.bash_logout

La shell Bash fornisce un sistema di gestione della tastiera molto complesso, attraverso un gran numero di funzioni.
E' di grande aiuto il tasto TAB che viene utilizzato per il completamento di comandi è infatti chiamato 'tabcomplete'.

Ogni comando lanciato viene memorizzato in una sequenza storica. Questa caratteristica serve a riutilizzare i comandi senza dover ridigitarli ogni volta scorrendo con i tasti direzione (le frecce per muoversi in alto, basso) oppure digitanto il comando history (vengono visualizzati tutti i comandi).

alias ll='ls -l'

 

" ll " alias di " ls -l " va inserito nel file .bashrc

esc?

 

Elenca i possibili completamenti

ctrl-w

 

Cancella all'indietro finchè non trova uno spazio

 

 

 

Se non ci si ricorda esattamente il nome di un comando, allora inserire le prime lettere e sfruttare il tasto TAB per aiutare la ricerca.
Al prompt è possibile risalire ai comandi inseriti precedentemente usando la freccia direzionale sù.
crtl+a - crtl+e sposta il cursore all'inizio e fine della riga
E' possibile evitare che bash elabori i file di configurazione, invocandola con l'opzione -noprofile
Gli argomenti vengono assegnati, nell'ordine in cui appaiono, cioè il primo argomento sarà identificato da $1, il secondo da $2, il terzo da $3 ecc...

 

Introduzione

Una delle caratteristiche della filosofia di Unix è che l'impostazione del sistema non vuole prevedere tutte le necessità dell'utente, ma tenta di rendere semplice per ciascuno modificarsi l'ambiente a seconda delle proprie necessità. Per questo vengono usati principalmente dei file di configurazione, noti anche come "file init'', "file rc'' (per "run control'', controllo dell'esecuzione) o anche "file punto'', perché il loro nome di solito inizia con ".'' .
La shell di default di Linux è la bash.
I file di configurazione della bash di default sono:

 

/etc/bashrc

contiene gli alias e le funzioni valide per l'intero sistema;

 

/etc/profile

contiene le variabili d'ambiente per l'intero sistema e i programmi di avvio;

 

$HOME/.bashrc

contiene gli alias e le funzioni dell'utente;

 

$HOME/.bash_profile

contiene le variabili d'ambiente e i programmi di avvio dell'utente;

 

$HOME/.inputrc

contiene definizioni di tasti e altre funzioni.

Per personalizzare il proprio ambiente bash è necessario modificare il file $HOME/.bashrc. E' possibile creare alias per comandi che vengono usati spesso (alias "alias"= "comando") o modificare il prompt utilizzando il linguaggio bash.
Oltre agli script eseguiti al login, la shell può eseguire uno script al momento del logout da parte dell'utente.
Questo script, se esiste, è : $HOME/.bash_logout

La shell Bash fornisce un sistema di gestione della tastiera molto complesso, attraverso un gran numero di funzioni.
E' di grande aiuto il tasto TAB che viene utilizzato per il completamento di comandi è infatti chiamato 'tabcomplete'.

Ogni comando lanciato viene memorizzato in una sequenza storica. Questa caratteristica serve a riutilizzare i comandi senza dover ridigitarli ogni volta scorrendo con i tasti direzione (le frecce per muoversi in alto, basso) oppure digitanto il comando history (vengono visualizzati tutti i comandi).

alias ll='ls -l'

 

" ll " alias di " ls -l " va inserito nel file .bashrc

esc?

 

Elenca i possibili completamenti

ctrl-w

 

Cancella all'indietro finchè non trova uno spazio

Se non ci si ricorda esattamente il nome di un comando, allora inserire le prime lettere e sfruttare il tasto TAB per aiutare la ricerca.
Al prompt è possibile risalire ai comandi inseriti precedentemente usando la freccia direzionale sù.
crtl+a - crtl+e sposta il cursore all'inizio e fine della riga
E' possibile evitare che bash elabori i file di configurazione, invocandola con l'opzione -noprofile
Gli argomenti vengono assegnati, nell'ordine in cui appaiono, cioè il primo argomento sarà identificato da $1, il secondo da $2, il terzo da $3 ecc...

File descriptors e operatori

La shell gestisce la comunicazione con ogni programma lanciato tramite 3 file descrittori:
- standard input (stdin - file descriptor 0), è il canale attraverso il quale il programma riceve i dati di ingresso, generalmente la tastiera.
- standard output (stdout - file descriptor 1), è il canale di uscita del risultato dell'elaborazione del programma, di solito il video.
- standard error (stderr - file descriptor 2), è dove il programma stampa eventuali errori durante l'esecuzione, di solito il video.
Molti comandi UNIX assumono che l'ingresso dei dati avvenga (o possa avvenire) da standard input e l'uscita avvenga su standard output. E' possibile concatenare più programmi fra loro e fare in modo che lo standard output di uno diventi lo standard input di un altro. Per farlo si utilizza il carattere | chiamato pipe.
E' inoltre possibile redirezionare stdin, stout e sterr su un file tramite gli operatori di redirezionamento:

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

>> 

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

redirige lo standard input da un file o dispositivo

2>

redirige lo standard error di un comando su un file o dispositivo

|

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

 

 

 

ls -la > ls-la.txt

 

il file ls-l.txt verrà creato e conterrà l'output del comado ls -l

ls -l | grep .gz

 

l'output del comando ls -l verrà inviato a grep che a sua volta stamperà le righe corrispondenti

ps -ef | grep $USER

 

visualizza tutti i processi proprietari dell'utente loggato.

./programma > outerr.txt 2>&1

 

redirige sia lo stdout che lo stderr di un processo sullo stesso file

 

 

Le Regular Expressions (RegExp) sono un sistema di regole rivolte alla creazione di pattern di ricerca utili a trovare occorenze all'interno di un testo e a modificarle con altro testo. Da oltre vent'anni vengono usate in parecchi tool ed utility Unix come grep, sed oppure awk, spesso con piccole variazioni nella sintassi.

Le Regular Expressions sono case sensitive (ossia distinguono le maiuscole dalle minuscole) e seguono delle semplici regole di sintassi.
Forniscono la possibiltà di specificare quante volte può riscontrarsi il testo specificato preservando la validità della ricerca.
Le espressioni regolari operano sulle stringhe, e le stringhe più semplici sono costituite da singoli caratteri. La maggior parte dei caratteri corrisponde semplicemente a se stessa.
Alcuni caratteri assumono invece significati particolari e vengono chiamati metacaratteri.

 

Metacarattere

Definizione

.

identifica un singolo carattere

^

identifica l'inizio riga

\

neutralizza il significato del metacarattere seguente

$

identifica la fine della stringa

[]

identifica qualsiasi carattere indicato tra parentesi

[^]

identifica tutti i caratteri non specificati nell'insieme

[0-9]

identifica ogni carattere compreso nell'intervallo (numeri o lettere)

Modificatori

?

zero o una volta

+

una o più volte

*

zero o più volte

|

uno o l'altro elemento prima e dopo il segno |

 

egrep -i '(string1|string2)' file

 

Ricerca e visualizza in un file string1 e string2

grep '^1' list.txt

 

Ricerca in list.txt le righe che iniziano con 1

egrep '^2[234]' list.txt

 

Ricerca le righe che iniziano con 22,23,24

grep '^Linux$' list.txt

 

Ricerca le righe che contengono SOLO la parola Linux

grep -c '^$' list.txt

 

Visualizza il numero di righe vuote in list.txt

grep '^[^0-9]' list.txt

 

Visualizza le righe che NON iniziano con un numero

grep '\<[Ll]inux\>' list.txt

 

Visualizza le righe che contengono la parola singola Linux o linus, ma non visualizza quelle con, per esempio, LinuxOS

Qualunque utente di Dos o Unix ha gia' usato una forma di R.E.:

> dir *.exe

Una buona conoscenze delle RE velocizza l'operazione di ricerca all'interno di file molto lunghi.

VI

L'editor VI (visual editor) è il più diffuso nell'ambiente UNIX e Linux.
La versione GNU di VI si chiama VIM, (Vi IMproved) ed è quella comunemente usata nelle distribuzioni Linux.
Per aprire vi ed editare un nuovo file basta digitare vi oppure vi nomefile nel secondo caso, se il file esiste viene aperto, se non esiste viene creato nuovo.

VI ha due modalità di funzionamento: il modo comando (command) e il modo inserimento (input).
In modalità inserimento ogni parola verrà inserita direttamente nel file. E' possibile usare molti comandi per entrare in questa modalità il più comune è i (insert). Entrare in modalità comando è possibile in qualsiasi momento premendo il tasto ESC, ogni lettera verrà interpretata come un comando.

Comandi principali

Salvare e uscire

ZZ

salvare e uscire

:w

salvare

:w <file>

salvare in altro file con il nome desiderato

:wq

salvare e uscire

:q

se non sono state effettuate modifche usce senza salvare

:q!

uscita incondizionata

Comandi di copia e incolla

yy

copia la riga corrente

y2 <giu>

copia 2 righe sotto la posizione in cui si trova il cursore

p

incolla il testo nel punto dove si trova il cursore

Cancellare righe o caratteri

x

cancella il carattere in cui si trova il cursore

X

cancella il carattere alla sinistra del cursore

D

cancella tutto quello che si trova alla sinistra del cursore fino alla fine della riga

dd

cancella la riga in cui si trova il cursore

3dd

cancella 3 righe partendo dalla quella in cui si trova il cursore

dG

cancella dalla posizione in cui si trova il cursore fino alla fine del file

d1G

cancella dalla posizione in cui si trova il cursore fino all'inizio del file

Spostarsi nel file

^

inizio della riga corrente

$

fine della riga corrente

G

fine del file

1G

inizio del file

Ricerca e sostituzione del testo

/<testo>

cerca il testo dalla posizione corrente verso il basso

?<testo>

cerca il testo dalla posizione corrente verso l'alto

u

annulla l'ultima modifica effettuata

U

annulla l'ultimo annullamento

.

ripete l'ultimo comando

 

 

 

:r <nomefile>

 

il file specificato verrà inserito nella posizione del cursore

:r !<comando>

 

l'output del comando verrà inserito nella posizione corrente

 

Quando si passano file di testo da DOS/Windows a Unix si deve considerare l'ANNOSO problema dell'
"end of line" (EOL).
In DOS ogni riga termina con CR/LF (Carriage Return, Line Feed, codici ASCII 13 r 10).
Su Unix e Linux, una riga termina con il solo LF.
Se si editano file DOS sotto Linux, compaiono delle ^M al posto del CR alla fine di ogni riga, viceversa se si apre con Notepad un testo Unix si avrà tutto il testo su un unica orribile riga.
I comandi dos2unix e unix2dos permettono la conversione dei file da una piattaforma all'altra.
Con vi è possibile editare entrambi i tipi di formati e facilmente passare da uno all'altro:
Per sostituire LF con CR+LF scrivere:
:se ff=dos
Per sostituire CR+LF in LF scrivere:
:se ff=unix

P nella modalità comando inserisce il contenuto del buffer prima del cursore
Il comando :set number visualizza il n° di ogni riga.
:g/old/s//new/sostituisce all'interno del file la parola old con new
:g/delword/d cancella in tutto il file la parola delword

Introduzione

Uno script shell è una serie di comandi inseriti in un file mediante un qualsiasi programma di testo. Linux interpreta ed esegue i comandi dello script shell uno dopo l'altro. Sfruttando questa caratteristica è percui possibile scrivere programmi ed eseguirli come un normale comando Linux.
Per eseguire uno script occorre avviare il programma interprete per questo viene inserita una riga all'inizio del file script che dichiara quale interprete usare:
#!<nome-del-programma-interprete>
Nel caso di uno script in bash la prima riga sarà:
#!/bin/bash

Variabili

La shell permette di definire mediante lo strumento delle variabili di ambiente alcuni parametri che influenzano il comportamento dei vari programmi. I valori assegnati a queste variabili sono delle stringhe. Le variabili di ambiente più importanti sono:

HOME

il valore di questa variabile è quella della home-directory dell'utente

PATH

lista di nome di directories dove la shell, dopo l'inserimento di un comando, cerca il programma da eseguire

DISPLAY

definisce lo schermo sul quale un programma X-Window aprirà le proprie finestre

TERM

definisce le sequenze di comandi che saranno usate per comandare il terminale che state usando


Le variabili di shell sono stringhe di un solo carattere, il cui valore è visualizzabile mediante l'operatore $. La differenza tra variabili d'ambiente e di shell è che queste ultime non sono disponibili per i comandi in esecuzione come le prime, ma sono gestite unicamente all'interno della shell

#

memorizza il numero di argomenti della linea di comando, che sono stati passati allo shell script

?

memorizza il valore numerico di uscita dell'ultimo comando che è stato eseguito

0

memorizza il nome dello shell-script, che è stato introdotto

*

memorizza tutti gli argomenti che sono stati introdotti sulla linea di comando

!

contiene il numero dell'ultimo processo che è stato mandato in background con la &

-

contiene i flag con cui è stata eseguita la shell

Programma ESEMPIO:
#!/bin/sh
echo "Numero parametri = "$#
echo "Nome del Programma = "$0
echo "Parametri introdotti = "$*
eseguendo il programma ESEMPIO dalla riga di comando in questo modo:
sh ESEMPIO dato1 dato2
otterremo:
Numero parametri = 2
Nome del Programma = ESEMPIO
Parametri introdotti = dato1 dato2

 

 

echo $HOME

 

otterremo il path della home directory dell'utente che ha eseguito il comando

Va attribuito a ogni script shell il permesso di esecuzione: chmod +x script
La shell supporta strutture di controllo comuni con altri linguaggi:


if

if [espressione]
then
comando1
else
comando2
fi

for

for variabile in valore1 valore2
do
comando
done

while

while [espressione]
do
comando
done

case

case stringa in
pattern1) comando1 ;;
pattern2) comando2 ;;
esac

PRATICA

Customizzare la propria bash

Sulla base delle informazioni fin qui avute si invitano i partecipanti a personalizzare il proprio ambiente bash:


1- Loggarsi sulla macchina come utente normale.

2- Fare una copia di backup del proprio file .bash_profile

3- Aprire con vi il .bash_profile originale. Spostarsi all'ultima riga. Inserire i comandi necessari per eseguire le seguenti funzioni.

4- Aggiungere al proprio PATH le directory /sbin e /usr/sbin

5- Creare un alias che associa all'alias lista il comando ls -latr

6- Editare il file che viene eseguito quando si esce dalla propria bash per scrivere sul file inutile.log nella propria home data e ora di logout

7- [Facoltativo] Dopo aver verificato l'inutilità di inutile.log (un last da informazioni ben più dettagliate) e l'utilità di poter eseguire operazioni custom al logout cancellare inutile.log e commentare quanto scritto al punto 6

 

VERIFICA

Domande sul modulo 6

A questo punto del corso il partecipante dovrebbe essere in grado di rispondere alle seguenti domande:


1 - Che differenza esiste fra > e >> ?
> Redirige lo standard output su un file, riscrivendolo se esiste già. >> fa lo stesso, ma se il file esiste già, aggiunge nuove righe al file senza cancellarne il contenuto.

2 - Scrivere, utilizzando la pipe ( | ) i comandi per visualizzare da un elenco esteso della directory /usr/bin tutti i file che contengono le lettere sh
ls -la /usr/bin | grep sh (lo stesso risultato si può ottenere utilizzando comandi diversi, verificare se quelli usati danno gli stessi risultati)

3 - Scrivere, utilizzando la pipe ( | ) il comando per visualizzare da un elenco esteso della directory /usr/bin tutti i file che finiscono con le lettere sh
ls -la /usr/bin | grep 'sh$'

4- Come si fa a redirezionare sia lo standard output che lo standard error di un comando (es: ls -la ) sullo stesso file (es: lsla.txt)?
ls -la > lsla.txt 2>&1

5 - Come si può fare ad evitare che venga visualizzato (o inviato via mail per comandi in crontab) lo standard error di un comando?
comando 2> /dev/null

 

Il boot su sistemi Intel-like

Il processo di boot di una macchina Linux su sistemi x86 Intel compatibili comporta diverse fasi.
Conoscerle e saperle interpretare è fondamentale per il troubleshooting di problemi di avvio.
Il boot di un sistema Linux prevede i seguenti stadi:
1- All'accensione il BIOS su ROM non volatile definisce l'ordine dei device da utilizzare per effettuare il boot.
2- Il BOOT SECTOR del primo device di boot contiene il codice (o i riferimenti su dove trovarlo) del loader che esegue il bootstrap del sistema operativo. Nel caso di Linux il più diffuso loader è LILO, una recente alternativa evoluta è GRUB.
3- Il loader lancia il caricamento del kernel di Linux, che si copia in memoria ed esegue i controlli e il riconoscimento dell'hardware presente.
4- A fine caricamento il kernel esegue il processo init, padre di tutti i processi, che gestisce il caricamento di tutti gli altri programmi da eseguire per completare il boot.
Nel dettaglio:

IL ROM BIOS

Ogni sistema Intel ha sulla motherboard un BIOS su ROM con cui gestire l'hardware del sistema.
All'avvio di un computer non c'è nulla in RAM e nessun programma predefinito da caricare.
Le istruzioni su come procedere sono nella memoria non volatile del BIOS, in cui, fra le impostazioni definibili dall'utente, c'e' la sequenza dei dispositivi da usare per il boot.
Nei BIOS più recenti è possibile bootare da floppy, cdrom, hard disk (potendo scegliere se dare precedenza a HD IDE o SCSI) e altri dispositivi quali Zip o scheda di rete.
Il BIOS cerca, nell'ordine configurato, il boot sector sui diversi dispositivi di boot previsti.
Gli hard disk hanno un boot sector per ogni partizione e un unico Master Boot Record (MBR) che è il primo boot sector dell'intero hard disk. Se si esegue il boot da un hard disk, è il codice contenuto nel MBR che viene eseguito.

I LINUX LOADER

Esistono diversi loader che eseguono il bootstrab del sistema operativo per Linux:
Su sistemi Intel Based: LILO, GRUB, LOADLIN, SYSLINUX, BOOTLIN;
su sistemi Alpha: MILO;
su sistemi Sparc: SILO.
Tutti di fatto eseguono la stessa funzione, alcuni (loadlin e syslinux) sono programmi DOS che eseguono il kernel caricandolo da una partizione DOS, altri sono adattamenti di LILO che riguardano sistemi non basati su processori Intel.
Nella pagina LILO, GRUB e Master Boot Record vengono analizzati nel dettaglio:
LILO - Il più conosciuto e diffuso
GRUB - Un loader più recente e versatile di LILO in rapida diffusione.

IL KERNEL

Il kernel, invocato dal loader, viene caricato in memoria ed inizializza i vari device driver, visualizzando vari messaggi utili per capire e conoscere il proprio sistema.
I dettagli sull'avvio del kernel, il riconoscimento e l'inizializzazione dell'hardware sono riportati nella pagina Kernel Speaks di questo modulo.

INIT E I SUOI FIGLI

L'ultima operazione eseguita dal kernel alla fine del suo caricamento è il lancio del processo init, il padre di tutti i processi.
Da questo momento tutto il codice eseguito lavora in user space (in kernel space lavorano solo il kernel e i suoi moduli).
L'init, tramite il suo file di configurazione /etc/inittab, provvede a lanciare tutti i programmi che completano il processo di caricamento.
I dettagli nella pagina Init e runlevels.

Tutte le distribuzioni Linux recenti sono installabili direttamente tramite CD-ROM, per cui su una macchina da installare ex-novo è questo il device da impostare come principale.
Una volta installato Linux, è opportuno scegliere l'hard disk su cui è stata fatta l'installazione come device principale di boot.
Alcuni raccomandano di impostare come device principale il floppy disk, seguito dall'hard disk.
Questo per rendere più rapide le operazioni di ripristino del sistema (con un floppy di emergenza) in caso di disaster recovery.
Esistono inoltre distribuzioni che presentano un "LIVE CD" che permette l'esecuzione sul proprio sistema di un Linux completo, che viene caricato direttamente dal CD-ROM.
In questo caso l'hard disk o la memoria stessa vengono utilizzati solo per creare file temporanei, ed eventuali dati dell'utente.
Simili Live CD, che ovviamente richiedono l'impostazione del CDROM come device di boot principale, possono essere utili per operazioni di disaster recovery e, soprattutto, per provare sulla propria macchina un Linux senza di fatto doverlo installare sull'Hard Disk.
Durante l'installazione di Linux è solitamente richiesto se si vuole creare un floppy di ripristino.
Questo permette il caricamento del kernel da floppy in caso di problemi con il MBR o l'hard disk dove risiede l'installazione.
Una volta caricato il Linux dal floppy di emergenza si possono effetturare operazioni di manutenzione sul file system e i file, correggendo un'installazione corrotta.
Ovviamente, è consigliabile avere sempre a disposione un floppy di emergenza per la propria macchina.
In caso di necessità si può creare un floppy di boot con il comando (su RedHat):
mkbootdisk --device /dev/fd0 2.4.7-10
In questo caso viene creato su fd0 (il primo floppydrive) un disco con kernel 2.4.7-10 (che ovviamente deve essere disponibile)

 

LILO

LILO è il Linux loader più diffuso, permette il boot sia di Linux che di altri sistemi operativi.
Generalmente l'installazione di Linux provvede a creare ed installare LILO sulla macchina (se si è scelto di installare il loader direttamente sull'hard disk e non su floppy) ma in caso di kernel upgrade o aggiunta di un nuovo sistema operativo sulla macchina è necessario modificare le impostazioni di Lilo.
Tutte le impostazioni di LILO sono definite nel file /etc/lilo.conf che contiene una parte globale e una o più parti relative alle diverse immagini del kernel o sistemi operativi che si vogliono poter caricare.
Il comando /sbin/lilo installa sul MBR o sul settore di boot di una partizione il LILO secondo le indicazioni date in /etc/lilo.conf.
Al momento del boot LILO inoltre presenta la possibilità di dare comandi vari e di scegliere cosa lanciare
ATTENZIONE: Operare maldestramente con LILO e il MBR può impedire il boot del sistema operativo, si suggerisce sempre di avere un dischetto di boot disponibile da utilizzare in caso di danni o problemi con l'MBR.

Un esempio di /etc/lilo.conf

# Global Options

 

prompt

Fa visualizzare un prompt in cui l'utente, al boot, può scegliere cosa bootare, come bootare e dare parametri al kernel.

timeout=50

Definisce il tempo in decimi di secondi che lilo aspetta prima di caricare l'immagine di default.

default=linux

Definisce quale immagine del kernel (o partizione di un altro OS) LILO carica di default.

boot=/dev/hda

Definisce dove LILO viene installato (in questo caso nell'MBR del primary master).

map=/boot/map

Definisce la posizione del map file, che contiene la posizione fisica dei kernel in un formato interpretabile da LILO. /boot/map è il valore di default.

install=/boot/boot.b

Definisce il file che il comando /sbin/lilo installa sul settore di boot. Di fatto è il binario vero e proprio di LILO. /boot/boot.b è il valore di default.

message=/boot/message

Definisce un file contenente del testo personabilizzabile da visualizzare al boot.

linear

Genera indirizzi di settore lineari invece di indirizzi di settore/head/cilinder, che possono dare problemi. In breve, è meglio che ci sia.

# Label Options

 

image=/boot/vmlinuz-2.4.7-10

Indica dove risiede l'immagine del kernel da caricare.

label=linux

Definisce il nome della label associato a questa immagine, è quello che si deve scrivere nel LILO command prompt all'avvio.

initrd=/boot/initrd-2.4.7-10.img

Definisce la posizione dell'immagine dell'Initial RAM disk. Il kernel questo file system come RAM disk, ne esegue il file linuxrc e poi monta il vero file system su Hard Disk. Serve, per esempio, per installare un kernel modulare su Hard Disk SCSI, per i quali i driver sono disponibili come moduli e non possono essere caricati direttamente.

read-only

Indica al kernel di montare la root, sotto definita, in Read-Only durante la fase di boot. In questo modo è possibile eseguire un file system check durante il boot senza rischi. Prima di passare il controllo delle operazioni all'init, il kernel monta la root in Read-Write.

root=/dev/hda3

Definisce in quale partizione sta la root del sistema.

# Label Options

 

other=/dev/hda1

Indica la partizione in cui risiede un sistema operativo diverso da Linux.

optional

Omette l'immagine del kernel se non è disponibile at momento della creazione del map file.

label=DOS

Definisce il nome della label associata a questo OS (nello specifico era Window 2000)

Opzioni aggiuntive di LILO

LILO prevede molte altre opzioni definibili in /etc/lilo.conf. La maggior parte riguarda parametri riguardanti l'hardware specifico della macchina e servono per comunicare al kernel quale hardware è presente quando non lo riconosce.
In fatto di riconoscimento delle risorse hardware, Linux ha fatto notevoli progressi, ma può ancora essere utile una riga come, per esempio:
append = "ether=10,0x210,eth0"
che ha funzione di passare al kernel le informazioni sulla scheda di rete eth0, che in questo caso usa l'IRQ 10 e l'indirizzo di I/O 210 (potrebbe essere necessario per schede di rete EISA).
Opzioni importanti per la sicurezza sono:


password=pippo

Indica che è necessaria una password (pippo) per poter dare comandi al prompt di LILO

restricted

Indica che la password serve solo quando si devono passare dei parametri al boot, ma non per scegliere la label da caricare.

GRUB

GRUB è un boot loader multipiattaforma estremamente flessibile e potente.
Ha un propria CLI in cui inserire a mano i parametri di boot o può presentare un'interfaccia a menu configurabile tramite il file /etc/grub.conf.
Per installare grub sul settore di avvio basta dare il comando:
grub-install /dev/hda (o altro nome di device valido)
A differenza di LILO non c'è bisogno di ridare il comando ogni volta che si cambia la configurazione.
Segue un esempio di /etc/grub.conf che fa le stesso cose del /etc/lilo.conf commentato sopra.


default=0

Imposta come default la prima "label" sotto indicata

timeout=10

Imposta a 10 secondi il tempo di attesa prima di caricare automaticamente l'entry di default.

splashimage=(hd0,2)/boot/grub/splash.xpm.gz

Indica dove trovare l'immagine che visualizza nella schermata di boot

password --md5 $1$6ðòüZßXÈ$bXTLL8IbDhnwmjyaNNcPG.

Imposta una password, criptata, da fornire per poter accedere al menu o alla command-line.

title Red Hat Linux (2.4.7-10)

Il titolo della prima scelta del menu ("label")

root (hd0,2)

Hard disk (primary master) e partizione (terza) del device di root.

kernel /boot/vmlinuz-2.4.7-10 ro root=/dev/hda3

Il path per il kernel

initrd /boot/initrd-2.4.7-10.img

Il path per il file system da montare su Ram Disk al boot.

title DOS

Il titolo della seconda scelta del menu

rootnoverify (hd0,0)

Hard disk (primary master) e partizione (prima) del device di root.
Non tenta di montare la partizione.

chainloader +1

Prova a caricare in cascata il primo blocco della partizione sopra definita.

dmesg -c

 

ripulisce il buffer dopo aver stampato i messaggi

Se si è installato LILO sul MBR di un computer multiboot con Linux e Windows e non si riesce più accedere a Windows è possibile cancellare dal MBR il LILO dando il comando DOS:
fdisk /mbr
Ovviamente ciò si può fare bootando con un floppy di emergenza DOS.
Ovviamente per tornare ad usare Linux sarà necessario fare il boot con un floppy di emergenza LINUX.

No prompt?
E' possibile ottenere il prompt di LILO anche quando non è configurato nel file di cont premendo SHIFT o CRTL o ALT lasciando il CAPS LOCK attivato.
NON attivare mai l'opzione prompt senza aver definito un timeout, soprattutto su server unattended.
Questa combinazione infatti, in caso di reboot del sistema, interrompe il processo di boot al LILO, in attesa dell'input da parte dell'utente.
Attenzione a non fare confusione fra /sbin/lilo e LILO
Il primo non è il boot loader vero e proprio ma il comando che installa e aggiorna il LILO sul device di boot secondo le indicazioni scritte in /etc/lilo.conf
Nel command prompt del LILO premere TAB per visualizzare l'elenco delle label disponibili.
Nel command prompt di LILO è possibile dare alcuni comandi particolarmente utili:
linux rescue - Per caricare l'immagine con label linux in modalità single user mode (init 1) per interventi di amministrazione straordinaria sul sistema.
linux single - Come rescue, con la differenza che viene tentato il boot da disco.
root=/dev/... - Come nel file lilo.conf, definisce il dispositivo di boot permettendo di bootare, per esempio dal CDROM senza modificare il BIOS.
vga=80x25 - Definisce la modalità video della console: colonne x righe.

I messaggi del kernel

Quando il kernel entra in azione e inizia a caricarsi procede con il riconoscimento e l'inizializzazione dell'hardware presente.
Durante il caricamento presenta a video una serie di informazioni, a volte fin troppo dettagliate, sull'hardware trovato.
Per vedere i messaggi del kernel basta digitare il comando dmesg, che visualizza esattamente quanto viene visualizzato dal kernel durante il boot (in tempi troppo rapidi per essere leggibili).

Un dmesg d'esempio

Segue un esempio di un dmesg. Alcune parti variano a seconda dell'hardware presente sul sistema, altre sono sostanzialmente uguali su tutti i Linux. Quello che segue è il dmesg di un sistema piuttosto semplice, i kernel modulari di una distribuzione standard solitamente presentano ulteriori informazioni relative a driver per hardware o funzionalità qui non presenti.
Linux version 2.4.13 (root@llocalhost) (gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-81)) #5 Fri Nov 9 16:36:50 CET 2001
Questa prima riga mostra la versione del kernel (2.4.13) del compilatore interno (gcc), della versione del sistema operativo
Detected 200.457 MHz processor.
Ha rilevato la frequenza del processore a 200 MHz
Console: colour VGA+ 80x25
Inizializza la console e ne indica le proprietà (a colori, con 80 colonne per 25 righe)
Calibrating delay loop... 666.82 BogoMIPS
Test per verificare la velocità del processore. Più sono alti i BogusMIPS più è veloce la CPU:
Memory: 62272k/65536k available (1091k kernel code, 2880k reserved, 315k data, 212k init, 0k highmem)
Rilevazione della memoria fisica disponibile. Se il kernel non riesce ad individuare correttamente la memoria presente sul sistema, provare ad usare l'argomento mem al boot con LILO (es: mem=256M per dire al kernel che il sistema ha 256 Mb di memoria)
CPU: Intel Pentium II (Deschutes) stepping 01
Identificazione del processore
POSIX conformance testing by UNIFIX
PCI: PCI BIOS revision 2.10 entry at 0xfb5c0, last bus=0
Inizializzazione delle periferiche PCI
Serial driver version 5.05c (2001-07-08) with MANY_PORTS SHARE_IRQ SERIAL_PCI enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A
ttyS01 at 0x02f8 (irq = 3) is a 16550A
Inizializzazione delle porte seriali
hda: IBM-DTTA-351010, ATA DISK drive
Identificazione dell'hard-disk
Partition check:
hda: hda1 hda2 < hda5 hda6 hda7 hda8 >
Verifica dell'integrità delle partizioni da montare.
3c59x: Donald Becker and others. www.scyld.com/network/vortex.html
00:11.0: 3Com PCI 3c900 Cyclone 10Mbps Combo at 0x6400. Vers LK1.1.16
Inizializzazione del driver della scheda di rete e rilevazione del chip
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP
Inizializzazione del TCP/IP ed elenco dei protocolli supportati dal kernel.
A fine caricamento il kernel lancia init il padre di tutti i processi, di cui scopriremo varie cose nella prossima pagina.

dmesg > log_boot

 

Redireziona l'output del comando dmesg nel file log_boot per una maggior facilità di letture e debugging di un'eventuale problema

ls -l /var/log/

 

Lista dei log

cat /var/log/messages

 

Visualizza il contenuto del log messages

lspci

 

Visualizza l'elenco di tutte le periferiche e i BUS pci

Delle meraviglie del proc file system si è già accennato nei primi capitoli.
Vediamo alcune delle sue parti più interessanti (e accessibili per noi comuni mortali):
/proc/#PID/... - Visualizza per ogni processo in meoria (identificato dal suo PID) molte informazioni utili.
/proc/cpuinfo - Informazioni sulla CPU
/proc/ide/.../ - Informazioni sui dispositivi IDE
/proc/interrupts - Gli IRQ del sistema
/proc/iomem - La memoria I/O
/proc/kcore - Il dump completo della memoria
/proc/modules - I moduli del kernel
/proc/partitions - TUTTE le partizioni degli HD
/proc/pci - I dispositivi PCI
/proc/self - Link simbolico al PID del processo stesso con cui si accede a /proc/self :-!
/proc/version - La versione del kernel
/proc/net/arp - La arp table
/proc/net/dev - I byte trasferiti sui device di rete
/proc/sys/net/ipv4/ - Directory fondamentale con molte informazioni sullo stack tcp/ip. Su alcuni file è possibile cambiare valore (0 o 1) per modificare il comportamento del kernel. Per esempio:
echo 1 > /proc/sys/net/ipv4/ip_forward
abilita il forwarding dei pacchetti sulla macchina (necessario se opera come firewall o gateway di una rete).
Vari strumenti e comandi della shell di fatto esprimono in un formato comprensibile il contenuto di diverse parti del proc file system.
L'elenco delle directory del proc relative ai PID correntemente usati nel sistema può essere molto utile per identificare l'intrusione di un hacker con installazione di un root-kit.
Esistono diversi root-kit in circolazione ed una loro caratteristica comune è quella di "nascodere" all'utente la presenza sul sistema di processi che permettono all'hacker di entrare da remoto sulla macchina. Tipicamente comandi come ps, netstat e ls vengono modificati per impedire la visualizzazione dei processi sospetti.
Se si notano in /proc dei PID che non vengono visualizzati con un ps -adef è il caso di inziare a proccuparsi: provare e vedere quali comandi corrispondono al relativo PID (cat /proc/#PID/cmdline ) ed indagare sulla loro natura.
Ovviamente, se l'hacker ha ricompilato il kernel o caricato moduli dinamici particolari, lo stesso proc file system potrebbe non essere più attendibile, nè più nè meno di un ps modificato.

INIT e /etc/inittab

Init è il padre di tutti i processi, il suo ruolo principale consiste nel gestire il lancio di tutti i programmi necessari per rendere il sistema attivo creare i processi a partire da uno script in /etc/inittab.
Nell'inittab vengono definite le directory con gli script di avvio per i diversi runlevel (stati del sistema, in cui possono girare determinati programmi), il runlevel di default, altri script e comandi che vengono eseguiti al boot o in condizioni particolari.
Il primo script lanciato da inittab è (su RedHat) /etc/rc.d/rc.sysinit: che esegue varie operazioni tra cui:
Impostazioni di alcuni path generali nella variabile $PATH; Configurazione dell'ambiente di rete; Avvio swap per la memoria virtuale; Impostazione del nome dell'host; Check del filesystem root; Check delle quote di spazio assegnate agli utenti, se previste; Mount del filesystem root in modalità scrittura/lettura; Preparazione del sistema per caricamento dei moduli; Check delle dipendenze dei moduli; Check di tutti i filesystem ed eventuali riparazioni; Mount di tutti i filesystem; Pulizia di file di supporto al boot e di processi non più attivi; Umount dell'initrd; Impostazione dell'orologio; Attivazione dello swapping; Inizializzazione delle porte seriali; Caricamento Moduli; Attivazione dei servizi del runlevel.
Durante la fase di file system check, se si trovano errori che non possono essere riparati automaticamente è possibile che il processo di boot si blocchi. In questo caso viene richiesta la password di root e si può da bash fare un file system check manuale. Verificare su quale partizione il kernel si è fermato e scrivere (si considera che la partizione sia /dev/hda5 e abbia ext2 come file system): fsck.ext2 /dev/hda5.
Rispondere SI a tutte le lugubri domande sulla correzione di file danneggiati.

Runlevels

Nel mondo Unix ci sono 2 principali approcci al processo di startup del sistema: quello usato da Unix System V e quello, meno complesso ma meno flessibile, usato dai BSD Unix.
Linux utilizza il primo metodo, che si basa su differenti runlevel, astrazioni software per indicare diversi stati della macchina in cui possono girare diversi programmi.
In genere su Linux sono utilizzati i seguenti livelli:

Runlevel 0 : /etc/rc.d/rc0.d

Questo runlevel avvia la sequenza di arresto del sistema (shutdown)

Runlevel 1: /etc/rc.d/rc1.d

Questo runlevel rappresenta la modalità singolo utente, nessun altro utente può collegarsi, il servizio di rete è disabilitato.

Runlevel 2: /etc/rc.d/rc2.d

Rappresenta lo stato multiutente, il servizio rete è attivo ma è disabilitato il file sharing.

Runlevel 3: /etc/rc.d/rc3.d

In genere è quello predefinito quando si opera in modalità testuale, tutti i servizi sono attivi.

Runlevel 4: /etc/rc.d/rc4.d

Inutilizzato. Può essere dedicato ad usi personali

Runlevel 5: /etc/rc.d/rc5.d

E' il runlevel predefinito quando si vuole avviare Linux in modalità grafica

Runlevel 6: /etc/rc.d/rc6.d

Il runlevel 6 è quello di reboot.

Lo script /etc/rc.d/rc gestisce quali processi far partire a seconda del runlevel, andando ad analizzare le singole directory /etc/rc.d/rc#.d. In queste directory esistono una serie di symlink con nomi del tipo S12syslog o K65identd che puntano a degli script con nomi tipo /etc/rc.d/init.d/syslog o /etc/rc.d/init.d/identd.
/etc/rc.d/rc a seconda della directory corrispondente al runlevel da caricare fa partire tutti gli script che iniziano con S e fa chiudere tutti quelli che iniziano con K, eseguendoli nell'ordine indicato dal numero presente nei nomi dei file.
Gli script che di fatto permettono di gestire l'avvio o lo stop di un servizio sono quindi nella directory /etc/rc.d/init.d/ e possono essere utilizzati direttamente dall'utente per gestire i singoli processi.
Per esempio: /etc/rc.d/init.d/httpd start fa partire il server Web e /etc/rc.d/init.d/stop lo fa stoppare.
Se abbiamo il file (link a ../init/httpd ) /etc/rc.d/rc3.d/S85httpd, quindi, avremo un server web avviato quando la macchina è al run-level3 (runlevel di default per un server, che non ha bisogno di Xwindows).
Se vogliamo evitare che venga avviato un server web, bastera rinominare il file, sostituendo la K alla S:
mv /etc/rc.d/rc3.d/S85httpd /etc/rc.d/rc3.d/K85httpd
Nel fare queste operazioni va sempre considerato il numero dopo la prima lettera, che determina l'ordine di esecuzione degli script.


Gestione dei servizi al boot

La soluzione sopra esposta per gestire quali servizi deve offrire il nostro server è effettivamente poco immediata (ma, come si è visto, piuttosto flessibile). Esistono tool che permettono di gestire più facilmente quali servizi avviare al boot.
Per esempio, su distribuzioni RedHat, utilizzando il comando ntsysv è possibile accedere ad un tool grafico (su interfaccia testuale) dedicato.
I processi identificati da un star (*) e dal nome del servizio indicano che il processo verrà attivato al boot, altrimenti i processi identificati solo dal nome del servizio e da una casella vuota indicano i processi che non verranno fatti partire.
Alternativamente si può usare il comando serviceconf su interfaccia grafica o il comando shell chkconfig.
E' molto importante disattivare tutti i processi e servizi inutili per evitare sprechi delle risorse del sistema.

cat /etc/inittab

 

Per verificare gli script lanciati all'avvio e quale runlevel viene utilizzato di default

ls -l /etc/rc.d/

 

Lista dei file delle directory che contengono i vari script lanciati al boot

pstree

 

Visualizza i processi con uno schema ad albero. Senza argomenti prende INIT come processo di partenza ed evidenzia come tutti gli altri processi discendono da lui.

chkconfig --list

 

Visualizza per ogni servizio, se viene avviato o no nei diversi runlevel.

chkconfig --level 35 httpd on

 

Configura l'avvio del servizio httpd nei runlevel 3 e 5

 

 

 

Per fare il shutdown del sistema digitare init 0
E' necessario agire su /etc/inittab per far partire il proprio sistema in modalità grafica o testuale. La parola chiave initdefault indica il runlevel di default, se si inserisce 5 il sistema parte in modalità grafica, se si inserisce 3 parte in modalità testuale:
id:3:initdefault
NON inserire valori come 0 o 6!!!
Il sistema non riuscirebbe mai a partire correttamente.
In linea di comando digitare il comando pstree per verificare che tutti i processi nascono da init.
All'avvio del sistema è possibile schiacciando la lettera i sulla tastiera entrare in modalità interattiva cioè vi verrà chiesto servizio per servizio se dovrà essere attivato.
Molte distribuzioni Linux utilizzano path diversi per il loro script di startup, questo può disorientare l'utente e costringerlo a cercare scritp di startup e file in troppi luoghi diversi.
NON è necessario. Tutto parte da init e init si configura in /etc/inittab. Leggendo questo file è possibile ricostruire l'intero processo di boot del sistema e vedere dove risiedono tutti gli script di statup.
In ultima analisi TUTTO il mondo Linux (dagli script di gestione e avvio allo stesso codice sorgente del kernel e dei vari programmi) è visualizzabile in file ASCII editabili con VI.
Questo principio è grandioso e notevole, permettendo all'utente esperto il controllo completo del sistema.

 

PRATICA

 

Sulla base delle informazioni ottenute nel modulo 7 si invitano i partecipanti a loggarsi sul proprio PC ed effettuare le seguenti operazioni:


1- Analizzando i messaggi del kernel individuare marca e modello della propria scheda di rete; marca e modello dei dispositivi IDE collegati al sistema con relativo nome di device assegnato (/dev/hd...); marca e modello del processore presente.

2- Analizzando il proc file system individuare le partizioni presenti sugli hard disk.

3- Creare un boot floppy disk di ripristino.

4- Riavviare la macchina e testare un boot di emergenza utilizzando il floppy disk di ripristino.

5- Modificare i runlevel per impedire l'avvio del servizio XFS a qualsiasi runlevel.

6- Provare a far partire Xwindows con il servizio XFS stoppato. Provare a farlo partire dopo aver riavviato XFS a mano.

7- Modificare i runlevel per permettere l'avvio del servizio XFS sul runlevel 5

 

VERIFICA

Domande sul modulo 7

A questo punto del corso il partecipante dovrebbe essere in grado di rispondere alle seguenti domande:


1 - Quali componenti e in quale ordine sono coinvolti nel processo di boot di un sistema Linux?
ROM BIOS - Boot Loader sul settore di boot - kernel - init scritps

2 - Analizzando il dmesg allegato, indicare: tipo processore, numero tipo schede di rete, tipo controller SCSI, se presente. Da queste informazioni, oltre all'hardware presente, che cosa si può ipotizzare sulla funzione della macchina che ha generato questi messaggi del kernel.

3 - Se mi trovo su una macchina Linux che non conosco e voglio conoscere tutti gli script che vengono eseguiti al boot, quale file devo iniziare ad analizzare?
/etc/inittab

4 - Su un server che non ha bisogno di interfaccia a finestra, quale runlevel va impostato come default?
3

5 - Su una distribuzione RedHat in che directory risiedono tutti gli script di gestione dell'avvio/stop dei vari servizi?
/etc/rc.d/init.d e /etc/init.d (è un link simbolico a /etc/rc.d/init.d)

6 - Su un server il boot si interrompe al momento di avviare il servizio sendmail. Cosa posso fare per tamponare in tempi brevi il problema?
Caricare la macchina in init1 (con LILO, per esempio, basta scrivere "single" nel command prompt) e modificare a mano (sostituendo la S con la K) il nome del link simbolico della directory /etc/rc.d/rc#.d/ dove # è il runlevel di default.

Le attività di un sistemista Linux

Le attività sistemistiche su un server Linux non sono sostanzialmente diverse da quelle necessarie per altri sistemi Unix o Windows e ovviamente variano a seconda delle funzioni della macchina e del contesto lavorativo.
Generalmente il sistemista si dovrebbe preoccupare di:
1- Partecipare a riunioni e fornire la propria opinione sulla definizione dell'infrastruttura informatica e la scelta e il dimensionamento dell'hardware da utilizzare;
2- Installare le macchine;
3- Eseguire le procedure di post-installazione standard (aggiornamento kernel e software, rimozione servizi inutili, hardening del sistema, installazione di script e procedure custom);
4- Installare, configurare e testare i servizi richiesti per la macchina;
5- Monitorare performance, sicurezza e funzionalità del sistema;
6- Assistere e assecondare le richieste dirette o indirette degli utenti del sistema (sviluppatori e utenti dei servizi);
7- Eseguire backup e ripristino dei dati;
8- Automatizzare varie procedure nel sistema;
8- Documentare approfonditamente il lavoro svolto.
Troppo spesso il sistemista:
1- Non viene interpellato per una consulenza sulle tecniche più adeguate per le esigenze richieste;
2- Racka, cabla, se necessario smonta e rimonta, e installa le macchine;
3- Non ha una procedura standard di post installazione a cui attenersi;
4- Installa e configura i servizi necessari per la macchina, non sempre li testa a dovere;
5- Non controlla quasi mai i log di sistema, non implementa procedure di controllo;
6- Asseconda gli utenti ma li odia;
7- A volte prevede il backup dei dati, raramente esegue test di recupero;
8- Ripete spesso i soliti comandi;
9- La migliore documentazione la mantiene in testa, il resto in qualche file sul proprio computer.
Generalmente il tutto si spiega e si tende a giustificare con la cronica mancanza di tempo.
In realtà basterebbe un po' di lucidità progettuale e lungimiranza per riuscire a riuscire ad ottenere tutti i risultati e alla lunga risparmiare tempo.
- La documentazione è fondamentale: permette di mantenere memoria storica del funzionamento dei sistemi e mette in grado il sistemista di delegare a colleghi meno esperti o appena arrivati di svolgere correttamente il lavoro che dovrebbe svolgere da solo.
- La partecipazione alle decisioni tecniche va richiesta con la giusta insistenza. E se ci ritrova a dover eseguire lavori, imposti dall'altro e tecnicamente discutibili, è doveroso quantomeno esprimere il proprio dissenso e suggerire le alternative più adeguate.
- Nonostante il knowledge generalmente vasto e variegato che spesso un sistemista deve avere, il suo compito di fatto è oscuro ai molti e a volte considerato di importanza trascurabile. Si solito ci si accorge del contrario quando un sistema in produzione va down e qualcuno deve farlo tornare a a funzionare.
- L'utente che usa i servizi della macchina o lo sviluppatore che riempe i contenuti di un sito web, per quanto generalmente poco sensibili alle esigenze e condizioni del sistemista, NON può e NON deve essere considerato un nemico. Di fatto è il motivo per cui il sistemista lavora e, in ogni caso, non ce se ne può disfare. L'unico modo per conviverci al meglio è educarlo all'uso del sistema e capire cosa gli serve per ridurre problemi e tempi di implementazione.
- Per quanto possibile è sempre consigliabile mantenere hardware e software omogenei: hardware dello stesso fornitore e non eterogeneo riduce complicazioni e velcoizza la sostituzione di pezzi di ricambio. Sistemi allineati (stesso OS, stessa distribuzione, stessa versione) rendono più facile, comoda e rapida l'attività sistemistica: gli aggiornamenti di software e kernel possono essere più rapidi e viene ottimizzato il tempo per seguire le problematiche di sicurezza di un sistema operativo.
Generalmente in una rete convivono sistemi operativi diversi: ci sta la coesistenza di Windows con Solaris e Linux, ha molto meno senso la coesistenza di RedHat con SUSE e Caldera. E' sempre meglio scegliere una distribuzione, migliorare la propria familiarità con essa, e non perdersi a dover seguire, almeno in ambienti di lavoro, le altre.

Importanza del backup

 

Il backup del proprio sistema è fondamentale.
Una buona procedura di recupero file, in caso di disastro, fa la differenza fra una catasfrofe e una scocciatura.
A prescindere dal sistema utilizzato per eseguire il backup, ci sono due approcci al problema:
- Backup completo dell'intero file-system;
- Backup solo dei dati, dei file di configurazione e dei programmi non reinstallabili velocemente.
In ogni caso è importante che la macchina su cui viene fatto il backup non sia la stessa di cui viene fatto il backup e che, possibilmente, siano in due locazioni fisiche (o quantomeno i supporti dove vengono archiviati i file) diverse e lontane.

Comandi di archiviazione file

 

tar [opzioni] filename1 filename2 filename[n]

Questo comando viene ampiamente utilizzato per creare (estrarre) archivi .tar
Spesso viene utilizzato in combinazione con gzip per creare archivi compressi .tar.gz e .tgz

gzip [num] [opzioni] filename

Comando per comprimere file ed archivi in formato gz che, fra le altre cose permette di scegliere il grado di compressione [num].
In ambiente Linux / Unix è il più utilizzato

gunzip [opzioni] filename.gz

Comando inverso di gzip

bzip2 [opzioni] filename

Comando per comprimere file ed archivi in formato bz2, ha il vantaggio di avere un rapporto di compressione maggiore di gz

bunzip2 [opzioni] filename.bz2

Comando inverso di gzip

zip [opzioni] filename

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

unzip [opzioni] filename.zip

Comando inverso di unzip

rsync: una soluzione per il backup

 

Fra i vari strumenti utilizzabili per il backup, ci sentiamo si consigliare il comando rsync, che permette la copia differenziale di file via rete, ottimizzando i tempi di backup e ripristino dei dati.
Esempio: Per eseguire una copia (mantenendo le proprietà dei file originali) della intera directory home dell'host 10.0.0.10 sull'host 10.0.0.2:
rsync -av 10.0.0.10::casecondivise/* /backup/10.0.0.10/home/
Analizziamo la sintassi:


-av

L'opzione che dice di copiare i file in archive mode (directory recursive, mantendo ownership e permessi);

10.0.0.10

L'indirizzo del host da backuppare

casecondivise

Il nome della condivisione configurata sull'host ba backuppare

*

Wildcard per indicare tutti i file

/backup/10.0.0.10/home

Path locale della macchina su cui vengono copiati i file.

La prima volta che si esegue questo comando tutti i file presenti nella /home di 10.0.0.10 vengono copiati, le volte successive vengono copiati solo quelli modificati dall'ultimo backup.
Sull'host 10.0.0.10 deve essere in esecuzione rsync in modalità server (comando: rsync --daemon) e deve essere presente il file /etc/rsyncd.conf con una struttura simile:


[casecondivise]

Il nome della condivisione che rsycnd esporta.

path = /home/

Il path locale corrispondente a questa condivisione

read only = yes

Per un backup non è necessario avere permessi in scrittura

uid = root

L'utente con cui rsync accede al file system. Come root può leggere tutti i file

gid = root

Il gruppo con cui rsync accede al file system.

hosts allow = 10.0.0.2

Gli IP da cui è possibile collegarsi via rsync.

list = false

Impedisce di elencare le condivisioni disponibili sul server rsync

Come si può immaginare rsync è uno strumento estremamente potente, che permette diverse operazioni di copia di file fra due host.
In quanto tale è anche estremamente pericoloso in termini di sicurezza, visto che non vengono nemmeno richieste password.
Per questo motivo è sempre consigliabile:
- Specificare e limitare gli indirizzi IP degli host che possono accedere al server rsync;
- Permettere accessi solo in lettura e non in scrittura (per un backup questo basta, in altre applicazioni potrebbe essere necessario dover scrivere sul rsync server, in questo caso prestare particolare attenzione agli IP abilitati e all'utente con cui rsync accede al file system).
- Se possibile utilizzare come uid e gid degli utenti normali e non root (per un backup, a meno che non si voglia cambiare il permessi dell'intera directory home, l'utente root è necessario);
- Se possibile, rafforzare la sicurezza sugli IP sorgenti con ACL sui router o iptables sul server rsync.

tar -cvf nomearchivio.tar <files o directory>

 

Sintassi comunemente utilizzata per creare un nuovo archivio.

tar -xvf nomearchivio.tar

 

Sintassi comunemente utilizzata per estrarre un archivio.

tar -tvf nomearchivio.tar

 

Con l'opzione -t elenca il contenuto dell'archivio evitando la decompressione dello stesso

tar -c /

 

Un breve comando copiare per creare un tar dell'intero file system.

tar -c 'find / -mtime -1 ! -type d -print'

 

Esempio di un semplice script che esegue il backup solo dei file modificati nell'ultimo giorno. Vengono escluse le directory intere.

tar -xp nome.tar /home/pippo/file.doc

 

Estrae da nome.tar solo il file /home/pippo/file.doc, mantenendone gli attributi.

 

 

 

E' possibile creare direttamente un archivio tar comprimendolo in formato gz tramite la seguente riga di comando tar -zcvf
Alcuni strumenti gratuiti di backup sotto Linux:
tar, cpio, taper, rsync, afbackup amanda.
Alcuni software commerciali:
BRU, Arkeia

 

 

gestione utenti

 

 

 

 

 

La gestione degli utenti comprende le operazioni di aggiunta, modifica, cambio password di tutti gli utenti che possono accedere in shell alla macchina.
Per aggiungere a mano un utente al sistema si deve (come root):
- Editare /etc/passwd aggiungendo una riga per il nuovo utente;
- Editare /etc/group aggiungendo un nuovo gruppo per il nuovo utente (non indispensabile);
- Se esiste il file /etc/shadow editarlo aggiungendo una nuova riga per l'utente;
- Creare la home del nuovo utente: mkdir /home/nomeutente;
- Ricreare l'ambiente base nella nuova home: cp /etc/skel /home/nomeutente;
- Modificare il proprietario della home: chown -R nomeutente:nomegruppo /home/nomeutente;
- Modificare i permessi della home: chmod -700 /home/nomeutente;
- Modificare la password dell'utente: passwd nomeutente
Tutto quanto viene automaticamente fatto con comandi e tool di amministrazioni vari.

 

 

Comandi

 

useradd [opzioni] nomeutente

Aggiunge un utente, è possibile tramite le varie opzioni disponibili modificare tutte le impostazioni di default di inserimento utenti.

userdel [opzioni] nomeutente

Elimina un'utente, da sottolineare che la sua home con il suo contenuto non viene cancellata.

groupadd [opzioni] nomegruppo

Aggiunge un gruppo.

passwd [nomeutente]

Modifica la password di un'utente

chsh [opzioni]

Cambia il tipo si shell disponibile al login di un'utente

File di configurazione

/etc/passwd

File che contiene le informazioni dell'utente, uno per riga, con questo formato:
username : password : UserID : GroupID : commento : homedirectory : comando di login

/etc/group

File contenente le informazioni sui gruppi e le loro relazioni. Formato: NomeGruppo : commento : GroupID: Utenti,Del,Gruppo

/etc/shadow

Se il sistema gestisce le shadow questo è il file che contiene le password criptate e ulteriori dati. Nei campi, separati da :, di questo file sono inserite informazioni sulla scadenza della password, l'ultima volta in cui è stata modifcata, giorni di avviso prima della scadenza della password...

 

 

 

adduser -u 502 -g 100 -s /bin/bash gio

 

Comando per aggiungere l'utente gio assegnandogli la bash shell , UID 502 e GID 100

adduser gio

 

comando per aggiungere l'utente gio con le impostazioni di defaul, UID e GID verranno assegnati in modo automatico

cat /etc/shells

 

visualizza le shell disponibili

find / -perm 2000 -o -perm 4000 -print

 

Trova , partendo da / tutti i file che hanno SUID o SGID attivato.

 

UID e GID uguali a zero appartengono a root. Da ricordare che i primi GID sono assegnati a gruppi speciali.
E' possibile togliere l'accesso al sistema senza dover cancellare l'utente, semplicemente aggiungendo nel file /etc/shells una shell fasulla ed assegnare questa shell all'utente a cui si vuole privare l'accesso.
E' molto importante per motivi di sicurezza che nessun utente abbia password vuote.
Non tutti i sistemi Unix e Linux hanno le shadow utilities. In questi sistemi la password viene scritta criptata direttamente in /etc/passwd, soluzione classica e meno sicura.
Se il campo password in /etc/passwd è una x la password è scritta in /etc/shadow.
Se il campo password è un * , la password è nulla e l'utente disabilitato.

log, dove e perchè

Molto spesso ci si ritrova a diagnosticare problemi, capire perchè una applicazione non parte o eseguire compiti di reverse engineering sul funzionamento di parti del sistema.
La prima fonte da consultare per ogni operazione di troubleshooting sono i log di sistema, semplici file che tengono traccia di errori e particolari azioni eseguite dal sistema, come il cambiamento di una password, il login di un certo utente o il messaggio di errore di una applicazione.
I log di sistema hanno generalmente una locazione ben definita: /var/log dove possono coesistere diversi log.

Syslog

In tutti i sistemi Unix il demone syslogd si occupa di gestire i diversi log di sistema tramite il file di configurazione /etc/syslog.conf.
Le recenti distribuzioni Linux utilizzano sysklogd, una versione evoluta di syslogd che gestisce anche il logging del kernel (tramite il demone klogd).
Il file /etc/syslogd.conf ha una sintassi semplice, indicando per ogni riga una attività di logging:
facility.loglevel /var/log/file.log
La facility può essere auth, auth-priv, cron, daemon, kern, local0-7, lpr, mail, news, user, syslog, uucp...
Il loglevel indica il livello di criticità del messaggio: debug, info, notice, warning, error, crit, alert, emerg.
E' inoltre possibile usare wildmask (*), negazioni (!) e uguaglianza (=).

 

Configurazione base di syslog.conf

Qualunque messaggio eccetto mail

*.info;mail.none /var/log/messages

Messaggi riguardanti login o a particolari servizi

authpriv.* /var/log/secure

Qualunque messaggio riguardante le mail

mail.* /var/log/mailog

Log del crontab

cron.* /var/log/cron

 

 

 

ls -l /var/log/

 

Lista dei log

less /var/log/messages

 

visualizza il log messages

 

Per loggare su un syslog server Linux i log di un Cisco si deve:
CIsco:
Configurare lo IOS per definire il syslog server:
logging server 10.0.0.20
logging facility local2
logging trap 7 (opzionale, imposta il logging a livello 7: debug)
Linux:
Fare partire syslog con l'opzione di logging via rete:
syslogd -r
Configurare /etc/syslog.conf per accettare i messaggi dal cisco (facility local2):
local2.* /var/log/cisco.log
La porta usata per il syslog via rete è la 514 UDP.
Syslog presenta alcune lacune in termini di sicurezza, in particolare se viene usato via rete: i dati passano in chiaro e possono essere spoofati e manipolati.
Un'alternativa più recente e sicura è syslog-ng

La gestione e l'analisi dei log è un'attività sistemistica che richiede le sue attenzioni.
Su macchine ad alto traffico, o sotto attacco DOS o con particolari problemi ricorrenti, le dimensioni dei log possono crescere a dismisura in pochissimo tempo, fino a saturare il file system.
Per questo motivo è sempre consigliabile montare la directory /var in una partizione indipendente, che, anche se riempita, non blocca il funzionamento del sistema.
E' inoltre importante poterli gestire, ruotandoli ad intervalli fissi e compattando i log vecchi.
Può essere utile anche monitorare i log con opportune applicazioni che possano avvertire il sysadm quando si verificano determinate condizioni.


logrotate

Logrotate è un'applicazione che semplifica l'amministrazione dei log, permette di comprimere, rimuovere ed inviare il log via mail oltre a eseguire una rotazione di file con vari criteri.
Il file di configurazione è /etc/logrotate.conf
In sistemi che usano RPM , solitamente, le regole di gestione dei singoli log sono inserite nella directory /etc/logrotate.d/.
Generalmente gli script che eseguono logrotate sono inseriti nel crontab.

Log analysys tools

Esistono diversi strumenti per analizzare i log e verificare se contengono informazioni critiche o se sono stati in qualche modo modificati (traccia di una potenziale intrusione esterna).
Logwatch è un sistema di monitoring dei log customizzabile ed estendibile che permette l'analisi dei log di sistema e la notifica via email all'amministratore. Una volta installato l'RPM, il file di configurazione è /etc/log.d/conf/logwatch.conf
Nella directory /etc/log.d/conf/services/ ci sono le configurazioni per i diversi servizi i cui log possono essere processati da logwatch, in /etc/log.d/conf/logfiles/ ci sono le configurazioni sui log relativi ai servizi, in /etc/log/scripts/ ci sono i filtri predefiniti per analizzare diversi servizi e logfiles.

 

 

 

cat /etc/logrotate.conf

 

Visualizza il contenuto del file di configurazione

last

 

Utilizzando il file /var/logwtmp visualizza la lista degli utenti che si sono loggati sul sistema.

tail -f /var/log/file.log

 

Comando sempre utile per verificare in tempo reale, tramite il log specificato, il comportamento del sistema.

logwatch --service ftd-xferlog --range all --detail high --print --archives

 

Visualizza tutti i trasferimenti FTP registrati nei xferlog attuali e archiviati .

logwatch --service pam-pwdb --range yesterday --detail high --print

 

Visualizza informazioni sui login nel giorno precedente.

 

 

 

Il file wtmp non è visibile e modificabile con i comuni comandi shell

 

PRATICA

 

Sulla base delle informazioni ottenute nel modulo 8 si invitano i partecipanti a loggarsi sul proprio PC ed effettuare le seguenti operazioni:


1- Creare un nuovo account sul proprio sistema con i comandi standard, dandogli una password a piacere.

2- Verificare se l'account è stato creato correttamente e può essere usato per un login sul sistema.

3- Cancellare l'account appena creato con i comandi standard. Verificare se la sua home directory esiste ancora.

4- DOPO AVER FATTO UNA COPIA di /etc/passwd, /etc/shadow e /etc/group provare a creare un nuovo account editando manualmente i suddetti file.

5- Verificare se l'account creato a mano funziona regolarmente.

6- Come root, fare una copia tramite tar della intera directory /home con relative sottodirectory. Provare a gzippare il tar.

7- Scompattare il tar.gz con il backup della /home in /tmp/ e verificare permessi dei file e integrità dei dati.

8 FACOLTATIVO - Se è disponbile un router Cisco in aula configurare Cisco e syslog server per loggare direttamente sul syslog di uno dei computer in aula.

 

VERIFICA

Domande sul modulo 8

A questo punto del corso il partecipante dovrebbe essere in grado di rispondere alle seguenti domande:


1- Che differenza esiste fra un file .tar, un tar.gz e un .zip?
Il .tar è un file creato con il comando tar che contiene file e directory non compresse, il .tar.gz è un tar compattato con gzip, lo zip è un formato di archiviazione e compressione diverso, basato su pkzip e gestibile con i comandi zip e unzip.

2- In quali file sono contenute le informazioni riguardanti gli utenti e le relative password?
/etc/passwd - /etc/shadow (in sistemi che supportano le shadow) - /etc/group

3- Che comandi si usano per creare un utente e assegnargli una password?
useradd nomeutente - passwd nomeutente

4- In quale file sono presenti le configurazioni del syslog server?
/etc/syslog.conf

5- Analizzando il file di configurazione del syslog del proprio sistema, indicare in quale file vengono scritti tutti i log riguardanti la posta
/var/log/maillog (di solito, basta cercare in syslog.conf la riga con la facility mail (inizia con mail.* ) e verificare su quale file logga)

6- Cosa fa logrotate? Qual è il suo principale file di configurazione?

Definizioni

RPM, Red Hat Package Manager. Utility per installare, disinstallare, aggiornare, interrogare, verificare e costruire pacchetti software.
Un package costruito con RPM è un archivio di file e informazioni che potranno essere richiamate una volta che il package è stato installato.
RPM permette di installare programmi, già compilati, con una facilità e rapidità estrema sul proprio sistema Linux (è l'equivalente di un setup.exe su Windows). RPM è usato da RedHat e da altre distribuzioni, è importante utilizzare gli RPM adatti per il proprio sistema: un RPM realizzato per RedHat 6.2, per esempio, difficilmente funzionerà su RedHat 7.2.
RPM gestisce automaticamente le "dependencies": se si prova ad installare un RPM che richiede librerie o programmi non presenti o non abbastanza aggiornati sul sistema, l'installazione fallisce e viene indicato quali file mancano.
Analogamente, se si prova a rimuovere un package che contiene file utilizzati da altri programmi, viene dato un messaggio di errore.
Gli RPM automaticamente distribuiscono i file di un pacchetto nelle directory giuste (logs in /var/log, file di configurazione in /etc/, binari in /usr/bin o /usr/sbin, script di startup in /etc/rc.d/init.d/ ecc.) e verificano la presenza di conflitti o installazioni più recenti.
Un RPM non cancella mai nulla che non abbia installato. Se deve sostituire o cancellare un file di configurazione, per esempio, mantiene il file esistente aggiungendo il suffisso .rpmsave.
I potenziali svantaggi o controindicazioni di RPM sono:
- I file sono già compilati, se si intende customizzare alcuni flag di compilazione si deve farlo a mano da un tar.gz;
- Non sempre nuovi RPM vengono resi disponibili in tempi brevi quando esce una nuova versione di un programma.

Comandi

rpm -i [opzioni] [pacchetti]

Installazione pacchetti RPM

rpm -U [opzioni] [pacchetti]

Aggiornamento di pacchetti RPM

rpm -e [opzioni] [pacchetti]

Disinstallazione di pacchetti RPM

rpm -q [opzioni] [pacchetti]

Interrogazione di pacchetti RPM

rpm -V [pacchetto]

Verifica pacchetto RPM

RPM Standard

Esiste una convenzione standard che identifica il nome di un package RPM, si consideri l'esempio:
efax-0.8a-11.i386.rpm corrisponde a nome-versione-release.arch.rpm
nome è il nome del pacchetto, versione è la versione del pacchetto, release è la release del pacchetto, arch è l'architettura hardware per la quale il pacchetto è stato previsto ed rpm è l'estensione predefinita.
Esistono programmi di supporto all'uso degli RPM, i più interessanti sono:


rpm2html

Genera comode pagine HTML sulla base degli RPM installati

GUI varie

Esistono vari programmi che presentano interfacce a finestre per la gestione degli RPM

Updaters

Tool che permettono l'aggiornamento più o meno automatico degli RPM

rpmfind

Comodo tool per trovare su Internet RPM ed eventualmente procedere all'upgrade automatico.

rpm -ihv pacchetto.rpm

 

Installa abilitando le opzioni verbose ed hash che stampa 50 cancelletti (#) per indicare lo stato di avanzamento dell'installazione

rpm -qil pacchetto.rpm

 

Fornisce informazioni complete sul pacchetto compreso l'elenco dei file di cui era composto il package

rpm -i --nodeps pacchetto.rpm

 

Installa il pacchetto senza verificare le dependencies

rpm --rebuilddb

 

.Ricostruisce il db utilizzato da RPM per rilevare i pacchetti e relative informazioni installate su un sistema

rpm -qa | grep tcpdump

 

.Cerca, nell'elenco di tutti gli RPM installati, se è presente il programma (o meglio, il nome di RPM) tcpdump.

rpm -qf /bin/ls

 

Visualizza l'RPM che ha fornito il file indicato (in questo caso il comando ls)

Attenzione molte volte per poter instalare, disinstallare o upgradare un pacchetto bisogna soddisfare molte dipendenze, per forzare l'azione evitando le dipendenze del pacchetto utilizzare l'opzione --forcedep

 

Quando si forniscono opzioni al comando RPM, qualunque sia l'azione, tutte le opzioni identificate da una lettera sola possono essere inglobate in un unico blocco come nell'esempio sottostante
rpm -i -h -v nmap-2.2.2-13.i386.rpm
rpm -ihv nmap-2.2.2-13.i386.rpm

 

Attenzione quando si vuole disinstallare un pacchetto bisogna, affiancato dal flag -e, utilizzare il nome del pacchetto e non il nome del file che è stato utilizzato per installare il pacchetto stesso.
Per esempio :
rpm -e dosemu
e non
rpm -e dosemu-0.99.10-2.386.rpm

Che cos'è un tar.gz?

Un file tar.gz è uno dei tanti modi pratici per archiviare dei sorgenti.
L'archivio dei sorgenti, comunemente chiamato tarball, molto spesso si presenta con una vera e propria struttura che contiene oltre i file sorgenti, la documentazione per la compilazione e l'utilizzo del software, file binari e script che aiutano l'utente nelle procedure di installazione.
Esistono altri modi per archiviare dei file (bz2, zip) ma senza dubbio questo è il più utilizzato in ambito Unix.
Ovviamente questa libertà di compilare i propri programmi o direttamente il kernel del proprio OS, è prerogativa dei sistemi open source, per i queli si possono ottenere e volendo modificare i sorgenti.

L'importanza dei sorgenti

Poter installare software e compilare lo stesso kernel tramite i sorgenti ha dei grandi vantaggi che l'installazione diretta di binari non offre.
- Aumento delle performance, tramite ottimizzazioni e razionalizzazioni,
- Possibilità di customizzazione,
- Possibilità di correzione di bugs tramite patch
- Possibilità di eseguire aggiornamenti in modo rapido, appena sul sito del produttori appaiono i sorgenti di una nuova versione.
In particolare per il kernel la necessità di compilazione è quasi d'obbligo su sistemi in produzione per i quali non si vogliano mantenere kernel generici e con supporto di innumerevoli moduli come quelli comunemente forniti nelle distribuzioni standard.

Comandi Principali per la compilazione dei sorgenti

Poichè non esiste una vera e propria procedura standard per la compilazione dei sorgenti è importantissimo leggere la documentazione distribuita insieme ai sorgenti, comunque di seguito vengono riportati i comandi comunemente utilizzati

configure [ opzioni ]

Verifica le dipendenze e crea il Makefile

make [ opzioni ]

Attraverso il Makefile creato precedentemente compila i sorgenti e installa

Tipicamente la procedura di installazione di un tar.gz si riassume in questi passi (leggere sempre i file INSTALL o README per le effettive istruzioni di installazione) :
tar -zxvf package.tar.gz
cd package/
./configure
make
make install

./configure --help

 

Per richiamare le varie opzioni del comando configure

 

./configure --prefix=/usr

 

Con l'opzione --prefix si decide il prefisso del path di installazione (default /usr/local/).
Ad esempio i binari verranno installati in /usr/bin o /usr/sbin

 

 

 

 

In alcuni casi per poter lanciare il make install bisogna essere root
Per poter verificare le opzioni di installazione leggere il Makefile. less Makefile
In un tar.gz con sorgenti è convenzione trovare un file README con informazioni sul software allegato e un INSTALL con istruzioni sulle procedure di installazioni. E' sempre consigliabile leggere questi file prima di procedere alla compilazione.
Generalmente su una stazione Linux sono installati di default tutte le utility e le librerie necessarie per compilare un programma direttamente dai suoi sorgenti (escluse eventuali librerie specifiche che vengono utilizzate dal programma stesso).
In genere i tools necessari per compilare sono:
gcc suite (GNU C Compler e librerie correlate);
make utilities (make, pmake, automake...)
ncurses (librerie, necessarie fra l'altro per la configurazione del kernel).

 

PRATICA

 

Sulla base delle informazioni ottenute nel modulo 9 si invitano i partecipanti a collegarsi al proprio ed effettuare le seguenti operazioni:


1- Elencare tutti i pacchetti RPM presenti sul proprio sistema e cercare se esiste tcpdump.

2- Installare tramite CDROM o ottenere dal docente il pacchetto rpm tcpdump. Se già presente sul sistema, DISINTALLARLO e REINSTALLARLO.

3- Installare, se non presenti sul sistemi, le librerie libpcap, utilizzate da tcpdump (e altri software di network monitoring).

3- Verificare che funzioni, lanciando il comando tcpdump (CTRL+C per interrompere).

4- Disinstallare l'rpm di tcpdump, ottenere dal docente il tar.gz con i sorgenti di tcpdump (www.tcpdump.org) e provare ad installarlo compilandolo direttamente.

 

VERIFICA

Domande sul modulo 9

A questo punto del corso il partecipante dovrebbe essere in grado di rispondere alle seguenti domande:


1 - Con quale comando si installa, senza verificare se le dependencies sono rispettate, un pacchetto rpm?
rpm -i --nodeps pacchetto.rpm

2 - Con quale comando si elencano i file contenuti in un pacchetto RPM?
rpm -qil pacchetto.rpm

3 - Con quale comando si aggiorna un pacchetto RPM esistente?
rpm -U nomepacchetto.rpm

4 - Quale seguenza tipica di comandi si deve dare per compilare un programma avendo il relativo tar.gz (dare i comandi standard, considerando che ogni software può avere una procedura configurazione e installaziomo propria)?
tar -xvf package.tar.gz - cd package/ - /configure - make - make install

5 - Provare ad elencare alcuni vantaggi e svantaggi dell'uso di RPM e di tar.gz

Definizioni

 

Ogni comando che si lancia, ogni servizio attivo sul sistema da origine a uno o più processi.
Ogni processo ha un proprio PID (process ID) che lo identifica. Ogni processo, tranne init, è generato da un'altro processo di cui si definisce il PPID (Parent PID). Si parla quindi di processo padre (parent) e processo figlio (child).
Un processo consta di: il codice eseguibile, la posizione di esecuzione, i dati che gestisce, i file aperti, l'ambiente di esecuzione, le credenziali.
Quando lo stesso programma è eseguito più volte nel sistema, anche da parte di utenti diversi, alcune parti dello stesso possono essere condivise (shared) in memoria: il codice in esecuzione e le eventuali librerie di sistema caricate, altre parti come i dati, i file aperti, il PID.
Lo stato di un processo può essere:
R - running, il processo è in esecuzione;
S - sleeping, il processo è in attesa (input dell'utente, conclusione di altri processi ecc..)
Z - zombie, il processo è morto ed aspetta che il parent chieda un codice d'uscita.
Ad ogni processo è associata una priorità, un valore che varia fra -20 e 19, che determina quanta CPU time rispetto agli altri il sistema gli deve dedicare.
Un processo può generare una copia di se stesso (fork), cha ha PID diverso e PPID uguale al proprio PID.

Comandi di visualizzazione e analisi dei processi e delle risorse

 

ps [opzioni]

Comando per visualizzare i processi presenti sul sistema e alcune proprietà come il PID, lo stato, la memoria occupata, il CPU time attivato ecc.

pstree

Visualizza i processi del sistema con una struttura ad albero, evidenziando parent e child.

top [opzioni]

Ulteriore comando per determinare i principali processi e quante risorse del sistema occupano. Utile per avere una visione in costante aggiornamento dello stato del sistema.

vmstat [intervallo]

Comando per generare dei piccoli rapporti sull'occupazione delle risorse del sistema; è inoltre possibile specificare il tempo di intervallo fra i vari rapporti e il numero massimo degli stessi

 

 

 

ps -ax

 

Forma più utilizzata del comando ps nel mondo linux, poichè mostra tutti i processi a cui è stato assegnato un ID

vmstat 5 10

 

Vmstat genererà dei rapporti sull'occupazione delle risorse del sistema, ogni cinque secondi per un massimo di dieci volte

 

Quando si lancia il comando top, si ha la possibilità di modificare i parametri di visualizzazione dei processi e l'ordine con cui elencarli.
A top running premere:
N - Ordina secondo PID
A - Ordina secondo età (per prima i più recenti)
P - Ordina secondo utilizzo CPU
M - Ordina secondo memeoria utilizzata
La versione GNU di ps supporta diverse opzioni compatibili con diversi dialetti Unix.
Se alle opzioni si precede il segno meno ( - ) ps accetta opzioni Unix98.
Se si precedono DUE segni meno ( -- ) ps accetta opzioni GNU.
Se non si precede nessun segno meno, ps accetta opzioni BSD.

Segnali

 

Per gestire un processo è possibile inviargli diversi segnali con diverse funzioni.
Il segnale più comune è il SIGKILL (9) che chiude brutalmente un processo (può essere necessario quando il processo è bloccato), una alternativa più soft è SIGTERM (15). Un segnale comunemente usato quando si deve far fare una log rotation o ricaricare i file di configurazione di un server è SIGHUP (1).
Alcuni segnali (es: SIGUSR) possono essere customizzati dagli sviluppatori ed usati per dare particolari direttive ad un programma in esecuzione (per esempio aumentare il livello di debugging).

Comandi di gestione dei processi

 

kill -[signal] pid

Principalmente utilizzato per "uccidere" o meglio terminare (SIGKILL) un processo, ma può essere utilizzato per mandare qualsiasi segnale.

killall [opzioni] nome

Termina (di default) o invia il segnale specificato tutti i processi con il nome indicato.

CTRL + z
bg <process number>
fg <process number>
jobs

La combinazione di tasti CTRL+z interrompe momentaneamente il processo in esecuzione (dalla shell corrent). Per ripristinarlo si devono usare i comandi bg e fg. Il primo fa eseguire il comando in background ed il secondo fa eseguire il comando in foreground.
La shell assegna un ID ad ogni job corrente (processo aperto dall'utente) e prevede diversi comandi (fg, bg, jobs, stop...) per gestirli.

nohup <command>

Si può utilizzare prima di qualsiasi per evitare che il processo determinato dal comando non cada al segnale SIGHUP. E' utile quando si lavora su macchine remote e si devono eseguire comandi che possono durare a lungo. Evita l'interruzione del processo quando per problemi di rete o normale operatività ci si sconnette dalla sessione remota (via telnet o ssh). Lo standard error e tutti gli output che verrebbero stampati a schermo vengono scritti sul file nohup.out

nice <priority> <command>

E' un prefisso utilizzato per assegnare un certo livello di priorità al comando che si sta per eseguire. -20 vuol dire massima priorità, 19 è minima priorità.

 

 

 

kill -l

 

Visualizza l'elenco dei segnali che si possono mandare ad un processo

Kill -9 213

 

Forza l'eliminazione del processo con PID 213
(eliminazione senza scampo!!)

 

Con il comando Kill -l visualizza l'elenco dei segnali che potete mandare ad un processo. Ogni segnale è identificato anche da un numero univoco che può essere utilizzato al posto del nome del segnale da mandare al processo. Es
kill -9 213 = kill -SIGKILL 213
E' possibile far eseguire un comando direttamente in background aggiungendo alla linea di comando il carattere & Es: analog /var/log/httpd/access_log &
E' possibile utilizzare la stessa linea di comando per eseguire più comandi, suddividendo i vari comandi dalla virgola. Es ./configure; make; make install

 

 

 

L'opera di debugging di un processo non è generalmente argomento da corso di amministrazione base, anche perchè spesso riguardano problemi sul lato applicativo che vanno affrontati direttamente dallo sviluppatore.
In ogni caso, nella vita di ogni sysadm capita sistematicamente che dei servizi non partano o dei programmi non facciano quello che dovrebbero fare (non inchiodarsi, innanzitutto), oppure, più subdolamente, hanno comportamenti erratici o problemi di prestazioni o di sopportazione di alti carichi.
Alcuni strumenti sono comunemente a disposizione del sistemista per diagnosticare simili problemi:


logs

I log sono sempre la prima cosa da guardare. Eventualmente analizzare syslog.conf o le istruzioni e le configurazioni del singolo programma per capire dove vengono loggati i suoi messaggi.

debugging

Quasi sempre è possibile lanciare un programma con diversi livelli di debug, aumentando la verbosità del debug (di solito registrato sul file di log) si aumenta la possibilità di capire cosa non funziona.

strace comando

Strace traccia le chiamate di sistema e i segnali del programma specificato mentre lo esegue. Ovviamente va utilizzato solo per fini diagnostici, rallentando particolarmente la velocità di esecuzione. Spesso non è nemmeno necessario capire l'output di strace, basta cercare righe dove si parla di errori e vengono indicati path o funzioni specifiche.
Spesso un programma non funziona perchè non trova certi file (librerie ecc) o non ha i permessi adeguati sugli stessi.

ldd comando

Stampa l'elenco delle librerie condivise utilizzate dal comando specificato

lsof [opzioni]

Elenca gli open file del sistema. Un open file può essere: un normale file, una directory, un file speciale a blocchi o caratteri, una librerira, una socket Internet, una socket Unix domain...
E' utile per vedere le risorse utilizzate da un programma.

lsof | grep sshd

 

Visualizza i file aperti da sshd. Notare che visualizza anche la porta su cui è in LISTENING.

strace -o debug.txt ssh

 

Scrive su debug.txt l'output del tracing di ssh.
Molto utile perchè permette di interagire con lo STOUT del processo senza essere sommersi dai debug di strace.

strace -p 657

 

Fa uno strace in tempo reale del processo che sta girando con il PID 657.

 

 

 

Linux

Solaris

FreeBSD

SGI

HP-UX

strace

truss

ktrace

par

tusc

 

PRATICA

 

Sulla base delle informazioni ottenute fin'ora si è in grado di analizzare cosa succede sul proprio host:


Con i comandi del caso analizzare il proprio sistema. Per ogni processo presente cercare di capire:
- Cosa serve, cosa fa (aiutarsi con man, reference varie e docente);
- Quante risorse utilizza (memoria, cpu);
- Quali librerie condivise utilizza;
- Come si relaziona con gli altri processi (PID e PPID);
Approfittare per verificare e interpretare l'output di ps, vmstat, top e il contenuto del proc filesystem stesso (in particolare le directory relative ai vari PID).

Provare, con la cautela del caso, a Killare un processo sacrificabile (per esempio, una bash aperta su un'altra tty) e verificarne il risultato.
Provare a killare processi come root (può killare tutto) o come utente normale (può killare solo i processi che ha lanciato).

 

VERIFICA

Domande sul modulo 10

A questo punto del corso il partecipante dovrebbe essere in grado di rispondere alle seguenti domande:


1 - Cosa sono PID e PPID?
Il pid è un numero identificativo unico per ogni processo. Viene assegnato dal sistema automaticamente ogni volta che si lancia un comando. Init ha PID 1. Il PPID è l'ID del processo padre.

2 - Cosa sono i segnali? Elencare alcuni segnali comuni.
I segnali sono mezzi con cui si può comunicare con un processo. Esempi di segnali sono SIGKILL (uccide il processo), SIGTERM (termina il processo in modo non brutale), SIGHUP (forza il processo a chiudere e riaprire i file aperti).

3 - Elencare alcuni comandi utili per il debugging di processi
ldd, strace, lsof

4 - Che comando posso utilizzare per visualizzare le librerie di sistema utilizzate da un comando?
ldd (ma anche lsof)

Lo Zen e l'arte dell'automazione del sistema

Unix è un sistema operativo nato nei primi anni 70, grazie all'opera di due monumenti dell'informatica quali Ken Thompson, Dennis Ritchie (l'inventore del C, per intenderci) e vari altri.
Uno dei motivi che rende Unix un sistema operativo attuale e perfettamente adattabile a sistemi che ai tempi non si concepivano neppure è la usa filosofia di base: KISS (Keep It Simple, Stupid).
E' il principio dei tanti piccoli mattoni, ognuno necessario per fare bene un compito specifico, messi insieme per fare compiti più complessi. Questo approccio facilita il troubleshooting, riduce i tempi di sviluppo, non dovendo "reinventare la ruota" ogni volta, e, evidentemente, permette una scalabilità e una adattabilità ineguagliate.
La shell è un interprete di comandi che funge sia da layer fra il kernel del sistema operativo e l'utente sia come linguaggio di programmazzione avanzato.
Un programma in shell è chiamato script e presenta un metodo facile e veloce per automatizzare operazioni ripetitive.
Conoscere lo shell scripting language e saperlo applicare per risolvere problemi di ordinaria e straordinaria amministrazione è una delle funzioni basilari del system administrator.
Saper scrivere uno script shell non è complicato, poichè la sintassi è semplice e la filosofia su cui bisogna basarsi nella realizzazione è la stessa dalla quale nasce unix: spezzare un progetto laborioso in tanti e semplici task.
Un bravo e produttivo sistemista Unix, quindi, è colui in grado di mettere insieme i mattoni che gli servono, creando script di "collante" che inglobano altri script con funzioni specifiche, magari pure scritti in linguaggi diversi.
E' colui che è pienamente consapevole che la macchina è al suo servizio e non viceversa, che ne può vedere e cambiare gli elementi con un semplice vi, che riesce a non ripetere due volte la stessa operazione, perchè la prima volta che l'ha fatto ha già creato uno script che lo fa per lui.
L'arte dell'automazione dei processi è strettamente legata alla conoscenza dalla bash (o della shell che si utilizza) e delle sue capacità di scripting.
I principi di massima per impratichirsi sono semplici:
- Avere obiettivi chiari, facendosi un percorso logico dei processi da effettuare;
- Guardare gli script esistenti scritti da altri, notare come vengono affrontati i problemi, come si usano le variabili e i cicli logici;
- Impratichirsi costantemente;
- Approfondire lo studio delle opzioni dei programmi che servono. Spesso risolvono molti problemi e aprono nuove prospettive sui risultati che si possono raggiungere.
Una distribuzione Linux è di fatto un insieme di script e comandi (e il kernel, ovviamente), ed è un'ottima fonte di apprendimento di tecniche di scripting e automazione.

Esempio script shell

Ecco un esempio di semplice script shell per la compilazione di Openssh in una RedHat linux.

 

# script shell per compilazione di openssh [12-06-2001]

Il simbolo # identifica un commento.
E' preferibile intitolare con poche parole lo script per rendere più facilmente intuibile la funzione di tale script. Inoltre specificare la data di creazione potrebbe evitare problemi di aggiornamenti dello script stesso

 

#!/bin/sh

Invocazione dell'interprete dello script in questo caso è sh

 

OPT_CONFIGURE="--prefix=/usr --sysconfdir=/etc/ssh --with-openssl --with-pam --with-md5-passwords --with-tcp-wrappers"
EXTRA_VERSION=backup
ALLOW_IP="10.0.0.0/255.255.255.0"

Assegnazione di valori ripetitivi a delle variabili, per avere semplificazioni sia in fase di stesura sia in fase di upgrade o modifica di parametri.
In questo caso si assegna a OPT_CONFIGURE le opzioni del comando configure, EXTRAVERSION sarà un ulteriore estensione della directory di backup dei file di configurazione ed in ALLOW_IP si definiscono gli ip da cui si potrà accedere via ssh

 

function COMPILE ()
{
echo "BACKUP OLD CONFIGURATION"
cp -Rf /etc/ssh /etc/ssh.$EXTRA_VERSION
echo " Clean Directory..."
make clean
echo " START WITH GCC..."
./configure $OPT_CONFIGURE
make
make install
}

Inizializzazione della prima funzione di questo script. In questo caso particolare la funzione si chiama COMPILE e contiene tutti i comandi per poter compilare i sorgenti e backuppare i file di configurazione.

 

function COPY ()
{
echo "COPY INIT SCRIPT..."
cp contrib/redhat/sshd.init /etc/rc.d/init.d/sshd
echo "COPY PAM FILE..."
cp contrib/redhat/sshd.pam /etc/pam.d/sshd
}

Inizializzazione della funzione COPY, creata per eseguire la copia di file necessari per il corretto funzionamento di Openssh.

 

function IP ()
{
echo "OPEN PORT TO $ALLOW_IP"
echo "sshd: $ALLOW_IP" >> /etc/hosts.allow
echo CLOSE PORT 22 AT UNKNOW HOST
echo "sshd: ALL" >> /etc/hosts.deny
}

Inizializzazione della funzione IP, creata per aggiungere la corretta configurazione per abilitare i tcpwrappers

 

echo "--------------------------------------------------"
echo " !!! WARNING !!! RUN THIS SCRIPT IN SRC DIR "
echo "--------------------------------------------------"
echo ""
echo " DO YOU WANT RUN SSHD BY...?"
echo ""
echo " - INETD -----> INETD "
echo " - X -----> XINETD "
echo " - DAEMON ---> ...AS DAEMON "
echo " - UP -------> UPDATE OPENSSH "
read a

Visualizza a video un menu all'avvio dello script per rendere interattiva la scelta delle varie possibilità offerte dallo script.
Da evidenziare l'ultima riga: read a
Questa linea ci permette di redirezionare lo STDIN nella variabile a, in questo caso il valore verrà assegnato dall'utente.

 

case "$a" in

Il comando case ci permette di assegnare specifici comandi a seconda del valore che assume la variabile a

 

inetd | INETD )
COMPILE
cp -f /etc/inetd.conf /etc/inetd.conf.orig
echo "ADD SERVICE TO INETD..."
echo " ssh stream tcp nowait root /usr/sbin/tcpd /usr/sbin/sshd -i" >> /etc/inetd.conf
IP
COPY ;;

Se il valore di a è inetd o INETD esegue i comandi e le chiamate alle funzioni richimate fino al doppio punto e virgola ;;
Nel seguente caso viene richiamata la funzione COMPILE e si esegue una copia di backup del file di configurazione di inet.
Dopo di che si aggiunge la riga di configurazione per inet e vengono richiamate le funzioni IP e COPY

 

x | X )
COMPILE
touch /etc/xinetd.d/ssh
echo " # describe : OPENSSH DAEMON" >>/etc/xinetd.d/ssh
echo "service ssh" >>/etc/xinetd.d/ssh
echo " "
echo " {" >>/etc/xinetd.d/ssh
echo " socket_type = stream" >>/etc/xinetd.d/ssh
echo " protocol = tcp" >>/etc/xinetd.d/ssh
echo " instances = 10" >>/etc/xinetd.d/ssh
echo " nice = 10" >>/etc/xinetd.d/ssh
echo " wait = no" >>/etc/xinetd.d/ssh
echo " user = root" >>/etc/xinetd.d/ssh
echo " server = /usr/sbin/sshd" >>/etc/xinetd.d/ssh
echo " server_args = -i" >>/etc/xinetd.d/ssh
echo " "
echo " }" >>/etc/xinetd.d/ssh
IP
COPY ;;

Nel caso in cui a assuma il valoredi a è pari a x o X si esegue la compilazione dei sorgenti, si crea il file di configurazione per permettere ad xinetd di gestire il demone ssh e di seguito vengono richiamate le funzioni IP e COPY

 

daemon | DAEMON )
COMPILE
COPY ;;

Nel caso in cui il valore di a è pari a daemon o DAEMON si eseguono solo le funzioni di COMPILE E COPY

 

up | UP )
COMPILE
esac

Nel caso in cui il valore di a è pari a up o UP si esegue la funzione COMPILE.
Da sottolineare la presenza di esac che chiude il ciclo di case

definizioni

 

In quasi tutti i sistemi operativi è possibile schedulare o meglio programmare ad un certo orario l'avvio di un comando o programma senza essere collegati in qualche modo al sistema.
Gli strumenti disponibili su Unix e Linux sono:


at

Permette di eseguire un comando una volta sola, eventualmente quando il sistema non è occupato o in un momento definibile dall'utente. Non verrà trattato in questa sede.

cron

E' un daemon che viene utilizzato dal sistema per eseguire compiti configurabili dall'utente ad intervalli regolari.

 

Cron e crontab

 

Il demone crond viene eseguito all'avvio del sistema ( /etc/rc.d/init.d/crond ) e, ogni minuto, analizza il suo file di configurazione predefinito /etc/crontab per verificare se deve eseguire dei comandi.
Su varie distribuzioni /etc/crontab prevede le seguenti voci:
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
Che in pratica fanno eseguire:
- tutte le ore (al minuto 01) i comandi presenti nella directory /etc/cron.hourly,
- tutti i giorni alle 4.02 i comandi in /etc/cron.daily,
- tutte le settimane, alle 4.22 di domenica i comandi in /etc/cron.weekly,
- tutti i mesi, alle 4.42 del primo del mese, tutti i comandi in /etc/cron.monthly
Ogni riga di /etc/crontab prevede quindi sette campi.
I primi 5 campi servono per definire quando eseguire il comando specificato nel settimo campo. Possono contenere valori separati da virgola o un asterisco che indica tutti i calori possibili:
1) Minuto in cui eseguire il comando. Valori da 00 a 59.
2) Ora in cui eseguire il comando. Valori da 0 a 23 (0 è mezzanotte, 12 mezzogiorno)
3) Giorno del mese in cui eseguire il comando. Valori da 1 a 31.
4) Mese dell'anno in cui eseguire il comando. Valori da 1 a 12.
5) Giorno della settimana in cui eseguire il comando. Valori da 0 a 6. (0 corrisponde alla Domenica, 1 al Lunedì.. )
6) Utente con cui viene eseguito il comando. Crond viene eseguito come root e può impersonificare qualsiasi utente. Questo campo può anche essere omesso (root di default).
7) Riga di comando da eseguire (con eventuali opzioni, argomenti ecc.)
Il comando run-parts, nel caso di cui sopra, esegue tutti i comandi presenti nella directory indicata.
Oltre a /etc/crontab, riservato al sistema, ogni utente può editare un proprio crontab file con la stessa struttura di /etc/crontab.
In BOFH! i dettagli.

 

crontab -e

 

Edita il proprio file crontab (con l'editor predefinito)

crontab -l

 

Visualizza il proprio file crontab

crontab -r

 

Rimuove il proprio file crontab

cat /var/spool/cron/*

 

Visualizza tutti i file crontab degli utenti (si deve essere root)

Linux

*nix

Win-DOS

cron

cron

Operazioni pianificate

at

at

at

 

Se voglio lanciare lo script /root/controlla_post.sh ogni mezz'ora in orari lavorativi (dalle 8 alle 18.30), sabato e domenica esclusi, dovrò inserire in /etc/crontab una riga simile:
01,31 8,9,10,11,12,13,14,15,16,17,18 * * 1,2,3,4,5 root /root/controlla_posta.sh
Una versione più compatta della stessa riga è:
01,31 8-18/1 * * 1-5/1 root /root/controlla_posta.sh
Le modifiche fatte al file /etc/crontab non richiedono il riavvio del daemon crond.
Su Linux si trova comunemente anacron, che ha funzionalità simili a cron ma alcune features aggiuntive, utili per macchine che non sempre sono accese, tali per cui è in grado di eseguire task schedulati nel passato e non eseguiti appena la macchina è in grado di farlo (è accesa).
Anacron è complementare a crond in quanto non ha la stessa precisione nella gestione dello scheduling, per cui non ha molto senso utilizzarlo su server accesi 24 ore su 24.

A titolo di reference elenchiamo vari comandi generalmente presenti in tutte le distribuzioni Linux.
Alcuni sono stati già trattati, per tutti vale la regola aurea RTFM (Read The Fucking Manual).
Quella che segue può essere vista come una reference da approfondire con un pratico man.
Fonte: Linux Guida di riferimento - Apogeo Openpress - ISBN 88-7303-826-3



Comunicazione

ftp

File Transfer Protocol.

login

Accesso.

rlogin

Accesso a un sistema remoto.

rsh

Esegue una shell o un singolo comando su un sistema remoto.

talk

Permette di scambiare messaggi in maniera interattiva con altri terminali.

telnet

Connette ad un altro sistema.

tftp

Trivial File Transfer Protocol.

uudecode

Decodifica i file preparati con uuencode per l'invio per posta elettronica.

uuencode

Codifica i file contenenti caratteri binari per l'invio per posta elettronica.

vacation

Risponde automaticamente ai messaggi di posta elettronica.


Confronto file

cmp

Confronta due file, byte per byte.

comm

Confronta gli elementi di due file ordinati.

diff

Confronta sue file, linea per linea.

diff3

Confronta tre file.


Gestione file

cat

Concatena i file o li visualizza.

chfn

Cambia le informazioni utente per finger, posta elettronica, ecc.

cksum

Calcola la checksum.

chmod

Modifica le modalità di accesso ai file.

chsh

Cambia la shell di login.

cp

Copia file.

csplit

Spezza i file in posizioni specifiche.

dd

Effettua la copia file da e verso dischi in formato raw.

file

Determina il tipo di un file.

head

Mostra le prime linee di un file.

less

Visualizza i file una schermata alla volta.

ln

Crea degli alias per i nomi dei file.

ls

Elenca file o directory.

merge

Unisce le modifiche di diversi file.

mkdir

Crea una directory.

more

Visualizza i file una schermata alla volta.

mv

Sposta o rinomina file o directory.

newgrp

Cambia il gruppo corrente.

pwd

Visualizza la directory corrente.

rcp

Copia file su un sistema remoto.

rm

Elimina file.

rmdir

Elimina directory.

tail

Mostra le ultime linee di un file.

split

Suddivide i file in modo uniforme.

wc

Conta righe, parole e caratteri.


Stampa

lpq

Mostra lo stato dei lavori di stampa.

lpr

Invia alla stampante.

lprm

Elimina un lavoro di stampa.

lpstat

Ottiene lo stato della stampante.

pr

Formatta e impagina per la stampa.


Programmazione

ar

Crea aggiorna i file di libreria.

as

Genera il file oggetto.

bison

Genera tabelle di parsing.

cpp

Effettua il preprocessing del codice C.

flex

Analizzatore lessicale.

g++

Compilatore C++ GNU.

gcc

Compilatore C GNU.

ld

Editor di link (link editor).

m4

Elaboratore di macro.

make

Crea programmi.

ranlib

Rigenera la tabella dei simboli dell'archivio.

rpcgen

Traduce il codice RPC in codice C.

yacc

Genera tabelle di parsing.


Manutenzione dei Programmi

cvs

Gestisce diverse versioni (revisioni) di file sorgente.

etags

Genera liste di simboli da utilizzare con l'editor Emacs.

gctags

Genera liste di simboli da utilizzare con vi.

gdb

Debugger GNU.

gprof

Visualizza dati di profiling di file oggetto.

imake

Genera makefile da utilizzare con make.

make

Serve per la manutenzione, l'aggiornamento e la rigenerazione di programmi e file correlati.

nm

Visualizza la tabella dei simboli di file oggetto.

patch

Applica patch al codice sorgente.

rcs

Gestisce diverse versioni (revisioni) di file sorgente.

size

Stampa le dimensioni di un file oggetto in byte.

strace

Traccia le chiamate e i segnali del sistema.

strip

Elimina simboli di un file oggetto.


Ricerca

apropos

Cerca argomenti nelle pagine di manuale.

egrep

Versione estesa di grep.

fgrep

Cerca stringhe di testo letterali nei file.

find

Cerca nomi di file nel sistema.

grep

Cerca pattern di testo nei file.

strings

Cerca pattern di testo nei file binari.

whereis

Comando di ricerca.


Programmazione shell

echo

Riproduce nell'output gli argomenti indicati sulla linea di comando.

expr

Esegue operazioni aritmetiche e confronti.

printf

Formatta e stampa gli argomenti sulla linea di comando.

sleep

Fa una pausa durante l'elaborazione.

test

Verifica una condizione.


Memorizzazione

bzip2

Comprime i file per liberare spazio.

cpio

Crea e scompatta gli archivi di file.

gunzip

Espande i file compressi (.gz e.Z).

gzip

Comprime i file per liberare spazio.

shar

Crea un archivio di shell.

tar

Copia file su o ripristina file da un supporto di archiviazione.

zcat

Visualizza il contenuto di file compressi.


Stato del sistema

at

Esegue comandi in un secondo momento.

atq

Mostra i lavori messi in coda da at.

atrm

Rimuove i lavori messi in coda da at.

chgrp

Cambia il gruppo di un file.

chown

Cambia il proprietario di un file.

crontab

Automatizza i comandi.

date

Visualizza o imposta la data.

df

Mostra lo spazio libero su disco.

du

Mostra l'uso del disco.

env

Mostra le variabili d'ambiente.

finger

Visualizza informazioni sugli utenti.

kill

Termina un comando in esecuzione.

printenv

Mostra le variabili d'ambiente.

ps

Mostra i processi.

stty

Imposta o visualizza le impostazioni di terminale.

who

Mostra chi è connesso.


Elaborazione di testo

col

Elabora i caratteri di controllo.

cut

Seleziona le colonne da visualizzare.

ex

Un editor di linee che sta sotto vi.

expand

Converte i tab in spazi.

fmt

Produce linee di lunghezza più o meno uniforme.

fold

Interrompe le righe.

gawk

Elabora liee o record uno alla volta.

ghostscript

Visualizza file PostScript o PDF.

groff

Formatta l'input di troff.

ispell

Controlla l'ortografia interattivamente.

join

Unisce diverse colonne in un database.

paste

Unisce colonne o ne scambia l'ordine.

rev

Visualizza le linee in ordine diverso.

sed

Editor di testo non interattivo.

sort

Ordina o unisce file.

tac

Visualizza le linee in ordine inverso.

tr

Traduce (ridefinisce) caratteri)

uniq

Trova le linee ripetute o quelle uniche in un file.

xargs

Elabora molti argomenti in porzioni maneggevoli.

vi

Editor di testo visuale.


Comandi vari

banner

Crea dei poster a partire da parole.

bc

Calcolatrice di precisione arbitraria.

cal

Visualizza il calendario.

clear

Pulisce lo schermo.

man

Fornisce informazioni su un comando.

nice

Riduce la priorità di un lavoro.

nohup

Mantiene in esecuzione un lavoro dopo la disconnessione.

passwd

Imposta la password di login.

script

Produce una trascrizione della sessione di login.

su

Permette di diventare superutente.

tee

Memorizza l'output in un file e contemporaneamente lo invia allo schermo

which

Visualizza il percorso comando.


Gestione dell'orologio di sistema

hwclock

Gestisce l'orologio hardware.

netdate

Imposta l'orologio sincronizzandolo con quello dell'host.

rdate

Gestisce il server di data/ora.

zdump

Stampa l'elenco dei fusi orari.

zic

Crea i file di informazioni per la conversione di informazioni di tipo data/ora.


Daemon

apmd

Daemon di Advanced Power Management.

bootpd

Daemon Internet Boot Protocol.

fingerd

Daemon Finger.

ftpd

Daemon File Transfer Protocol.

gated

Gestisce le tabelle di routing tra reti differenti.

identd

Identifica l'utente che sta eseguendo un processo TCP/IP.

imapd

Daemon del server di posta elettronica IMAP.

inetd

Daemon per i servizi Internet.

kerneld

Fornisce servizi di caricamento automatico di moduli del kernel.

klogd

Gestisce syslogd.

lpd

Daemon per la stampante.

mountd

Server per le richieste di mount su NFS.

named

Server per i nomi di dominio Internet.

nfsd

Daemon NFS.

pop2d

Server POP.

pop3d

Server POP.

powerd

Monitorizza una connessione UPS.

pppd

Gestisce le connessioni di rete con protocollo punto-punto (Point to Point Protocol, in breve PPP).

rdistd

Server per la distribuzione remota di programmi.

rexecd

Server per l'esecuzione remota di programmi.

rlogind

Server rlogin.

routed

Daemon di routing.

rshd

Server di shell remota.

rwhod

Server remoto per who (rwho).

syslogd

Daemon per il logging del sistema.

talkd

Daemon di talk.

tcpd

Daemon per la rete TCP.

tftpd

Daemon Trivial File Transfer Protocol.

update

Daemon per il flush dei buffer.

ypbind

Processo NIS binder.

yppasswdd

Server per la modifica di password NIS.

ypserv

Server dei processi NIS.


Hardware

agetty

Avvia la sessione utente al terminale.

arp

Gestisce la cache ARP.

cardctl

Controlla le schede PCMCIA.

cardmgr

Daemon del gestore di schede PCMCIA.

cfdisk

Gestisce le partizioni del disco (interfaccia grafica).

fdisk

Gestisce le partizioni del disco.

getty

Avvia la sessione utente al terminale.

kbdrate

Gestisce la frequenza di ripetizione della tastiera.

ramsize

Stampa informazioni riguardanti un disco RAM.

setserial

Imposta informazioni per la porta seriale.

slattach

Utilizza linee seriali come interfacce di rete.


Informazioni sull'host

arch

Stampa l'architettura della macchina.

dnsdomainname

Stampa il nome di dominio DNS.

domainname

Stampa il nome di dominio NIS.

free

Stampa l'uso della memoria.

host

Stampa informazioni sull'host e sul fuso orario.

hostname

Stampa o imposta il nome dell'host.

nslookup

Interroga i server di dominio di Internet.

uname

Stampa informazioni sull'host.


Installazione

cpio

Copia file di archivio.

install

Copia file in particolari locazioni offrendo l'accesso agli utenti ed imposta le autorizzazioni.

rdist

Distribuisce file su sistemi remoti.

tar

Copia file su o ripristina file da un supporto di archiviazione.


Posta elettronica

fetchmail

Legge posta elettronica da server remoti.

formail

Converte l'input in un formato compatibile con la posta elettronica.

mailq

Stampa un riepilogo della coda di posta.

makemap

Aggiorna le mappe del database per sendmail.

rmail

Gestisce posta elettronica uucp.

sendmail

Invia e riceve posta elettronica.


Gesione dei filesystem

debugfs

Permette il debug di filesystem extfs

dosfsck

Verifica e corregge problemi su filesystem DOS or VFAT.

dumpe2fs

Stampa informazioni riguardanti il superblock e i gruppi di blocchi.

e2fsck

Verifica e corregge problemi su filesystem di tipo Second Extended Filesystem.

fdformat

Formatta il floppy disk.

fsck

Verifica e corregge problemi su filesystem.

fsck.minix

Verifica e corregge problemi su filesystem MINIX.

fuser

Elenca i processi che utilizzano un determinato filesystem.

mke2fs

Crea un nuovo filesystem di tipo Second Extended Filesystem.

mkfs

Crea un nuovo filesystem.

mkfs.ext2

Altro nome per mke2fs.

mkfs.minix

Crea un nuovo filesystem MINIX.

mklost+found

Crea una directory lost+found.

mkraid

Imposta un dispositivo RAID.

mkswap

Permette di definire lo spazio di swap.

mount

Monta un filesystem.

raidstart

Attiva un dispositivo RAID.

raidstop

Disattiva un dispositivo RAID.

rdev

Descrive o modifica impostazioni per il filesystem root.

rootflags

Elenca o imposta i flag utilizzati per montare il filesystem root.

showmount

Elenca le directory esportate.

swapdev

Visualizza o imposta i flag utilizzati per montare il filesystem root.

swapoff

Smette di utilizzare un dispositivo per lo swapping.

swapon

Inizia ad utilizzare un dispositivo per lo swapping.

sync

Scrive i buffer di un filesystem sul disco.

tune2fs

Gestisce filesystem di tipo Second Extended Filesystem.

umount

smonta un filesystem.


Gestione del Kernel

depmod

Crea un elenco di dipendenze del modulo

insmod

Installa un nuovo modulo del kernel

lsmod

Elenca i moduli del kernel

modprobe

Carica un nuovo modulo assieme ai relativi moduli dipendendi

rmmod

Rimuove un modulo


Gestione della Rete

dip

Stabilisce connessioni IPdi tipo dial-up

gdc

Amministra il daemon di routing gated

ifconfig

Gestisce le interfacce di rete

ipchains

Amministra i servizi di firewall (kernel 2.2.x)

iptables

Amministra i servizi di firewall (kernel 2.4.x)

named

Traduce i nomi di dominio in IP e viceversa

netstat

Visualizza lo stato di rete

portmap

Effettua il mapping dei daemon sulle porte

rarp

Gestisce la tabella di RARP

route

Gestisce la tabella di routing

routed

Mantiene aggiornate in modo dinamico le tabelle di routing

rpcinfo

Fornisce informazioni su RPC

ruptime

Mostra da quanto tempo un sistema remoto è attivo

rwho

Mostra chi è connesso a un sistema remoto

systat

Mostra lo stato dei sistemi remoti

traceroute

Traccia un percorso (route) di rete verso un host remoto


Amministrazione del NIS

domainname

Imposta o visualizza il nome del dominio NIS corrente

makedbm

Rigenera Database NIS

ypbind

Si connette ad un server NIS

ypcat

Stampa i valori contenuti in un database NIS

ypchfn

Cambia le informazioni utente contenute in un database NIS per finger, posta elettronica ecc.

ypchsh

Modifica la shell di login di un utente in un database NIS

ypinit

Crea un nuovo database NIS

ypmatch

Stampa il valore di una o più chiavi NIS

yppasswd

Modifica la password di un utente in un database NIS

yppasswdd

Aggiorna un database NIS dopo l'esecuzione del comando yppasswd

yppoll

Determina la versione di un mapping NIS di un server NIS

yppush

Distribuisce un mapping NIS

ypserv

Daemon del server NIS

ypset

Punta ypbind a un server specifico

ypwhich

Visualizza il nome di un server NIS o di un map master

ypxfr

Trasferisce un database NIS da un server all'host locale


Stampa

lpc

Controlla la stampante di linea

tunelp

Permette di calibrare i parametri della stampante


Sicurezza e Integrazione dei sistemi

chroot

Modifica la directory di root

badblocks

Ricerca blocchi difettosi


Avvio e Arresto del sistema

bootpd

Daemon Internet Boot Protocol

bootpgw

Gateway Internet Boot Protocol

bootptest

Verifica il funzionamento di bootpd

halt

Arresta il sistema

init

Cambia il runlevel

reboot

Arresta il sistema e poi lo riavvia

runlevel

Stampa il runlevel del sistema

shutdown

Arresta il sistema in modo sicuro

telinit

Modifica il runlevel corrente

uptime

Visualizza il tempo di funzionamento (uptime) delle macchine locali


Attività del sistema e gestione dei processi

fuser

Identifica i processi che stanno utilizzando un file o un filesystem

psupdate

Aggiorna /boot/psupdate

renice

Modifica la priorità dei processi in esecuzione

top

Mostra i processi

Utenti

chpasswd

Modifica più password

groupadd

Aggiunge un nuovo gruppo

groupdel

Elimina un gruppo

groupmod

Modifica gruppi

grpck

Verifica l'integrità del file system relativi ai gruppi

grpconv

Converte un file di gruppo in un file di gruppo shadow

lastlog

Genera un rapporto con l'ora dell'ultimo accesso dell'utente

newusers

Aggiunge un nuovo utente con un procedura batch

pwck

Verifica l'integrità dei file di sistema relativi alle password

pwconv

Converte un file di password in password shadow

rusers

Stampa informazioni relative ai computer remoti nello stile di who

rwall

Invia un messaggio agli utenti remoti

useradd

Aggiunge un nuovo utente

userdel

Elimina un utente e la sua home directory

uermod

Modifica le informazioni dell'utente

w

Elenca gli utenti connessi

wall

Scrive a tutti gli utenti

whoami

Mostra le modalità di collegamento dell'utente che immette il comando


Comandi Vari

cron

Pianifica comandi permettendo di avviarne l'esecuzione in date e ore stabilite

dmesg

Stampa messaggi di avvio una volta che il sistema è avviato

ldconfig

Aggiorna i collegamenti alle librerie ed effettua il caching

logger

Invia messaggi al logger di sistema

logrotate

Comprime i log di sistema e ne gestice la rotazione

rstat

Visualizza lo stato del sistema dell'host

run-parts

Esegue tutti gli script contenuti in una directory


Comandi di amministrazione TCP/IP

ftpd

Server per il trasferimento di file

gated

Gestisce le tabelle di routing tra reti differenti

host

Stampa informazionisull'host e sul fuso orario

ifconfig

Configura i parametri per le interfacce di rete

named

Traduce i nomi di dominio in indirizzi ip e viceversa

netstat

Visualizza lo stato di rete

nslookup

Interroga i server di nomi di dominio

ping

Verifica se un host remoto è raggiungibile via rete

pppd

Crea connessioni seriali PPP

rdate

Invia una notifica al server di data/ora che la data è cambiata

route

Gestisce le tabelle di routing

routed

Mantiene aggiornate in maniera dinamica le tebelle di routing

slattach

Utilizza linee seriali come interfacce di rete

telnetd

Server per sessioni Telnet da host remoti

tftpd

Server per un insieme ristretto di trasferimenti di file


Comandi di amministrazione per NFS e NIS

domainname

Imposta o visualizza il nome del dominio NIS corrente

makedbm

Rigenera il database NIS

portmap

Mapper di porte DARPA verso numeri di programmi RPC

rpcinfo

Fornisce di informazioni su RPC

ypbind

Si connette ad un server NIS

ypcat

Stampa i valori contenuti in un database NIS

ypchfn

Cambia le informazioni utente contenute in un database NIS per finger, posta elettronica ecc.

ypchsh

Modifica la shell di login di un utente in un database NIS

ypinit

Crea un nuovo database NIS

ypmatch

Stampa il valore di una o più chiavi NIS

yppasswd

Modifica la password di un utente in un database NIS

yppasswdd

Aggiorna un database NIS dopo l'esecuzione del comando yppasswd

yppoll

Determina la versione di un mapping NIS di un server NIS

yppush

Distribuisce un mapping NIS

ypserv

Daemon del server NIS

ypset

Punta ypbind a un server specifico

ypwhich

Visualizza il nome di un server NIS o di un map master

ypxfr

Trasferisce un database NIS da un server all'host locale

Su distribuzioni RedHat l'utility più comoda per scegliere quali servizi avviare a seconda al boot è ntsysv.
Una alternativa più diffusa è chkconfig, permette sia la visualizzazione (--list) che la modifica dello stato dei singoli servizi a seconda del run-level.


Servizi più comuni

Nome servizio

Descrizione

Da attivare?

anacron

Controlla il demone di pianificazione anacron

Inutile su un server

apmd

Directory che contiene apmd.init per il controllo dell'alimentazione e del login

Utile in un portatile

arpwatch

Traccia le coppie di indirizzi dei protocolli ethernet e Internet

Utile in un router/firewall

atd

Controlla il demone at (pianificazione personale)

Da evitare in un server

autofs

Controlla il demone per l'automounts di Filesystem

Utile in una workstation

crond

Controlla il demone di pianificazione di sistema cron

Sempre

ctm

SNMP Traffic monitor

Utile per monitoring

httpd

Controlla il server Web Apache e i servizi HTTP

Solo su server web

identd

Server Ident

Solo in casi particolari

inet

Controlla il protocollo TCP/IP e altri servizi

Sempre

innd

Server News

Solo su server news

keytable

Controlla il caricamento della mappa di tastiera

Sempre

kudzu

Controlla e verifica la presenza di nuovo hardware

Utile per una workstation

linuxconf

Permette l'accesso via web all'interfaccia di linuxconf

Da evitare in un server

lpd

Controlla i servizi dello spooling di stampa

Utile per workstation

mars-nwe

Controlla i servizi di sistema compatibili Netware

Da attivare solo se si utilizzano sistemi Netware

named

Controlla l'avvio e l'arresto del Domain Name Service

Solo su server DNS

netfs

Controlla i Mount e Umount di tutti i Network Filesystem

Solo se si vuole montare un Network Filesystem

network

Controlla l'avvio e l'arresto dei sistemi di rete

Sempre

nfs

Controlla i servizi del Network File System

Solo se si vuole shareare via NFS

nfslock

Controlla i servizi del Network File System

Solo se si vuole shareare via NFS

pcmcia

Controlla i servizi delle schede per computer portatili

Solo nei portatili

portmap

Controlla i servizi per la procedura di chiamata remota

Indispensabile se si ha che fare con NFS

postgresql

Controlla il demone di PostgreSQL database

Solo su un SQL Server

random

Controlla la generazione dei numeri casuali

Sempre

routed

Controlla un RIP router daemon

Solo su router/firewall

rstatd

Controlla il demone delle statistiche del kernel di rete rpc.statd.

Da evitare

rusersd

Controlla i servizi di rete dell'rpc.rusersd.

Da evitare

rwhod

Controlla il demone di rete rwhod per i servizi di rwho

Da evitare

sendmail

Controlla i servizi di trasporto di posta

Solo su server SMTP

smb

Controlla i demoni Samba smbd e nmbd

Solo su un file server smb

snmpd

Controlla il demone del protocollo Simple Network Management

Utile per monitoring

syslog

Avvia e arresta i servizi di logging di sistema

Sempre

xfs

Avvia e arresta il server font X11

Necessario per l'uso di Xwindows

*bind

Controlla i servizi di binding NIS

Solo in caso di utilizzo

compilazione kernel

La compilazione del kernel è un'operazione da considerarsi fondamentale per l'aspetto performance e sicurezza.
La prima operazione è assicurarsi l'ultima versione disponibile o applicare patch e compilarlo a seconda delle proprie esigenze.

comandi fondamentali

make menuconfig

Richiama il menu grafico per selezionare le varie opzioni disponibili del kernel. E' possibile inoltre salvare le configurazioni per usi futuri

make dep

Verifica le varie dipendenze dei possibli moduli e delle opzioni scelte nel menuconfig

make bzImage

Compilazione dell'immagine del kernel che verrà caricata al boot

make modules

Compilazione dei moduli

make modules_install

Installazione dei moduli

Se tutti i comandi lanciati non producono nessun tipo di errore la compilazione del kernel si può definire conclusa.
Ora non resta che copiare l'immagine del kernel in /boot ( cp arch/i386/boot/bzImage /boot ) e configurare LILO o il proprio boot loader per far si che la nuova immagine venga caricata al boot.

 

 

 

cd /usr/src/linux ; make menuconfig

 

Nella directory dei sorgenti si lancia il comando make menuconfig per accedere ad un'interfaccia grafica per gestire la configurazione del kernel

 

la directory /usr/src/linux è un collegamento simbolico a una directory vera contenente i sorgenti del kernel che viene utilizzato di default

Il menuconfig ha un uso molto intuitivo con il tasto "space" si seleziona o si diseleziona un'opzione. Il comando enter per entrare nei sottomenu.
Il simbolo M indica che tale opzione verrà inclusa nel kernel come modulo.

Il tempo di compilazione del kernel varia molto a seconda della potenza del processore e della memora disponibile (oltre alle opzioni selezionate nel kernel) ; un host dell'ultima generazione può impiegare qualche minuto e un 386 qualche ora.

 

 

In questa e nella prossima pagina vengono fornite ulteriori informazioni su cosa è raccomandabile fare su un sistema destinato ad essere messo su Internet in produzione.
L'installazione di un server Linux con il CD-ROM della distribuzione scelta, infatti, è solo la prima fase.
A questa vanno fatte seguire:
- Aggiornamento dei pacchetti (Pag. 15-1)
- Rimozione dei servizi non utilizzati (Pag. 15-2)
- Ricompilazione del kernel (raccomandabile) (Pag. 15-3)
- Customizzazione del sistema secondo policy congruenti e generali (Questa pagina)
- Intervento su alcune configurazioni riguardanti la sicurezza del sistema (Pag. 15-4)

POST-INSTALL SYSTEM CUSTOMIZATION CHECK-LIST

Sincronizzare l'ora con un time server - RECCOMENDED
E' sempre buona cosa avere l'ora sincronizzata su tutti i server che si gestiscono.
Il modo migliore di farlo è utilizzare un NTP server centrale per la propria rete (può essere un router Cisco, particolarmente semplice da configurare) e usarlo come time server da parte di tutti gli host. Su Linux il comando ntpdate time.server.com (presente nel pacchetto ntp-*.rpm ) esegue l'aggiornamento dell'ora locale a quella di time.server.com.
Si consiglia di crontabbare questo comando e di eseguirlo ad ogni boot.

Redirezionare le mail per root - RECCOMENDED
La maggior parte delle mail che invia il sistema o i singoli programmi vengono redirezionate alla mailbox dell'utente root.
Se si hanno diverse macchine da amministrare risulta scomodo dover controllare la mail di root su ogni sistema.
Una possibilità è forwardare tutte tutte le mail destinate all'utente root ad un account di posta che si controlla regolarmente con il proprio client favorito. Per farlo basta creare il file /root/.forward e inserire nella prima riga l'indirizzo e-mail a cui si vuole forwardare la mail destinata a root.

Invio periodico di mail di stato
Può capitare che un sistema venga "dimenticato" dopo essere stato messo in produzione. L'amministratore non lo controlla e eventuali problemi vengono a galla solo troppo tardi, quando sono già avvenuti. Il miglior modo per gestire diversi server sarebbe quello di avere un sistema centralizzato di management e monitoring. In mancanza di una soluzione simile un metodo manuale che invia periodicamente delle mail di status sul sistema può aiutare a tenere sotto osservazione diversi sistemi (anche se poi, spesso, ci si ritroverà a non controllare nemmeno le mail).
Un esempio di cosa può essere contenuto nello script che raccoglie info sullo stato del sistema (in questo caso crea un file, con il nome uguale alla data corrente, nella directory /home/getdata, questo file può poi essere inviato via mail tramite cron):
#!/bin/sh
home=/home/getdata
file=$(date '+%Y-%m-%d')
touch $home/$file

/bin/uname -a >> $home/$file
/bin/df -k >> $home/$file
/bin/netstat -rn >> $home/$file
/sbin/ifconfig >> $home/$file
/bin/netstat -l >> $home/$file
/bin/netstat -s >> $home/$file
cat /etc/resolv.conf >> $home/$file
cat /etc/hosts >> $home/$file
ps -adef >> $home/$file
/sbin/iptables -L >> $home/$file
/usr/bin/who -l >> $home/$file
/bin/cat /root/.bash_history >> $home/$file

 

Questa pagina riassume ed elenca una serie di configurazioni e ottimizzazioni post-installazione che possono aumentare il livello di sicurezza del sistema.
Non si addentra nei particolari, cercando di dare solo indicazioni operative e lasciando a chi legge gli approfondimenti del caso.
Alcune indicazioni sono necessarie solo per server fisicamente posizionati in luoghi non sicuri ed in qualche modo accessibili da estranei (PHYSICAL), altre sono particolarmente pignole e dedicate a chi ha particolarmente a cuore la sicurezza del sistema o è particolarmente paranoico (PARANOID), altre ancora in qualche modo possono compromettere le funzionalità di parti del sistema per cui vanno adottate e testate adeguatamente (DISFUNCTION?), alcune sono particolarmente raccomandate (RECCOMENDED).
Queste impostazioni si riferiscono ad una distribuzione RedHat 7.2 standard. Su altre distribuzioni le posizioni dei file possono essere diverse e le indicazioni date vanno adattate.
In ogni caso queste indicazioni NON bastano a rendere un server sicuro, ma vanno affiancate ad altre precauzioni (aggiornamento costante di programmi e kernel - esposizione solo dei servizi strettamente necessari - utilizzo di IPTABLES adeguate - controllo della sicurezza dei servizi pubblici - installazione di un IDS e di un file integrity checker - log check regolare - BACKUP!).

POST-INSTALL SECURITY CHECK-LIST

Settare una password sul BIOS - PHYSICAL - RECCOMENDED
Necessario per impedire che si possa modificare il device di boot, impedendo la possibilità di fare password recovery o accesso non protetto ai dati bootando con un floppy o CDROM. Considerare che la password del BIOS è resettabile switchando un jumper sulla scheda madre. Il vero paranoico impedisce anche l'apertura del case se la macchina si trova in luoghi fisicamente non sicuri.

Strong password policy - RECCOMENDED
Le password di fatto sono il baluardo principale per permettere l'accesso al sistema. Se sono semplici, triviali, recuperabili da un dizionario o brevi sono password deboli.
E' possibile forzare il numero minimo di caratteri composti da una password editando /etc/login.defs e sostituendo la riga PASS_MIN_LEN 5 con PASS_MIN_LEN 8 (il numero minimo di caratteri per la password passa da 5 a 8). Altra opzione interessante presente nello stesso file è PASS_MAX_DAYS 99999 dove 99999 è la durata della password. Ha senso inserire un PASS_MAX_DAYS 180 per forzare il cambio della password ogni 180 giorni. Attenzione: Queste modifiche vanno fatte PRIMA di aggiungere utenti alla macchina. PASS_MAX_DAYS 99999 e altri parametri sono comunque modificabili successivamente in /etc/shadow.

Cript a lot - RECCOMENDED
E' fondamentale per un server pubblico che si gestisce via Internet rimuovere l'accesso telnet e sostituirlo con SSH, che cripta i dati trasmessi (e quindi login e password per l'accesso). SSH comunque non è esente da difetti, la versione 1 del protocollo ha potenziali buchi e in passato ci sono state serie vulnerabilities su alcuni software SSH. Si raccomanda di usare una versione recente di OpenSSH con supporto di SSH2, chiave di almeno 1024 bit e con accesso root diabilitato. Alleghiamo un esempio di sshd_config come riferimento.

Permission restriction - PARANOID - DISFUNCTION?
In molte distribuzioni, spesso, alcuni file hanno di default permessi in lettura per tutti gli utenti anche quando non è necessario.
Non è una brutta idea restringere questi permessi, lasciando che sia root Colui Che Può:


chmod 600 /etc/inetd.conf

Se presente inetd.conf. Ovviamente è pure necessario editarlo per rimuovere tutti i servizi inutili.

chmod 600 /etc/xinetd.conf

Se presente Xinetd invece di inetd. Stesse raccomandazioni.

chmod 700 /etc/xinetd.d

La directory dove Xinetd ha il file di configurazione per i singoli servizi.

chmod -R 700 /etc/&rc.d/init.d/*

La directory dove sono presenti gli script di avvio. Perchè un normale utente dovrebbe vederlI?

/etc/aliases comments - PARANOID - DISFUNCTION?
/etc/aliases gestisce gli alias di posta, forwardando a root vari utenti. E' opportuno commentare alcuni alias, inseriti di default, per evitare potenziali exploit tramite il loro utilizzo (in particolare l'alias decode). Segue una lista delle righe di /etc/aliases che si possono commentare o rimuovere. Dopo la modifica del file va eseguito il comando newaliases per rendarla effettiva:
# uucp: root
# operator: root
# games: root
# ingres: root
# system: root
# toor: root
# manager: root
# dumper: root
# decode: root

Boot loader password - PHYSICAL - RECCOMENDED
Impedire l'accesso alle opzioni del bootloader è fondamentale in un server fisicamente non custodito.
Se si usa lilo aggiungere a /etc/lilo.conf la riga password=<passwordscelta> e assicurarsi che lilo.conf sia leggibile solo da root.
Se si usa grub aggiungere a /etc/grub.conf la riga password <passwordscelta> e assicurarsi che grub.conf sia leggibile solo da root o, meglio, usare l'opzione password --md5 <passwordsceltacriptata>

Disabilitare CTRL-ALT-CANC - PHYSICAL - RECCOMENDED
Sicuramente non ci piace l'idea che chiunque possa riavviare il nostro server con un comodo CTRL+ALT+CANC, per renderlo impossibile commentare in /etc/inittab la riga: ca::ctrlaltdel:/sbin/shutdown -t3 -r now

Stampare i log!
La prima cosa che fa un intrusore una volta preso possesso del sistema e coprire le proprie tracce, modificando e cancellando i log che ne possano rilevare l'entrata.
Questo è evitabile se si ha molta carta da sprecare: è possibile configurare syslog per stampare (su stampante a feed continuo) i log che si vogliono. E' semplice, basta aggiungere una riga come quella che segue ed avere una stampante funzionante su /dev/lp0
authpriv.* /dev/lp0

Usare un syslog server (e/o alternative a syslog più sicure)
Leggermente meno sicuro e definitivo del metodo precedente è quello di loggare i propri log su un syslog server remoto, opportunamente blindato, che risulti, per quanto possibile, inattaccabile per l'intrusore. Sul sylog locale aggiungere/modifcare:
authpriv.* @nomesyslogserver
Sul syslog server configurare /etc/rc.d/init.d/syslog per lanciare syslogd con l'opzione di accettare messaggi dalla rete, aggiungendo -r alle opzioni di startup.
In RedHat 7.2 modificare la riga: SYSLOGD_OPTIONS="-m 0" con SYSLOGD_OPTIONS="-r -m 0"
Buona scelta è anche usare alternative più sicure (paranoiche?) a syslogd.

Limitare la history della shell
E' possibile limitare la history predefinita della bash per ridurre i rischi che un hacker, leggendola, possa vederci delle password digitate per sbaglio.
Caso tipico è l'utente che prova a diventare superuser e scrive la password al momento sbagliato, passandola come comando shell (che probabilmente non verrà trovato) invece che come input alla richiesta della password. Tale leggerezza resta immortalata nella history della sua shell.
Editare /etc/profile per ridurre la dimensione della history. Modificare HISTSIZE=1000 in HISTSIZE=25 (o il valore che si preferisce).

Non urlare la proria identità - RECCOMENDED
Nonostante esistano tool come queso in grado di rivelare il sistema operativo installato su una macchina, è sempre buona norma fornire il minor numero possibile di informazioni sul sistema ed i suoi servizi. Questo non basta per fermare un bravo hacker, ma può essere abbastanza per fuorviare lo scan di uno script kiddie.
Per quanto riguarda i singoli servizi (web, dns, ssh, smtp ecc) riferirsi alle relative documentazioni per trovare il modo di nascondere versione e nome del programma utilizzato. Per quanto riguarda il sistema si può evitare di mostrare a console o via telnet/ssh un verboso banner introduttivo con nome distribuzione e versione del kernel.
Su RedHat7.2 editare rispettivamente /etc/issue e /etc/issue.net per mascherare versioni di kernel e distribuzione.
Su RedHat più vecchi uno sciagurato script di avvio (/etc/rc.d/rc.local) riscriveva ogni volta questi file con le informazioni originarie. In questo caso è necessario commentare le righe dello script che riscrivono /etc/issue e /etc/issue.net.

Rimuovere RPM, GCC e altri comandi utili
Se si vuole rendere la vita difficile ad un intrusore, e anche complicarsi un po' la propria, considerare la possibilità di spostare il comando RPM in una directory non standard (meglio cambiandogli anche il nome per evitare che un find lo trovi) o metterlo direttamente in un luogo inaccessibile (floppy estraibile).
Analogamente si può pensare di rimuovere dal sistema tutti i tool necessari per compilare del codice come gcc, make e le relative libraries (utili all'hacker che vuole crearsi delle backdoor) e i comandi che si possono usare per prendere un file dalle rete (lynx, ftp, irc, ncftp, wget, scp, rcp ...) e che si possono impropriamente essere utilizzare per caricare sulla macchina programmi estranei.
Queste precauzioni, seppur efficaci in un contesto di sicurezza estrema, rendono molto meno comoda e pratica la vita dell'amministratore.

Restringere le opzioni di mount del file-system - DISFUNCTION?
Il file /etc/fstab contiene le informazioni su quali dispotivi possono essere montati sulla macchina e può definire delle opzioni che introducono limitazioni sul file-system montato.
Per esempio un /etc/fstab con queste righe:
/dev/hda2 /tmp ext2 defaults 1 2
/dev/hdc1 /home ext2 defaults 1 1
può essere modificato con opzioni che restringono, sui file system montati, la possibilità di eseguire binari (noexec), di onorare i bit setUID e setGID su file che li hanno (nosuid), di interpretare caratteri o dispositivi a blocchi speciali (nodev):
/dev/hda2 /tmp ext2 nosuid,nodev,noexec 1 2
/dev/hdc1 /home ext2 nosuid,nodev 1 1

Limitare gli utenti che possono fare SU - RECCOMENDED
Qualsiasi utente con una shell sul sistema con il comando su, può diventare root (sapendo la password). Si può stroncare alla radice questa velleità editando il file /etc/pam.d/su e scommentando la riga: auth required /lib/security/pam_wheel.so use_uid.
Una volta fatto, solo gli utenti appartenti al gruppo wheel (è un gruppo speciale, non si possono usare altri gruppi arbitrari per questa operazione) possono fare su, per cui editare /etc/group ed aggiungere al gruppo wheel gli utenti abilitati ad eseguire su.

 

Fonte: http://www.comunecampagnano.it/gnu/doc/corso_linux.doc

Sito web da visitare: http://www.comunecampagnano.it/

Autore del testo: non indicato nel documento di origine

Il testo è di proprietà dei rispettivi autori che ringraziamo per l'opportunità che ci danno di far conoscere gratuitamente i loro testi per finalità illustrative e didattiche. Se siete gli autori del testo e siete interessati a richiedere la rimozione del testo o l'inserimento di altre informazioni inviateci un e-mail dopo le opportune verifiche soddisferemo la vostra richiesta nel più breve tempo possibile.

 

Linux guida e corso

 

 

I riassunti , gli appunti i testi contenuti nel nostro sito sono messi a disposizione gratuitamente con finalità illustrative didattiche, scientifiche, a carattere sociale, civile e culturale a tutti i possibili interessati secondo il concetto del fair use e con l' obiettivo del rispetto della direttiva europea 2001/29/CE e dell' art. 70 della legge 633/1941 sul diritto d'autore

Le informazioni di medicina e salute contenute nel sito sono di natura generale ed a scopo puramente divulgativo e per questo motivo non possono sostituire in alcun caso il consiglio di un medico (ovvero un soggetto abilitato legalmente alla professione).

 

Linux guida e corso

 

"Ciò che sappiamo è una goccia, ciò che ignoriamo un oceano!" Isaac Newton. Essendo impossibile tenere a mente l'enorme quantità di informazioni, l'importante è sapere dove ritrovare l'informazione quando questa serve. U. Eco

www.riassuntini.com dove ritrovare l'informazione quando questa serve

 

Argomenti

Termini d' uso, cookies e privacy

Contatti

Cerca nel sito

 

 

Linux guida e corso