Web Version
Print Version
Esercitazioni (Risposte)
Esempi di configurazioni

Corso Linux System Administrator

Il corso fornisce una intensa introduzione al mondo Linux per tecnici già pratici di computer e protocolli Internet esaminando le problematiche e gli approfondimenti più utili sulla amministrazione di sistemi Linux. Il corso approfondisce la conoscenza del sistema nel suo complesso: il file system, la shell, il networking, il kernel e i suoi moduli, la gestione degli utenti e dei programmi, la comprensione del processo di boot, l'analisi delle prestazioni del sistema, la gestione e la schedulazione dei processi. La didattica è fortemente basata su attività pratiche di laboratorio. Sono svolti confronti con altri sistemi operativi e paragoni fra le varie distribuzioni Linux. Vengono fornite inoltre indicazioni e riferimenti utili sulle principali certificazioni Linux (RHCE e LPI).

Scheda Corso

Programma- Introduzione al mondo Linux: storia, licenze e filosofia
- Installazione di Linux
- Login e utilizzo di base di shell e ambiente grafico
- Ricerca documentazione
- Logica di base del file system
- Gestione di file e directory
- Gestione di device, filesystem, attributi e permessi.
- Introduzione ai comandi principali di ricerca e visualizzazione di file.
- Gestione e diagnostica dei processi.
- Comprensione del processo di avvio, dai boot loader LILO e Grub a Init.
- Gestione dei servizi all'avvio e di eventi schedulati.
- Archiviazione, checksum e confronto di file
- Installazione del software tramite pacchetti o compilazione da codice sorgente.
- Troubleshooting in ambiente Linux, l'importanza dei log e dei comandi per la diagnostica.
- Configurazione networking e gestione dei servizi Internet.
- Diagnosi problematiche di rete.
- Hardening di un sistema Linux dopo un'installazione standard.
- Gestione con strumenti grafici di un sistema LinuxGiorni5TargetIl corso si rivolge a amministratori di rete, sistemisti e semplici utenti impegnati in sviluppo, gestione e utilizzo di sistemi informatici basati su sistema operativo Linux.Prerequisiti- Buona conoscenza e affinità con i computer ed Internet
- Conoscenza dei protocolli TCP/IP, di altri sistemi operativi Unix (Preferenziale)
- Conoscenza dell'inglese (Preferenziale)Obiettivo- Pianificare ed effettuare l'installazione di un sistema Linux
- Conoscere i principali punti in comune e differenze fra Linux e altri Unix.
- Avere familiarità con l'uso, la configurazione e la gestione di una shell bash.
- Visualizzare, manipolare e gestire file e filesystem Unix.
- Comprendere la logica dei sistemi Unix, dal boot alla gestione dei processi.
- Configurare Linux su reti IP, utilizzarne gli strumenti di diagnosi.
- Installare e aggiornare programmi, eseguire un hardening base di un sistema Linux.
- Avere gli strumenti e le tecniche per il troubleshooting di problemi reali.
- Conoscere gli strumenti per configurare i servizi Internet più diffusi.MaterialiAi partecipanti verranno forniti:
- Documentazione del corso
- Questionario con domande e soluzioni
- Attività pratiche attinenti gli argomenti trattati

Programma

Introduzione e installazione di Linux

Introduzione e visione d'insieme
Installazione delle distribuzioni scelte tramite CDROM o via rete.

Obiettivo:
- Soluzioni di installazione via rete: cobbler
- Implementazione di un sistema di autoaggiornamento dei pacchetti
- Gestone centralizzata dei sistemi

Linux Administrator

Introduzione all'arte sistemistica

Installare Linux

Raccolta informazioni. Scelta dell'hardware. Definizione degli obiettivi. Opzioni di installazione.

Cobbler

Documentation, examples and use of Cobbler Linux Provisioning System


File e Filesystem

La gestione dei file e delle directory. La gestione dei filesystem. Visualizzare file.

Obiettivo:
- Usare i comandi per muoversi all'interno del filesystem.
- Copiare, spostare, rinominare file e directory
- Usare i link
- Visualizzare il contenuto di un file
- Conoscere la struttura del filesystem Linux
- Montare nuovi filesystem
- Gestire i permessi sui file

Gestire file, directory e links

Capire, muoversi e modificare file e directory: /, .., . , cd, ls, cp, mv, rm, rmdir, mkdir. Uso di link e symlink.

Leggere e visualizzare file

Comandi per visualizzare e leggere file: cat, less, more, tail, info, strings.

Gestione dei file system

I principi e i comandi per gestire un file system: mount, df, du, fsck, mkfs.

Attributi e permessi

La gestione di attributi e permessi sui file: chmod, chown, chgrp.

Ricerca, confronto e filtri

Ricerca nel file system: find, locate. Confronto e verifica di file: diff, md5sum. Filtri di output: grep, wc, sed, awk.


Processi e uso evoluto della shell

Utilizzo più evoluto della shell. Regular expressions. Introduzione allo shell scripting. I processi e i job.

Obiettivo:
- Conoscere e configurare il proprio ambiente bash
- Capire ed utilizzare redirezionamenti e pipe
- Avere una visione d'insieme della programmazione shell
- Capire e visualizzare i processi attivi sul sistema
- Cambiare le priorità dei processi
- Avere le basi per il debugging dei processi

Ambiente shell e scripting

L'ambiente shell e lo scripting: variabili d'ambiente, cicli, strutture base.

I processi

Definizione e gestione dei processi. Segnali e job.

Debugging dei processi

Strumenti e indicazioni su come eseguire il debugging delle applicazioni: strace, lsof, ldd.


Il processo di boot

Il dettagli sul processo di boot: dal BIOS all'avvio dei servizi.

Obiettivo:
- Conoscere il processo di boot su macchine Intel
- Comprendere la logica di utilizzo di lilo e grub
- Leggere i messaggi di boot del kernel
- Conoscere l'hardware usato dal proprio Linux
- Conoscere l'init e i runlevel

Il processo di boot

Descrizione del processo di boot su sistemi Intel: ROM BIOS - LINUX LOADER - KERNEL LOADING - INIT

Linux loaders: LILO, Grub

Installazione e configurazione di LILO, GRUB e altri Linux loader

Init e runlevels

Init, i runlevel e la gestione dei servizi da avviare al boot.


Amministrazione del sistema

Le attività comuni di un sistemista: gestione degli utenti, installazione di programmi, schedulazione, backup, gestione e analisi dei log.

Obiettivo:
- Gestire gli utenti del sistema
- Installare programmi tramite pacchetti o compilazione di sorgenti
- Gestire eventi schedulati
- Gestire procedure di backup dei dati
- Gestire i log di sistema
- Monitorare lo stato della macchina

Gestione degli utenti

I file che gestiscono gli utenti: /etc/passwd, /etc/group, /etc/shadow. I comandi per gestire gli utenti: adduser, passwd, userdel.

Installare programmi su Unix e Linux

Utilizzo di RPM per installare, aggiornare, rimuovere pacchetti .rpm. Utilizzo di tar.gz

Backup e compressione di file

Tecniche di backup. L'uso di tar, gunzip, e altri comandi di compressione.

Schedulazione dei processi

Utilizzo di crontab e at. Configurazione e alternative a crontab.

Gestione e analisi dei log

Analisi, monitoring, rotazione e gestione dei log di sistema. Configurazione di syslogd.


Internetworking

Configurazione, gestione e controllo del networking. Introduzione al firewalling. Gestione dei servizi Internet.

Obiettivo:
- Configurare Linux/Unix in una rete locale
- Analizzare e diagnosticare il traffico di rete
- Diagnosticare problemi di rete
- Gestire servizi Internet
- Proteggere un sistema in rete

Networking - Configurazione

Configurare i parametri di rete e il DNS: ifconfig, route, resolv.conf

Networking - Diagnosi

I comandi e le tecniche per diagnosticare la rete: netstat, arp, tcpdump.

Networking -  Tool comuni

I comandi comuni per utilizzare la rete: finger, ftp, nslookup, dig, lynx, wget.

Il superdemone Inetd (e Xinetd)

Configurazione di inetd e tcp wrappers. Configurazione di xinetd.


Gestione e hardening del sistema

Si presentano i principali strumenti grafici di gestione di un sistema e viene dettagliata una completa procedure di system hardening post-installlazione.

Obiettivo:
- Utilizzare tool grafici di amministrazione come webmin e linuxconf
- Avere una panoramica del software disponibile per Linux - Unix
- Rimuovere tutti i servizi non effettivamente utilizzati
- Aggiornare gli RPM della propria macchina
- Eseguire una serie di post-installation task

Aggiornamento di un sistema Linux

I metodi e le tecniche per l'upgrade manuale e automatico di un sistema Linux

Tool grafici per l'amministrazione del sistema

Le alternative grafiche alla command line per la gestione e configurazione di sistemi Linux / Unix. Webmin e altri tool grafici.

Esempi di configurazione di Iptables

Esempi di configurazioni di un firewall Linux con iptables

Linux post-installation check-list

Operazioni da compiere su un sistema Linux dopo averlo installato dal CDROM. Security fixes e patches.



Introduzione e installazione di Linux


Linux Administrator

Introduzione all'arte sistemistica

Troubleshooting: l'arte di risolvere problemi

Esperienza
- La seconda volta che si trova un problema su cui si sono perse ore,  lo si risolve in 1 minuto
- La familiarità con il sistema (comandi,  posizione dei file, log... ) rende veloce ogni attività
- Più problemi si sono affrontati, più problemi si sanno affrontare
- Si può imparare di più dalla propria tastiera, che da un testo scritto da altri (ma il giusto consiglio ci può far risparmiare ore)

Conoscenza
- Molto si può scoprire, tutto si può studiare
- La teoria è fondamentale: conoscere il sistema aiuta ad individuare la natura di un problema.

Metodo
- Escludere in modo sistematico, dopo averle verificate, le diverse possibili cause del problema, senza dimenticare quelle più banali
- Predisporre adeguati strumenti di controllo (tail -f su log, sniffing di pacchetti, monitoraggio dei parametri coinvolti...)
- Approfondire gli aspetti non noti, senza perdere il focus sulla soluzione

- Se si deve risolvere un problema di altri, farsi spiegare chiaramente cosa non funziona, come funzionava prima, quando ha smesso di funzionare, se questo è coinciso con qualche attività o evento conosciuto.

Fantasia
- Fantasia e pensiero laterale aiutano a trovare la luce in fondo al tunnel
- Lasciarsi guidare dall'istinto guidato da logica, consapevolezza e proprie conoscenze
- Lo spirito di osservazione (un nome, un indizio) agevola le deduzioni

Ricerca
- Per risolvere bisogna sapere, per sapere si deve cercare
- Il sistema parla (log, tool di analisi) e spiega (man, info, docs)
- Su Internet probabilmente qualcuno ha descritto lo stesso problema
- Cercare termini precisi: la stringa di un messaggio di errore (esclusi parametri propri del sistema locale), il nome di uno specifico argomento, attinente, di cui non si sa molto.
- Chiedere con precisione, dare le informazioni che servono a chi deve rispondere: contesto, output di errori, generalità del sistema su cui si opera.

Attività da sistemista

Autore: al - Ultimo Aggiornamento: 2006-03-23 11:55:26 - Data di creazione: 2004-05-23 16:14:50
Tipo Infobox: DESCRIPTION - Skill: 1- NOVICE

Spiegare cosa fa un sistemista non è sempre ovvio.
Definire quali sono i suoi compiti è quantomeno pretenzioso.
Inquadrare gli skill di cui ha bisogno è limitativo, visto che di fatto, in molte realtà, un sistemista deve poter gestire e configurare hardware e software eterogenei che richiedono conoscenze ed esperienza disparate.

Le attività sistemistiche su un server con qualsiasi sistema operativo 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 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, spesso basterebbe un po' di lucidità progettuale e lungimiranza per 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. Di 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.

Problematiche di gestione e installazione di un server Linux

Installazione di Linux da CD/DVD
- Attività semplice, rapida, consolidata ormai d'uso comune fra tecnici IT
- Diverse distribuzioni, logica comune: Boot dal CD, scelta configurazione (lingua, tastiera, utenti, parametri di rete, software da installare, logiche di partizionamento...), installazione pacchetti su hard disk montato in locale.

Installazione automatizzata
- PXE: Boot kernel direttamente via rete (su NIC che lo supportano). Totalmente automatizzato.
- Kickstart e simili: Caricamento parametri di installazione via rete. Richiede CD/floppy di boot.
- Selezione installation source: Configurazione manuale, scaricamento dei pacchetti via rete. Richiede CD/floppy di boot e inserimento parametri.
- Strumenti per il provisioning centralizzato: Cobbler.

Aggiornamento
Imprescindibile, necessario, semplice.
- Automatico: Lasciar fare al proprio Linux in totale autonomia
- Semi Automatico: Scaricare i pacchetti e non installarli
- Manuale: Installare i pacchetti a mano.
- Manuale con compilazione: Fuori dalla logica dei pacchetti predefiniti. Si ricompila il proprio software secondo le proprie necessità

Hardening post installazione
- Aggiornamento software e decisione su policy di autoaggiornamento
- Rimozione dalla fase di avvio dei servizi non necessari
- Configurazione/tuning filtri iptables
- Configurazione servizi di produzione
- Verifica porte aperte, credenziali e logiche di accesso
- Implementazione di strumenti di monitoraggio e controllo custom
- Implementazione sistemi di intrusion detection
- Implementazione e test di Mandatory Access Control List

Gestione e configurazione centralizzata
- Su infrastrutture medio/grandi è ormai un requirement
- Gestire e configurare un parco server da un unico punto
- Configuration management con Puppet / CFEngine
- Gestione centralizzata con Puppet / Func / SSH

Monitoraggio e documentazione
- Un server non dovrebbe essere considerato in produzione fino a quando non viene correttamente monitorato
- Strumenti di Monitoraggio: Nagios (e progetti derivati), Cacti
- La documentazione è importante: deve essere rivolta a tecnici, contestuale e facile da gestire/aggiornare
- SCM come git, cvs, subversion  e altri possono essere usati sulle configurazioni di un sistema (oltre che su codice software).

Distribuzioni Linux: analogie e differenze

Le Distribuzioni Linux
- Una babele apparentemente inestricabile: + di 300 distro
- Le principali da cui derivano tutte le altre: Debian (129), Fedora (63), Knoppix (50), Slackware (28), Mandriva (14), RedHat Enterprise (13), Gentoo (12), Suse (5) .
- Hanno molto in comune e varie differenze: conoscerne i principi rende agevole l'orientamento

Elementi comuni nelle distribuzioni Linux
- Kernel Linux (versioni o patch diverse)
- Utility GNU: tutti i comandi Unix di base e altro
- I principali software utilizzati sono comuni
- File System Hierarchy comune (ma non sempre coerente)
- Linux Standard Base comune
- Unix is Unix's Kiss

Orientarsi fra le differenze
- Analizzare la fase di boot da init in poi: gli script, i file di configurazione
- Orientarsi con i pacchetti (deb, rpm, tgz...): conoscere comandi e sintassi per installare, gestire e interrogare un pacchetto
- Usare i tool di sistema (whereis, locate, find, apropos...) e la documentazione (man, info, docs locali, Internet)
- Sapere dove trovare i log del sistema (syslog) e i comandi per verificare cosa accade (ps, top...)

Microsoft e Linux: integrazione possibile?

Migrazione di server
Protocolli comuni permettono integrazione o migrazione trasparente lato server
- Prestare attenzione alla migrazione dei dati, degli account e dei privilegi di accesso
- Pianificare una migrazione con minor impatto possibile sui client
- Proxy, firewall, email e applicazioni web, in particolare, risultano fra le funzioni migrabili senza molti problemi di interoperabilità

Migrazione dei client
Più complessa, richiede educazione e collaborazione da parte degli utenti.
- Prevedere un pilot su un gruppo ristretto
- Valutare migrazione progressiva (Windows+MSOffice -> Windows+OpenOffice -> Linux+OpenOffice)
- Applicativi e gestionali basati su web rendono il passaggio più facile
- Centralizzare gestione, aggiornamento e monitoraggio dei client
- Usare distribuzioni e versioni uguali per tutti!
- Customizzare e semplificare il desktop
- Non lasciare privilegi di root agli utenti

Integrazione file e domini
- Samba: integrazione nei domini NT e active directory
Samba è un progetto maturo e ormai supporta pienamente domini NT.
Samba 3 non ha un supporto completo di Active Directory (può essere domain member ma non controller).
Samba 4 dovrebbe migliorare il supporto ADS.

Desktop e applicazioni remote
Diversi strumenti, che permettono uso di applicativi su macchine remote e sistemi diversi:
- Remote Desktop (esiste il client per Linux)
- VNC: universale ma non sempre performante. Non permette sessioni utente indipendenti
- XWindow (client e server su sistemi eterogenei).
- NX/FreeNX. Ottima e semplice alternativa a XWindow. Client universale, Server Unix/Linux.
- Tarantella. Soluzione commerciale consolidata e versatile.
- Citrix (Metaframe). Altra valida soluzione commerciale.

Sistemista Linux Oggi

Lavori in Linux
Dove esiste un sistema Linux serve un sistemista Linux.
Qualcuno in grado di gestire situazioni, configurazioni ed eventuali problemi.
I ruoli possono essere vari:
- Sistemisti in CED di ogni dimensione
- Installatori di sistemi con Linux
- Operatori di Help Desk
- Sviluppatori
- Tecnici tuttofare
Le aziende possono essere di qualsiasi tipo e dimensione.

Prospettive
Il numero dei sistemi Linux è in crescita e cresce l'esigenza di esperti qualificati.
Il numero di appassionati di Linux con alte competenze tecniche è relativamente elevato.
La passione rende piacevole il lavoro.
Non si può smettere di imparare.
Le conoscenze devono essere sia eterogenee (visione d'insieme) che specializzate.
Non esiste solo Linux: è bene conoscere reti, sicurezza e altri OS

Professionalità e autodidattica
- Linux piace ad autodidatti e smanettoni
- A volte si impara più dalla propria tastiera che a scuola o in un corso
- Essere completi autodidatti, però, può lasciar spazio a lacune e misconcezioni
- Nel mondo del lavoro si cercano criteri affidabili di valutazione degli skill (titoli di studio, certificazioni ma anche esperienze maturate sul campo)
- Quando le conoscenze sono diffuse la differenza viene fatta da professionalità e competenze: essere veloci ed efficaci diventa una necessità.
- Non si può sapere tutto, è utile avere qualcuno che possa fornire i riferimenti che fanno risparmiare tempo

Certificazioni Linux e OpenSource
- Red Hat (RHCT - RHCE - RHCA)
- Novell Certified Linux Engineer (CLE)
- LPI - Linux Professional Institute
- CompTIA Linux+ Certification
- Sair Linux/GNU
- MySQL Core e MySQL Professional
- Zend PHP Certified Engineer

Guida minima alla scelta della distribuzione Linux

Autore: al - Ultimo Aggiornamento: 2006-03-24 12:43:11 - Data di creazione: 2003-09-14 10:52:53
Tipo Infobox: TIPS - Skill: 1- NOVICE

Scegliere la distribuzione giusta fra le centinaia disponibili è impresa ardua, come lo è ottenere una risposta precisa da un "esperto di Linux".
Inevitabilmente, da bravo informatico, risponderebbe "dipende".

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à e rapidità di aggiornamente e manutenzione.
Qualunque sia la distro adottata è spesso consigliabile installarne l'ultima versione disponibile (contiene pacchetti e kernel più recenti) lasciando possibilmente passare almeno un mese dalla sua release per permettere il fixing dei bug e dei buchi di sicurezza più evidenti.
Fondamentale è comunque seguirne sul relativo sito le segnalazioni di aggiornamenti ("errata" o "patch"), possibilmente attivando sistemi di autoaggiornamento dei pacchetti.

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 Internet non utilizzati;
- Eventuale aggiornamento del kernel;
- Configurazione dei servizi di produzione che si intende utilizzare;
- Implemementazione di script o configurazioni custom.

Nella scelta della distribuzione vanno valutati i seguenti aspetti e date risposte alle seguenti domande:

- In che contesto viene utilizzata?
Su un server, su un laptop, un dekstop... A seconda delle funzionalità richieste può essere adeguata una distribuzione piuttosto che un'altra.
Ci sono distribuzioni come Ubuntu, Mepis, Linspire, Xandros che sono particolarmente orientate al desktop e si differenziano per facilità di utilizzo o presenza di programmi per Internet e il multimedia in grado di soddisfare le tipiche esigenze di un poweruser.
Per un firewall esistono distribuzioni dedicate che possono risultare particolarmente comode e semplici da configurare.
Per un server è opportuno cercare distribuzioni con tempi di vita lunghi e in grado di riconoscere e supportare il proprio hardware.

- Che tempo di vita mi aspetto da questa installazione?
Un computer desktop può essere reinstallato in tempi relativamente brevi, quantomeno per rincorrere le nuove versioni di vari programmi comuni, un server può richiedere tempi di vita molto maggiori e questo influenza la scelta.
Un vizio comune a molte distribuzione sono i tempi di release estremamente rapidi, tali da rendere apparentemente obsoleta una versione dopo pochi mesi dal suo rilascio.
Questo vale in modo evidente con Fedora (una release indicativamente ogni 6 mesi, fine del supporto ufficiale di RedHat dopo 2 release) ma anche, in misura minore, per le versioni Personal/Professional di Mandriva, Suse e altre fra le distribuzioni principali.
Questa costante rincorsa è dovuta al tumultuoso e rapido sviluppo di software opensource e al fatto che difficilmente all'interno della stessa versione di una distribuzione viene fatto un "major upgrade" dei programmi forniti (per garantire la piena compatibilità e il funzionamento delle procedure di aggiornamento automatico del software (per bug e vulnerabilità di sicurezza)).
Fra le distribuzioni liberamente accessibili, Debian e in misura minore Slackware si distinguono per tempi di vita decisamente superiori. Debian, in particolare, ha un ramo "stable" particolarmente conservativo che ha tempi di vita molto lunghi a scapito di una certa obsolescenza del software fornito.
Se la necessità è di avere un sistema Linux per poche ore o alcuni giorni (per dimostrazioni, corsi, prove, test, ecc) le Live CD come Knoppix sono particolarmente indicate, in quanto non richiedono nemmeno l'installazione su hard disk.

- Quanto sono disposto a spendere per la licenza del mio Linux?
Le versioni commerciali delle distribuzioni Linux hanno tempi di vita e supporto generalmente maggiori e sono adatte ad ambienti in cui è prioritario avere garanzia di supporto duraturo rispetto ai costi di licenza.
RedHat, Suse/Novell, Mandriva forniscono tutte versioni "enterprise" a pagamento delle proprie distribuzione con tempi di supporto di vari anni e durata di vita del software molto superiori alle versioni liberamente distribuite dagli stessi produttori.
Nella analisi dei costi, ovviamente, vanno anche considerati il training del personale, la consulenza di esterni, i tempi di disservizio eventualmente dovuti a guasti o problemi, ecc.

- La distribuzione che voglio usare supporta l'hardware che ho a disposizione?
Per quanto il supporto hardware su Linux sia piuttosto avanzato esistono casi in cui va opportunamente verificato. In particolare non tutte le distribuzioni sono in grado di riconoscere immediatamente i device di un laptop (winmodem, scheda wireless connettori infrarossi ecc.) e, per sistemi di fascia medio/alta con controller scsi è schede di retei in gigabit è opportuno verificarne il supporto nella hardware compatibility list del produttore della distribuzione.

Sysadmin 2.0 - Sistemisti oggi e domani

Nuovi Scenari in Server Farm  
- Il mondo IT cambia velocemente. Molto è già cambiato  
- Soluzioni di virtualizzazione sono pronte per la produzione  
- I dati e il traffico da gestire aumentano costantemente  
- Le soluzioni software si fanno più sofisticate e facilmente gestibili  
- Il numero di host da installare/configurare/gestire crescono

Virtualizzazione
- Le tecnologie sono mature: Vmware, Xen, Virtual Box, KVM...
- Interi sistemi virtuali possono essere creati, rimossi, spostati velocemente  
- E' più facile ricreare ambienti di test, pilot, simulazioni
- Nuovi scenari in termini di sicurezza, capacity planning, disaster recovery

Storage Area Networks
- Soluzioni SAN e NAS sono sempre più accessibili
- ISCSI permette l'uso di una convenzionale infrastruttura di rete ethernet
- DRBD permette di sincronizzare i dati su host comuni
- Storage condiviso a basso costo facilita la diffusione di cluster ad alta affidabilità

Provisioning e gestione centralizzata
- Necessità di installare sistemi (virtuali e fisici) rapidamente
- Necessità di gestire un parco macchine in espansione in modo coerente e centralizzato
- Necessità di poter riprodurre velocemente il setup di un sistema
- Soluzioni a basso costo (tempo e risorse) per gestire infrastrutture complesse:
-- Provisioning con Cobbler
-- Configuration Management con Puppet

Conclusioni:
Oggi, molto più di ieri, è possibile implementare infrastrutture Linux scalabili e ridondate a costi prima inimmaginabili.
E' possibile sfruttare gli scenari di virtualizzazione messi a disposizione dalle principali tecnologie sul mercato.
E' possibile installare, configurare, moninotrare e gestire una infrastruttura ampia e complessa con potenti strumenti centralizzati.

(Abbiamo ancora bisogno di mettere su a mano un server con il CD di installazione?)


Installare Linux

Raccolta informazioni. Scelta dell'hardware. Definizione degli obiettivi. Opzioni di installazione.

Installare Linux

Installare Linux è in se una attività semplice.
Alcune piccole complicazioni possono venire dalla necessità di far convivere sullo stesso PC Linux con Windows.

Quale Linux Installare?
La scelta della distribuzione Linux dipende da molti fattori e dai propri gusti.
Consultare www.distrowatch.com per una panoramica completa sulle distribuzioni disponibili.
I CD/DVD necessari possono essere scaricati da Internet (in formato iso, da masterizzare su un supporto vergine) o trovani in edicola come allegati a riviste di settore.

Dove Installare Linux?
- Su un PC dedicato. Soluzione più semplice. Nel Bios impostare l'avvio da CDROM e procedere con una normale installazione tramite CD/DVD
- Su una macchina virtuale del proprio Windows. Esistono diverse tecnologie di virtualizzazione relativamente semplici da usare (VMware, VirtualBox, HyperV/VirtualPC)
- Su un PC dove esiste già Windows. E' il caso più diffuso e quello leggermente più delicato.

Installare Linux sul PC dove c'è già Windows
Premessa 1: E' sempre meglio installare prima Windows e poi Linux.
Premessa 2: Salvo casi particolari, Linux va installato su un hard disk o una partizione dedicata: eventuali dati preesistenti nella partizione/i scelta come destinazione vengono cancellati .
Se il concetto di partizione non è chiaro, procedere all'installazione con un amico più esperto o approfondire con attenzione.
Durante la procedura di Installazione l'utente viene comunque avvertito e guidato quando si tratta di scegliere su quale partizione scrivere i dati.

Prova Linux senza Installarlo
E' possibile provare Linux sul proprio PC senza doverlo installare e quindi senza il "rischio" di cancellare eventuali dati.
Le cosiddette distribuzioni Live, possono essere caricate ed utilizzate direttamente da CD o chiavetta USB.

Installare Linux: informazioni da conoscere

Autore: al - Ultimo Aggiornamento: 2006-03-23 12:01:19 - Data di creazione: 2003-11-11 23:47:39
Tipo Infobox: DESCRIPTION - Skill: 1- NOVICE

L'installazione di Linux è ormai una operazione piuttosto semplice, visto il progresso evidente che molte distribuzioni hanno avuto negli ultimi anni in termini di facilità d'uso.
Nonostante questo esistono alcune informazioni fondamentali che vanno conosciute, in particolare per i casi in cui si intende installare Linux su un computer dove è già installato, e si vuole mantenere, Windows.

Sapere com'è il proprio sistema, come e dove si vuole installare Linux, nel caso sia presente già un altro sistema operativo, è fondamentale, per cui è bene assicurarsi, prima di procedere, di conoscere le informazioni di base riguardo a:
- 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. Queste informazioni sono visualizzabili durante l'installazione, ma si deve essere certi di sapere dove sono i dati (per esempio, una installazione di Windows esistente) che non si vogliono cancellare.
- Configurazione di rete, se prevista (indirizzo IP, subnetmask, nome macchina, server DNS).
- Il tipo di attività che si intende fare con Linux (si userà come workstation o come server? si installa su un portatile? Si ha idea di quale software si vorrà usare?).

Gli scenari possibili sono vari, dipendono dalle singole situazioni e possono riassumersi in questi casi generali:

- Installazione su un computer esclusivamente dedicato a Linux (con o senza dati presenti sull'hard disk, che comunque si intende cancellare). Questo è il caso più semplice e se si ha a che fare con hardware non particolarmente esotico (normale PC, di marca, o assemblato, con processore Pentium o superiore) non dovrebbe creare alcun problema con una distribuzione recente.

- Installazione su un PC dove è già presente Windows e si ha a disposizione un hard disk libero o una partizione completamente libera all'interno dell'hard disk con Windows. Anche in questo caso l'installazione può procedere senza particolari problemi: durante le sue fasi verranno evidenziate le partizioni presenti sull'hard disk e sarà possibile decidere di utilizzare per Linux quelle libere, senza toccare quelle in cui si trova Windows.

- Installazione su un PC dove è presente Windows e non è disponbile un hard disk aggiuntivo, spazio non partizionato o una partizione sacrificabile. Questo purtroppo, oltre ad essere il caso più ostico, per un normale computer domestico, è anche il più comune. In queste situazioni si possono seguire diverse strade:
-- Provare Linux con un Live CD (come Knoppix) che permette di usare Linux senza installarlo sull'harddisk, eseguendo il boot direttamente dal CDROM. Non è una soluzione definitiva (un sismile approccio ha degli inevitabili limiti e minori performance) ma può essere un ottimo modo per iniziare a familiarizzare con Linux senza alcun bisogno di installarlo e in completa sicurezza.
-- Procurarsi un hard disk aggiuntivo (di 1 GB o più) e aggiungerlo al proprio PC (indicativamente come Secondary Master, lasciando Windows sul Primary Master) per poterlo usare liberamente con Linux.
-- Creare dello spazio sull'hard disk esistente: se si hanno partizioni quasi vuote, spostare i dati presenti, in altre partizioni Windows e "sacrificare" la partizione semi-vuota per l'installazione Linux; alternativamente considerare la possibilità di usare strumenti come Fips o Partition Magic per Windows o Parted per Linux (lanciato da un Live CD) per ridurre la dimensione delle partizioni esistenti e creare spazio per Linux.
Fare massima attenzione a simili procedure: se fatte in modo scorretto o interrotte (per esempio da un blackout) possono definitivamente compromettere i dati presenti sul proprio hard disk. Un backup preventivo dei propri file, seppur di solito non necessario, è generalmente consigliato.

-- Installazione su PC con hardware particolare o architetture non basate su processori tipo Intel o AMD (i386).
In questi casi la procedura di installazione può essere più complicata (per la richiesta di driver aggiuntivi per gestire l'accesso al disco) o non riconoscere alcuni dispositivi e schede (per esempio i modem interni).
Se si vuole installare Linux su Mac o sistemi con architettura non Intel-like, sono necessarie distribuzioni particolari e procedure a volte più complesse.

Provare Linux senza installarlo

Autore: al - Ultimo Aggiornamento: 2006-08-23 00:56:40 - Data di creazione: 2003-10-07 21:26:12
Tipo Infobox: DISTRO - Skill: 1- NOVICE

Qualunque appassionato di informatica o anche semplice curioso dovrebbe essere interessato a provare Linux e iniziare a vedere direttamente come funziona.
Per i pigri, gli insicuri o coloro che non se la sentono di fare una normale installazione di Linux sul proprio PC, esistono e sono ormai consolidate varie distribuzioni "LIVE" che permettono il caricamento di Linux direttamente dal CDROM, senza la necessità di installare alcunchè sul proprio prezioso e fragile hard disk.

Queste distribuzioni che bootano direttamente un sistema Linux completo dal CDROM possono essere usate in varie occasioni:
- Dimostrazioni dal vivo, in tempi rapidi, senza le potenziali complicazioni di un'installazione su Hard Disk;
- System Recovery, con la possibilità di operare sul sistema locale senza averlo bootato;
- Network monitoring in situazioni straordinarie, con la possibilità di sniffare, diagnosticare, eseguire test;
- Prove e valutazioni rapide e innocue di un sistema Linux sul proprio PC, senza il rischio di far danni.

Citiamo alcune delle distribuzioni LIVE CD più significative, si raccomanda sempre di utilizzare le più recenti e di considerare che l'esecuzione di molteplici applicazioni richiede memoria che va paginata sull'hard disk, se non basta la RAM.
In genere è fondamentale che la distribuzione riconosca la propria scheda di rete o modem, nel momento in cui questo avviene la configurazione del networking diventa semplice (tramite DHCP o configurazione manuale).
Alcune schede sonore o periferiche particolari (winmodem, schede integrate su motherboard ecc.) possono non essere rinosciute.

KNOPPIX - Impressionante, efficace e comoda.
Il tedesco Klaus Knopper ha fatto un gioiello di immagine ISO, basata su Debian. Due Gigabyte di software compresso su un CD di quasi 700 Mb (o molto di più nella versione DVD), un boot rapido ed efficiente nel riconoscimento dell'hardware locale, la possibilità di eseguire moltissimi programmi da un ambiente grafico completo (KDE di default) ne fanno la distribuzione ideale sia per dimostrazioni e valutazioni che per system recovery e network analysys.
In caso di carenza di RAM crea dello SWAP space sull'hard disk e per chi si affeziona puo' essere installato su Hard Disk.

KNOPILS - Il Knoppix italiano
KnopILS (il cui nome vuole ricordare KNOPPIX e ILS) è una KNOPPIX modificata con queste caratteristiche particolari:
- i pacchetti .deb installati appartengono tutti al ramo free di Debian GNU/Linux (o consentono una classificazione equivalente nel caso di pacchetti non ufficiali)
- la schermata di boot è in italiano
- la schermata ``F2`` iniziale è in italiano
- la tastiera predefinita è quella italiana
- la lingua predefinita è l'italiano
- quando possibile, sono presenti pacchetti localizzati
- altre modifiche minori (grafica, bug fixing ecc...)

Morphix - Derivazione modulare di Knoppix
Live cd basato su debian sid e derivato da Knoppix, è possibile vedere più ambienti grafici (Gnome, KDE, XFCE) in base alla iso che si utilizza. Comoda ed aggiornata ha la possibilità di essere customizzata in modo modulare ed installata su Hard Disk in modo estremamamente semplice.

LINUX BOOTABLE BUSINESS CARD Un Linux su una Business Card CD
In poco più di 100 Mb di CD (basta un Mini CD) permette il boot da CD di un sistema Linux grafico con un tool di diagnostica utili e gli strumenti essenziali per un system recovery (fdisk, lilo...).

LINUXCARE BOOTABLE TOOLBOX Essenziale e pratica.
Distribuzione che deriva dalla precedente e ne mantiene le caratteristiche.
Preente un pratico menu di diagnosi e setup del sistema.

DEMO LINUX Una derivazione Live basata su Mandrake e ben fornita.
Gnome, KDE, StarOffice, Gimp, Netscape e molti altro software comune in Linux.

DYNE:BOLIC A network streaming server on CD.
Curioso Live CD, che carica un ambiente grafico basato su Enlightement e presenta i programmi essenziali per l'uso di Internet e una suite di strumenti, basata sul software MUSE e il network PublicVoice per imbastire uno streaming server velocemente e facilmente. Puo' essere usato come un rapido sistema per mettere online una Internet Radio da qualsiasi postazione.

BACK TRACK - Probabilmente il LIVE CD relativo alla sicurezza più completo ed efficace. Comprende moltissimi e non comuni programmi relativi alle diverse facce del variegato mondo della sicurezza. E' basata su Slax, una Live a sua volta basata su Slackware.

Scelta dell'hardware per Linux

Autore: al - Ultimo Aggiornamento: 2003-09-20 11:13:35 - Data di creazione: 2003-09-20 11:13:35
Tipo Infobox: DESCRIPTION - Skill: 1- NOVICE

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.

Segue 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 o SCSI 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). E' disponibile il supporto di CD-RW.

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, schede wireless e WAN cards.

ACCESSORI MULTIMEDIALI
Per un server non sono necessarie schede audio o accessori multimediali. I kernel dalla 2.4 in su, comunque supportano le Sound Blaster Live e Audigy, 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 e tipicamente si trovano su portatili.

Procedure di installazione standard

Autore: al - Ultimo Aggiornamento: 2003-11-12 21:37:27 - Data di creazione: 2003-11-12 21:37:27
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

L'installazione di Linux si può eseguire seguendo metodi differenti: generalmente si usa il CD-ROM (ogni PC almeno dal 1998 in poi permette il boot diretto da CD) oppure via floppy ma sono possibili anche installazioni centralizzate via rete (via http, ftp, nfs, smb) particolarmente utili quando si devono gestire ed installare un gran numero di macchine.

Il primo e fondamentale punto da considerare è lo spazio su hard disk dove installare il sistema operativo.
E' necessario avere a disposizione un hard disk almeno parzialmente libero. Qualora fosse necessario liberare spazio su disco e creare una partizione, si può usare il programma Parted, gratuito per Linux e presente su un Live CD come Knoppix, o programmi per Windows come Partition Magic (commerciale) o Fips (gpl).
Solo quando si è sicuri di avere una partizione o un hard disk disponibile (i dati eventualmente presenti verrebbero cancellati), si può procedere con l'installazione vera e propria.
Sebbene ogni distribuzione utilizzi un proprio tool di setup, le procedure sono generalmente le stesse:
- Viene caricato da CD o floppy di boot un sistema Linux temporaneo, tramite il quale è possibile lanciare il tool di installazione ed eseguire tutte le operazioni previste.
- Viene partizionato lo spazio su disco disponibile secondo i criteri definiti dall'utente;
- Vengono formattate le partizioni create, con il filesystem scelto;
- Si selezionano i programmi da installare, scegliendoli individualmente o selezionando delle impostazioni di default a seconda del tipo di sistema che si sta creando: desktop, server, stazione di sviluppo, laptop ecc. Il sistema provvede automaticamente ad installare le dependencies (pacchetti non selezionati dall'utente ma necessari per poter far funzionare quelli scelti). Se il computer è per un uso personale (desktop) e lo spazio su Hard Disk non manca ( > 2Gb ) ci si può sbizzarrire ad installare un po' di tutto, per verificare la funzionalità di programmi diversi. I programmi scelti vengono copiati sulle partizioni appena formattate.
- Si sceglie se installare l'interfaccia a finestre X window o lasciare soltanto la shell (interfaccia testuale). Se la macchina che si sta installando è destinata a diventare un server si consiglia di rimuovere ogni programma legato a X window ed ogni applicazione ludica/multimediale.
- Si inseriscono parametri relativi alla configurazione di rete, password dell'utente root, eventuali utenti aggiuntivi, servizi da avviare al boot ecc.
- Si installa sul Master Boot Record (MBR) del computer un Linux Loader (LILO o GRUB sono i più comuni) che permette il boot di Linux al riavvio e di eventuali altri sistemi operativi presenti sul sistema.
- Si crea, facoltativamente, un floppy disk di ripristino che permette di caricare il sistema installato in caso di problemi con l'MBR o altri fasi del boot.

Alla fine dell'installazione si esegue un reboot e ci si ritrova, da subito (non sono necessari ulteriori riavvii) un sistema Linux completo, già provvisto di una moltitudine diprogrammi per tutti gli usi.
Il tempo totale di installazione può variare generalmente dai 20 ai 60 minuti.

Utente root e comuni mortali

Autore: al - Ultimo Aggiornamento: 2003-09-20 11:44:54 - Data di creazione: 2003-09-20 11:44:54
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

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.
Per convenzione i semplici utenti possono scrivere, leggere e modificare file solo all'interno del loro ambiente (home) e lanciare comandi che non influiscono sulla configurazione o il corretto funzionamento 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 che si possa ricordare) 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 X window (l'interfaccia a finestre disponibile su Linux) come utente root su una macchina che ha accesso a reti esterne.

L'utente root è diverso dagli altri, in quanto ha pieno controllo del sistema.
Può infatti:
- Aggiungere, eliminare, modificare e cambiare la password degli altri utenti
- Installare e configurare tutti i servizi del sistema
- Accedere senza limitazioni (lettura e scrittura) a tutti i file presenti nel filesystem
- Gestire (avviare, terminare, modificare la priorità) tutti i processi
- Gestire l'hardware del computer
- Distruggere tutto con un solo comando (e tante altre brutte cose, il potere di root sul sistema è assoluto).

Inutile sottolineare che è molto importante che l'accesso a root sia limitato solo al proprietario o all'amministratore del sistema.

Hardware Compatibility List

Autore: al - Ultimo Aggiornamento: 2002-08-19 16:37:21 - Data di creazione: 2002-08-19 16:37:21
Tipo Infobox: DISTRO - Skill: 2- JUNIOR

Molte distribuzioni hanno una propria pagina dedicata all'hardware supportato. Seguire i link per dettagli.

Considerare che il supporto hardware di Linux dipende dal kernel più che dalle singole distribuzioni.
Una distribuzione più recente ha maggiori probabilità di supportare una gamma maggiore di hardware, avendo, presumibilmente, un kernel più recente.


Cobbler

Documentation, examples and use of Cobbler Linux Provisioning System

Introduction to Cobbler

Autore: lab42 - Ultimo Aggiornamento: 2009-04-16 10:11:49 - Data di creazione: 2008-09-01 14:02:57
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

Cobbler is a provisioning tool that glues different technologies in order to make easy to build up the components of an efficient provisioning server, perfect for mass or frequent deployment of RedHat/Centos/Fedora Linux systems.
It's done for RedHat based distributions even if it's supposed to work also for Suse and Debian.
It provides in an easy way:
- PXE server support
- DHCP server integration
- Kickstart server with templates  
- Easy yum repository management.
It's client, Koan, can install virtual machines or reinstall an existing metal system.

Official Site      
Cobbler is mainly developed by Michael DeHaan of RedHat.       
The Official site is http://fedorahosted.org/cobbler/ , rpm packages for RedHat / Centos are available in the EPEL repository.      

Basic setup
                              
yum install cobbler                            

Logic is easy:                            
1- you add / import distributions from CD or network                            
2- you add profiles and subprofiles for different kind of installations and kickstart templates                            
3- you may create systems based on existing profiles (MAC or IP addesses can be defined)                            
4- you can add Yum repositories to use with profiles                            
5- cobbler does the rest                            

1 - Import (makes a local copy of files) a distribution CD or ISO to provision with Cobbler                              
mount -t auto -o loop /data/iso/CentOS-5.1-i386-bin-DVD.iso /mnt/                              
cobbler import --mirror=/mnt/ --name=Centos5.1-i386                              
umount /mnt                              
Alternatively add a distro specifying where to find kernel and inird files (less common option).                            
cobbler distro add --name=RedHat5 --kernel=/path/to/vmlinuz--initrd=/path/to/initrd.img                            
                            
2 - Cobbler makes 2 default profiles (normal and xen), you can add more profiles with a command like:                            
cobbler profile add --name=rhel5-base --distro=RHEL-5-i386                      

3- You can  also create specific systems using defined profiles:                            
cobbler system add --name=mailserver --profile=rhel5-base
                            
4- Add repositories to manage with cobbler (you can automatically mirror them):                          
cobbler repo add --name=Centos-5.1-i386-CENTOSPLUS --mirror=ftp://ftp.sunet.se/pub/Linux/distributions/centos/5.1/centosplus/i386/
To refresh the local mirror and recreate repodata  type or place in cron:          
cobbler reposync


5- To apply all the configurations (stored in /var/lib/cobbler ) type cobbler sync
This updates files in:
/tftpboot  (accordind to templates in /etc/cobbler/pxe/*)  
/etc/dhcpd.conf
  (if dhcp support active, according to /etc/cobbler/dhcp.template )
/var/www/cobbler (Visible via web, should not be touched, it's mantained and "cleaned" by Cobbler):  The whole content of imported distros is copied in /var/www/cobbler/ks_mirror.
External repositories file (see below) are copied in /var/www/cobbler/repo_mirror  , kickstart files are generated in /var/www/cobbler/kickstarts  and  /var/www/cobbler/kickstarts_sys

Common commands
cobbler check (verifies if there are problems with current setup)
cobbler list (lists all the cobbler elements)
cobbler report (detailed list of elements)
cobbler sync (syncronizes the configuration to dhcp/pxe and data directories)
cobbler reposync (syncronizes the configured mirrors of external repositories)


Cobbler configuration
Configurations are in /etc/cobbler/settings
Interesting parameters:  
server: '<ip_server>' (the IP of Kickstart server, commonly the cobbler server)  
next_server: '<ip_server>' (the IP of the PXE server, commonly the cobbler server)  
manage_dhcp: 1 (default is "0". Activate it if you want to manage Dhcpd with cobbler. Edit, according to your needs, the template file /etc/cobbler/dhcp.template )  
snippetsdir: /var/lib/cobbler/snippets (Add here custom snippets for kickstart templates)
  
A separate file is available for the configuration of modules and third party addons. In /etc/cobbler/modules.conf you can define what kind of DNS/DHCP server to want to manage and authentication and authorization logics.  

Web Interface  
Most of the options available via the cobbler command line are available via Web. Cobbler web interface can be reached at: http://yourserver/cobbler/web/ .
(Note that in versions somehow older than Cobbler 0.8 it was http://yourserver/cobbler/webui/wui.html).
You can control access to the web interface in different ways, the easiest is to set in /etc/cobbler/modules.conf something like:  
[authentication]
module = authn_configfile  
[authorization]
module = authz_allowall
  
these settings don't set any particular per user authorization scheme and use file based Digest authentication.
To redefine the password of the default "cobbler" user to access the web interface use the command (then restart apache and cobbler):
htdigest /etc/cobbler/users.digest "Cobbler" cobbler

Client side usage
Koan is cobbler's client:
yum install koan
koan --server=192.168.0.42 --list-profiles
(lists available profiles on the Cobbler server)
koan --server=192.168.0.42 --list-systems
(lists available systems, if any)
koan --virt --server=192.168.0.42 --profile=RHEL5-i386  --virt-name=web01 (installs a virtual guest using the indicated profile)
koan --virt --server=192.168.0.42 --profile=RHEL5-i386  --virt-name=web01 --nogfx (installs a virtual guest from a console without graphic support).

Note: Default cobbler installations set "cobbler"  as root password.

Setting up Cobbler for Centos 5

Autore: lab42 - Ultimo Aggiornamento: 2009-03-27 13:09:38 - Data di creazione: 2008-09-01 14:06:56
Tipo Infobox: TIPS - Skill: 4- ADVANCED

Here follows an example of a Cobbler setup for provisioning Centos 5 with x86 architecture, using the most known extra repositories and some sample public mirror.
The same procedure can be easily adapted to other Centos versions or architectures, changing the specified urls and arch options.
You need at least 5Gb of space in /var/www/cobbler for importing the official DVD and not less that 30Gb of space for mirroring the additional repositories.

1 - Initial import from a Centos DVD. Place the DVD in your CD drive:
mount -t auto /dev/hdc /media/cdrom (if not autmounted)
cobbler import --mirror=/media/cdrom --name=Centos5 --arch=x86

If you have an ISO, you can import directly from it:
mount -t auto -o loop  /path/to/file.iso /mnt/
cobbler import --mirror=/mnt --name=Centos5 --arch=x86
umount /mnt

After this import, that can last some minutes, the iso or DVD is no longer necessary for cobbler: all its files are copied.

2-  Sync and show what has been done: you should  hve 2 distros and 2 profiles for normal and xen Centos provisioning.
cobbler sync
cobbler list
distro Centos5-x86
     profile Centos5-x86
distro Centos5-xen-x86
     profile Centos5-xen-x86

      
3- Add extra repositories from sample mirrors (find a list of official mirrors on Centos site)
Updates:
cobbler repo add --name=Centos5-UPDATES --mirror=ftp://ftp.sunet.se/pub/Linux/distributions/centos/5/updates/i386/ --priority=40 --createrepo-flags="-c cache" --arch=x86
CentosPlus:
cobbler repo add --name=Centos5-CENTOSPLUS --mirror=ftp://ftp.sunet.se/pub/Linux/distributions/centos/5/centosplus/i386/ --priority=40 --createrepo-flags="-c cache" --arch=x86
Extras:
cobbler repo add --name=Centos5-EXTRAS --mirror=ftp://ftp.sunet.se/pub/Linux/distributions/centos/5/extras/i386/ --priority=40 --createrepo-flags="-c cache" --arch=x86
EPEL:
cobbler repo add --name=Centos5-EPEL --mirror=http://www.mirrorservice.org/sites/download.fedora.redhat.com/pub/epel/5/i386/ --priority=50 --createrepo-flags="-c cache"
RPMFORGE (Dag and Others):
cobbler repo add --name=Centos5-RPMFORGE --mirror=http://apt.sw.be/redhat/el5/en/i386/dag/ --priority=90 --createrepo-flags="-c cache"
Note that EPEL and RPMFORGE may have problems when used at the same time. The use of priorities should solve most of them. If you want to use both, decide which one has to be selected first (lower priority) in case of conflicting packages.

4- Mirror your mirrors
cobbler sync (syncs the newly added repos)
cobbler reposync (makes a local mirror or the defined mirrors, requires Internet connection and may take a lot of time, especially at the first run).
It's a good practice to make a daily cron run of "cobbler reposync" in order to have your mirrors automatically updated.

Cobbler template files

Autore: lab42 - Ultimo Aggiornamento: 2009-03-27 13:22:59 - Data di creazione: 2008-09-01 20:24:13
Tipo Infobox: PATH - Skill: 5- SENIOR

Cobbler provides template files for dhcp/pxe/bind/dnsmasq configuration.
If you decide to manage there relevant services via cobbler, their configuration files are based on these templates that can be customized according to own needs.
Note that Cobbler overwrites and updates these configuration files if is configured to do that (for dhcp/dns/dnsmasq) every time you type cobbler sync.

/etc/cobbler/pxe/pxedefault.template
It's the main template file for PXE menu. Here you can change the PXE menus shown at boot time.  
This template replaces /tftpboot/pxelinus.cfg/default when cobbler sync is run.  
Important settings are:  
TIMEOUT: Idle Timeout. After this time PXE goes on with what is defined in ONTIMEOUT  
MENU TITLE: Just a string written at the beginning of the PXE menu  
DEFAULT: Default behaviour at PXE boot. Can be menu, to show the menu, the name of a label, to install what is defined in the label, local, to go on with a normal boot from local media.  
PROMPT: If set to 1 a simple prompt is shown.  
In the template $pxe_menu_items is replaced by all the systems and profiles configured in cobbler.    
DEFAULT menu
PROMPT 0
MENU TITLE Lab42 | http://www.lab42.it
TIMEOUT 200
TOTALTIMEOUT 6000
ONTIMEOUT local

LABEL local
MENU LABEL (local)
MENU DEFAULT
LOCALBOOT 0

$pxe_menu_items

MENU end



/etc/cobbler/pxe/pxeprofile.template  
The layout of the snippets of text to be inserted as single labels for a profile in place of    $pxe_menu_items in pxedefault.template
LABEL $profile_name
kernel $kernel_path
$menu_label
$append_line



/etc/cobbler/pxe/pxesystem.template
The layout of the snippets of text to be inserted as single labels for a system in place of $pxe_menu_items in pxedefault.template
  
default linux
prompt 0
timeout 1
label linux
kernel $kernel_path
$append_line
    

/etc/cobbler/dhcp.template
Template for ISC dhcp configuration file. Here you can define custom settings for your network and leave cobbler automatically populate host definitions in $insert_cobbler_system_definitions for defined systems (Mac address of the system is necessary here).  
ISC dhcp config file is managed (overwritten) by Cobbler according to this template if you define  manage_dhcp: 1 and manage_dhcp_mode=isc  in /etc/cobbler/settings .  

# generated from cobbler dhcp.conf template ($date)    
ddns-update-style interim;    
ignore client-updates;    
allow booting;    
allow bootp;
#if $omapi_enabled
omapi-port $omapi_port;
#end if
ignore client-updates;    
set vendorclass = option vendor-class-identifier;    
subnet 10.42.0.0 netmask 255.255.255.0 {    
     option routers          10.42.0.254;    
     option domain-name-servers     10.42.0.10;    
     option domain-name      "lab42.it";    
     option subnet-mask      255.255.255.0;    
     range dynamic-bootp     10.42.0.100 10.42.0.199;    
     filename                "/pxelinux.0";    
     default-lease-time      21600;    
     max-lease-time          43200;    
     server-name             "start";    
     next-server             $next_server;    
}    

[ ... ]  
    
/etc/cobbler/dnsmasq.template
Template for dnsmasq configuration file.  
Dnsmasq config file is managed (overwritten) by Cobbler according to this template if you define  manage_dhcp: 1 and manage_dhcp_mode=dnsmasq  in /etc/cobbler/settings .
# Cobbler generated configuration file for dnsmasq
# $date
#

# resolve.conf .. ?
#no-poll
#enable-dbus
read-ethers
addn-hosts = /var/lib/cobbler/cobbler_hosts

dhcp-range=192.168.1.5,192.168.1.200
dhcp-option=3,$next_server
dhcp-lease-max=1000
dhcp-authoritative
dhcp-boot=pxelinux.0
dhcp-boot=net:normalarch,pxelinux.0
dhcp-boot=net:ia64,$elilo

$insert_cobbler_system_definitions    


/etc/cobbler/named.template
Template for bind's named.conf .
It's overwritten by Cobbler if you define  manage_dns: 1 in /etc/cobbler/settings .

options {
listen-on port 53 { 127.0.0.1; };
directory       "/var/named";
dump-file       "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query     { localhost; };
recursion yes;
};

logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};

[ ... ]

Cobbler directories and files

Autore: lab42 - Ultimo Aggiornamento: 2009-04-16 10:16:37 - Data di creazione: 2008-09-03 19:24:18
Tipo Infobox: TIPS - Skill: 5- SENIOR

At first sight Cobbler logic about configuration and data files can be confusing.
Let's explore the most important locations of Cobbler world.
What's reported here applies to version 1.x, should work also for future versions and mostly works also for earlier versions, even if Cobbler developers have introduced not irrelevant changes in some files locations.

Configuration Files in /etc/cobbler    
Configuration related items are placed in /etc/cobbler    
Here you find the main configuration file: /etc/cobbler/settings (note that this applies since version 1.x, earlier it was in an ankward /var/lib/cobbler/settings - consider this when upgrading).    
In /etc/cobbler you find also the various default templaces for dhcp, dns, pxe, dnsmasq configuration.
In this directory you find also /etc/cobbler/users.digest where are defined the usernames and passwords for web access, /etc/cobbler/modules.conf for some modules settings (edit this to enable web access) and /etc/cobbler/users.conf for more fine grained settings of users authorizations logics.


Repo data in /var/www/cobbler    
The distros imported, the repos mirrored, the generated repo and kickstart files are all placed in  /var/www/cobbler . Be sure to have enough disk space available under this directory and consider it as something that shouldn't be touched by hand, as most of its parts are regenerated when you type cobbler sync or updated you type cobbler import or cobbler reposync.  
The contents of this directory are browsable at the address: http://your.cobbler.example.com/cobbler here you find these directories:  
images/ - Kernel and initrd images of all the imported distros for network bootstrap.  
ks_mirror/ - The mirrors of all the imported distros  
repo_mirror/ - The mirrors of all the defined repos   

Logs in /var/log/cobbler  
Cobbler main log is /var/log/cobbler/cobbler.log    
If it's enabled a syslog server for kickstarts in /var/log/cobbler/syslog you find all the installation messages of your systems.    

Cobbler data in /var/lib/cobbler  
All the configurations you make with Cobbler about profiles, systems, distros and so on are placed in this directory. Backup it and you have your cobbler data safe (excluded the mirrors of distros and repos in /var/www/cobbler).  
More precisely you find here:  
configs/ - A directory where info about distros, repos, systems and profiles are saved  
backup/ - A directory where the above files are automatically copied  
snippets/  - A directory where you can place snippets to import in your kickstarts  
triggers/  - A directory where you can place scripts to be executed as triggers on certain operations
kickstarts/  - A directory where there are the kickstart templates (previously in /etc/cobbler)

Using Cobbler Web Interface

Autore: lab42 - Ultimo Aggiornamento: 2009-04-16 10:18:02 - Data di creazione: 2008-09-03 18:57:04
Tipo Infobox: TIPS - Skill:

Cobbler Web Interface is a good frontend to easily manage most Cobbler operations. It permits to list, add and edit distros, profiles, subprofiles, systems, repos and kickstart files.  
The setup of the WebUI has changed since version 0.7.x, what follows refers to the "new" way of set up, working from version > 0.7.x.

The Web  Interface can be seen at the address: http://your.cobbler.server/cobbler/web  

You need Apache and Cobbler services running.  

You need to setup a username for accessing it (digest authentication).  
You can change the password for the existing cobbler user:  
htdigest /etc/cobbler/users.digest "Cobbler" cobbler  
Or you can add other usernames/passwords:  
htdigest /etc/cobbler/users.digest "Cobbler" yourname  

Be sure to have in /etc/cobbler/modules the following values:  
[authentication]  
module = authn_configfile  
[authorization]  
module = authz_allowall
  

For old Cobbler pre 1.0  versions be sure to have in /etc/cobbler/settings the following values:  
xmlrpc_rw_enabled: 1  
xmlrpc_rw_port: 25152
  

Restart cobbler service in you changed any of the above settings:
service cobblerd restart

For debugging check these logs:
/var/log/cobbler/cobbler.log
/var/log/httpd/error.log


More complex setups are possible for managing authorization and authentication policies, refer to official documentation for details.

Quick Cobbler Configuration settings

Autore: lab42 - Ultimo Aggiornamento: 2009-04-16 10:38:35 - Data di creazione: 2009-04-16 08:57:15
Tipo Infobox: DESCRIPTION - Skill:

A brief overview of the configurations settings you may activate on Cobbler, according to your needs.

Cobbler's configuration settings have evolved in its various versions, introducing new features and relative parameters.
In the /etc/cobbler/settings file they are defined somehow without an apparent order and might seem more confusing than what they actually are.  
These settings are generally relative to Cobbler 1.0 and later versions, most of them actually apply also to ealier versions, others have been introduced in more recent versions and some old settings have been deprecated.  
Here we refer to production releases (evem numbers, so 0.9 is the development version of 1.0, 1.1 is devel of 1.2, 1.3 is devel of 1.4) but consider that the relevant features may have been introduced in the relative devel versions.  


Here we consider what you have to define according to what you need.  

Probably the most important and, for default behaviour, the only parameter to set it the IP of your cobbler server  
server: 10.42.42.10  


To enable web access you should edit /etc/cobbler/modules.conf and activate an authentication module.  
For a DIGEST local authentication set:  
[authentication]  
module = authn_configfile
  
(Then use htdigest /etc/cobbler/users.digest "Cobbler" yourusername to set the password for yourusername )  
More info:  https://fedorahosted.org/cobbler/wiki/CobblerWebInterface  


If you want to manage a local DHCP server with Cobbler set:  
manage_dhcp: 1  
Other options related to DHCP:  
restart_dhcp: 1  
next_server: 10.42.42.10 # PXE server address (generally the Cobbler server)  
dhcpd_bin: /usr/sbin/dhcpd  
dhcpd_conf: /etc/dhcpd.conf  
dnsmasq_bin: /usr/sbin/dnsmasq  
dnsmasq_conf: /etc/dnsmasq.conf
  
In /etc/cobbler/modules.conf you decide which DHCP program to use (isc or dnsmasq):  
[dhcp]  
module = manage_isc
  
More info: https://fedorahosted.org/cobbler/wiki/ManageDhcp  


If you want to manage a local DNS server with Cobbler set:  
manage_dns: 1  
Other options related to DNS;  
restart_dns: 1  
bind_bin: /usr/sbin/named  
manage_forward_zones: []  
manage_reverse_zones: []
  
In /etc/cobbler/modules.conf you define which DNS program to use (bind or dnsmasq):  
[dns]  
module = manage_bind
  
More info: https://fedorahosted.org/cobbler/wiki/ManageDns  


Settings applied to the installed hosts  
The root's password (default: "cobbler"):  
default_password_crypted: "$1$mF86/UHC$WvcIcX2t6crBz2onWxyac."  
Default DNS servers set on installed hosts (useless in DHCP environment):  
default_name_servers: [ ]  
If you want to configure on the installed host the yum repo used during installation, set:  
yum_post_install_mirror: 1  


Define Cobbler behaviour for installed systems: Set the following parameters to 1 if you plan to reinstall the same servers, otherwise leave them to 0:  
allow_duplicate_hostnames: 0 # (Version 1.4)  
allow_duplicate_ips: 0  
allow_duplicate_macs: 0
  


Default kernel options when kickstarting (can be overriden):  
kernel_options:  
    ksdevice: eth0  
    lang: ' '  
    text: ~
  
To enable syslogging of kickstart operations to the cobbler server, add something like:   
    syslog: '10.42.42.10:25150'
  


Default settings for virt installations (can be overriden):  
default_virt_bridge: xenbr0  
default_virt_type: xenpv  
default_virt_file_size: 5  
default_virt_ram: 512
  


PXE related settings:  
enable_menu: 1 # (Version 1.2)  
pxe_just_once: 0  
pxe_template_dir: "/etc/cobbler/pxe"  
tftpd_bin: /usr/sbin/in.tftpd  
tftpd_conf: /etc/xinetd.d/tftp
  


Settings related to Cobbler server internals:  
xmlrpc_port: 25151  
register_new_installs: 0  
run_install_triggers: 1  
snippetsdir: /var/lib/cobbler/snippets

yumreposync_flags: "-l" # (Version 1.2)
yumdownloader_flags: "--resolve"



If you enable the authn_ldap module for Web authentication, here you define your LDAP settings:  
ldap_server: "ldap.example.com"  
ldap_base_dn: "DC=example,DC=com"  
ldap_port: 389  
ldap_tls: 1  
ldap_anonymous_bind: 1  
ldap_search_bind_dn: ''  
ldap_search_passwd: ''  
ldap_search_prefix: 'uid='
  


(Version 1.6) To enable auto-tracking via a scm of changes in /var/lib/cobbler set:  
scm_track_enabled: 1  
You can define which scm to use with:  
scm_track_mode: "git"  


(Version 1.4) To enable func installation and configuration on installed hosts set:  
func_auto_setup: 1  
You should then define you func master:  
func_master: overlord.example42.com  
More info: https://fedorahosted.org/cobbler/wiki/FuncIntegration  


(Version 1.4) Integration with Configuration management systems (such as Puppet)  
More info: https://fedorahosted.org/cobbler/wiki/UsingCobblerWithConfigManagementSystem  
mgmt_classes: []  
mgmt_parameters:  
   from_cobbler: 1
  


(Version 1.4) Power management settings:  
More info: https://fedorahosted.org/cobbler/wiki/PowerManagement  
power_management_default_type: 'ipmitool'  
power_template_dir: "/etc/cobbler/power"
  


(Version 1.6) To enable the sending of a report email after an installation set:  
build_reporting_enabled: 1  
Mail content is based on /etc/cobbler/reporting/build_report_email.template, other related options:  
build_reporting_sender: ""  
build_reporting_email: [ 'root@localhost' ]  
build_reporting_smtp_server: "localhost"  
build_reporting_subject: ""
  

Settings to integrate Cobbler with RHN or Spacewalk  
More info: https://fedorahosted.org/cobbler/wiki/TipsForRhn  
redhat_management_type: "off"  
redhat_management_server: "xmlrpc.rhn.redhat.com"  
redhat_management_key: ""  
redhat_management_permissive: 0
  

(Version 1.6) If you want to record installations log on the cobbler server's /var/log/cobbler/anamon directory (the kickstart templates must have the pre_anamon snippet ) set:  
anamon_enabled: 1


File e Filesystem


Gestire file, directory e links

Capire, muoversi e modificare file e directory: /, .., . , cd, ls, cp, mv, rm, rmdir, mkdir. Uso di link e symlink.

Introduzione a file e directory Unix

Autore: al - Ultimo Aggiornamento: 2003-11-28 19:33:54 - Data di creazione: 2003-11-28 19:33:54
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Il file system di un sistema Linux, come ogni Unix, ha una struttura gerarchica: tutti i suoi oggetti (file e directory) sono contenuti all'interno della root ( la directory principale, indicata semplicemente con "/" (barra) ) e lo stesso carattere / viene usato per separare i nomi delle directory ( Ad esempio /usr/bin/ indica la directory bin contenuta nella directory usr contenuta nella root (/).
La root contiente non soltanto TUTTE le altre directory di una partizione ma TUTTI i filesystem eventualmente montati sul sistema (partizioni e hard disk diversi, floppy, cdrom, condivisioni 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 (A:, C:, D: ecc) al cui interno si trovano le directory del relativo filesystem.
Su molti Linux, ad esempio, i file contenuti in un floppy disk si trovano in una directory chiamata /mnt/floppy e non in qualcosa chiamato A: come su Windows. Il nome di questa directory, oltretutto, può cambiare ed essere decisa arbitrariamente dall'utente o da chi ha realizzato la distribuzione (ovviamente esistono metodi per sapere in quale directory viene montato qualsiasi dispositivo).

Esistono alcune notazioni standard Unix per indicare la directory corrente, la directory padre, la home directory ecc.
E' opportuno conoscere bene queste convenzioni in quanto sono comunemente utilizzate in attività sistemistiche:
/ Come sopra riferito, indica la root, la directory principale alla base di tutto il filesystem
/bin/ Indica la sottodirectory bin (una arbitraria), alla root
bin/ Indica la sottodirectory bin rispetto alla dir corrente. Notare che se il path inizia con una / indica un path assoluto, che inizia dalla root ( /, appunto). Se non inizia con / indica un path relativo alla directory in cui ci si trova.
. Indica la directory corrente
.. Indica la directory madre di quella in cui ci si trova
../bin/ Indica la sottodirectory bin che si trova allo stesso livello della dir corrente.
~ La home directory dell'utente corrente (coincide di default con /home/login_utente

Un path assoluto, quindi, avrà un simile aspetto: /usr/local/bin e sarà funzionante in qualsiasi directory in cui ci si trova.
Un path relativo ha aspetto simile a local/bin e indica directory diverse a seconda della directory in cui ci si trova. In questo caso local/bin coincide con /usr/local/bin solo se ci si trova in /usr/

Comandi comuni
I comandi di gestione dei file su Unix sono paragonabili agli equivalenti di altri sistemi operativi a riga di comando come DOS. Tutti questi comandi, come tradizione Unix, hanno varie opzioni che possono ampliare notevolmente le potenzialità del comando stesso.
ls Visualizza il contenuto di una directory (equivale a dir su Dos e in alcuni Linux esiste anche un alia di ls che si chiama proprio dir);
cd Cambia la directory corrente. Corrisponde all'omonimo cd su DOS.
cp Esegue la copia di uno o più file. Corrisponde al copy di DOS.
mv Esegue lo spostamente o la rinomicanzione di un file. Corrisponde a move e rename su DOS.
rm Cancella uno o più file (fare attenzione: su molti Unix e Linux non è previsto l'equivalente di un cestino: se un file viene cancellato risulta poi piuttosto complesso recuperarlo). Corrisponde al del di DOS.
mkdir e rmdir Rispettivamente vengono usati per creare e cancellare una directory vuota.
ln Viene usato per create un link, hard o soft (con l'opzione ln -s).

cd

Autore: al - Ultimo Aggiornamento: 2004-05-23 15:43:07 - Data di creazione: 2004-05-23 15:43:07
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

E' il comando per cambiare la directory corrente, cioè, in pratica, per spostarsi in una directory diversa da quella in cui ci si trova (usare il comando pwd er visualizzare la directory corrente).
E' presente in tutti gli Unix e non è un comando a se stante (non è possibile trovarne il file binario) in quanto incorporato nella shell (BUILT IN COMMAND).

cd [directory]
Si aspetta come argomento il nome di una directory in cui spostarsi, se non ne viene specificata alcuna, entra, di default, nella home directory dell'utente.

Esempi
cd / Cambia la directory corrente nella root.
cd ../ Si sposta nella directory padre di quella in cui ci si trova.
cd bin Si sposta nella sottodirectory bin rispetto alla directory corrente.

File e directory su Linux

Linux ha una struttura del file system analoga a quella di ogni Linux.

La "root", radice, indicata con la barra "/" è la directory principale del sistema, ogni altro file o directory è contenuto al suo interno (non esistono volumi come C: D: ecc.).

Struttura delle directory
Tutti i file su Linux sono divisi all'interno di sottodirectory della root con funzione e scopo ben preciso:
/root - Home dell'utente root, da non confondere con la root ( / )
/etc - Contiene file di configurazione
/home - Contiene le home directory degli utenti normali (tutti tranne l'utente root)
/usr - Contiene binari, documentazione, librerie e sorgenti)
/var - Contiene tutti file che hanno informazioni dinamiche, che tendono a modificarsi con il tempo
/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 )

Notazioni per indicare un path
Il path è il percorso che indica un file o una directory.
Un path assoluto, inizia con / e indica la poisizione assoluta di un file all'interno della root: Es: /usr/local/bin.
Un path relativo, NON inizia con / e indica un percorso relativo alla directory in cui ci si trova. Es: usr/local/bin
Il carattere . (punto) indica la directory corrente (anche detta directory di lavoro).
I caratteri .. (doppio punto) indicano la directory "madre", Se indicati da soli si riferiscono alla madre della directory corrente.

Comandi comuni
ls - Visualizza il contenuto della directory indicata. Es: "ls /etc"
cd - Cambia la directory corrente. Es: "cd .."
cp - Copia un file. Es: "cp /home/al/fileorigine /tmp/filedestinazione"
mv - Sposta un file. Es: "mv /home/al/fileorigine /tmp/filedestinazione"
rm - Cancella un file. Es: "rm /tmp/filedacancellare"
mkdir - Crea una directory. Es: "mkdir nuovadirectory"
rmdir - Cancella una directory. Es: "rmdir /tmp/directorydacancellare"
ln - Crea un link. Es: "ln /var/tmp/nomefile tmp/nomelink"

Notare che negli argomenti di qualsiasi comando che si aspetta un nome di file o directory si possono usare sia path assoluti che relativi.

ls

Autore: al - Ultimo Aggiornamento: 2003-11-24 23:57:24 - Data di creazione: 2003-11-24 23:57:24
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Visualizza il contenuto di una directory. Corrisponde al "dir" di Windows.
Comando comune in tutti gli Unix, a volte con opzioni diverse.
Se non viene specificata alcuna directory, indica i file nella directory corrente.

ls [opzioni] [file]
-a Visualizza tutti i file, anche quelli nascosti (che iniziano con un punto: .)
-l (--format=long) Visualizza informazioni aggiuntive quali data di modifica, permessi, owner e group
-i (--inode) Visualizza anche l'inode dei file
-f Non esegue alcun ordinamento di file e li visualizza nell'ordine con cui sono stati memorizzati (di default ls fa un elenco in ordine alfabetico)
-t (--sort=time) Ordina l'elenco dei file secondo la data di modifica
-u (--time=access) Ordina l'elenco dei file secondo la data di ultimo accesso
-S (--tsort=size) Ordina l'elenco dei file secondo la dimensione
-r (--reverse) Ordina in senso inverso l'output dei file (da usare con -t, -u, -S ecc.)
-X (----sort=extension) Ordina i file per estensione
-R (--recursive) Elenca ricorsivamente tutte le sottodirectory e i file ivi contenuti, rispetto alla directory specificata (o corrente)
-I pattern (--ignore pattern) Non visualizza i file che matchano il pattern specificato

Esempi
ls -lS /var/spool/mail Esegue un listing esteso dei file contenuti in /var/spool/mail ordinandoli secondo dimensioni dal più grande al più piccolo.
ls -ltr /var/log Elenca i file contenuti nella directory /var/log secondo data di modifica inversa: dal più vecchio al più recente.
ls -a ~ Elenca tutti i file (anche quelli nascosti, preceduti da un .) presenti nella propria home directory.

cp

Autore: al - Ultimo Aggiornamento: 2003-11-25 14:52:03 - Data di creazione: 2003-11-25 14:52:03
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Copia file e directory. Comando flessibile che permette di copiare sia un file su una destinazione data, sia un numero arbitrario di file su una directory d'arrivo. Può essere utile anche come strumento di backup e in script.
E' comune in tutti gli Unix ma alcuni parametri possono variare.

cp [opzioni] sorgente destinazione
cp [opzioni] sorgenti... directory_destinazione


OPZIONI POSIX (Valide in tutti gli Unix)
-f (--force) Forza la copia, rimuovendo i file di destinazione preesistenti, se esistenti.
-i (--interactive) Chiede conferma prima di sovrascrivere i file di destinazione (il cp su linux è solitamente un alias di cp -i, per cui di default viene chiesta la conferma alla sovrascrittura)
-p (--preserve) Preserva gli attributi dei file copiati (owner, group, permessi, data di ultima modifica e data di ultimo accesso).
-R (--recursive) Copia le directory ricorsivamente (include file e sottodirectory) rispettando l'integrità di file speciali.

OPZIONI GNU (Tipiche di Linux e altri Unix che usano la versione GNU di cp)
-a (--archive) Corrisponde a cp -dpR e conserva nella copia quanto possibile la struttura e gli attributi dei file originali. Da usare quando si intende fare il backup di directory e file.
-d (--no-dereference) Copia link simbolici come link simbolici piuttosto che copiare i file da essi puntati, e conserva la relazione di hard link tra i file originali anche nelle copie.
-s (--symbolic-link) Crea un link simbolico invece della copia vera e propria dei file o directory.
-u (--update) Nel caso il file di destinazione esiste già, lo sovrascrive solo se ha data di modifica più vecchia.
-v (--verbose) Stampa il nome di ogni file prima di copiarlo.
-b (--backup) Crea copie di backup dei file che stanno per essere sovrascritti o rimossi.
-S SUFFISSO Aggiunge il SUFFISSO specificato a tutti file di backup.

Esempi
cp -a /etc /backup/ Copia tutta la directory /etc e i suoi contenuti nella directory /backup. Mantiene i link simbolici e i permessi inalterati.
cp /etc/grub.conf /tmp/ Copia il file /etc/grub.conf nella directory /tmp. Se /etc/grub.conf è un symlink, in /tmp/ si ritrova una copia del file a cui il link punta e non un symlink.

ln

Autore: al - Ultimo Aggiornamento: 2003-11-24 23:51:21 - Data di creazione: 2003-11-24 23:51:21
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Crea un link al file specificato. Il link è un alias, uno pseudonimo, un secondo nome con cui un file può essere richiamato, oltre che con il suo nome principale.
ln è un comando comune in tutti gli Unix, la differenza fra hard e soft link è presente in tutti gli Unix.

ln [opzioni] nome_file_puntato [nome_link]
ln [opzioni] nomi sorgente directory destinazione

Nel primo caso se nome_file_puntato è un file, viene riscritto, se non viene specificato, viene creato nella directory corrente un link con il nome_sorgente (senza path).
Nel secondo caso è possibile specificare più file sorgenti e una directory di destinazione in cui vengono creati altrettanti alias con lo stesso nome.
-s (--symbolic) Crea un link simbolico e non un hard-link. Opzione molto utilizzata.
-b (--backup) Esegue una copia di backup dei file di destinazione, prima di cancellarli (se esistono).

Esempi
ln -s /usr/sbin/sendmail.postfix /usr/sbin/sendmail Crea un link simbolico chiamato /usr/sbin/sendmail che punta al file /usr/sbin/sendmail.postfix
ln -s /etc/passwd Crea, nella directory corrente, un link simbolico chiamato passwd che punta al file /etc/passwd
ln /etc/passwd /etc/shadow /etc/group /backup/ Crea 3 hardlink chiamati passwd, shadow e group nella directory /backup/ che puntano ai rispettivi file nella directory etc.

mv

Autore: al - Ultimo Aggiornamento: 2003-11-25 15:05:33 - Data di creazione: 2003-11-25 15:05:33
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Sposta o rinomina un file o una directory.
E' un comando comune a tutti gli Unix (con opzioni che possono variare). Notare che su Unix non esiste il corrispondente del comando "rename" di Windows. Il cambiamento di nome di un file viene fatto semplicemente "spostandolo" in un file con nome diverso.

mv [opzioni] sorgente destinazione
mv [opzioni] sorgenti... directory_destinazione


-f (--force) Forza lo spostamento, sovrascrivendo i file di destinazione preesistenti, se esistono.
-i (--interactive) Chiede conferma prima di sovrascrivere i file di destinazione (il mv su Linux è solitamente un alias di mv -i, per cui di default viene chiesta la conferma alla sovrascrittura)
-u (--update) Nel caso il file di destinazione esiste già, lo sovrascrive solo se ha data di modifica più vecchia.
-v (--verbose) Stampa il nome di ogni file prima di spostarlo.
-b (--backup) Crea copie di backup dei file che stanno per essere sovrascritti o rimossi.
-S SUFFISSO Aggiunge il SUFFISSO specificato a tutti file di backup.

Esempi
Il comportamento di mv varia a seconda della natura di sorgente e destinazione, seguono alcuni esempi generici, se risultano poco chiari fare pratica sul proprio sistema, è sempre il metodo migliore:
mv /directory/file /directory/file_nuovo (Rinomina file in file_nuovo)
mv /directory/file /directory/file_esistente (Sovrascrive file_esistente con file)
mv /directory/file /directory/subdirectory_esistente (Sposta file all'interno di subdirectory_esistente)
mv /directory/subdirectory /directory/subdirectory_nuova (Rinomina subdirectory)
mv /directory/subdirectory /subdirectory_nuova (Sposta, e rinomina, subdirectory)
mv /directory/subdirectory /directory/subdirectory_esistente (Sposta subdirectory all'interno di subdirectory_esistente)

Risolvere problemi di spazio su disco con i symlink

Autore: al - Ultimo Aggiornamento: 2003-11-24 23:07:30 - Data di creazione: 2003-11-24 23:07:30
Tipo Infobox: TIPS - Skill: 2- JUNIOR

Può capitare di avere un sistema installato su più partizioni di un hard disk e ritrovarsi con un utilizzo non omogeneo dello spazio su disco libero.
In tempi rapidi, usando dei symlink, si possono mettere delle rapide "pezze" senza dover ridimensionare le partizioni o aggiungere hard disk.

Analizziamo questo esempio:
[root@socrate al]# df -k
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hda5              1682664   1254556    342632  79% /
/dev/hda1                19487      6793     11688  37% /boot
none                    258400         0    258400   0% /dev/shm
/dev/hda2              1512000     74880   1360312   6% /var

Ipotizziamo di dover copiare da un CDROM in /home/bigdata di questo sistema una grande quantità di dati, più di quanto possa essere contenuto nella /, che si trova nella stessa partizione ormai piena al 79%.
Una rapida soluzione può essere copiare i dati in un'altra partizione e mantenere lo stesso path in /home con un link simbolico:
mkdir /var/bigdata
cp -r /mnt/cdrom/* /var/bigdata
ln -s /var/bigdata /home/bigdata

In questo modo esiste sempre la directory /home/bigdata e il fatto che in realtà sia un link simbolico a /var/bigdata è trasparente, per il sistema.

Questo è solo un esempio, non perfettamente calzante (la directory /var, contenendo log e file mutevoli, è destinata a riempirsi) che comunque da l'idea di come con un semplice link si possono spostare intere directory e distribuire meglio lo spazio disponibile su partizioni diverse.

La struttura delle directory su Linux (Unix)

Autore: al - Ultimo Aggiornamento: 2003-11-24 20:55:36 - Data di creazione: 2003-11-24 20:55:36
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

La struttura delle directory in un sistema Linux ha molte caratteristiche comuni a quella di altri sistemi Unix.
Sotto vengono riportare le directory principale e più comuni su Unix diversi, altre directory possono avere nomi o funzionalità diverse in Unix diversi (e anche in distribuzioni Linux diverse).

/ Radice (root). La directory principale che contiene tutte le altre.
/root Home dell'utente root, da non confondere con la root ( / ), che è la directory principale e non una directory che si chiama /root
/boot Contiene tutte le immagini del kernel e file indispensabili al bootstrap del sistema
/etc Contiene i file di configurazione del sistema e dei programmi installati
/home Contiene le home directory degli utenti normali (tutti tranne l'utente root)
/usr Contiene binari, documentazione, librerie e sorgenti della maggior parte dei programmi (e i sorgenti del kernel)
/var Contiene tutti file che hanno informazioni dinamiche, che tendono a modificarsi con il tempo: log, file di pid e lock dei processi in esecuzione, directory di spool (stampa, mail...) ecc.
/proc File system virtuale, generato in tempo reale dal kernel. Contiene, come se fossero file e directory, dati dinamici sul sistema e sui processi
/dev Contiene file speciali, che corrispondono a dispositivi hardware o a funzionalità particolari. Tramite di essi si può accedere al relativo device hardware.
/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/ )
SWAP Non è una directory ma una partizione speciale, utilizzata come memoria virtuale.

rm

Autore: al - Ultimo Aggiornamento: 2003-11-25 15:11:10 - Data di creazione: 2003-11-25 15:11:10
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Cancella file o directory.
E' comune in tutti gli Unix ma alcuni parametri possono variare.
ATTENZIONE: IN UNIX NON ESISTE IL "CESTINO", QUANDO UN FILE VIENE CANCELLATO NON E' POSSIBILE RECUPERARLO FACILMENTE! (Ci sono comunque dei metodi per recuperare dei file cancellati, ma non sono semplicissimi).
Per poter cancellare un file è necessario avere permessi in scrittura sulla directory che lo contiene, ma NON E' NECESSARIO AVERLI SUL FILE stesso (se non si hanno permessi di scrittura sul file che si vuole cancellare, e che si trova in una directory dove si può scrivere, viene semplicemente richiesta una conferma prima della cancellazione).
Se si vuole cancellare un file in modo definitivo, rendendo impossibile un suo recupero, utilizzare il comando shred.

rm [opzioni] file

-f (--force) Forza la rimozione senza richiesta di conferma.
-i (--interactive) Chiede conferma prima di cancellare i file
-R (-r , --recursive) Se viene indicata una directory la cancella con tutto il suo contenuto (USARE CON CAUTELA)

ATTENZIONE a usare certe opzioni di rm, un comando come rm -rf /* se eseguito come root cancella brutalmente tutto il file system (in realtà ad un certo punto la cancellazione si blocca perchè vengono cancellati alcuni file vitali al funzionamento corrente del sistema, ma il risultato è comunque catastrofico e irreparabile).

Esempi
rm -rf /tmp Cancella tutta la directory /tmp
rm -rf /tmp/* Cancella tutti i file contenuti nella directory /tmp (la directroy rimane vuota)

Stele di Rosetta e comandi su diversi OS

Autore: al - Ultimo Aggiornamento: 2003-11-24 23:25:30 - Data di creazione: 2003-11-24 23:25:30
Tipo Infobox: ETCETERA - Skill: 3- INTERMEDIATE

Molte comandi Unix eseguono funzioni comuni ad analoghi comandi su altri sistemi operativi. Per chi conosce bene un sistema operativo e vuole velocemente sapere gli equivalenti dei comandi su un nuovo OS, esistono in rete varie "Stele di Rosetta" o comunque tavole comparative.
Alcune di queste si riferiscono ai diversi dialetti Unix, che pur avendo radice comune, in certi comandi e naming convention differiscono fra loro.

Nei link associati a questo INFOBOX ci sono alcune di queste preziose risorse.

I file system Unix

Autore: al - Ultimo Aggiornamento: 2003-11-24 22:25:58 - Data di creazione: 2003-11-24 22:25:58
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

La logica del file system Unix è semplice, elegante e potente, alcune sue caratteristiche sono comuni al DOS, altre all'antico MULTICS, altre sono uniche.
Le directory, a livello di sistema, sono trattate come dei file che invece di contenere dei dati contengono altri file o directory; per il sistema sono tutti i-node, che hanno in due parti separati il loro descriptor (nome, attributi, permessi ecc) dal contenuto (il dato presente nel file, o, nel caso di una directory, l'elenco dei file che contiene).

I file possono avere qualsiasi carattere (escluso NUL) nel nome, anche caratteri speciali per la shell o spazi e CR (Carriage Return).
Le estensioni non hanno nessuno specifico significato: sono usate per comodità da alcuni comandi ma non sono indispensabili e, a livello del file system, nemmeno identificative del tipo di file.

Una tipica partizione Unix contiene un file system così organizzato:
- Blocco 0, non usato da Unix, a volte usato per il boot del sistema (è l'MBR se si trova sul device primario);
- Blocco 1 o superblock, contiene informazioni critiche sulla struttura del file system (numero di i-node, numero di blocchi del disco ecc);
- Elenco degli I-node, numerati da 1 a un numero finito, che contengono le informazioni sui singoli file presenti nel file system e sulla posizione dei rispettivi dati;
- Blocchi dei dati, con i dati effettivi contenuti nel file.

Gli i-node contengono informazioni quali: tipo di file, permessi, data di creazione, modifica, ultimo accesso, utente e gruppo proprietari, posizione e dimensione del file ecc.
Tramite l'uso di link è possibile fare in modo che lo stesso i-node sia condiviso di diversi oggetti nel filesystem.

Linux di default supporta il file-system ext2 che ha molte caratteristiche in comune con un tipico file system Unix System V. Il kernel di Linux comunque permette l'uso di molti altri file system come ext3, reiserFS, jfs (file system giornalistici, che tengono un log di tutte le operazioni di scrittura per permettere un recupero dei dati più agevole in caso di guasti), i file system di Windows (fat, fat32, ntfs) e quelli di molti altri sistemi operativi (BeOs, AmigaOs, Mac, ecc), oltre a file system di rete come NFS, SMB, Novell.

find / -inum #inode

Autore: al - ( Revisione: al ) - Ultimo Aggiornamento: 2004-05-23 15:44:30 - Data di creazione: 2004-05-23 15:44:30
Tipo Infobox: BOFH - Skill: 3- INTERMEDIATE

Trova in tutto il file system i file con l'inode specificato.
E' utile per identificare gli hard link ad un file.
Nell'esempio sotto si visualizza l'inode di un file che si è visto avere 3 nomi associati (il 3 nella terza colonna dell'output di ls -li) e si cerca in tutto il file sysyem tutti i file che hanno stesso inode.

[root@trinity root]# ls -li /usr/bin/zgrep
301759 -rwxr-xr-x    3 root     root         1461 Aug 24  2001 /usr/bin/zgrep
[root@trinity root]# find / -inum 301759
/usr/bin/zfgrep
/usr/bin/zgrep
/usr/bin/zegrep

for a in `ls -1`; do  mv $a  `echo $a | tr '[:upper:]' '[:lower:]'`  ; done

Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2004-05-23 15:45:02 - Data di creazione: 2004-05-23 15:45:02
Tipo Infobox: BOFH - Skill: 4- ADVANCED

Script in una riga che trasforma il nome di file nella directory corrente in caratteri minuscoli.

E' possibile invertire il risultato, cioe' trasformare tutto in maiuscolo, invertendo di posto
[:upper:]' '[:lower:]'

stat

Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2004-05-23 15:43:42 - Data di creazione: 2004-05-23 15:43:42
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

E' un comando che permette di visualizzare informazioni utili sui file come dimensione, permessi, inode, owner, data di ultimo accesso, di creazione e di modifica. In pratica tutto quello che è necessario conoscere di un file.
Ha opzioni, inoltre, che forniscono informazioni sul file system che contiene il file e che permettono di esportare i dati in modo sequenziale e poco user friendly ma comodo per essere gestiti all'interno di script.

stat [-l] [-f] [-v] [-t] file-name [file-name]...
-l Flag da utilizzare per i links
-f Visualizza le informazioni del file system che contiene il file
-t Visualizza lo stdout in modo tale da essere processato da un secondo programma o comando

Esempi
stat /etc/rc.local Fornisce informazioni, in formato "human readable" sul file /etc/rc.local (nel nostro caso un link simbolico)
stat -l /etc/rc.local Fornisce informazioni sul file a cui punta il link simbolico /etc/rc.local
stat -t /etc/group Fornisce informazioni su /etc/group dando solo l'elenco dei risultati senza specificarne la natura, utile per "passare" il risultato ad un altro comando all'interno di uno script.

mc: Midnight Commander

Autore: homer - ( Revisione: al ) - Ultimo Aggiornamento: 2004-03-06 02:01:55 - Data di creazione: 2004-03-06 02:01:55
Tipo Infobox: DESCRIPTION - Skill: 1- NOVICE

Midnight Commander è un file manager definito anche una Visual Shell per sistemi Unix, utile sui server dove spesso X non viene utilizzato. Ha una logica e un aspetto molto simile al vecchio Norton Commander per DOS.

E' possibile lanciare Midnight Commander in una shell tramite il comando mc. Questo software una volta avviato presenta un pannello di controllo diviso in quattro parti. Due pannelli più grandi in cui vengono visualizzati i file contenuti nella directory in cui ci si trova al momento dell'esecuzione, la linea di comando, e dei menu richiamabili tramite tasti funzione F1-F10.

Il programma può essere utilizzato anche mediante i menu a tendina, e con l'ausilio del mouse, quest'ultimo non solo in locale ma anche in remoto tramite connessioni via telnet o ssh.

Tra le caratteristiche di questo file manager, la possibilita' di montare directory FTP, visualizzare file tar, DEB ed RPM con possibilita' di estrarne singoli file, ed infine eseguire l'undeleting di file su partizioni di tipo EXT2.

Hard link e Symbolic link

Autore: al - Ultimo Aggiornamento: 2003-11-24 23:04:40 - Data di creazione: 2003-11-24 23:04:40
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

I sistemi Unix fanno largo uso di link: dei file speciali che sono semplici collegamenti o alias di file esistenti.
Servono per identificare lo stesso file o directory con nomi diversi, avendo anche path diversi.
Su Unix esistono due tipi di link: Hard link e Symbolic link.
L'effetto che hanno è lo stesso, ma la loro natura è diversa e si adattano a diversi utilizzi.
L'utilità dei link è varia:
- Se si devono modificare diversi file uguali, in diverse directory, con l'uso di link la modifica fatta su un file diventa immediatamente effettiva anche sugli altri file (link) (Es: la struttura  di /etc/rc.* ) .
- Se si devono poter gestire contemporaneamente diversi ambienti o programmi con diverse versioni, si può cambiare solo il puntamento del link usato per accedere a questi ambienti per poter switchare rapidamente da uno all'altro (es: /usr/src/linux )
- Se si devono gestire diverse alternative dello stesso comando, si può usare un link per referenziare il comando con un nome fisso e poi cambiare il puntamento per valutare in tempi brevi le diverse alternative (ex: Directory /etc/alternatives in RedHat Linux).

Hard Link
Sono di fatto una copia di una voce di directory, hanno nomi diversi ma puntano allo stesso inode e quindi condividono esattamente lo stesso dato (oltre agli stessi permessi, data di modifica, owner ecc.).
Dal momento che originale e link sono indistinguibili e condividono lo stesso inode, non si possono fare hard link fra file system diversi e, in genere su Unix, su directory (su Linux è possibile creare un hard link ad una directory tramite l'opzione speciale -d).
Pur essendo la gestione dei link comunque molto rapida da parte del kernel, gli hard link sono leggermente più "economici" in quanto risparmiano più spazio su disco (stesso i-node, stessi dati) e richiedono una lettura in meno sul file system (i symlink hanno i-node diverso e puntatore, che va letto, ad un altro file).

Symbolic Link o Symlink
Sono dei piccoli file che contengono un puntamento ad altri file o directory. Questi file hanno i-node autonomo e possono puntare a file di altri file system (sia locali, che di rete). Si possono facilmente visualizzare con un normale ls -l e se viene cancellato o spostato il file a cui puntano rimangono "stale": continuano ad esistere ma puntano a qualcosa che non esiste.
I symlink sono generalmente molto più utilizzati nell'amministrazione di sistemi Unix e corrispondono come concetto e come implementazione ai collegamenti (shortcut) del mondo Windows.
Un symlink appare come avente tutti i permessi aperti a tutti gli utenti, di fatto è trasparente rispetto a permessi e ownership e riflette quelli del file o directory a cui punta.

tree

Autore: al - Ultimo Aggiornamento: 2003-11-27 11:50:38 - Data di creazione: 2003-11-27 11:50:38
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Visualizza ricorsivamente l'elenco dei file e delle sottodirectory rispetto alla directory indicata (quella corrente, se non viene specificata).
L'output è ad albero e indica chiaramente la gerarchia delle directory.

tree [opzioni] [directory]
-a Visualizza tutti i file, anche quelli nascosti.
-d Visualizza solo le directory
-s Visualizza anche le dimensioni di ogni file
-p Visualizza anche i permessi di ogni file
-D Visualizza anche la data di modifica di ogni file
-u Visualizza anche l'owner di ogni file

Esempi
tree Visualizza l'albero delle directory a partire dalla directory corrente.
tree -ap /etc Visualizza l'albero delle directory all'interno di /etc includendo tutti i file nascosti ed evidenziando i permessi di ogni file
tree -ud / Visualizza l'elenco di tutte le directiry (escludendo quindii file) e il rispettivo owner all'interno di tutto il filesystem

mkdir

Autore: al - Ultimo Aggiornamento: 2003-11-27 11:36:22 - Data di creazione: 2003-11-27 11:36:22
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Crea una o più directory. E' necessario avere permessi di scrittura nella directory in cui si vogliono creare nuove sotto directory. Comune in tutti gli Unix.

mkdir [opzioni] directory
-m ### (--mode ###) Specifica i permessi della directiry creata (di default sono 777).
-p (--parent) Crea le directory padre intermedie, nel caso non esistano. (es: mkdir -p /usr/local/test/my/dire crea la directory dire e anche le directory my, test, local, usr nel caso non esistano)

Esempi
mkdir -p temp/test/prova/nuova Crea tutte le directory e sottodirectory indicate (anche se non esistono) rispetto alla posizione corrente. Senza l'opzione -p la directory "nuova" si poteva creare se esistevano già tutte le precedenti.
mkdir /tmp/nuova Crea la directory "nuova" all'interno di /tmp.

rmdir

Autore: al - Ultimo Aggiornamento: 2003-11-27 11:46:08 - Data di creazione: 2003-11-27 11:46:08
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Rimuove directory (ma non il loro contenuto).
Comando comune a tutti gli Unix.
Non cancella directory non vuote, per il quale è necessario un comando tipo rm -R

rmdir [opzioni] directory
-p (--parents) Rimuove la directory specificata e ogni directory genitore che dovesse essere rimasta vuota.
--verbose Modalità verbosa: per ogni directory rimossa stampa un messaggio

Esempi
rmdir /tmp/nuova Rimuove la sottodirectory "nuova" all'interno di /tmp (ma solo se nuova non contiene file.

touch

Autore: al - Ultimo Aggiornamento: 2003-11-27 11:28:06 - Data di creazione: 2003-11-27 11:28:06
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Cambia il tempo di accesso e modifica di un file, di fatto fa quello che dice: "tocca un file senza modificarne i contenuti.
Se il file non esiste ne crea uno nuovo di dimensioni zero.
Comando comune a tutti gli Unix.

touch [opzioni] [data] files
data La data è quella corrente se non specificata, altrimenti va inserita nel formato mmddhhmm[yy]
-a Aggiorna solamente l'access time.
-m Aggiorna solamente il modify time.

Esempi
touch /tmp/nuovo Crea un file chiamato /tmp/nuovo di 0 byte e data di modifica e ultimo accesso attuale
touch /etc/group Cambia la data di modifica e ultimo accesso a quella attuale.


Leggere e visualizzare file

Comandi per visualizzare e leggere file: cat, less, more, tail, info, strings.

cat

Autore: al - Ultimo Aggiornamento: 2003-11-27 12:53:00 - Data di creazione: 2003-11-27 12:53:00
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Legge uno o più file e li scrive sullo standard output.
E' il comando Unix più comune per visualizzare un file ASCII senza interruzioni o particolari filtri.

cat [opzioni] [file]
-v (--show-nonprinting) Visualizza caratteri di controlli e non stampabili (ad eccezione dei LINEFEED e TAB).
-T (--show-tabs) Visualizza i caratteri TAB come ^I
-E (--show-ends) Visualizza $ alla fine di ogni riga (dove c'è un LINEFEED)
-A (--show-all) Corrisponde a -vET
-n (--number) Numera tutte le righe in output, iniziando da 1.

Esempi
cat -A file.dos Visualizza il contenuto di file.dos evidenziando la presenza di eventuali caratteri non stampabili (se il file è stato copiato o salvato da Windows avrà dei caratteri di fine riga, non necessari su Linux/Unix che possono creare problemi. Per rimuoverli usare il comando dos2unix)

more

Autore: al - Ultimo Aggiornamento: 2003-11-27 17:50:07 - Data di creazione: 2003-11-27 17:50:07
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Visualizza i file specificati una pagina alla volta.
E' comune in tutti gli Unix, ma in molti OS basati su utility GNU viene spesso sostituito o affiancato dall'analogo e più flessibile "less".
Con "SPAZIO" si scrolla l'output di una pagina, con "q" si torna alla shell.

more [opzioni] [file]
-r Visualizza caratteri speciali e di controllo
+ #numero Inizia a visualizzare dalla riga numero specificato
-num #numero Imposta le dimensioni dello schermo a #numero righe
-p Ripulisce ogni volta le pagine e non le scrolla. E' utile, con terminali che presentano problemi di visualizzazione, per rendere più leggibile l'output.

Una volta eseguito more si entra in modalità visualizzazione, in cui è possibile dare diversi comandi:
SPAZIO Visualizza la schermata di testo successiva
INVIO Visualizza la riga di testo successiva
q Esce da more e torna alla shell
/pattern Cerca il pattern indicato all'interno del testo
n Cerca l'occorrenza successiva dell'ultimo pattern cercato
!comando invoca la shell ed esegue il comando scritto
:n Salta al file successivo (quando si visualizzano più file
:p Salta al file precedente

less

Autore: al - Ultimo Aggiornamento: 2004-05-23 15:45:57 - Data di creazione: 2004-05-23 15:45:57
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Visualizza il contenuto di un file pagina per pagina, permettendo di scrollare al suo interno.
E' una versione più evoluta e recente di "more".
E' comune in tutti gli Unix che utilizzano utility GPL, Linux fra questi.

less [opzioni] [file]
-j #numero Inizia a visualizzare dalla riga numero specificato
- #numero Imposta il valore di default di linee scrollate (se non specificato è lo schermo intero)
-C Ripulisce ogni volta le pagine e non le scrolla. E' utile, con terminali che presentano problemi di visualizzazione, per rendere più leggibile l'output.
-o file Copia l'output sul file specificato nel caso in cui l'input provenga da una pipe.
-p pattern All'apertura del file visualizza la prima occorrenza del pattern specificato.

Una volta eseguito less si entra in modalità visualizzazione, in cui è possibile dare diversi comandi:
SPAZIO Visualizza la schermata di testo successiva (o avanza del numero di righe specificate con l'opzione - )
INVIO Visualizza la riga di testo successiva
FRECCIA SU-GIU Scrolla verso l'alto o verso il basso l'output
q Esce da less e torna alla shell
/pattern Cerca il pattern indicato all'interno del testo
n Cerca l'occorrenza successiva dell'ultimo pattern cercato
!comando invoca la shell ed esegue il comando scritto
:n Salta al file successivo (quando si visualizzano più file)
:p Salta al file precedente

Comandi per visualizzare il contenuto di file

Autore: al - Ultimo Aggiornamento: 2003-11-27 17:49:06 - Data di creazione: 2003-11-27 17:49:06
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Su Unix sono disponibili svariati comandi che permettono la visualizzazione del contenuto di file di testo o binari.
Fare pratica con i principali è fondamentale per la normale attività sistemistica.
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.

cat Visualizza il contenuto di un file di testo
tac Fa esattamente la stessa cosa di cat, ma al contrario, visualizzando per prime le utile righe di un testo.
less Visualizza il contenuto di un file testo, pagina per pagina
more Come less, ma con meno funzioni
tail Visualizza l'ultima parte di un file di testo
head Visualizza la prima parte di un file di testo
file Analizza e mostra il tipo di un file
strings Visualizza stringhe di testo all'interno di un file binario

tail

Autore: al - Ultimo Aggiornamento: 2003-11-27 17:54:29 - Data di creazione: 2003-11-27 17:54:29
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Visualizza le ultime righe (di default 10) di un file.
E' un comando Unix comune.
Con l'opzione -f visualizza il file continuamente, senza tornare alla shell: opzione molto utile per tenere sotto controllo dei log.

tail [opzioni] [file]
-f Non esce alla fine del file ma continua a visualizzarlo mentre cresce. Premere CTRL+C per tornare alla shell
- #numero Visualizza le ultime #numero righe del file specificato

Esempi
tail -f /var/log/maillog Visualizza l'ultima parte del file /var/log/maillog, continuando a scorrere il testo mano a mano che nuove righe si aggiungono al log. Questa funzionalità è molto comoda per diagnosticare problemi vari visualizzando in tempo reale file di log o debug.
tail -10 codice.txt Visualizza le ultime 10 righe del file codice.txt presente nella directory corrente.

head

Autore: al - Ultimo Aggiornamento: 2004-05-23 15:46:23 - Data di creazione: 2004-05-23 15:46:23
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Visualizza le prime righe (di default 10) di un file.
E' un comando Unix comune.

head [opzioni] [file]
-#numero Visualizza le prime #numero righe del file specificato
-c #numero Stampa i primi #num byte

Esempi
head -5 /etc/group Visualizza le prime cinque righe di /etc/group
head -c5 /etc/group Visualizza i primi 5 caratteri di /etc/group

file

Autore: al - Ultimo Aggiornamento: 2003-11-27 18:01:14 - Data di creazione: 2003-11-27 18:01:14
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Comando utile per capire la natura di un file che non si conosce. Identifica il tipo di file specificato sulla base di pattern definiti nel file di definizioni /etc/magic  (o /usr/share/magic )

file [opzioni] file
-s Controlla anche i file speciali a blocchi o a caratteri (tipicamente quelli in /dev )
-z Scomprime e prova a verificare il formato di file compressi

Esempi
file /bin/vi Mostra che tipo di file è /bin/vi
file -s /dev/hda1 Fornisce informazioni utili sulla partizione /dev/hda1

cat -v nomefile

Autore: al - Ultimo Aggiornamento: 2005-06-18 10:00:42 - Data di creazione: 2002-08-20 12:46:10
Tipo Infobox: BOFH - Skill: 3- INTERMEDIATE

Visualizza il contenuto di un file con i caratteri solitamente non visualizzati (ad esempio ^M che rappresenta un Carriage Return (CR) di troppo).
Utile per individuare caratteri estranei in file di testo (tipicamente importati da DOS) che ne compromettono la funzionalità.

Per convertire file ascii da DOS a Unix e viceversa esistono le utility dos2unix e unix2dos.
Su un testo DOS l'"a capo" viene fatto con due caratteri ASCII: CR (carriage return) e LF (line feed).
Su un testo Unix è sufficiente LF. Su un testo Mac, si usa CR.

strings

Autore: al - Ultimo Aggiornamento: 2003-11-27 18:05:36 - Data di creazione: 2003-11-27 18:05:36
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Visualizza i caratteri stampabili all'interno di un file binario.
Comando comune in Unix, è comodo per verificare la presenza di stringhe di testo all'interno di un file binario compilato (il cui output tipicamente è un insieme di caratteri senza senso).
Precisamente visualizza, per il file specificato, qualunque stringa lunga almeno 4 caratteri stampabili e seguita da un carattere non stampabile.
E' utile per avere un'idea dei messaggi di testo utilizzati in un dato programma.

strings [opzioni] file
-a Scandisce l'intero file e non solo alcune parti
-n #numero  Imposta a #numero la lunghezza minima della stringhe da visualizzare (di default è 4)

Esempi
strings /usr/bin/passwd Visualizza tutte le stringe di caratteri stampabili (e quindi di testo) all'interno del file binario /usr/bin/passwd.

Visualizzare file

Tramite la shell di Linux si possno utilizzare svariati comandi per visualizzare il contenuto di un file.

Principali comandi di visualizzazione file
cat - Visualizza il contenuto di un file di testo
less - Visualizza il contenuto di un file testo, pagina per pagina
tail - Visualizza l'ultima parte di un file di testo
head - Visualizza la prima parte di un file di testo
file - Analizza e mostra il tipo di un file
strings - Visualizza stringhe di testo all'interno di un file binario

Combinazioni di comandi utili
tail -f /var/log/messages - Visualizza il contenuto di un file di log mentre cresce. Fondamentale in attività di troubleshooting.
cat -v /tmp/testo.txt - Visualizza i contenuto di un file mostrando anche i caratteri nascosti (come gli a capo in formato MSDOS)
file /tmp/file  - Mostra di che tipo è il file specificato (testo Ascii, file audio o video, binario, documento word, immagine ecc.)


Gestione dei file system

I principi e i comandi per gestire un file system: mount, df, du, fsck, mkfs.

Utilizzare i file system

Autore: al - Ultimo Aggiornamento: 2003-11-28 20:22:21 - Data di creazione: 2003-11-28 20:22:21
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Per file system si intende l'astrazione (metodo e protocolli) con cui un sistema operativo organizza i file su un supporto fisico di memorizzazione ad accesso casuale (floppy, cdrom, memoria, hard disk...).
I sistemi operativi moderni tipicamente utilizzano un sistema gerarchico (diviso in directory e sottodirectory) e possono supportare nativamente uno o più diversi file system.
Linux grazie alla sua polivalenza permette di utilizzare quasi tutti i file system più diffusi, ma il suo file system "storico" è 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 (basato su un log di tutte le operazioni di scrittura su disco, che aumenta l'integrità e il controllo .

Prima di poter utilizzare un qualsiasi dispositivo con il proprio 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 subdirectory della root ( / ).
Una volta montato il filesystem risulta accessibile a programmi e utenti in modo trasparente e diventa parte integrante dell'albero delle directory 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 esegue l'umount.
La gestione di diversi file system all'interno dello stesso albero di directory (la root: /) permette l'astrazione dei device hardware da parte del sistema operativo: per i programmi e gli utenti che accedono a determinati file non è importante conoscere o sapere su che tipo di dispositivo risiedono e possono accedere e gestire tutti i file con gli stessi strumenti, a prescindere dall'hardware su cui sono registrati.

/etc/fstab

Autore: al - Ultimo Aggiornamento: 2002-09-09 16:06:59 - Data di creazione: 2002-09-09 16:06:59
Tipo Infobox: PATH - Skill: 3- INTERMEDIATE

In questo file 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.
Qui viene analizzato un tipico /etc/fstab su Linux.
Su SUN Solaris il file equivalente si chiama /etc/vfstab.

cat /etc/fstab
/dev/hda2               /                       ext2    defaults        1 1
/dev/hda1               /boot                   ext2    defaults        1 2
/dev/hdc1               /home                   ext2    defaults        1 2
/dev/fd0                /mnt/floppy             auto    noauto,owner    0 0
/dev/hda7               /usr                    ext2    defaults        1 2
/dev/hdc2               /var                    ext2    defaults        1 2
none                    /proc                   proc    defaults        0 0
none                    /dev/pts                devpts  gid=5,mode=620  0 0
/dev/hda3               swap                    swap    defaults        0 0


In questo esempio la root ( / ) è montata sulla seconda partizione dell'hard disk IDE primary master ( /deb/hda2 ) e al suo interno monta altre directory che sono fisicamente presneti in altre partizioni di hda o in un secondo hard disk, il secondary master ( /dev/hdc ).
In questo caso tutti i file system su tutte le partizioni sono ext2, ma ogni partizione potrebbe avere un proprio file system.
Notare inoltre la partizione di swap in /dev/hda3, il /proc file system virtuale (che non ha mount point) e il device pts, che è un'interfaccia virtuale per i pseudo terminali (pts).
Considerare l'entry per il floppy, identificato da /dev/fd0 e montato in /mnt/floppy. Tra le opzioni di mount c'è specificato un noauto che indica di non motnare automaticamente il floppy all'avvio. I due zero a fine riga, inoltre, segnalano al sistema di non controllarlo al boot e di non usarlo per backup con il comando dump.

mount

Autore: al - Ultimo Aggiornamento: 2003-11-28 21:41:14 - Data di creazione: 2003-11-28 21:41:14
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Permette di inserire un file system presente in un dato device nella struttura di directory principale del sistema, a partire dalla directory indicata.
Questa operazione viene definita "montare" e di fatto rende visibile al sistema il contenuto di dispositivi quali CD-ROM, floppy ma anche hard disk o file system di rete.
Il comando mount senza opzioni visualizza l'elenco dei file system attualmente montati nel sistema.
Nel file di configurazione /etc/fstab sono elencati i parametri di mounting dei vari dispositivi del sistema predefiniti: per montare le voci presenti in questo file basta specificare come parametro di mount la directory o il device.
Nel file /etc/mtab vengono visualizzati i file system attualmente montati sul sistema.

mount [opzioni] [device] [directory]
-a Esegue il mount di tutti i file system elencati in /etc/fstab
-o opzione Specifica le opzioni con cui montare il file system. Sono varie, incidono su diversi aspetti e possono essere specifiche per determinati tipi di file system: async, auto, defaults, dev, exec, noauto, nodev, noexec, nosuid, nouser, remount, ro, rw, suid, sync, user, check, conv, debug, errors.
-r Esegue il mount del file system in sola lettura
-w Esegue il mount del file system in lettura/scrittura (opzione di default)
-t tipo_fs Specifica il tipo di file system da montare. Valori possibili: minix, ext, ext2, ext3, xiafs, hpfs, msdos, umsdos, vfat, proc, nfs, iso9660, smbfs, ncpfs, affs, ufs, romfs, sysv, xenix, coherent, reiserfs, jfs...

Esempi
mount -t vfat /dev/fd0 /mnt/floppy Monta un floppy formattato sotto Windows sulla directory /mnt/floppy
mount -t iso9660 /dev/hdc /mnt/cdrom Mount un CD presente nel lettore IDE Secondary master sulla directory /mnt/cdrom
mount -t nfs 192.168.0.10:/home/rpm /mnt/remote Monta sulla directory /mnt/remote la condivisione NFS /home/rpm del server 192.168.0.10 (il serviazio portmap deve essere attivo sul client)

umount

Autore: al - Ultimo Aggiornamento: 2003-11-28 21:44:38 - Data di creazione: 2003-11-28 21:44:38
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Smonta il file system specificato e lo rende inaccessibile al sistema.
E' il comando che esegue l'operazione opposta a mount.
Qualsiasi operazione in corso sul filesytem da smontare viene conclusa e la struttura del file system segnata come pulita (clean).

umount  [opzioni] [device|directory]
-a Smonta tutti i file system montati (visualizzati in /etc/mtab)
-n Smonta tutti i file system montati SENZA memorizzare le modifche in /etc/mtab
-t tipo Smonta tutti i file system del tipo specificato.

Esempi
umount /dev/fd0 Smonta il floppy (operazione necessaria prima di estrarre fisicamente il dischetto). Questo comando è analogo a umount /mnt/floppy (se il floppy è montato sulla directory /mnt/floppy.
umount /mnt/cdrom Smonta il CDROM (se è montato sulla directory /mnt/cdrom). Nello specifico per i CDROM può essere usato il comando eject che smonta ed espelle il CD.

mount -o loop /path/file.iso /mnt/mountpoint/

Autore: al - Ultimo Aggiornamento: 2003-08-21 16:42:38 - Data di creazione: 2003-08-21 16:42:38
Tipo Infobox: BOFH - Skill: 3- INTERMEDIATE

Con questo semplice comando è possibile visualizzare il contenuto di un file .iso (l'immagine di un CDROM da masterizzare) montandolo come un loop device su una directory del proprio file system.
Il kernel deve avere il supporto per i loop device (CONFIG_BLK_DEV_LOOP=y) e, ovviamente, per il filesystem iso9660 usato su CDROM di dati (CONFIG_ISO9660_FS=y).

Anche se generalmente non necessario potrebbe servire specificare il filesytem type utilizzato (-t iso9960) e, volendo, abilitare il verbose mode (-vv). Nell'esempio che segue si è montato il file iso sulla directory /mnt/floppy, che ovviamente può essere diversa ed avere un nome più appropriato:
[root@giraffa al]# mount -t iso9660 -o loop -vv /home/al/DOWNLOADS/damnsmall-0.4.4.iso /mnt/floppy/
mount: going to use the loop device /dev/loop0
set_loop(/dev/loop0,/home/al/DOWNLOADS/damnsmall-0.4.4.iso,0): success
mount: setup loop device successfully
/home/al/DOWNLOADS/damnsmall-0.4.4.iso on /mnt/floppy type iso9660 (rw,loop=/dev/loop0)
[root@giraffa al]# mount
[...]
/home/al/DOWNLOADS/damnsmall-0.4.4.iso on /mnt/floppy type iso9660 (rw,loop=/dev/loop0)


Se si vuole creare un file .iso direttamente dal contenuto di un CDROM, oltre ad usare programmi vari per masterizzare, basta il semplice comando:
dd if=/dev/cdrom of=/path/to/file.iso bs=32k (l'immagine iso sarà scritta nel path specificato dopo of=).
Alternativamente, in modo ancor più diretto e semplice:
cat /dev/cdrom > /path/to/file.iso

Se si vuole creare un file .iso contenente i file presenti in una data directory, si può usare il comando mkisofs:
mkisofs -RJ -o file.iso /directory/ (tutto il contenuto presente in /directory/ verrà inserito nel file.iso (con path relativo))

mkfs

Autore: al - Ultimo Aggiornamento: 2002-08-13 17:59:03 - Data di creazione: 2002-08-13 17:59:03
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Crea un filesystem (formatta) sulla partizione specificata. Corrisponde al format di Windows.

mkfs [-V ] [ -t tipo-fs ] [ opzioni-fs ] filesys [blocchi]
filesys Può essere il nome di una partizione (es: /dev/hda1 ) o un mount point (es: /home )
-t tipo-fs Indica quale filesystem creare. mkfs è di fatto il frontend generico che invoca la versione appropriata di mkfs (mkfs.fstype) a seconda del tipo di filesystem specificato dall'opzione -t
-c Verifica il dispositivo cercando eventuali blocchi difettosi prima di creare il filesystem.

Come formattare e usare un floppy disk su Linux

Autore: al - Ultimo Aggiornamento: 2003-11-28 20:53:30 - Data di creazione: 2003-11-28 20:53:30
Tipo Infobox: TIPS - Skill: 2- JUNIOR

L'utilizzo di un floppy disk su Unix e Linux è uguale a quello di altri dispositivi di memorizzazione.

Per usare un floppy disk vergine, bisogna prima formattarlo, con un file system specifico.
Per farlo con ext2, il file system nativo di Linux basta digitare da shell:
mkfs.ext2 /dev/fd0
Una volta formattato il floppy è pronto per essere montato:
mount -t ext2 /dev/fd0 /mnt/floppy
A questo punto il suo contenuto è visibile nella directory /mnt/floppy.
I file al suo interno possono essere accessibili come tutti gli altri file del sistema.
Chiaramente se il floppy è protetto fisicamente in scrittura, non sarà possibile scriverci o fare modifiche.
PRIMA di rimuovere fisicamente il floppy disk bisogna smontarlo, per essere sicuri che il sistema finisca di scrivere eventuali dati rimasti in memoria (Il sistema operativo, per motivi di performance non sempre esegue le operazioni di scrittura sul floppy nel momento in cui vengono richieste, a volte i dati da scrivere rimangono in memoria fino a quando non si forza un "flush" del file system, operazione automaticamente eseguita al momento dell'umount):
umount /dev/fd0

Convertire un filesystem ext2 in formato ext3

Autore: homer - Ultimo Aggiornamento: 2004-01-06 11:35:01 - Data di creazione: 2004-01-06 11:35:01
Tipo Infobox: TIPS - Skill: 3- INTERMEDIATE

Come convertire un filesystem ext2 in modo che supporti le caratteristiche di journaling del filesystem ext3.

Grazie all'utilty di sistema tune2fs è possibile settare diversi parametri di un filesystem Linux. Questo software permette anche di convertire il formato di un filesystem, passando da ext2 a ext3:
  
root@Joker:/# tune2fs -j /dev/hda1  
L'opzione -j permette di creare il file di journal al filesystem presente in /dev/hda1  
tune2fs 1.27 (8-Mar-2002)  
Creating journal inode: done  
This filesystem will be automatically checked every 28 mounts or  
180 days, whichever comes first.  Use tune2fs -c or -i to override.
  
Una volta convertito sarà possibile notare il file .journal nella directory in cui viene montato.
  
La conversione può essere eseguita anche con il filesystem da convertire in stato unmounted ma è fondamentale che il kernel utilizzato abbia abilitato il supporto per per ext3, altrimenti in seguito sarà impossibile accedervi.
  
Infine è possibile modificare la relativa entry in /etc/fstab, cambiando il terzo campo da ext2 in ext3:
root@Joker:~# cat /etc/fstab
[...]
/dev/hda1        /scambio         ext2        defaults         1   0
Prima della conversione il filesystem in /dev/hda1 veniva montanto come ext2 sulla directory /scambio
root@Joker:~# cat /etc/fstab
[...]
/dev/hda1        /scambio         ext3        defaults         1   0
Dopo la conversione si fa in modo che venga montato in /scambio come ext3

Explore2fs: leggere partizioni Linux da Windows

Autore: homer - Ultimo Aggiornamento: 2004-05-01 12:05:07 - Data di creazione: 2004-05-01 12:05:07
Tipo Infobox: ETCETERA - Skill: 2- JUNIOR

Explore2fs è un tool per Windows in grado di leggere partizioni partizioni disco di tipo ext2 ed ext3.

Questo software, attualmente alla versione 1.00 pre 6, scritto in in linguaggio Delphi da John Newbigin, viene rilasciato sotto licenza GPL. Si dimostra utile qualora si utilizzi un sistema dual boot Windows/Linux e si necessiti di accedere a partizion di tipo etx2 o ext3 da ambiente Microsoft.

Explore2fs funziona sotto Windows 95, Windows 98, Windows NT, Windows 2000 e Windows XP. Sebbene sia possibile usare il programma anche in scrittura, l'autore consiglia di utilizzarlo solamente in lettura, in quanto potrebbero essere presenti dei bug che potrebbero rendere illeggibile la partizione.

Il programma è composto da un solo eseguibile, che una volta avviato presenta un'interfaccia Explorer like, in stile Windows NT. Sulla sinistra vengono visualizzate le partizioni riconosciute, mentre sulla destra si può accedere ai file contenuti nelle varie directory.


Attributi e permessi

La gestione di attributi e permessi sui file: chmod, chown, chgrp.

chmod

Autore: al - Ultimo Aggiornamento: 2003-11-28 22:22:34 - Data di creazione: 2003-11-28 22:22:34
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Modifica gli attributo di accesso su uno o più file. Solo il proprietario del file, o l'utente root, può modificarne gli attributi. E' un comando comune in tutti gli Unix.

chmod [opzioni] modo file
-c (--changes) Visualizza informazioni sui file che vengono modificati
-R (--recursive) Applica le modifiche alla directory indicata e a tutte le sue sottodirectory
--reference=file_origine Applica al file specificato nella riga di comando gli stessi permessi che ha file_origine
-f (--silent) Non stampa messaggi di errore sui file che non possono essere modificati

Esistono due diversi modi per definire i permessi su un file:

SYMBOLIC MODE
I permessi vengono definiti nella forma: chi-opcode-permesso.
CHI può essere:
u USER - Utente proprietario del file
g GROUP - Gruppo proprietario del file
o OTHER - Altri utenti
a ALL - Tutti gli utenti del sistema (default)
OPCODE può essere:
+ Aggiunge un permesso
- Rimuove un permesso
= Assegna un permesso (e rimuove tutti quelli non specificati)
PERMESSO può essere:
r READ - Lettura sul file
w WRITE - Scrittura sul file
x EXECUTE - Esecuzione del file (o apertura della directory)
s SET USER ID - Il file (comando) viene eseguito con i permessi dell'owner sul file system, anche quando viene eseguito da altri utenti. Questo attributo è a volte necessario in alcuni comandi lanciati da utenti normali che hanno accesso sul sistema con i permessi di root (es: traceroute).
t STICKY BIT - Normalmente un utente può cancellare tutti i file contenuti in una directory su cui ha permesso di scrittua, anche se non ha permessi di scrittura sul file stesso. Con lo Sticky bit impostato, ciò non è possibile: l'utente può cancellare il relativo file solo se ha permessi di scrittura sul file stesso
u Lascia i permessi correnti dell'utente owner
g Lascia i permessi correnti del gruppo owner
o Lascia i permessi correnti per gli altri utenti

OCTAL MODE
E' un metodo alternativo che permette di definire i permessi con un numero ottale composta da tre cifre:
la prima indica i permessi per l'utente owner, la seconda per il gruppo, la terza per gli altri.
I permessi vengono calcolati sommando i seguenti valori ottali:
4 - Lettura
2 - Scrittura
1 - Esecuzione.
In questo modo il permesso di lettura+scrittura+esecuzione si indica con il numero 7 (4+2+1), il permesso di lettura, esecuzione con 5 (4+1) e così via.
E' inoltre possibile indicare una quarta cifra (da far precedere alle 3 usuali) per permettere l'assegnamento dei seguenti permessi spciali:
4 - Imposta lo UserId per l'esecuzione
2 - Imposta il GroupID
1 - Imposta lo sticky bit.

Esempi
Per impostare i permessi totali all'owner, e solo in lettura a tutti gli altri si hanno le seguenti possibilità:
chmod 744 /home/file
chmod u=rwx,go=r /home/file


Per impostare permessi di sola lettura per l'owner e il group e nessun permesso per gli altri:
chmod 440 /home/file
chmod ug=r,o-rwx /home/file


Per impostare totali permessi per tutti gli utenti su un file:
chmod 777 /home/file
chmod ugo=rwx /home/file


Per impostare lo sticky bit su un file e permessi totali solo per l'owner e di sola lettura per il group:
chmod 1740 /home/file
chmod u=srwx,g=r,o-rwx

chgrp

Autore: al - Ultimo Aggiornamento: 2003-11-28 22:25:38 - Data di creazione: 2003-11-28 22:25:38
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Cambia l'owner group di un file o directory. Comando comune in tutti gli Unix.

chgrp [opzioni] nuovo_gruppo file
-c (--changes) Visualizza informazioni sui file che vengono modificati
-R (--recursive) Applica le modifiche alla directory indicata e a tutte le sue sottodirectory
--reference=file_origine Applica al file specificato nella riga di comando lo stesso gruppo proprietario che ha file_origine
-f (--silent) Non stampa messaggi di errore sui file che non possono essere modificati
-v (--verbose) Visualizza dettagliate informazioni su ogni file che chown tenta di modificare.

Esempi
chgrp users /tmp/data Imposta users come owner group del file /tmp/data
chgrp -R wheel /tmp/datadir Imposta wheel come wonder group della directory /tmp/datadir e di tutti i file e le sottodirectory che contiene

chown

Autore: al - Ultimo Aggiornamento: 2004-05-23 15:47:52 - Data di creazione: 2004-05-23 15:47:52
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Modifica il proprietario di uno più file. Può essere fatto solo da root o dal proprietario corrente del file.
E' un comando comune in tutti gli Unix.

chown [opzioni] nuovo_proprietario file
chown [opzioni] nuovo_proprietario:nuovo_gruppo file

-c (--changes) Visualizza informazioni sui file che vengono modificati
-R (--recursive) Applica le modifiche alla directory indicata e a tutte le sue sottodirectory
--reference=file_origine Applica al file specificato nella riga di comando lo stesso proprietario che ha file_origine
-f (--silent) Non stampa messaggi di errore sui file che non possono essere modificati
-v (--verbose) Visualizza dettagliate informazioni su ogni file che chown tenta di modificare.

Esempi
chown al /var/tmp/alien Imposta al come propietario del file /var/tmp/alien
chown beppe:beppe /home/file Imposta owner beppe e group owner beppe al file /home/file

I permessi sui file Unix

Autore: al - Ultimo Aggiornamento: 2002-08-21 22:09:07 - Data di creazione: 2002-08-21 22:09:07
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Tutti i sistemi Unix hanno una gestione standard dei permessi sui file, che rispecchia la natura di sistema operativo multiutente.

I permessi possono essere di lettura, scrittura e esecuzione e vengono differenziati sulla base della natura dell'utente rispetto al file o directory:
- utente proprietario owner del file
- gruppo proprietario owner group del file
- gli altri utenti others, che sono l'owner e non appartegono all'owner group.
Il permesso di esecuzione è necessario per poter accedere a delle directory e, ovviamente, permette l'esecuzione di file (script shell, perl, php, cgi; programmi binari compilati).

Per visualizzare i permessi di un file basta usare il comando ls -l che per ogni file da un output simile a:
-rwxr-xr-- 1 mark admins 77266 Dec 13 17:18 /bin/command.sh
La prima colonna, composta da 10 caratteri, descrive i permessi sul file /bin/command.sh.
Il primo carattere (nell'esempio: -) identifica il tipo di file (directory, pipe, block o char device, symlink...);
I successivi 3 caratteri identificano i permessi in lettura/scrittura/esecuzione dell'owner di /bin/command.sh (in questo caso l'owner mark ha tutti i permessi sul file: rwx );
I successivi 3 identificano i permessi del gruppo owner di /bin/command.sh (in questo caso il gruppo admins ha permesso di lettura ed esecuzione sul file: r-x );
I successivi 3 identificano i permessi di tutti gli altri utenti del sistema (in questo caso hanno solo il permesso di lettura: r-- ).
Le successive colonne nell'output di ls -l indicano l'owner, il gruppo, la dimensione in byte, la data di ultima modifica e il nome del file.

Per modificare i permessi dei file si usa il comando chmod che usa una duplice sintassi per indicare i permessi:
read - lettura: Flag r in symbolic mode; Valore 4 in octal mode
write - scrittuta: Flag w in symbolic mode; Valore 2 in octal mode
execute - esecuzione: Flag x in symbolic mode; Valore 1 in octal mode

Troubleshooting di programmi e permessi sui file

Autore: al - Ultimo Aggiornamento: 2003-11-28 22:17:34 - Data di creazione: 2003-11-28 22:17:34
Tipo Infobox: TIPS - Skill: 2- JUNIOR

Tutti i programmi su un sistema Unix hanno i permessi di lettura e scrittura sul file system corrispondenti a quelli dell'utente di sistema, così come indicato in /etc/passwd, con cui vengono eseguiti.
Può capitare, provando a installare e lanciare programmi diversi, che questi non riescano ad essere eseguiti o non funzionino correttamente.
Come sempre, in caso di problemi, un controllo dei log è la prima operazione da compiere.
Relativamente spesso la causa è proprio la mancanza di permessi per poter leggere o scrivere file (configurazione, log, dati, librerie condivise ecc.).
A volte il programma cerca determinati file in posizioni dove non si trovano (in questi casi un link può rapidamente, e in modo un po' "sporco" risolvere il problema), a volte non ha i permessi di lettura su file di configurazione o di dati, o sulle directory che li contengono, in altri casi può cercare di scrivere (tipicamente log e dati) su directory o file dove l'utente che ha lanciato il programma (può essere anche un utente di sistema, che lo esegue automaticamente al boot) non ha permessi di scrittura.

Un esempio ricorrente è la configurazione di Apache per gestire siti web, aggiornati via ftp da diverse persone.
In questo caso l'utente con cui gira Apache (di solito nobody o apache) deve poter avere permessi di lettura sui file che compongono il sito web (e di esecuzione sulle relative directory).
Contemporaneamente gli utenti che si collegano via ftp, devono poter scrivere sulle loro home directory, che sono anche le home dei relativi server web.
Spesso, su Linus e su altri Unix, le home directory degli utenti sono in /home e sono leggibili solo dai rispettivi owner:
ls -l /home/  | grep bacco
drwx------    2 bacco    bacco       18384 Aug 24 04:02 bacco
Se Apache fosse configurato per avere il dominio www.bacco.it con le proprie pagine in /home/bacco, non riuscirebbe a visualizzare il sito Web per mancanza di permessi.
Questi andrebbero allargati all'utente con cui viene eseguito da Apache:
chmod -R 750 /home/bacco
chgrp -R apache /home/bacco

Ottenendo un funzionale:
drwxr-x---    2 bacco    apache       18384 Aug 24 04:02 bacco
A volte, in preda a pigrizia o vittime dell'inconsapevolezza, si può avere la tentazione di allargare al massimo i permessi sui file che servono al programma che vogliamo far funzionare a tutti i costi:
chmod -R 777 /home/bacco
Ottiene un funzionale ma poco sicuro:
drwxrwxrwx    2 bacco    bacco       18384 Aug 24 04:02 bacco
In questo modo Apache potrebbe tranquillamente visualizzare il sito di bacco, ma avrebbe anche permessi di scrittura non necessari, condivisi anche con tutti gli altri utenti del sistema, che avrebbero l'indebita possibilità di modificare le pagine di sito in /home/bacco.

chattr

Autore: kaharoth - Ultimo Aggiornamento: 2002-12-18 19:24:02 - Data di creazione: 2002-12-18 19:24:02
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

chattr imposta gli attributi di un file su un file system linux di tipo ext2/ext3.
Andando a lavorare su particolari  attributi peculiari di questi file system chattr non è un comando unix standard.

chattr  [-RV] [-v versione ] [+/-= attrib]  file ...
-R Ricorsivo
-V Stampa gli attributi modificati
-v versione Imposta la versione di un file.

Attributi
a il file può essere aperto solo in append mode.
c il file è compresso/decompresso dal kernel su disco  
d Non verrà eseguito il backup su di esso dall' utility dump.
i Il file non può essere modificato in alcun modo.
s Il file è cancellato e i suoi blocchi sono azzerati e scritti su disco.
S I cambiamenti sono scritti in modo sincrono su disco
u Il file è cancellato e il suo contenuto è salvato per un eventuale ripristino.

NB: gli attributi 'c' ed 'u' non sono attualmente implementati.


Ricerca, confronto e filtri

Ricerca nel file system: find, locate. Confronto e verifica di file: diff, md5sum. Filtri di output: grep, wc, sed, awk.

Cercare file in un file system Unix

Autore: al - Ultimo Aggiornamento: 2002-10-24 11:33:10 - Data di creazione: 2002-10-24 11:33:10
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Su Unix esistono molteplici comandi per la ricerca di file, all'interno dell'albero delle directory. Si basano su principi diversi e si adattano a diversi usi.

find - Ricerca file contenuti nella directory indicata in base a svariati criteri, come il nome, la data di modifica, la dimensione ecc. Utile per molti scopi.
locate - Ricerca file che matchano un pattern specificato tramite un database che permette ricerche veloci e viene aggiornato col comando updatedb.
whereis - Visualizza i path di binari, sorgenti e manuali per un comando
which - Mostra la posizione di comandi eseguibili all'interno del proprio ambiente PATH.
whatis - Cerca la parola completa specificata all'interno del database whatis, contenente brevi descrizioni dei comandi del sistema. Il database viene creato con il comando makewhatis
apropos - Come whatis, ma esegue ricerche anche di parole parziali.

grep

Autore: maxgrante - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-24 16:58:23 - Data di creazione: 2002-10-24 16:58:23
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Il comando grep permette di ricercare una determinata parola o REGEXP pattern all'interno di un file e stampa a video tutte le righe che lo matchano. E' comune in tutti gli Unix.

grep [opzioni] pattern [file]
Il file su cui operare può essere passato direttamente allo standard input di grep. Per esempio cat /var/log/maillog | grep [email protected] visualizza tutte le righe che contengono [email protected] all'interno del file maillog.
-i Ignora la distinzione tra minuscolo e maiuscolo
-l Stampa solamente i nomi dei file (una sola volta per file) che contengono righe soddisfatte dall'espressione
-n Precede ogni riga soddisfatta dall'espressione con il suo numero di riga relativo all'interno del file
-v Non vengono mostrate le righe che contengono le stringhe soddisfatte, ma le rimanenti.
-c Stampa il numero di righe per le quali è stata rintracciata una corrispondenza.
-r Legge ricorsivamente tutti i file sotto la directory indicata.
-A# Stampa # righe di testo precedenti a quella per la quale è stata trovata la corrispondenza
-B# Stampa # righe di testo successive a quella per la quale è stata trovata la corrispondenza
-C# Stampa # righe di testo precedenti e successive a quella per la quale è stata trovata la corrispondenza

Confronto di file e directory

Autore: al - Ultimo Aggiornamento: 2002-10-24 11:33:46 - Data di creazione: 2002-10-24 11:33:46
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Su Unix esistono vari comandi per confrontare file fra loro e verificare se sono diversi:
diff - Permette di fare un confronto fra il contenuto di due file di testo. Visualizza con un formato proprio le differenze e viene ampiamente utilizzato per creare delle patch di sorgenti.
diff3 - Come diff ma eseguito su 3 file.
bdiff - Come diff, ma lavora su file che possono essere divisi in più parti e quindi avere dimensioni anche molto grandi.
cmp - Compara due file ed esce con exit status diversi a seconda del risultato.
comm - Visualizza le righe diverse e quelle uguali in due file specificati.
dircmp - Compara il contenuto di 2 directory

Come sempre è possibile utilizzare vari comandi Unix comuni in script per ottenere risultati simili di confronto di file, del loro contenuto e di directory

diff

Autore: fulvio - Ultimo Aggiornamento: 2002-09-07 11:48:38 - Data di creazione: 2002-09-07 11:48:38
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

Confronta due file di testo. diff restituisce le righe differenti dei due file file1 e file2.
L'output consiste di righe di testo indicanti anche il contesto di ognuno dei due file, con il testo di file1 contrassegnato da un simbolo . Le righe di contesto sono precedute dal comando ed (a, c o d) che potrebbe essere utilizzato per convertire file1 in file2. Se uno dei due file viene indicato con -, viene letto lo standard input. Se uno dei due file è una directory, diff rintraccia il file della directory con lo stesso nome del file indicato dall'altro argomento (Es.: diff my_dir junk ha lo stesso significato di diff my_dir/junk junk). Se entrambi gli argomenti indicano directory, diff restituisce le righe che sono differenti di tutte le possibili coppie di file con lo stesso nome (Es.: oldir/program e newdir/program); inoltre diff indica tutti i nomi di file presenti solamente in una delle due directory, così come le sottodirectory comuni a entrambi. Vedere anche CMP.

diff [opzioni] [opzioni_directory] file1 file2
-a, --text Tratta tutti i file cpme file di testo. Utile per verificare se file binari sono identici
-b, --ignore-space-change Ignora le sequenze di caratteri blank ed end-of-line, trattando le prime come un unico carattere blank.
-B, --ignore-blank-lines Ignora le righe vuote nei files
-d, --minimal Per velocizzare i confronti ignora i segmenti contenenti numerosi differenze e invia in uotput solo i gruppi di differenze minime.
-H Velocizza l'output per file di grosse dimensioni ricercando solo piccole differenze; lunghe porzioni contenenti molte differenze non vengono visualizzate
-i, -- ignore-case Ignora la differenza tra caratteri minuscoli e maiuscoli durante il confronto. I caratteri minuscoli e maiuscoli sono considerati come identici
-N, --new-file Tratta i file inesistenti come file vuoti.
-q, --brief Indica solo se i file sono differenti senza mostrarne le differenze.
-r, --recursive Confronta le sottodirectory ricorsivamente
-s, --report-identical-files Indica se i file soono diversi
-S nomefile, --starting-file=nomefile Per i confronti di directory, inizia con il file nomefile, saltando i file che lo precedono nell'ordine standard di elencazione
-T, --initial-tab Inserisce caratteri tab iniziali alle righe di putput per allineare correttamente i tab
-X nomefile, --exclude-from=nomefile Non confronta i file di una directory i cui nomi corrispondono ai pattern descritti nel file nomefile.

cmp

Autore: fulvio - ( Revisione: al ) - Ultimo Aggiornamento: 2002-09-07 11:44:39 - Data di creazione: 2002-09-07 11:44:39
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Confronta file1 e file2. Utilizza lo standard input se file1 vale - o è mancante. Vedere anche diff. I file possono essere di qualunque tipo. Skip1 e skip2 rappresentano degli offset opzionali nei file di corrispondenza dei quali deve partire il confronto.

cmp [opzioni] file1 file2 [skip1[skip2]]
-c, --print-chars Stampa i byte differenti come caratteri
-i num, --ignore-initial=num Ignora i primi num byte dell'input.
-l, --verbose Stampa gli offset e i codici di tuttii byte differenti
-s, --quiet, --silent Lavora in silenzio, senza stampare alcun messaggio, ma restituendo i seguenti codici:
0 I file sono identici
1 I file sono differenti
2 I file sono inaccessibili
Questa opzione è utile in script, per eseguire operazioni diverse se due file sono uguali o diversi.

whatis

Autore: vm - Ultimo Aggiornamento: 2004-05-23 15:51:01 - Data di creazione: 2004-05-23 15:51:01
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Mostra la breve descrizione di un comando cercando la parola chiave all'interno di un set di file di database whatis. Il database in questione viene rigenerato utilizzando il comando /usr/lib/makewhatis.
Simile al comando apropos, fatta eccezione che ricerca soltanto parole complete.
Equivalente a man -f.
Comando comune a tutti gli Unix.

Esempio:
[root@localhost root]# whatis ifconfig
ifconfig             (8)  - configure a network interface

Comandi e funzioni di filtro

Autore: al - Ultimo Aggiornamento: 2004-05-23 15:48:37 - Data di creazione: 2004-05-23 15:48:37
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Molti comandi Unix sono utilizzati come filtri per modificare il testo in input e presentarlo con l'output voluto. Vediamo alcuni dei filtri più comuni e, in genere, i comandi Unix utili per manipolare testi:

grep - Seleziona in file o nello standard input le righe di testo che contengono il pattern specificato. Es: Tutti le righe che contengono la scritta "bash".
sed - E' un flessibile e sofisticato strumento per modificare l'input secondo varie regole e match
sort - Ordina le righe del testo in input secondo criteri vari
tr - Converte o rimuove caratteri all'interno di un testo
cut - Ritaglia colonne o campi da un file, visualizzandone solo la parte selezionata
wc - Conta il numero di righe o di caratteri in un file

which

Autore: vm - Ultimo Aggiornamento: 2002-09-07 10:38:51 - Data di creazione: 2002-09-07 10:38:51
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Elenca il percorso completo del comando eseguibile all'interno del proprio ambiente PATH.
Comando comune a tutti gli Unix.

which [opzioni] [comando]
-a (--all) Stampa tutte le corrispondenze.
--skip-dot Salta le directory che iniziano con un punto.
-i (--read-alias) Legge gli alias dell'input standard e scrive le corrispondenze sull'output standard. Utile per usare un alias per which.
--skip alias Utile per trovare file binari normali mentre si usa --read-alias in un alias per which.

sort

Autore: maxgrante - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-24 18:52:19 - Data di creazione: 2002-10-24 18:52:19
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

Il comando sort permette di ordinare le righe contenute in un file secondo criteri configurabili.
E' un comando comune in tutti gli Unix e viene tipicamente utilizzato come filtro.

sort [opzioni] [file]
-b Ignora gli spazi e i caratteri di tabulazioni all'inizio e alla fine delle righe
-c Verifica se i file sono già ordinati e, in tal caso non produce output
-f Ignora la differenza fra caratteri minuscoli e maiuscoli
-i Ignora i caratteri non stampabili
-n Effettua un ordinamento numerico
-o file Memorizza l'output nel file specificato
-r Inverte l'ordinamento
-u Le righe doppie vengono riportate in output una sola volta
-M Tratta i primi tre caratteri come sigla di mese (Jan, Feb, etc...)
-t carattere Utilizza il carattere indicato come delimitatore di campo (default è lo spazio)
+# Esegue l'ordinamento sulla base del campo #+1

chkconfig --list | grep '3:on' | sort | awk '{ print $1 $5 }'

Autore: homer - Ultimo Aggiornamento: 2003-12-26 00:11:03 - Data di creazione: 2003-12-26 00:11:03
Tipo Infobox: BOFH - Skill: 3- INTERMEDIATE

Permette di individuare quali servizi sono attivi al runlevel 3, quello tipicamente utilizzato su una macchina server.

Filtrando opportunamente l'output del comando chkconfig --list è possibile visualizzare informazioni formattate relative al runlevel di interesse:

[root@vagante root]# chkconfig --list | grep '3:on' | sort | awk '{ print $1 $5 }'
apmd3:on
autofs3:on
crond3:on
cups3:on
gpm3:on
iptables3:on
isdn3:on
keytable3:on
kudzu3:on
netfs3:on
network3:on
nfslock3:on
portmap3:on
random3:on
sendmail3:on
sshd3:on
syslog3:on
xinetd3:on

L'opzione --list visualizza l'elenco di tutti i servizi di sistema, tramite grep vengono filtrati sono quelli attivi (on), tramite sort vengono ordinati alfabeticamente e tramite awk vengono stampati il primo campo, contentene il nome del servizio ed il quinto, contentente il valore relativo al runlevel 3

Con poche modifiche, in particolare al parametro di grep ed al print di awk è possibile adattare questa command line a stampare i valori relativi ad altri runlevel (se avessivo voluto visualizzare i dati relativi al runlevel 5 avremmo impostato il relativo valore nel grep ed il campo $7 come secondo parametro del print di awk).

comm

Autore: fulvio - Ultimo Aggiornamento: 2004-05-23 15:51:48 - Data di creazione: 2004-05-23 15:51:48
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Confronta le righe comuni ai file specificati e produce un output su tre colonne:
righe presenti solo nel primo file,
righe presenti solo nel secondo file,
righe comuni a entrambi i file.
comm è simile a diff nel fatto che entrambi i comandi confrontano due file. Però comm può essere utilizzato anche come uniq; infatti comm seleziona le righe duplicate o uniche tra i due file ordinati, mentre uniq seleziona le righe duplicate o uniche all'interno del medesimo file ordinato.

comm [opzioni] file1 file2
- Legge lo standard input
-num Sopprime la stampa della colonna num. E' possibile specificare più colonne, non separate da spazi

apropos

Autore: vm - ( Revisione: al ) - Ultimo Aggiornamento: 2004-05-23 15:54:58 - Data di creazione: 2004-05-23 15:54:58
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Mostra una breve spiegazione di una serie di comandi che riguardano una determinata parola chiave.
Si comporta come whatis, eccetto per il fatto che ricerca una o più stringhe all'interno del set di file del database whatis (il suo argomento quindi non è il nome di un comando ma una parola generica).
Il database in questione viene rigenerato con il comando /usr/lib/makewhatis. Equivale a man -k.
Comando comune a tutti gli Unix.

Esempio:
[root@localhost root]# apropos routing
ip                   (8)  - TCP/IP interface configuration and routing utility
NETLINK_ROUTE [rtnetlink] (7)  - Linux IPv4 routing socket
netstat              (8)  - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
route                (8)  - show / manipulate the IP routing table
rtnetlink            (7)  - Linux IPv4 routing socket

Introduzione a AWK: Tutorial

Autore: al - Ultimo Aggiornamento: 2004-05-23 15:49:25 - Data di creazione: 2004-05-23 15:49:25
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

AWK è un linguaggio di programmazione che esegue azioni definibili sulla base del matching di pattern definibili.
Il suo input (un file o lo standard output di un comando) viene processato una riga alla volta e se la riga soddisfa il pattern specificato, AWK esegue l'azione specificato, scrivendo su standard output il risultato di questa azione.
E' comune in tutti gli Unix, su Linux si trova l'implementazione GNU, chiamata con la solita fantasia gawk e, come spesso accade, con una serie di funzionalità aggiunte.
In questo contesto ci limiteremo a fare alcuni esempi che possono dare un'idea delle potenzialità di awk, della logica del suo funzionamento e della sua estrema utilità in molte attività di system administration.

Le regole che awk deve seguire possono essere scritte in un file o direttamente inserite fra apici negli argomenti del comando:
awk -f file_delle_regole file_di_testo_da_processare
è analogo a:
awk 'regole' file_di_testo_da_processare
ed etrambi sono analoghi a:
cat file_di_testo_da_processare | awk -f file_delle_regole

Le regole hanno di base un formato tipo:
pattern { azione }
dove pattern indica il matchind secondo criteri vari e l'azione quello che awk genera sullo standard output per ogni riga di testo nello standard input che soddisfa il pattern stabilito.

Vediamo alcuni esempi pratici, che possono chiarire molto meglio ed iniziare ad aprirci gli occhi sul versatile mondo di awk.
Visualizzo l'output di un normale comando (ma si possono immagina le variazioni sul tema):
ls -l
total 304
-rw-r--r--    1 root     root        11142 Aug 23 18:36 config.ini
drwxr-xr-x    2 shiva    shiva        4096 Sep  3 22:25 docs/
-rw-r--r--    1 root     root         2807 Aug 23 16:49 installer.ini
-rw-r--r--    1 root     root        23264 Aug 23 16:49 license.txt
-rwxr-xr-x    1 root     root         1449 Aug 23 16:49 netscape-installer*
-rwxr-xr-x    1 root     root       249564 Aug 23 16:49 netscape-installer-bin*
-rw-r--r--    1 root     root         7995 Aug 23 16:49 README


Redireziono l'output del comando allo stdin di awk:
ls -l | awk  '{print $1}'
total
-rw-r--r--
drwxr-xr-x
-rw-r--r--
-rw-r--r--
-rwxr-xr-x
-rwxr-xr-x
-rw-r--r--

Qui non viene specificata nessuna regola di matching e per tutte le righe di input awk stampa il primo campo ($1) Di default awk considera lo spazio come carattere di separazione fra i campi di una riga e non fa distinzione (ovviamente) fra righe con sintassi, significato e formato diversi (la prima rispetto a tutte le altre).

Per stampare il nono campo di ogni riga basta sostituire $1 con $9:

ls -l | awk  '{print $9}'
config.ini
docs/
installer.ini
license.txt
netscape-installer*
netscape-installer-bin*
README

Se il nono campo non esiste, non viene stampato (della prima riga dell'ls -l originario non c'è più traccia).

Per stampare l'intera riga e non solo alcuni campi uso $0.
E se voglio iniziare a introdurre qualche regola di matching uso una simile sintassi:

ls -l | awk  '$3 == "root" {print $0}'
-rw-r--r--    1 root     root        11142 Aug 23 18:36 config.ini
-rw-r--r--    1 root     root         2807 Aug 23 16:49 installer.ini
-rw-r--r--    1 root     root        23264 Aug 23 16:49 license.txt
-rwxr-xr-x    1 root     root         1449 Aug 23 16:49 netscape-installer*
-rwxr-xr-x    1 root     root       249564 Aug 23 16:49 netscape-installer-bin*
-rw-r--r--    1 root     root         7995 Aug 23 16:49 README

In questo caso il pattern matching è piuttosto semplice: eseguo l'azione fra parentesi graffe solo per le righe in cui il terzo campo coincide con la stringa "root".

L'output di awk può essere opportunamente editato e, ovviamente, redirezionato all'input di altri comandi:
ls -l | awk  '$3 == "shiva" {print "rm -Rf " $9}' | sh
Qui, su stdout non compare nulla, ma come ci si può immaginare la directory docs/, con owner shiva, è stata rimossa. Notare che awk permette di stampare stringhe arbitrarie nelle sue azioni. Notare che lo spazio, all'interno dei doppi apici, dopo rm -Rf è necessario.

Questo è solo l'inizio, AWK è un vero e proprio linguaggio di programmazione interpretato, che presenta direttive BEGIN-END (vengono eseguite solo prima e dopo il processing dell'input), cicli IF-ELSE, variabili speciali, numerose variazioni e metodi per il matching di pattern (amggiore, minore, diverso, ecc), funzioni varie ecc.
E' molto utile per ripetere automaticamente operazioni simili secondo criteri predefinibili: di fatto esattamente quello che un sysadmin ama fare: automatizzare compiti noiosi ed evitare di digitare le quasi stesse cose per più di 3 volte di seguito.

whereis

Autore: vm - Ultimo Aggiornamento: 2002-09-07 10:36:15 - Data di creazione: 2002-09-07 10:36:15
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Trova i file binari, i sorgenti e le pagine di manuale relative ad un determinato comando. I nomi forniti vengono prima ripuliti del percorso e di qualsiasi estensione (in formato .ext). whereis tenta poi di localizzare il programma desiderato nelle directory standard (p.es. /bin, /etc, /usr/bin, /usr/local/bin/, ecc.)

whereis [opzioni] [file]
-b Ricerca solamente file binari.
-m Ricerca solamente le sezioni del manuale.
-s Ricerca solo i sorgenti.
-f Evidenzia con un terminatore l'ultima directory dell'elenco e segnala l'inizio dei nomi di file; inoltre deve essere utilizzata con una delle opzioni -B, -M, -S.
-B [directory] Modifica o limita il percorso nel quale whereis cerca i file binari.
-M [directory] Modifica o limita il percorso nel quale whereis cerca le sezioni di manuale.
-S [directory] Modifica o limita il percorso nel quale whereis cerca i file sorgente.

locate

Autore: vm - ( Revisione: al ) - Ultimo Aggiornamento: 2004-05-23 15:56:18 - Data di creazione: 2004-05-23 15:56:18
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Trova un file all'interno di uno o più database di nomi di file e stampa le corrispondenze trovate.
Locate effettua la ricerca all'interno di un database che si aggiorna tramite il comando updatedb, che, tipicamente, viene schedulato per essere eseguito almeno una volta al giorno.
Un programma appena installato non può quindi essere trovato con locate fino a quando non viene eseguito updatedb e ricreato il relativo database.

locate [opzioni] [pattern]
-d [percorso] (--database=percorso) Ricerca i database nel percorso specificato.

find

Autore: vm - Ultimo Aggiornamento: 2002-10-06 17:59:13 - Data di creazione: 2002-10-06 17:59:13
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

Comando estremamente utile per cercare particolari gruppi di file; funziona percorrendo l'albero delle directory a partire da ogni percorso indicato dall'argomento percorsi_di_file e rintraccia i file che soddisfano determinate condizioni. Il percorso di default è la directory corrente.
Comando comune a tutti gli Unix.

find [percorsi_di_file] [condizioni]
-print Stampa file e directory per i quali sono verificate le condizioni imposte, mostrandone il percorso completo.
-name [pattern] Trova i file i cui nomi contengono una corrispondenza con i pattern.
-iname [pattern] Versione insensibile alle maiuscole-minuscole di -name.
-type [x] Cerca file di vario tipo: b (file speciale di blocco), c (file speciale di caratteri), d (directory), p (fifo o pipe), l (link simbolico), s (socket), oppure f (file normale).
-follow Segue i link simbolici e tiene traccia delle directory visitate (non usare con -type l)
-exec [comando { } \;] Esegue il comando Unix, a partire dalla directory di partenza su ogni file per il quale find ha tracciato una corrispondenza. All'esecuzione del comando, l'argomento { } sostituisce il file corrente.
-size [n(c)] Cerca i file contenenti n blocchi, o se c è specificato, lunghi n caratteri.
-mtime [+n | -n | n] Trova tutti file che sono stati modificati più di n (+n), meno n (-n), o n giorni prima della data corrente. La modifica riguarda il cambiamento della data del file.
-atime [+n | -n | n] Trova tutti i file per i quali l'ultimo accesso risale a più di n (+n), meno di n (-n), o esattamente n giorni prima della data corrente. E' importante notare che find modifica la data/ora.
-ctime [+n | -n | n] Trova tutti i file modificati più di n (+n), meno di n (-n), o esattamente n giorni prima della data corrente.
-user [utente] Cerca i file il cui proprietario è l'utente.
-ok [comando { } \;] Come -exec, con la differenza che chiede all'utente la conferma (y) per eseguire il comando.
-path [pattern] Cerca i file i cui nomi contengono una corrispondenza con il pattern.
-ipath [pattern] Versione insensibile alle maiuscole-minuscole di -path.
-depth Processa i file contenuti in ciascuna directory prima della directory stessa. Utile se i file risiedono in directory non scrivibili.
-xdev Dice a find di non cambiare filesystem. Utile quando occore cercare qualcosa nel file system di root.
-cnewer [file] Cerca i file cambiati dopo la loro ultima modifica.
-nouser Cerca file per i quale lo userID non corrisponde ad alcun utente.
-noleaf Toglie l'ottimazione che dice "una directory contine due sotto directory in meno, da indicare del conteggio dei link". Questa azione è necessaria quando si effetuano ricerche all'interno di filesystem che non seguono le convenzioni Unix.
-newer [file] Cerca i file modificati più di recente; simile a -mtime.
-anewer [file] Cerca file per i quali si è verificato un accesso dopo l'ultima modifica.
-cnewer [file] Cerca file cambiati dopo l'ultima modifica.
-cmin [+n | -n | n] Cerca file modificati più di n (+n), meno di n (-n), o esattamente n minuti prima dell'ora corrente.
-daystart Calcola i tempi a partire dall'inizio del giorno corrente, non da 24 ore prima.

cut

Autore: maxgrante - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-24 18:23:58 - Data di creazione: 2002-10-24 18:23:58
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

Il comando cut è un filtro che di uno o più file in input visualizza solo le colonne, i caratteri o i campi selezionati.
E' possibile definire quale carattere viene considerato per separare campi diversi
Nell'elenco che segue considerare che list è una sequenza di interi in cui la virgola viene utilizzata per valori distinti e il trattino per intervalli di valori (es: 1,3 indica 1 e 3; 1-3 indica da 1 a 3)

cut [option] [file]
-c list Stampa solo i caratteri nella posizione definita in list
-d carattere Definisce quale carattere considerare per separare i campi in ogni riga. Va utilizzato insieme a -f
-f list Visualizza i campi identificati da list
-s Utilizzato con -f per sopprimere le righe che non contengono delimitatori

Alcuni esempi possono essere illuminanti. Prendiamo /etc/passwd.
Per visualizzare solo i nomi degli utenti e la shell impostata (campi 1 e 7, usando i : come delimitatore di campo):
[al@95 al]$ cat /etc/passwd | cut -d: -f 1,7
root:/bin/bash
bin:/sbin/nologin
[...]
mysql:/bin/bash

Per visualizzare solo i primi 5 caratteri di ogni riga:
[al@95 al]$ cat /etc/passwd | cut -c1-5
root:
bin:x
[...]
mysql

wc

Autore: maxgrante - Ultimo Aggiornamento: 2004-05-23 15:57:00 - Data di creazione: 2004-05-23 15:57:00
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Questo comando stampa informazioni sul numero di caratteri, di parole e di righe dei file. Se l'argomento file non viene valorizzato, legge i dati dallo standard input. E' comune in tutti gli Unix.

wc [opzioni] [file]
-c, -bytes Stampa solamente il conteggio dei caratteri
-l, --lines Stampa solamente il conteggio delle righe
-w, --words Stampa solamente il conteggio delle parole

xargs

Autore: nxm - Ultimo Aggiornamento: 2003-12-08 22:59:14 - Data di creazione: 2003-12-08 22:59:14
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

Applica un comando ad una lista di file ricevuta da standard input.

xargs [opzioni] [comando] [argomenti]
[comando] un comando qualsiasi del sistema, script o binario eseguibile (default /bin/echo)
[argomenti] argomenti del [comando]
-0 Interpreta lo standard input come una serie di filename separati dal "null character" (deve normalmente essere associata all'opzione "-print0" di find). Il suo utilizzo è richiesto quando i filename contengono spazi
-l num vengono passati al [comando] blocchi di "num" linee alla volta al posto del massimo consentito dalla shell
-i[stringa] ogniqualvolta appaia [stringa] in [argomenti] essa viene sostituita da una entry della lista in standard input (default "{}")

find /var/log -type f -print | xargs grep -i [stringa]

Autore: nxm - Ultimo Aggiornamento: 2003-12-08 23:00:41 - Data di creazione: 2003-12-08 23:00:41
Tipo Infobox: BOFH - Skill: 3- INTERMEDIATE

Cerca la [stringa] (in modo case insensitive) all'interno di tutti i files presenti nella directory /var/log e in tutte le sue sottodirectory

find /var/log -type f -print | xargs grep -i [stringa]

Verifica integrità di file

Autore: al - Ultimo Aggiornamento: 2002-08-27 05:00:03 - Data di creazione: 2002-08-27 05:00:03
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Esistono diversi algoritmi che dato un input qualsiasi danno come output una stringa univoca di caratteri, di lunghezza fissa, a prescindere dalle dimensioni dell'input.
Questi algoritmi di "digesting", dal momento che anche minime differenze nell'input generano output totalmente diversi, possono essere utilizzati per verificare l'integrità di file (o messaggi di posta elettronica, o qualsiasi elemento binario o ascii).

Uno degli algoritmi più utilizzati è MD5, che crea un outout fisso (Hash) da un qualsiasi input.
Dall'output non è più possibile risalire all'input, e se lo stesso file da output diversi è stato sicuramente modificato.
IL comando per ottenere un hash MD5 da un file è md5sum e viene correntemente utilizzato per "firmare" programmi scaricabili da Internet e dare la certezza che sono versioni uguali a quelli ufficialmente rilasciate dal produttore.

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

Autore: al - Ultimo Aggiornamento: 2004-05-23 16:00:53 - Data di creazione: 2004-05-23 16:00:53
Tipo Infobox: BOFH - Skill: 4- ADVANCED

Cerca in tutto il file system file o directory che terminano con .log
L'opzione -name accetta REGEXP comuni e permette ricerche molto efficaci basate sui nomi dei file.

find / -name "*.log" -type f -print
/home/al/.rhopenoffice1.1/setup.log
/etc/logrotate.d/vsftpd.log
/usr/lib/rpm/rpm.log [...]


Processi e uso evoluto della shell


Ambiente shell e scripting

L'ambiente shell e lo scripting: variabili d'ambiente, cicli, strutture base.

Lo zen e l'arte dell'automazione del sistema

Autore: al - Ultimo Aggiornamento: 2003-11-28 00:04:51 - Data di creazione: 2003-11-28 00:04:51
Tipo Infobox: DESCRIPTION - Skill: 1- NOVICE

Unix è un sistema operativo nato nei primi anni 70, grazie all'opera di 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 sua 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, , aumenta la possibilità di sviluppare un sistema in modo collaborativo distribuito 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 o un sistema Unix è di fatto un insieme di script e comandi che vengono eseguiti al boot dopo il caricamento del kernel, ed è un'ottima fonte di apprendimento di tecniche di scripting e automazione.

Introduzione allo shell scripting

Autore: ask - ( Revisione: al ) - Ultimo Aggiornamento: 2003-11-27 23:54:29 - Data di creazione: 2003-11-27 23:54:29
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

La Shell è il programma di interfacciamento tra l'utente e il sistema operativo in grado di interpretare ed eseguire le richieste dell'utente.

La shell dispone di frasi proprie, di controllo di flusso, variabili, metacaratteri che combinati a comandi del sistema fa della shell un vero e proprio linguaggio di programmazione a comandi.
Quando ci si trova ad eseguire in modo ripetitivo comandi o sequenze di comandi abbastanza complesse è consigliabile scrivere tali comandi in un file ed esegulirlo ogni volta che occorre.
I file contenenti comandi shell si chiamano SCRIPT (procedure), per poter esser eseguiti questi file devono avere l'attributo di esecuzione (chmod +x file).

La selezione di quale shell (bash, csh, ksh) eseguirà lo script è indicata nella prima riga del file:
- nel caso la prima riga contiene solo il carattere # sarà eseguita la shell da cui è stato lanciato lo script;
- se contiene #!pathname viene utilizzata la shell indicata  (es: #!/bin/ksh)
- se non viene indicato nulla verrà interpretato da una Bourne Shell.

Per creare uno script shell quindi basta:
- Creare un nuovo file di testo con un editor come vi: vi prova;
- Iniziare il file con una riga che identifica l'interpreta da usare: #!/bin/bash
- Scrivere nelle righe successive i comandi e le istruzioni che si intendono eseguire nello script
- Salvare il file e renderlo eseguibile: chmod 755 prova
- Eseguire il file: ./prova.
NOTA: Se si edita un file su Windows o DOS fare attenzione ai caratteri speciali di fine riga che Windows introduce e che rendono impossibile l'esecuzione di uno script shell su Linux. Usare il comando dos2unix prova per converire i caratteri ESC di fine riga Windows (LF,CR) nell'analogo Unix (CR).

Gli script di inizializzazione su shell diverse

Autore: al - Ultimo Aggiornamento: 2002-09-12 13:21:41 - Data di creazione: 2002-09-12 13:21:41
Tipo Infobox: ETCETERA - Skill: 3- INTERMEDIATE

I file di inizializzazione possono variare su Shell e sistemi operativi diversi.
Qui si analizzano quelli di tutte le shell disponibili su Solaris. In genere sono validi per tutti i dialetti Unix.

BOURNE SHELL
File di inizializzazione globali:/etc/profile
File eseguiti al login dell'utente: $HOME/.profile
File eseguiti all'apertura della shell dopo il login: --
PATH della shell: /bin/sh

KORN SHELL
File di inizializzazione globali:/etc/profile
File eseguiti al login dell'utente: $HOME/.profile - $HOME/.kshrc
File eseguiti all'apertura della shell dopo il login: $HOME/.kshrc
PATH della shell: /bin/ksh

C SHELL
File di inizializzazione globali:/etc/.login
File eseguiti al login dell'utente: $HOME/.cshrc
File eseguiti all'apertura della shell dopo il login: --
PATH della shell: /bin/csh

Z SHELL
File di inizializzazione globali:/etc/zshenv - /etc/zprofile - /etc/zshrc - /etc/zlogin
File eseguiti al login dell'utente: $HOME/.zshenv - $HOME/.zprofile - $HOME/.zlogin
File eseguiti all'apertura della shell dopo il login: $HOME/.zshrc
PATH della shell: /bin/zsh

BASH
File di inizializzazione globali:/etc/profile
File eseguiti al login dell'utente: $HOME/.bash_profile - $HOME/.bash_login - $HOME/.profile
File eseguiti all'apertura della shell dopo il login: $HOME/.bashrc
PATH della shell: /bin/bash

TC
File di inizializzazione globali:/etc/csh.cshrc - /etc/csh.login
File eseguiti al login dell'utente: $HOME/.tcshrc o $HOME/.cshrc
File eseguiti all'apertura della shell dopo il login: --
PATH della shell: /bin/tcsh

Customizzare il proprio ambiente shell

Autore: al - Ultimo Aggiornamento: 2003-11-27 23:44:20 - Data di creazione: 2003-11-27 23:44:20
Tipo Infobox: TIPS - Skill: 3- INTERMEDIATE

Tramite gli script di inizializzazione è possibile customizzare l'ambiente shell in cui si lavora, modificando e impostando i valori di variabili d'ambiente (valide per ogni processo gestito dall'utente) o di variabili locali (valide solo la shell corrente).

Le variabili d'ambiente più comuni sono:
LOGNAME La login dell'utente. Viene impostata al login.
USER L'utente corrente. Può essere diverso da LOGNAME se l'utente ha fatto un 'su'.
HOME Il path dell'home directory dell'utente. Viene impostata al login.
SHELL Il path della shell di default. Viene impostata al login.
PATH I path di default in cui la shell cerca comandi da eseguire. Viene impostata al login.
MAIL Il path della casella postale dell'utente. Viene impostata al login.
TERM Il tipo di terminale corrente.
PWD La directory di lavoro corrente.
PS1 Il prompt della shell (per Bourne e Korn shell)
prompt Il prompt della shell (per la C shell)
EDITOR Il text editor di default (usato nella shell e in comandi quali crontab -e)
DISPLAY Dove viene visualizzato il Display di un X server

Per impostare o modificare una variabile d'ambiente ci sono diversi metodi a seconda della shell utilizzata:
Bourne, Bash e Korn Shell: VARIABILE=valore ; export VARIABILE. Per esempio: PS1='$LOGNAME@$HOSTNAME ! $' ; export PS1. Oppure, in forma ridotta: export VARIABILE=valore
C Shell: setenv variabile valore. Per esempio: setenv prompt "\! 'uname -n' % "

Esempio di IF THEN ELIF ELSE

Autore: ask - Ultimo Aggiornamento: 2002-10-28 12:40:21 - Data di creazione: 2002-10-28 12:40:21
Tipo Infobox: SCRIPTS - Skill: 3- INTERMEDIATE

Script di esempio funzionamento IF THEN ELIF ELSE, se il file esiste stampa FILE EXIST altrimenti FILE NOT FOUND

#!/bin/sh
#
if test -f /$HOME/.bash_profile
then
   echo "FILE EXIST"
else
   echo "FILE NOT FOUND"
fi


Esempio di FOR IN DO DONE

Autore: ask - Ultimo Aggiornamento: 2002-10-28 12:39:30 - Data di creazione: 2002-10-28 12:39:30
Tipo Infobox: SCRIPTS - Skill: 3- INTERMEDIATE

Script che ad ogni ciclo stampa "." , termina quando arriva a 10.

#!/bin/sh
for dots in 1 2 3 4 5 6 7 8 9 10; do
  echo -e "."
done

Esempio di WHILE DO DONE

Autore: ask - Ultimo Aggiornamento: 2004-05-15 18:15:01 - Data di creazione: 2004-05-15 18:15:01
Tipo Infobox: SCRIPTS - Skill: 3- INTERMEDIATE

Script che stampa il valore della variabile varA fino a quando il suo valore risulta maggiore della varB.

#!/bin/bash
#
varA=2;
varB=10;

while [ $varA -le $varB ]; do
    echo "$varA"
    varA=`expr $varA + 1`
sleep 1
done

Esempio di UNTIL DO DONE

Autore: ask - Ultimo Aggiornamento: 2002-10-28 12:41:15 - Data di creazione: 2002-10-28 12:41:15
Tipo Infobox: SCRIPTS - Skill: 3- INTERMEDIATE

Script che stampa il valore della variabile "a" fino a quando è minore della variabile "b".

#!/bin/sh
#
a=0;
b=0;
  until [ $a -ge $b ]; do
  echo "$a"
  a=`expr $a + 1`
sleep 1
done

Esempio di CASE IN ESAC

Autore: ask - Ultimo Aggiornamento: 2002-10-28 12:41:34 - Data di creazione: 2002-10-28 12:41:34
Tipo Infobox: SCRIPTS - Skill: 3- INTERMEDIATE

Script che controlla in maniera "empirica" se il numero inserito non è dispari.

#!/bin/bash
echo  "Inserire un numero da 1 a 9: "
echo ""
read numero
case $numero in
  1) echo "UNO" ;;
  3) echo "TRE" ;;
  5) echo "CINQUE" ;;
  7) echo "SETTE" ;;
  9) echo "NOVE" ;;
  *) echo "Non hai inserito un numero dispari"
esac

Redirezionamenti e pipe

Autore: al - Ultimo Aggiornamento: 2004-05-23 16:01:22 - Data di creazione: 2004-05-23 16:01:22
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Fin dalle prime (ma non le primissime) versioni di Unix è stata introdotta nella shell la possibilità di redirezionare l'output di programmi (i dati che generano) ad altri programmi e di compiere analoghe operazioni con l'input e i messaggi di errore.
Questa possibilità, essendo valida per tutti i programmi e applicabile a tutti i file e oggetti del file system, permette una flessibilità enorme ed è particolarmente utile in script shell.

La shell gestisce la comunicazione con ogni programma lanciato tramite 3 file descrittori:
- standard input (stdin - file descriptor 0)
E' il canale attraverso il quale il programma riceve i dati di ingresso, generalmente la tastiera.
- standard output (stdout - file descriptor 1)
E' il canale di uscita del risultato dell'elaborazione del programma, di solito il video.
- standard error (stderr - file descriptor 2)
E' 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, stdout e stderr 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

Le variabili d'ambiente e di shell

Autore: al - Ultimo Aggiornamento: 2003-11-27 23:53:41 - Data di creazione: 2003-11-27 23:53:41
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

La shell permette di definire mediante l'uso di variabili alcuni parametri che influenzano il comportamento dei programmi che vengono eseguiti.

Si usa distinguere fra Variabili d'ambiente, generalmente indicate in MAIUSCOLO, che vengono passate ad ogni programma eseguito dalla shell e quindi costituiscono di fatto la definizione di un una serie di parametri globali, e variabili locali, che vengono create ed utilizzate  solo all'interno di un programma (che può essere anche uno script shell) e che generalmente si indicano in minuscolo.
Di solito basta esportare una variabile locale per farla diventare d'ambiente.
Si identifica una variabile con il simbolo $.

Le variabili d'ambiente più importanti sono:
HOME  il valore di questa variabile è quella della home-directory dell'utente
PATH  l'elenco delle directory 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 si sta usando.
Con il comando printenv o env vengono visualizzate le variabili d'ambiente della propria shell.

Strutture di controllo nella shell

Autore: ask - ( Revisione: al ) - Ultimo Aggiornamento: 2003-11-28 00:00:09 - Data di creazione: 2003-11-28 00:00:09
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

Come ogni linguaggio di programmazione anche la shell ha delle strutture di controllo, la cui logica e sintassi è simile a quelle comuni in altri linguaggi come il C.

IF THEN ELIF ELSE
if cmd1 -  Se l'ultimo comando in cmd1 è terminato con successo
    then
cmd2 - I comandi cmd2 vengono eseguiti
elif
    cmd3 - Altrimenti se l'ultimo comando in cmd3 è terminato con successo  
then
    cmd4 - Vengono eseguiti i cmd4
else
    cmd5 - Altrimenti, se ne cmd1 ne cmd3 sono soddisfatti, vengono eseguiti i cmd5
fi

FOR IN DO DONE
for cmds - Cmds viene eseguito tante volte quanti sono
[in  a b c...]    - i valori in a b c. Ad ogni ciclo il valore di vars cambia
do - a seconda del corrispettivo valore a b c....
    cmds
done

WHILE DO DONE
while cmds1 - Esegue cmd1 e se i comandi terminano con valore logico vero
do
    cmds2 - Esegue cmd2 fino a quando cmd1 termina con valore logico falso
done

UNTIL DO DONE
until cmd1 - Esegue cmd1 e se i comandi terminano con valore logico falso
do
    cmd2 - Esegue cmd2 fino a quando cmd1 termina con valore logico vero
done

CASE IN ESAC
case vars in - Viene effettuato un confronto tra vars
    match1) list1 ;; - e le match1.. finchè non trova il
    match2) list2 ;; - corrispettivo valore
    match3) list3 ;;
    ...
esac

Alias e .profile

Autore: Jediblack - Ultimo Aggiornamento: 2004-05-23 15:37:21 - Data di creazione: 2004-05-23 15:37:21
Tipo Infobox: TIPS - Skill: 2- JUNIOR

Bash mette a disposizione due comandi interni molto interessanti: alias e unalias. Il primo dà la possibilità all'utente di rinominare un comando od uno script, mentre il secondo cancella un alias creato in questo modo.

Proviamo a digitare il comando alias. Ciò che appare a schermo potrebbe assomigliare a quanto segue:
alias d='dir'
alias dir='/usr/bin/ls $LS_OPTIONS --format=vertical'
alias emacs='emacs-21.3-no-x11'
alias halt='su -c halt'
alias la='ls -la'
alias lh='ls -lh'
alias ll='ls -l'
alias ls='/usr/bin/ls $LS_OPTIONS'
alias mc='. /usr/share/mc/bin/mc-wrapper.sh'
alias reboot='su -c reboot'
alias v='vdir'
alias vdir='/usr/bin/ls $LS_OPTIONS --format=long'

Quello che viene mostrato è la lista degli alias attivi. Attenzione che questa lista potrebbe cambiare da utente ad utente e da distribuzione a distribuzione.

Vediamo come definire nostri alias. La sintassi del comando è particolarmente semplice ed assomiglia in tutto e per tutto alla definizione di variabili d'ambiente.
alias nomeAlias='comando + opzioni'

Tuttavia bisogna porre attenzione a due dettagli. Quando si digita un comando al prompt della Bash, quest'ultima come prima cosa scandisce la lista degli alias e, se trova una corrispondenza, la esegue. Significa che se ho intrapreso una decisione del tipo alias ls='clear', ogni volta che chiedo la lista delle directory mi ritrovo lo schermo pulito.
Un secondo dettaglio è che gli alias creati in questo modo vengono persi nel momento in cui eseguiamo il logout. Risulta quindi utile salvare gli alias che vengono usati più frequentemente nel file .profile nella propria home directory. In questo modo vengono ridefiniti tutte le volte che eseguiamo il login.

Inizializzazione della bash

Autore: al - Ultimo Aggiornamento: 2003-11-27 23:50:56 - Data di creazione: 2003-11-27 23:50:56
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

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à.
Ogni shell prevede uno o più "file di configurazione" che viene processato ogni volta che viene invocata. Di fatto, gli script di inizializzazione di una shell, sono normali script che si eseguono all'avvio delle shell stessa.

Questi file di configurazione sono 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 o eseguire determinati programmi all'avvio della shell ecc.

Oltre agli script eseguiti al login, la shell può eseguire uno script al momento del logout da parte dell'utente.
Per la bash, questo script, se esiste, è : $HOME/.bash_logout

Exit & Exit Status

Autore: homer - Ultimo Aggiornamento: 2003-11-28 00:07:50 - Data di creazione: 2003-11-28 00:07:50
Tipo Infobox: DESCRIPTION - Skill: 4- ADVANCED

Il comando EXIT può essere utilizzato per terminare uno script Bash, ed in modo simile ad un linguaggio di programmazione può restituire un valore chiamato Exit Status.

EXIT, permette di terminare arbitrariamente uno script. In particolare, ogni comando ritorna un Exit Status con valore 0 quando termina con successo e un valore diverso da 0 quando si verifica un errore.

Anche le funzioni all'interno di uno script o lo script stesso possono ritornare un Exit Status il quale è determinato dall'ultimo comando eseguito dalla funzione o dallo script.

E' possibile controllare lo stato di uscita dell'ultimo comando eseguito tramite la variabile $?. Terminato uno script è possibile verificarne lo stato di uscita con echo $?.

Per far ritornare un valore personalizzato da restituire alla Shell è possibile utilizzare EXIT nnn, dove nnn è un numero compreso tra 0 e 255. Alcuni Exit Status hanno un valore riservato ed è quindi consigliato non utilizzarli per non confondersi in fase di troubleshooting:

- 1: Errore Generico
- 2: Errato utilizzo delle shell builtins
- 126: quando il comando non può essere eseguito
- 127: quando il comando non viene trovato
- 128: quando viene fornito un argomento errato a EXIT
- 128+n: quando il comando viene terminato da un segnale di interruzione. 128 +n sta a significare il valore 128 + il valore del segnale che lo ha interrotto.
- 130: quando lo script è terminato da Control-C
- 255: quando l'exit status è fuori dai limiti consentiti (0-255)

Se EXIT è chiamato senza parametri il suo valore è quello dell'ultimo comando eseguito.


I processi

Definizione e gestione dei processi. Segnali e job.

Introduzione ai processi sotto Linux/Unix

Autore: Max_Rispetto - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-31 08:59:17 - Data di creazione: 2002-10-31 08:59:17
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Uno dei principali motivi del successo di Unix è senza dubbio dovuto alla sua capacità di multitasking. Per multitasking si intende la possibilità da parte del sistema operativo di far girare contemporaneamente più di una applicazione.

Ogni programma, ogni comando che si lancia, ogni servizio attivo sul sistema da origine a uno o più processi.
Ad ogni processo viene assegnato un numero che lo identifica univocamente, chiamato PID (Process IDentificator). Ogni processo, tranne init (a cui corrisponde il PID 1), è 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: codice eseguibile, posizione di esecuzione, dati che gestisce, file aperti, ambiente di esecuzione, 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.
Un processo può generare una copia di se stesso (fork), cha ha PID diverso e PPID uguale al proprio PID.

La Schedulazione da parte del kernel
Nel kernel di un sistema operativo lo schedulatore (dispatcher) è responsabile della coordinazione dei processi in esecuzione per gestire i loro accessi alle risorse e assicurare che abbiano accesso alla CPU per un tempo relativo alla loro priorità assegnata, senza rischiare che alcuni processi intasino completamente il CPU time ed altri non riescano ad utilizzarla minimamente.
La schedulazione è un'operazione del kernel che definisce i seguenti stati di processo:
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.
La priorità pre-impostata di un task è 0 (-20 è considerata la priorità più alta). Solo l'amministratore puo resettare la priorità di un processo per portarla al di sotto di 0, ma i normali utenti possono variare la priorità per i valori positivi (usando il comando 'renice').
I nuovi processi ereditano la priorità dei loro padri.

JOB
La shell Unix è il tipico mezzo con cui vengono lanciati processi sul sistema (oltre ad essere essa stessa un normale processo), la shell assegna ad ogni processo lanciato da un utente un numero di job, e permette di mandare in foreground o background al sua esecuzione.

Gestione Processi

Autore: Max_Rispetto - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-13 20:01:34 - Data di creazione: 2002-10-13 20:01:34
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Ogni programma eseguito su un sistema è un processo, identificato con un suo PID. Quando un programma viene eseguito da una shell, assume anche un numero di job e può essere gestito all'interno della shell.

Le modalità fondamentali con cui si possono lanciare i job sono due: in foreground e in background.
Nella prima l'utente attende che l'esecuzione del suo processo termini prima di riottenere il prompt della shell.
Nella seconda invece il prompt viene restituito subito e il processo continua l'esecuzione. In questo modo l'utente può continuare a lavorare e quindi, volendo, potrebbe lanciare altri programmi in background.
Il segno & scritto alla fine del comando dice alla shell di eseguirlo in background e ridare subito il prompt.
Con CTRL-C si interrompe un processo.
Con CRTL-Z si mette in “pausa” un processo e si ritorna al prompt della shell.

La shell prevede una serie di comandi interni per gestire i job:
jobs: mostra i processi attivi in background lanciati da un certo utente. Il numero tra parentesi che viene restituito a video è il numero di, il “+” significa che è l’ultimo processo ad essere stato sospeso (fg senza parametri fa ripartire l’ultimo processo sospeso), l’altro numero è il PID.
bg: Esegue in background un processo precedentemente interrotto.
fg: Esegue un processo in primo piano.

Esistono inoltre vari comandi (file autonomi, non incorportati nella shell) utili per gestire i processi:
kill: Invia un segnale ad un processo attivo (normalmente utilizzato per fermare un processo).
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à.
nohup : 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.  
ps: Visualizza un elenco dei processi in fase di esecuzione
pstree: Simile a ps ma mostra chiaramente le relazioni tra processi padre e processi figli.
top: Visualizza un elenco dei processi che sfruttano intensamente il processore e consumano molta memoria.

ps

Autore: Max_Rispetto - Ultimo Aggiornamento: 2004-05-23 16:02:11 - Data di creazione: 2004-05-23 16:02:11
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Comando che mostra un'istantanea dei processi correnti. Le opzioni sulla riga di comando possono opzionalmente essere precedute da un '-', ma non è necessario.

ps [- ] [lujsvmaxScewhrnu ] [txx ] [O [+ |- ]k1 [[+ |- ]k2 ...]] [pids ]
m mostra informazioni sulla memoria (assieme con il flag p da il numero di pagine)
u formato utente: da il nome dell'utente e l'ora d'inizio
f le righe di comando sono mostrate in un albero
a mostra anche i processi degli altri utenti
x mostra i processi che non controllano un terminale
S aggiunge il tempo di cpu dei figli e i page fault
r solo processi running
pid Elenca solo i processi specificati; sono separati da virgole. La lista deve essere data immediatamente dopo l'ultima opzione di una riga di comando con un unico argomento, senza introdurre spazi, p.es. ps -j1,4,5
--help restituisce un messaggio d'aiuto che riassume l'uso e da un lista delle sort key supportate.
--version mostra la versione

Fermare l'output di processi in background

Autore: Alian - Ultimo Aggiornamento: 2005-06-21 15:56:18 - Data di creazione:
Tipo Infobox: TIPS - Skill: 3- INTERMEDIATE

E' possibile fermare programmi in background che tentano di scrivere l'output su terminale.

Se eseguiamo un processo in background senza ridirezionare l'output, avremo che il testo scritto da tale processo verrà visualizzato sullo schermo senza controllo. Questo fastidioso effetto può essere eliminato tramite il seguente comando: stty tostop.
Dopo aver dato questo comando tutti i processi in background che tentano di scrivere sul  terminale saranno fermati ed eseguendo il comando jobs sulla shell apparirà il seguente messaggio:
[1] + Stopped (tty output) nomeJob
Volendo far ripartire il processo in background e vedere l'output dello stesso, è necessario portarlo in foreground tramite il comando fg. E' possibile disabilitare questa funzione tramite il con: stty -tostop.

vmstat

Autore: Max_Rispetto - Ultimo Aggiornamento: 2002-09-21 10:54:43 - Data di creazione: 2002-09-21 10:54:43
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Comando che riporta informazioni sui processi, sulla memoria, sulla paginazione, sui block IO, i trap e l'attività della CPU.
La prima volta mostra le medie dall'ultimo reboot. Le volte successive mostra informazioni su un periodo di campionamento di lunghezza "delay". I report sui processi e la memoria sono istantanei in entrambi i casi.
Questi report sono pensati per identificare i "colli di bottiglia" del sistema. Il vmstat di Linux non si conta come processo in esecuzione.
Tutti i blocchi di Linux attualmente sono da 1k, ad eccezione per i blocchi del CD-ROM che sono da 2k.

vmstat [-n] [delay [num]]
vmstat[-V]

-n mostra l'header solo una volta invece che periodicamente.
delay è il ritardo in secondi tra gli aggiornamenti. Se non è specificato alcun ritardo, è mostrato solo un report con i valori medi dal reboot.
num è il numero degli aggiornamenti. Se non è specificato ed è definito il ritardo, allora num di default è infinito.
-V mostra informazioni sulla versione

Esempio di output
procsmemoryswapiosystemcpu
rbwswpdfreebuffcachesisobiboincsussyid
000030724069292664560001101500100


Descrizione dei campi
Procs
r: Il numero di processo in attesa del run time.
b: Il numero di processi in sleep non interrompibile.
w: Il numero di processi swap out ma altrimenti runable.
Memory
swpd: il totale della memoria virtuale usata (kB).
free: il totale della memoria libera (kB).
buff: il totale della memoria usata come buffer (kB).
Swap
si: Il totale della memoria swappata dal disco (kB/s).
so: Il totale della memoria swappata nel disco (kB/s).
IO
bi: Blocchi inviati a un device a blocchi (blocchi/s).
bo: Blocchi ricevuti da un device a blocchi (blocchi/s).
System
in: Il numero di interrupt al secondo, incluso il clock.
cs: Il numero di cambi di contesto al secondo (Contest switch).
CPU
us: Percentuale di utilizzo CPU da parte di processi in userspace
sy: Percentuale di utilizzo CPU da parte del kernel
id: Idle time

kill

Autore: Max_Rispetto - Ultimo Aggiornamento: 2002-10-06 18:04:14 - Data di creazione: 2002-10-06 18:04:14
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Comando per mandare un segnale ad un processo (non necessariamente di chiusura).

kill [ -s signal | -p ] [ -a ] pid ...
kill -l [ signal ]

pid ... Specifica la lista di processi ai quali kill deve inviare il signal. Si può scegliere fra cinque opzioni:
   n il processo con pid n viene killato (n maggiore di 0)
   0 tutti i processi nel gruppo processi corrente vengono killati
   -1 tutti i processi con pid maggiore di 1 vengono killati
   -n tutti i processi nel gruppo processi n vengono killati (n maggiore di 0)
   name tutti i processi che hanno nome name vengono killati
-s Specifica il signal da inviare. Il signal può essere dato come il nome o il numero del signal
-l Mostra una lista dei nomi dei signal
-p Specifica che kill deve solo mostrare il pid dei processi nominati, e non deve mandare loro un signal

pstree

Autore: Max_Rispetto - Ultimo Aggiornamento: 2002-09-28 00:41:40 - Data di creazione: 2002-09-28 00:41:40
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Comando che visualizza la struttura ad albero dei processi sul sistema, e mostra anche quelli che hanno generato altri (ossia i processi "padre" e i processi "figli").

pstree [-a] [-c] [-h] [-l] [-n] [-p] [-u] [-G|-U] [pid|utente]
pstree [-V]

- a Mostra gli argomenti della riga di comando
- h Evidenzia il processo corrente e i suoi antenati
- n Ordina i processi con lo stesso antenato in base al PID
- p Mostra i PID. I PID sono mostrati in numeri decimali tra parentesi dopo ogni nome di processo. -p disabilita implicitamente la compattazione
- V Mostra la versione

top

Autore: Max_Rispetto - Ultimo Aggiornamento: 2002-09-28 00:45:59 - Data di creazione: 2002-09-28 00:45:59
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Comando che fornisce in tempo reale istantanee dell'attività del processore. Mostra una lista dei task del sistema che fanno un uso più intenso della CPU, e può mettere a disposizione un'interfaccia interattiva per manipolare i processi. Può ordinare i task in base all'uso della CPU, all'uso della memoria e al tempo d'esecuzione.

top [-] [d delay] [q] [c] [S] [s] [i]
d Specifica l'intervallo tra gli aggiornamenti della schermata. Lo si può cambiare con il comando interattivo s.
q Fa si che top si aggiorni senza nessun ritardo. Se il chiamante ha i privilegi del superuser, top gira alla più alta priorità possibile.
S Specifica il cumulative mode, nel quale ogni processo è mostrato con il tempo di CPU che conprende anche quello speso dai figli che sono già terminati. È come il flag -S di ps.
s Dice a top di girare in secure mode. Disabilita i pericoli potenziali dei comandi interattivi (vedere sotto).
i Avvia top ignorando qualsiasi processo idle o zombie. Si veda sotto il comando interattivo i.
c Mostra la riga di comando invece del solo nome del comando.

Descrizione dei campi
top mostra una varietà di informazioni sullo stato del processore. Di default la schermata si aggiorna ogni 5 secondi, ma questo può essere cambiato con l'opzione d in riga di comando o con il comando interattivo s.
uptime mostra da quanto tempo il sistema è "su", e i tre carichi medi del sistema. I carichi medi sono il numero medio di processi pronti per essere eseguiti durante gli ultimi 1, 5 e 15 minuti. Questa riga è come l'output di uptime . La visualizzazione dell'uptime può essere disattivata (e riattivata) con il comando interattivo l.
processes mostra il numero totale di processi in esecuzione quando è stato fatto l'ultimo aggiornamento. Questo è poi suddiviso nel numero di task che sono running, sleeping, stopped, o undead. La visulizzazione di processes e states può essere disattivata (e riattivata) con il comando interattivo t.
CPU states mostra la percentuale del tempo di CPU speso in user mode, system mode, niced task, e idle. (I niced task sono solo quelli il cui valore nice è negativo). Il tempo speso in niced task sarà contato anche in system e user time, così il totale sarà più del 100%. La visualizzazione di processes e states può essere disattivata (e riattivata) con il comando interattivo t.
Mem. Statistiche sull'uso della memoria, incluse la memoria complessiva disponibile, la memoria libera (free), la memoria condivisa (shrd), e la memoria usata per i buffer. La visualizzazione della memoria può essere disattivata (e riattivata) con il comando interattivo m.
Swap. Statistiche sulla swap, incluse lo spazio di swap totale, lo spazio di swap disponibile, e lo spazio di swap usato. Questo e Mem sono in pratica l'output di free.
PID. Il process ID di ognuno dei task.
PPID. Il parent process ID di ognuno dei task.
UID. Lo user ID del proprietario del task.
USER. Il nome utente del proprietario del task.
PRI. La priorità del task.
NI. Il valore nice del task. Valori negativi corrispondono a priorità più basse.
SIZE. Sono qui mostrati la dimensione, in Kbyte, del codice del task più i dati più lo stack.
TSIZE. La dimensione del codice del task. Da strani valori per i processi del kernel e non funziona per i processi ELF.
DSIZE. Dimensione di Data + Stack. Non funziona per i processi ELF.
TRS. Dimensione del text residente.
SWAP. Dimensione della porzione del task swappata.
D. Dimensione della pagine marcate dirty.
LIB. Dimensione delle library page usate. Non funziona per i processi ELF.
RSS. È qui mostrato l'ammontare, in Kbyte, delle memoria fisica usata del task.
SHARE. L'ammontare della memoria condivisa usata del task.
STAT. È qui mostrato lo stato del processo. Lo stato è S per sleeping, D per uninterruptible sleep, R per running, Z per zombie, oppure T per stopped o traced. Questi stati sono seguiti da < per un processo con un valore di nice negativo, da N per un processo con un valore di nice positivo, da W per un processo swappato (questo non funziona correttamente per i processi kernel).
WCHAN. A seconda dalla disponibilità di /boot/psdatabase o della kernel link map /boot/System.map mostra l'indirizzo o il nome della funzione kernel sulla quale il task è in sleep.
TIME. Il tempo di CPU totale usato dal task da quando è partito. Se è abilitato il cumulative mode, include anche il tempo di CPU usato dai suoi processi figlio che sono terminati. Il cumulative mode lo si può abilitare con l'opzione S in riga di comando oppure con il comando interattivo S. L'etichetta sulla riga di header sarà cambiata in CTIME.
%CPU. La porzione del task del tempo di CPU dall'ultimo aggiornamento della schermata, espressa come percentuale del tempo di CPU totale.
%MEM. La porzione del task della memoria fisica.
COMMAND. La riga di comando del task; sarà troncata se è troppo lunga per essere mostrata in una riga. Sarà mostrata la riga di comando completa per i task in memoria, mentre sarà mostrata solo il nome del programma fra parentesi per i task swappati (per esempio, "(getty)").

Comandi interattivi
Mentre top è in esecuzione sono riconosciuti diversi comandi "single-key". Alcuni sono disabilitati se è stata data l'opzione s in riga di comando.
^L - Cancella e riscrive la schermata.
h o ? - Mostra un schermata d'aiuto che da una breve sommario dei comandi, e lo stato dei secure e cumulative mode.
k - Killa un processo. Sarà chiesto il PID del task, e il signal da inviare. Per un kill normale, inviare il signal 15. Per un kill sicuro, ma piuttosto brutale, inviare il signal 9. Il signal di default, come per kill , è il 15, SIGTERM. Questo comando non è disponibile in secure mode.
i - Ignora i processi idle e zombie.
n o # - Cambia il numero di processi da mostrare. Sarà chiesto di inserire un numero. Ciò ignora la determinazione automatica del numero di processi da mostrare, basata sulla misura delle dimensioni della finestra. Se è specificato 0 (impostato di default), allora top mostrerà tanti processi quanti ce ne stanno sullo schermata.
q - Esce.
r - Re-nice un processo. Sarà chiesto il PID del task, e il nuovo valore del nice. L'inserimento di un valore positivo fa si che il processo sia "niced" ad un valore negativo, e perda di priorità. Se top è eseguito da root, può essere immesso un valore negativo che assegna ad un processo una priorità più alta di quella normale. Questo comando non è disponibile in secure mode.
S - Abilita il cumulative mode, l'equivalente di ps -S, cioè, i tempi di CPU comprenderanno anche i processi figlio defunct. Per alcuni programmi, come i compilatori, che lavorano con fork in molti task separati, il modo normale li fa apparire meno esigenti di quello che in realtà sono. Per gli altri, come le shell e init, questo comportamento è corretto. In ogni caso, si provi il cumulative mode per una visione alternativa dell'uso della CPU.
s - Cambia l'intervallo tra gli aggiornamenti. Sarà chiesto di inserire l'intervallo temporale, in secondi, tra gli aggiornamenti. Valori frazionari sono riconosciuti fino ai microsecondi. L'inserimento di 0 causa un aggiornamento continuo. Si noti che valori bassi causano delle schermate praticamente illeggibili, e un grosso incremento del carico. Questo comando non è disponibile in secure mode.
f o F - Aggiunge o rimuove campi da mostrare nella schermata. Si veda sotto per ulteriori informazioni.
o o O - Cambia l'ordine dei campi visualizzati. Si veda sotto per ulteriori informazioni.
l - Disabilita (riabilita) la visualizzazione delle informazioni sul carico medio e l'uptime.
m - Disabilita (riabilita) la visualizzazione delle informazioni sulla memoria.
t - Disabilita (riabilita) la visualizzazione delle informazioni sui processi e sullo stato della CPU.
c - Disabilita (riabilita) la visualizzazione del nome del comando o dell'intera riga di comando.
M - Ordina i task in base all'uso di memoria residente.
P - Ordina i task in base all'uso della CPU (default).
T - Ordina i task in base al tempo (o al tempo comulativo).
W - Scrive la configurazione corrente sul file ~/.toprc. Questo è il modo raccomandato per scrivere il file di configurazione di top.

cat /proc/$PID/cmdline

Autore: homer - Ultimo Aggiornamento: 2005-06-21 16:01:59 - Data di creazione:
Tipo Infobox: BOFH - Skill: 2- JUNIOR

Visualizzare la stringa completa di startup di un processo non è sempre possibile.

Qualora la stringa che identifica come è stato lanciato sia troppo lunga per poterla vedere completamente con un normale comando ps, è possibile utilizzare il file system virtuale /proc, che mostra la command line che ha dato il via al processo nella variabile cmdline.

[azitti@pegasus azitti]$ ps -adef | grep mysql
root      6912     1  0 Jan28 ?        00:00:00 /bin/sh ./bin/mysqld_safe --data
mysql     6936  6912  0 Jan28 ?        00:00:00 /usr/local/mysql/bin/mysqld --de
Essendo molto lunga la stringa di startup dei processi 6912 e 6936 non sono visualizzabili completamente


[azitti@pegasus azitti]$ cat /proc/6912/cmdline
/bin/sh./bin/mysqld_safe--datadir=/usr/local/mysql/data--pid-file=/usr/local/mysql/data/pegasus.pid


[azitti@pegasus azitti]$ cat /proc/6936/cmdline
/usr/local/mysql/bin/mysqld--defaults-extra-file=/usr/local/mysql/data/my.cnf
--basedir=/usr/local/mysql--datadir=/usr/local/mysql/data--user=mysql
--pid-file=/usr/local/mysql/data/pegasus.pid--skip-locking

Nel file sytem /proc è possibile trovare le directory relative ai processi attivi nel sistema

All'interno della directory /proc/$PID (dove $PID è il PID di qualsiasi processo in esecuzione sul sistema) sono inoltre disponibili moltre altre informazioni di basso livello sul processo stesso come variabili d'ambiente, risorse occupate, link al file binario.

Processi: visualizzarli e gestirli

Ogni programma in esecuzione su Linux è un Processo.
Ogni processo è in esecuzione sul sistema con un proprio user (con il quale accede alle risorse del sistema) un PID (numero univoco che identifica il processo), un PPID (il PID del processo padre).

Comandi di visualizzazione

ps - Visualizza l'elenco dei processi sul sistema fornendo informazioni di varia natura (secondo argomenti)
Combinazioni utili: ps -adef  - ps auxf

vmstat - Visualizza i principali indicatori generali sull'utilizzo delle risorse di sistema.
Es: vmstat 1 (aggiornato ogni secondo)

top - Visualizza in tempo reale i processi sul sistema e le risorse utilizzate da ogni processo.

/proc/$PID - Directory dove sono accessibili, in sottodirectory con nome uguale al PID, innumerevoli informazioni in tempo reale sullo stato del sistema e dei processi


Comandi di gestione

kill - Manda un segnale ad un processo. I segnali più usati sono: TERM (15), KILL (9), HUP (1).
Es: kill -15 178 (chiudi in modo pulito il processo con PID 178)

renice - Cambia la priorità di esecuzione di un processo (Il priority number va da -20 (massima priorità di esecuzione) a + 20).
Es: renice 20 1887 (Abbassa al massimo la priorità del processo con PID 1887)


Debugging dei processi

Strumenti e indicazioni su come eseguire il debugging delle applicazioni: strace, lsof, ldd.

Troubleshooting di processi

Autore: al - Ultimo Aggiornamento: 2002-10-07 16:37:07 - Data di creazione: 2002-10-07 16:37:07
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

L'opera di debugging di un processo non è generalmente argomento proponibile ad un sistemista non esperto, 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, abbiano comportamenti erratici o problemi di prestazioni o di sopportazione di alti carichi.
Senza volersi addentrare in problematiche di debugging avanzato, si possono elencare alcuni strumenti a disposizione del sistemista per diagnosticare simili problemi:

Log
I log sono sempre la prima cosa da guardare perchè di solito contengono abbastanza informazioni da farci capire dove intervenire. Eventualmente analizzare syslog.conf o le istruzioni e le configurazioni del singolo programma per capire dove vengono loggati i suoi messaggi e poi leggere i messaggi di errore sui log che ci interessano.

Debug
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. Tipicamente il livello di debug può essere impostato come opzione da command line o nel file di configurazione.

Comandi di diagnostica
Unix mette a disposizione vari comandi utili per capire cosa fa un processo e come si comporta il sistema. SU Linux si possono comunemente trovare i seguenti tool:
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 (invero piuttosto verboso e per molti incomprensibile), 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, un grep ENOENT sullo stdout di strace può evidenziare tutte le volte in cui si è cercato un file senza trovarlo (spesso questo non è un problema, in quanto un processo può trovare un file dopo averlo cercato senza successo in varie directory (con relativo messaggio di errore "ENOENT (No such file or directory)".
ldd Stampa l'elenco delle librerie condivise utilizzate dal comando specificato
lsof 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 (e, per esempio, capire dove sta loggando).

ldd

Autore: Max_Rispetto - Ultimo Aggiornamento: 2004-05-23 16:02:54 - Data di creazione: 2004-05-23 16:02:54
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

ldd (List Dynamic Dependencies) permette di determinare quali librerie condivise vengono utilizzate da un file eseguibile. All'output viene stampato l'elenco delle librerie necessarie al file e il loro percorso.

ldd [opzione] nome_file
-v "verbose", opzione che stampa tutte le informazioni riguardanti le librerie utilizzate dal file.

Vediamo un esempio. Eseguendo il comando ldd /bin/ls, verrà visualizzato l'elenco delle librerie che vengono utilizzate dal comando ls.
libtermcap.so.2 => /lib/libtermcap.so.2 (0x4001e000)
libc.so.6 => /lib/libc.so.6 (0x40022000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Questo vuol dire che il comando ls dipende dalla presenza di libtermcap.so.2 (libreria che descrive le capacità di un terminale) e da libc.so.6 (la libreria C).

Se un programma non dipende da alcuna libreria, ldd stamperà la stringa statically linked (ELF) oppure statically linked.

lsof

Autore: Max_Rispetto - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-15 18:20:53 - Data di creazione: 2002-10-15 18:20:53
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

lsof (List Open Files) elenca gli "open file" del sistema, cioè normali file, file speciali a blocchi o caratteri, directory, librerie condivise, processi, socket, etc.

lsof [opzioni]
Eseguendo lsof senza opzioni si genera l'elenco completo dei file aperti sul sistema, che generalmente è piuttosto lungo.
Le opzioni più interessanti sono:
-p [numero] stampa gli open file in base al pid specificato
-i stampa solo i processi Internet. Molto utile per esaminare le porte aperte che aspettano tentativi di connessione (e quindi anche potenziali intrusi).

lsof è un tool molto utile utilizzato in combinazione col comando grep.
Ad esempio, eseguendo lsof | grep sshd si visualizzano sia file aperti da sshd che la porta su cui sta "ascoltando" (LISTEN) o eventuali connessioni aperte.

strace

Autore: Max_Rispetto - Ultimo Aggiornamento: 2002-10-16 17:52:52 - Data di creazione: 2002-10-16 17:52:52
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

strace è un tool molto utile per il debugging, eseguendo un "Signal Trace" ("Tracciamento dei Segnali", ndt). Il suo utilizzo permette di eseguire un programma tenendo sotto controllo tutti i segnali e le chiamate di sistema. In questo modo si possono ricercare eventuali errori e capire dove il programma non funziona. Strace è anche in grado di "attaccarsi" a un processo già in esecuzione e tracciarne i segnali.

strace [opzioni]
-o [file_output] [nome_comando] esegue uno strace di un programma registrando l'output in un file, permettendo cosi una comoda analisi a posteriori
-p PID collega strace ad un processo già in corso inserendo il PID

Vediamo un esempio. strace -o debug.txt netstat scrive su debug.txt l'output del tracing di netstat. Attenzione! Strace produce una grande quantità di output e rallenta notevolmente la macchina: la chiamata appena effettuata produce 235 righe di output in meno di 2 secondi, ma si può arrivare tranquillamente anche oltre 5000. Per questo è sempre utile stampare l'output in un file.
Spesso un programma non funziona perchè non trova certi file o librerie o non ha i permessi adeguati sugli stessi. Per rimediare basta fare | grep ENOENT: indica che non è riuscito a trovare un file o una directory.

Processi: Analisi e troubleshooting

Diagnosticare un problema di una applicazione richiede l'uso di strumenti vari:
- I log del sistema, dove spesso si spiegano i motivi di errori o malfunzionamenti
- Le opzioni di debug attivabili da un programma (nel suo file di configurazione) per analisi più approfondite
- Comandi vari per esplorare il comportamento e la natura di un programma

Comandi per l'analisi di un processo

strace - Visualizza le chiamate di sistema eseguite da un processo
Es: strace -p 1878 (Visualizza le chiamate di sistema del processo con PID 1878)

ldd - Mostra le librerie condivise utilizzate da un comando
Es: ldd /usr/bin/nmap (Visualizza le librerie condivise usate da nmap)

lsof - Mostra tutti i file aperti sul sistema da ogni processo
Es: lsof


Il processo di boot


Il processo di boot

Descrizione del processo di boot su sistemi Intel: ROM BIOS - LINUX LOADER - KERNEL LOADING - INIT

Le fasi del boot di Linux (su un sistema x386 Intel-like)

Autore: al - Ultimo Aggiornamento: 2004-05-23 16:03:44 - Data di creazione: 2004-05-23 16:03:44
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

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 su un sistema x386 (su altri si possono essere differenze nelle prime fasi) 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.

IL BIOS SU ROM
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.

IL LINUX LOADER
Esistono diversi loader che eseguono il bootstrap 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 nel TOPIC dedicato.

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.

Linux Kernel Speaks

Autore: al - Ultimo Aggiornamento: 2003-12-06 21:02:25 - Data di creazione: 2003-12-06 21:02:25
Tipo Infobox: DESCRIPTION - Skill: 4- ADVANCED

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 mostra esattamente quanto viene visualizzato dal kernel durante il boot (in tempi troppo rapidi per essere leggibili).
Segue l'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
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, che provvede al lancio dei servizi e dei programmi che devono girare sul sistema.

uptime

Autore: homer - Ultimo Aggiornamento: 2003-08-13 12:41:26 - Data di creazione: 2003-08-13 12:41:26
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Visualizza da quanto tempo il sistema è attivo.

Uptime visualizza una riga contenente l'ora corrente, da quanto tempo il sistema è up, quanti utenti sono loggati attualmente sul sistema, il carico medio di utilizzo del sistema nell' ultimo minuto, negli ultimi 5 e negli ultimi 15 minuti. Le informazioni visualizzate vengono ricavate da /var/run/utmp, /proc e /proc/loadavg.

homer@Joker:~$ uptime
10:13:24 up  1:44,  3 users,  load average: 0.06, 0.02, 0.00

Sono le ore 10.13, il sistema è up da 1 ora e 44 minuti, al momento ci sono 3 utenti loggati e il carico medio della cpu negli ultimi 1,5, e 15 minuti è stato rispettivamente 0.06, 0.02, 0.00

dmesg

Autore: al - Ultimo Aggiornamento: 2002-10-08 15:14:53 - Data di creazione: 2002-10-08 15:14:53
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Visualizza i messaggi di avvio del kernel. Disponibile su Linux.

dmesg [opzioni]
Viene solitamente usato da solo, senza opzioni (che sono disponibili per operazioni poco usate).

La fase di boot

La fase di avvio di un sistema Linux passa per 4 step:
- BIOS. Dove di decide il device da cui procedre per l'avvio
- Linux Loader (lilo o grub). Software che gestisce il caricamento del kernel
- Kernel, riconoscimento dell'hardware, caricamento driver
- Init. Padre di tutti i processi. Startup dei servizi in sequenza SystemV


Linux loaders: LILO, Grub

Installazione e configurazione di LILO, GRUB e altri Linux loader

Introduzione a LILO

Autore: al - Ultimo Aggiornamento: 2002-10-31 09:00:37 - Data di creazione: 2002-10-31 09:00:37
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

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 sue impostazioni.

Tutte queste impostazioni 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.
Ogni volta che viene modificato /etc/lilo.conf è necessario eseguire il comando lilo per installare il nuovo LILO sul settore di boot (notare la differenza, comunemente adottata, fra il comando lilo, tutto in minuscolo, e il Linux Loader vero e proprio LILO, in maiuscolo).
Al momento del boot LILO inoltre presenta la possibilità di dare comandi vari e di scegliere quale sistema operativo o quale versione del kernel caricare, a seconda delle confgiurazioni impostate in /etc/lilo.conf.
ATTENZIONE: Operare maldestramente con LILO e il MBR può impedire il boot del sistema operativo, si suggerisce sempre di avere un dischetto di ripristino disponibile da utilizzare in caso di danni o problemi con l'MBR.

/boot/grub/grub.conf

Autore: Eberk - ( Revisione: al ) - Ultimo Aggiornamento: 2005-01-21 10:25:18 - Data di creazione: 2005-01-21 10:25:18
Tipo Infobox: PATH - Skill: 2- JUNIOR

Il file /boot/grub/grub.conf (spesso referenziato con il symlink /etc/grub.conf) è il file di configurazione del boot loader GRUB.
La sua logica è simile a quella del classico lilo.conf, ma la sintassi è leggermente diversa e le opzioni più numerose.
Di fatto permette di predefinire gli stessi comandi che possono essere inseriti a mano quando Grub viene avviato, rendendo ovviamente più rapida ed automatica la fase di boot.

Il file presenta una struttura di questo tipo (esempio da un RedHat standard dual boot Win-Linux):
boot=/dev/hda Device dal quale bootare
default=0 Label (sezione) selezionata di default (0 è la prima visualizzata, in questo caso Red Hat Linux)
timeout=10 Tempo, in secondi, dopo il quale se non si effettua alcuna azione grub boota la label di default
splashimage=(hd0,2)/boot/grub/splash.xpm.gz Path della immagine di sfondo mostrata da grub al boot
password --md5 $1$6ðòüZßXÈ$bXTLL8IbDhnwmjyaNNcPG. Password (criptata) per poter modificare i parametri di avvio al boot

title Red Hat Linux (2.4.9-31) Titolo della prima label, può essere un testo arbrario
root (hd0,2) Disco (0, 1, 2...) (e partizione, dove 0 è la prima partizione e le altre a seguire) dove si trova la root directory ( / ). Notare che Grub ha una propria naming conventon sugli hard disk diversa da quella tipica di Linux: hd0 può corrispondere sia a /dev/hda che a /dev/sda.
kernel /boot/vmlinuz-2.4.9-31 ro root=/dev/hda3 Path dell'immagine del kernel. Qui possono essere definite eventuali opzioni da passare al kernel (es: vga=ext)
initrd /boot/initrd-2.4.9-31.img Path dell'immagine da mettere in un RamDisk nelle prime fase del boot (necessario se il supporto di driver fondamentali per il caricamento del kernel (device SCSI, filesystem di / e /boot) è gestito tramite moduli).

title Win2K Titolo della seconda label
rootnoverify (hd0,0) Disco (e partizione) su cui procedere per il boot di un sistema operativo non supportato (lascia al settore di boot della partizione indicata l'onere del bootstrap dell'OS)
chainloader +1 Passa il compito di bootare ad un altro boot loader (in questo caso quello di Windows)

A differenza di Lilo, con Grub quanto scritto in questo file di configurazione è immediatamente attivo e non va eseguito alcun comando per rendere definitive le modifiche (con Lilo va eseguito il comando lilo ogni volta che si modifica lilo.conf (riscrive il MBR)).

Nomenclatura di Grub dei devices

Autore: Eberk - Ultimo Aggiornamento: 2002-10-25 18:42:50 - Data di creazione: 2002-10-25 18:42:50
Tipo Infobox: TIPS - Skill: 2- JUNIOR

Grub ha una nomenclatura tutta sua per indicare i diversi devices e partizioni, e questo puo creare problemi, soprattutto se si edita per la prima volta il suo file di configurazione.

Differenze tra la nomenclatura standard di Unix e quella di Grub:
Primary Master IDE: hdaN (Unix)  hd0,N (Grub)
Primary Slave IDE: hdbN (Unix) hd2,N (Grub)
Secondary Master IDE: hdcN (Unix) hd1,N (Grub)
Secondary Slave IDE: hddN (Unix) hd3,N (Grub)
dove N sta per il numero della partizione interessata.

Per quanto riguarda i dischi SCSI vale la stessa logica (sdaN di Unix equivale a sd0,N di Grub e cosi via).

Usare il prompt di LILO

Autore: al - Ultimo Aggiornamento: 2002-09-02 22:48:03 - Data di creazione: 2002-09-02 22:48:03
Tipo Infobox: TIPS - Skill: 2- JUNIOR

LILO dispone di un command prompt che permette di eseguire operazioni più evolute della scelta del sistema operativo da caricare.
La possibilità di digitare i seguenti comandi può essere, per sicurezza, soggetta all'introduzione di una password.

TAB Visualizza l'elenco delle label disponibili, cioè dei sistemi operativi e delle versioni del kernel selezionabili al boot.
linux rescue Carica 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.

Ripristinare Windows dopo un errore con Lilo o altri Linux Loader

Autore: al - Ultimo Aggiornamento: 2002-10-31 09:01:39 - Data di creazione: 2002-10-31 09:01:39
Tipo Infobox: ETCETERA - Skill: 2- JUNIOR

Non è raro sentire di utenti che hanno provato, animati da ottime intenzioni e buona volontà, ad installare Linux sul proprio PC, con Windows già installato, e per qualche errore o svista o inesperienza in fase di installazione non riescono più a "vedere" e caricare il proprio Windows.
In questi casi, arrabbiature, delusione, disillusione e sconforto fanno diventare un potenziale nuovo utente di Linux in un suo acceso detrattore.

Le distribuzioni recenti ormai sono piuttosto efficaci nel riconoscere e preservare l'installazione Windows esistente e far pacificamente convivere i due sistemi operativi, al punto che è sempre consigliabile, se si vuole un sistema Dual Boot, installare prima Windows e poi Linux (i SO di Microsoft sono generalmente più invadenti, sotto questo aspetto, e non tollerano/prevedono facilmente coesistenze).

Di fatto, comunque, è possibile fare 2 tipi di danni sul Windows pre esistente quando si prova ad installare il pinguino:
- Cancellare completamente il vecchio Windows, distruggendone o sovrascrivendo la partizione in cui è installato (era il caso di prestare più attenzione i WARNING segnalati durante l'installazione di Linux)
- Sovrascrivere il Master Boot Record del proprio hard disk con LILO o GRUB o altri Linux Loader senza aver l'opzione di caricare Windows: in questo caso non viene propriamente cancellato Windows dal proprio hard disk, ma soltanto la possibilità di caricarlo al boot.
In questo caso il ripristino dello status quo è relativamente semplice:
Procurarsi un floppy di boot o di ripristino o un CDROM di Windows.
Se è un Windows 95, 98, Me, digitare dal DOS: fdisk /mbr
Se si è sulla console di ripristino di Windows 2000, scrivere: fixmbr
In entrambi i casi si sovrascrive e si azzera il MBR dove verosimilmente è stato installato un Linux Loader come LILO e si potrà ritrovare il proprio Windows.
L'effetto collaterale di questa operazione è che a questo punto non sarà più accessible il Linux appena installato: se si sono creati dei floppy di ripristino durante l'installazione di Linux potrà essere possibile caricare Linux con quelli ed eventualmente configurare /etc/lilo.conf (o analoghi file di configurazione del Linux Loader) in modo corretto. Altrimenti è generalmente possibile operare il ripristino bootando dal CDROM usato per l'installazione.

Introduzione a Grub

Autore: al - Ultimo Aggiornamento: 2004-05-23 16:04:40 - Data di creazione: 2004-05-23 16:04:40
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

GRUB è un boot loader multipiattaforma estremamente flessibile e potente.

Ha una 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 di boot valido).
A differenza di LILO non c'è bisogno di ridare il comando ogni volta che si cambia la configurazione.
Per la sintassi di /etc/grub.conf si rimanda alla relativa sezione: si consideri che avendo le stesse funzioni di Lilo, la sua logica è affine a /etc/lilo.conf.
Solitamente all'avvio Grub si presenta con un menu da cui è possibile scegliere quale sistema operativo caricare, ma è possibile entrare in modalità comandi, simile ad una shell, in si possono eseguire svariate operazioni: dalla scelta del path del kernel, al boot via rete.


Init e runlevels

Init, i runlevel e la gestione dei servizi da avviare al boot.

/etc/inittab

Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2004-05-23 16:06:35 - Data di creazione: 2004-05-23 16:06:35
Tipo Infobox: PATH - Skill: 3- INTERMEDIATE

/etc/inittab e' il file di configurazione di init, il primo processo che viene lanciato al boot, dopo il caricamento del kernel.
Esso contiene gli script che vengono lanciati per l'inizializzazione del sistema, configurazioni come il runlevel di default e alcune impostazioni come i comandi abbinati ad una sequenza di tasti oppure ai messaggi inviati dall'UPS.
Analizzare e comprendere la logica di questo file è molto utile per conoscere un sistema Unix con cui si ha poca familiarità: di fatto, analizzando i comandi e gli script che vengono eseguiti è possibile ricostruire tutto il processo di start-up del sistema.

Ogni entry del file segue la seguente sintassi:
id:runlevels:action:process

ID - Sequenza di 4 caratteri o meno che identifica in modo univoco la entry. Per quanto riguarda le entry relative alle getty, l'id deve corrispondere al suffisso della getty stessa.     1:2345:respawn:/sbin/mingetty tty1

RUNLEVELS - La lista dei run level per cui questa entry e' valida.

ACTIONS - La modalita' con cui viene eseguito il comando vero e proprio. Le action principali:
respawn: Ri-esegue il comando se termina. Tipicamente usato per i getty sulla console.
wait: Esegue lo script o il comando ed aspetta la sua conclusione prima di procedere.
once: Esegue il comando una sola volta quando il sistema entra nel runlevel configurato
boot: Esegue il process durante il boot ed ignora la entry relativa al runlevel
                    
PROCESS - Il comando o script che effettivamente viene lanciato.

Vediamo un esempio tipico di una distribuzione RedHat Linux. Su altri sistemi Unix questo file può cambiare nella forma (ma non nella sintassi).
[neo@dido neo]$ cat /etc/inittab
# inittab       This file describes how the INIT process should set up
#               the system in a certain run-level.
#[...]
# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
Run level di default. Se è 5 il sistema parte in modalità grafica. Se è 3 in modalità testuale. Non usare 6 o 0 per evitare che il sistema non parte del tutto!
id:5:initdefault:

Lancio dello script /etc/rc.d/rc.sysinit, che imposta vari settaggi d'ambiente
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

Qui si gestisce effettivamente quali servizi e programmi lanciare ai diversi runlevel. La chiave è il programma rc che viene invocato con il numero di runlevel desiderato
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

Ad ogni boot viene eseguito il comando update
ud::once:/sbin/update

Comando abbinato alla sequenza di tasti CTRL-ALT-DELETE per riavviare il sistema con i 3 tasti magici. Da disattivare su macchine con la tastiera fisicamente accessibile in luoghi non controllati
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

Comandi abbinati ai messaggi mandati dall'UPS
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

Inizializzazione dei terminali. Basta aggiungere qui nuove righe (mingetty tty7, tty8 ...) per aumentare il numero di console usabili da tastiera
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

Al runlevel 5 esegue il comando prefdm
x:5:respawn:/etc/X11/prefdm -nodaemon

Init

Autore: al - Ultimo Aggiornamento: 2004-05-23 16:05:49 - Data di creazione: 2004-05-23 16:05:49
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

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 dal suo file di configurazione: /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 Linux) /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 shell 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.

Ogni sistema Unix gestisce con file e procedure diverse il processo di boot, ma tutti si basano su Init e il suo file di configurazione inittab. Per cui basta analizzare questo file e capirne la logica per poter capire come viene caricato il sistema ed intervenire dove necessario in caso di problemi.

I run level Linux

Autore: al - Ultimo Aggiornamento: 2002-10-05 12:15:20 - Data di creazione: 2002-10-05 12:15:20
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

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.

Questa è una logica comune a tutti gli Unix derivati da System V, possono cambiare i nomi dei runlevel, e in certi casi la funzione, ma non la logica di questra struttura di boot.

Avvio in modalità testo o grafica

Autore: al - Ultimo Aggiornamento: 2002-10-08 16:19:01 - Data di creazione: 2002-10-08 16:19:01
Tipo Infobox: TIPS - Skill: 3- INTERMEDIATE

Durante l'installazione di Linux o altri Unix viene solitamente chiesto all'utente se si desidera, dopo il boot, avere un'interfaccia testuale (la shell) o visualizzare il login grafico su una finestra Xwindows.
In genere su un server ha sempre senso avere un'interfaccia solo testuale (init 3) e su una workstation di solito si lavora in modalità grafica (init5).

Per cambiare questa impostazione basta agire su /etc/inittab
La parola chiave initdefault indica il runlevel di default:
Per avviare il sistema in modalità testuale: id:3:initdefault
Per avviare il sistema in modalità grafica: id:5:initdefault
NON inserire valori come 0 o 6 (halt, reboot)! Il sistema non riuscirebbe mai a partire correttamente.

Gestire servizi con service

Autore: homer - Ultimo Aggiornamento: 2003-12-08 23:03:25 - Data di creazione: 2003-12-08 23:03:25
Tipo Infobox: TIPS - Skill: 2- JUNIOR

Il comando service permette di gestire l'avvio, il riavvio o lo stop di un servizio senza dover digitare il percorso completo dello script relativo.

Nelle distribuzioni Linux Red Hat e derivate, è possibile utilizzare il comando service per gestire manualmente i servizi di sistema. Per esempio, volendo controllare lo stato del servizio dhcp server è sufficiente utilizzare il comando service dhcpd start anzichè /etc/r.cd/init.d/dhcpd start.

Service non è altro che uno script shell che permette di gestire le classiche operazioni che si compiono in merito ad un servizio, tipicamente: avviarlo, fermarlo, riavviarlo e verificarne lo stato.

Alcuni esempi di utilizzo:
[root@Enigma root]# service mysqld start
Starting MySQL:8                                            [  OK  ]

Start di MySql server
[root@Enigma root]# service mysqld restart
Stopping MySQL:                                            [  OK  ]
Starting MySQL:                                            [  OK  ]

MySql viene riavviato
[root@Enigma root]# service mysqld status
mysqld (pid 3580) is running...

In questo caso viene visualizzato lo stato del server con relativo Process Identifier
[root@Enigma root]# service mysqld stop
Stopping MySQL:                                            [  OK  ]

Il server viene fermato

Tramite le opzioni di service vi è la possibilità visualizzare lo stato, oppure eseguire il restart, anche di tutti i servizi contemporaneamente.

runlevel

Autore: homer - Ultimo Aggiornamento: 2005-06-21 16:15:11 - Data di creazione: 2004-05-15 13:50:02
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Visualizza il runlevel attuale in cui gira il sistema e quello precedente.

La sintassi:
runlevel [utmp]

Il comando runlevel, ricava i dati dal file /var/run/utmp e visualizza sullo standard output il runlevel corrente e quello precedente. Qualora non esista il file utmp, o non venga trovato il record relativo, viene visualizzato il messaggio unknown. Esempio:
root@Joker:~# runlevel
N 3

In questo caso, il runlevel corrente è il 3, mentre N sta a significare che non vi erano precedenti runlevel, ovvero che la macchina è stata avviata direttamente al terzo.

Cosa serve per rifare il proprio Unix? Essere root e un vi.

Autore: al - Ultimo Aggiornamento: 2002-10-08 15:53:31 - Data di creazione: 2002-10-08 15:53:31
Tipo Infobox: TIPS - Skill: 1- NOVICE

Perchè Unix, nato agli arbori degli anni settanta del secolo scorso è ancora un sistema operativo diffuso, utilizzato e vitale nelle sue varianti, Linux incluso?
Perchè Unix è in grado di radunare una folta schiera di utenti e amministratori fieri e fanatici della propria unixità?
Le spiegazioni sono tante, quasi tutte legate alla natura stessa del sistema operativo e a come è stato inizialmente sviluppato.
Uno dei motivi da non sottovalutare è che di fatto TUTTO su Unix è in ultima analisi riconducibile ad un file di testo ASCII che si può editare con un comune editor di testi.

Basta essere root ed avere un vi e il proprio Unix diventa un libro aperto che si può riscrivere:
- I sorgenti del kernel e del software sono liberamente accessibili e modificabili (questo vale per Unix opensource, come Linux, *BSD, Hurd ecc.)
- Il padre di tutti i processi si configura con inittab, un normale testo con una logica ben precisa.
- Gli script di startup sono generalmente comuni script shell, che richiamano altri script e costruiscono il boot del sistema.

Di fatto si può decidere di far fare al proprio sistema esattamente quello che si vuole.
Certo, per essere in grado di modificare il proprio Unix come si vuole lo si deve conoscere bene, ma una volta capita la logica molte operazioni sono quantomeno "controllabili" e diagnosticabili con relativa semplicità.

Comandi e strumenti per gestire i servizi da avviare al boot

Autore: al - Ultimo Aggiornamento: 2003-05-08 14:22:08 - Data di creazione: 2003-05-08 14:22:08
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

La struttura di gestione dei processi e degli script da avviare al boot sulla base delle directory /etc/rc.* permette di stabilire cosa eseguire e cosa no con una logica ben precisa anche se non particolarmente semplice.
Su tutti gli Unix esistono tool, testuali o grafici, 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 asterisco (*) 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.
In genere tutti gli strumenti "all purpose" di amministrazione della macchina prevedono una parte di gestione del boot. Su AIX si può usare smitty, su Suse Linux Yast, su Mandrake Linux Drake ecc.
Anche sotto XWindow sono disponibili svariati programmi per eseguire questa funzione.

A prescindere dallo strumento usato, è molto importante disattivare, nella fase di boot, l'avvio di tutti i processi e servizi non utilizzati, sia per evitare sprechi delle risorse del sistema che per ragioni di sicurezza.


Amministrazione del sistema


Gestione degli utenti

I file che gestiscono gli utenti: /etc/passwd, /etc/group, /etc/shadow. I comandi per gestire gli utenti: adduser, passwd, userdel.

passwd

Autore: neo - Ultimo Aggiornamento: 2004-05-23 16:07:36 - Data di creazione: 2004-05-23 16:07:36
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Comando che permette di settare, modificare la password di un utente.
Root può modificare le password di ogni utente, mentri gli utenti normali possono modificare solo la propria.

passwd  [-d] [-S] [username]
-d Disabilita  la password per l'utente
-S Verifica lo status della password dell'utente.

Esempi
passwd Cambia la password dell'utente corrente. La password va digitata due volte e, in certi sistemi, deve avere un numero minimo di caratteri.
passwd al Cambia la password dell'utente al. Solo root può cambiare le password degli altri utenti.

Gestione degli Utenti su Linux / Unix

Autore: al - Ultimo Aggiornamento: 2004-09-20 10:27:33 - Data di creazione: 2004-09-20 10:27:33
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Unix è un sistema operativo multiuser che, oltre all'utente root, con privilegi di amministrazione, prevede utenti di sistema (usati per eseguire processi e demoni) e utenti umani che utilizzano e accedono in vario modo alla macchina.
La gestione (aggiunta, modifica, cambio password, cancellazione) degli utenti del sistema è tipicamente compito di root, che ha a disposizione su diversi sistemi Unix variegati programmi grafici o comandi testuali per queste operazioni.

I comandi più comuni e standard per gestire gli utenti sono:
useradd [opzioni] nomeutente Aggiunge un utente al sistema. Prevede varie opzioni per definire impostazioni specifiche.
userdel [opzioni] nomeutente Elimina un'utente. Su molti Unix questo comando non cancella la home directory dell'utente.
groupadd [opzioni] nomegruppo Aggiunge un gruppo.
passwd [nomeutente] Modifica la password. Tutti gli utenti, tranne root, possono cambiare solo la propria password.

Il file con l'elenco di tutti gli utenti è, su tutti i sistemi Linux, /etc/passwd, qui ci sono informazioni sulla login dell'utente, la shell utilizzata, la posizione della sua home directory, dove l'utente può liberamente scrivere dati e documenti.
In tutti i Linux moderni, la password, criptata viene scritta nel file /etc/shadow dove vengono mantenute altre informazioni relative alla gestione della stessa.

adduser

Autore: neo - Ultimo Aggiornamento: 2003-11-28 22:47:29 - Data di creazione: 2003-11-28 22:47:29
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Crea un utente o modifica le proprietà di default per la creazione degli utenti.

Creazione di un nuovo Utente
adduser [opzioni] login-name
Modifica delle impostazioni d di un nuovo Utente
adduser -D [opzioni]

Opzioni per la creazione di un nuovo utente
-c [comment] Commento all'interno di /etc/passwd
-d [home_dir] Specifica la home dir del nuovo utente
-e expire-date Indica la data di scadenza dell'account, formato della data  YYYY-MM-DD
-f inactive_days Indica il numero di giorni, che intercorrano fra la data di expire della password e la disabilitazione dell'account
-g group Indica il primo gruppo di appartenenza. Per poter utilizzare questa opzione il gruppo deve gia' esistere
-G group Indica gli altri gruppi di cui il nuovo utente fara' parte
-m La home dir dell'utente verra' creata se non esiste
-p  Identifica la password cryptata
-s Specifica la shell dell'utente
-u  Specifica l'UID dell'utente

Opzioni per la modifica delle opzioni di default
-b default_home Setta il prefix per la creazione delle home di default
-e default_expire_date Setta la data di expire dell' account
-f default_inactive Indica il numero di giorni, che intercorrono fra la data di expire della password e la disabilitazione dell'account.
-g default_group Identifica il gruppo iniziale di default
-s default_shell Identifica la shell di default

userdel

Autore: neo - Ultimo Aggiornamento: 2003-11-28 22:48:18 - Data di creazione: 2003-11-28 22:48:18
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Cancella un account e i relativi file

userdel [-r] login-name
-r Oltre a cancellare l'account vengono cancellate anche la home directory (di default viene lasciata inalterata) e la posta.

/etc/passwd

Autore: Eberk - Ultimo Aggiornamento: 2003-11-28 23:04:51 - Data di creazione: 2003-11-28 23:04:51
Tipo Infobox: PATH - Skill: 2- JUNIOR

Il file /etc/passwd è il database degli utenti su ogni sistema Unix. Ad ogni user è dedicata una riga che definisce quali sono i suoi principali attributi. Sui sistemi Unix meno recenti in questo file viene scritta anche la password (criptata), su quelli più recenti viene scritta, generalmente, in /etc/shadow, che ha maggiori restrizioni in termini di sicurezza.

Le righe di /etc/passwd si presentano nella seguente forma:
Username:Password:UserID:GroupID:Info:HomeDirectory:Shell

Username: Nome dell'user, la login con cui può accedere al sistema;
Password: Campo riservato alla password dell'utente. Può essere scritta direttamente in forma criptata o esserci semplicemente una x (la password c'è ma è scritta altrove, di solito in /etc/shadow). Se c'è un * (asterisco) significa che l'utente o non ha una password o la password non è valida (in questo caso non gli è permesso di login);
UserID: ID dell'user;
GroupID: ID del gruppo di appartenenza;
Info: Contiene informazioni sull'utente non necessarie al sistema (nome esteso, numero di telefono, mail ecc...);
HomeDirectory: Indica la directory della home dell'utente;
Shell: Indica la shell di default per quell'utente.

Un esempio:
[diego@vagante diego]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[...]
diego:x:501:503::/home/diego:/bin/bash

groupadd

Autore: neo - Ultimo Aggiornamento: 2003-11-28 22:50:31 - Data di creazione: 2003-11-28 22:50:31
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Crea un nuovo gruppo

groupadd [-g gid [-o]] [-r] [-f] group
-g Valore numerico del group ID
-r Identifica la creazione di un gruppo di sistema ovvero con GID inferiore a 499

/etc/shadow

Autore: Eberk - ( Revisione: al ) - Ultimo Aggiornamento: 2003-11-28 23:07:52 - Data di creazione: 2003-11-28 23:07:52
Tipo Infobox: PATH - Skill: 2- JUNIOR

Il file /etc/shadow è il database delle password sui Unix più evoluti. In esso sono elencate per ogni utente la password (criptata) e vari parametri ad essa connessi (ultima modifica, durata massima e minima, ecc...). Ad esso fanno riferimento diversi files, fra cui /etc/passwd e tutti i comandi per la gestione degli utenti (useradd, userdel, usermod).

Le righe in /etc/shadow si presentano nella seguente forma:
Username:password:lastchange:min:max:warn:inactive:expire:

Username: Il nome dell'utente a cui fa riferimento la password;
Password: Password criptata (13 caratteri). Puo assumere anche altri valori quali * (asterisco) che sta ad indicare che l'utente è disabilitato e !! (o nessun carattere) che significa che l'utente non ha password (cosa molto pericolosa in termini di sicurezza);
lastchange: Numero di giorni compresi fra il 1 gennaio 1970 e l'ultima modifica della password;
min: Minimo numero di giorni dall'ultima data di modifica prima di poter nuovamente cambiare la password;
max: Durata massima della password (sempre in giorni);
warn: Numero di giorni di preavviso all'utente prima di invalidare la password;
inactive: Numero di giorni di inattività possibili per quell'utente.
expire: Data dopo la quale quel login non può più essere usato.

Un esempio da un RedHat Linux standard evidenzia che di default non sono previste scadenze per la password e vari altri parametri:
[diego@vagante diego]$ cat /etc/passwd
:root:$1$ÐQEXe5ÀJ$Jffvxi5UaGHpaMckCsKH0:11628:0:99999:7:::
:daemon:*:11628:0:99999:7:::
[...]
:xfs:!!:11628:0:99999:7:::

usermod

Autore: neo - Ultimo Aggiornamento: 2003-11-28 22:54:53 - Data di creazione: 2003-11-28 22:54:53
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Comando che permette di cambiare le impostazioni di un account creato precedentemente.

usermod [opzioni] login-name
-c comment Modifica, aggiunge il commento
-d home_dir Modifica la home_dir dell'utente
-e expire_date Modifica l'expire_date, ovvero quando l'account verrà disabilitato
-f inactive_days Modifica il numero di giorni che intercorrono fra la scadenza della password e la disabilitazione dell'account
-g initial_group Modifica il gruppo primario
-G groups Modifica i Gruppi secondari
-l login Cambia il nome di login dell'utente
-p password Modifica la password (criptata)
-s shells Modifica la shell di default dell'utente
-u UID Modifica l'UID
-L Esegue il lock dell'account
-U Operazione inversa del lock, ovvero riabilita l'account

/etc/group

Autore: Eberk - Ultimo Aggiornamento: 2003-11-28 23:09:49 - Data di creazione: 2003-11-28 23:09:49
Tipo Infobox: PATH - Skill: 2- JUNIOR

Il file /etc/group contiene l'elenco dei gruppi di utenti presenti nel sistema. Ad ogni gruppo è associata una riga nella quale si trova l'IDgroup e l'elenco degli utenti che ne fanno parte.
Alcuni Unix creano un nuovo gruppo per ogni nuovo utente, altri hanno il gruppo "users" in cui vengono automaticamente inseriti tutti gli utenti aggiunti al sistema.
Di fatto i gruppi servono per gestire con maggiore flessibilità l'accesso ai file e di conseguenza l'uso delle risorse.

Le righe di /etc/group si presentano nella seguente forma:
GroupName:Password:GroupID:User1,User2,...,UserN

GroupName: Indica il nome del gruppo;
Password: Indica la password del gruppo. Solitamente non viene data una password al gruppo ma solo ai singoli utenti;
GroupID: Indica l'ID associato a quel gruppo;
User1,User2,...,UserN: E' l'elenco degli users appartenenti a quel gruppo. I nomi dei singoli users devono essere sparati da una virgola.

Un esempio:
[diego@vagante diego]$  cat /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
[...]
wheel:x:10:root,macno

Aggiungere manualmente un utente su un sistema Unix

Autore: al - Ultimo Aggiornamento: 2003-11-28 22:35:24 - Data di creazione: 2003-11-28 22:35:24
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

Su Unix sono comuni diversi comandi e programmi per gestire gli utenti del sistema (es: useradd, usermod userdel).
Quelle che questi strumenti fanno automaticamente sono operazioni sul sistema che si possono fare manualmente.
Ovviamente si consiglia di usare tool dedicati come useradd e groupadd per queste attività.

Per aggiungere un utente al sistema si deve:
- Essere utente root, o avere analoghi privilegi.
- Editare /etc/passwd aggiungendo una riga per il nuovo utente, facendo estrema cura al formato del file;
- [Non indispensabile] Editare /etc/group aggiungendo un nuovo gruppo per il nuovo utente e/o aggiungendo il nuovo utente ad un gruppo di usenti generici;
- Se esiste il file /etc/shadow editarlo aggiungendo una nuova riga per l'utente;
- Creare la home directory del nuovo utente: mkdir /home/nomeutente;
- Ricreare l'ambiente base (script di inizializzazione shell o altri programmi) 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

Questa è una procedura generalmente valida su ogni Linux e Unix, è utile conoscerla, ma resta più comodo e raccomandabile usare i comandi di gestione utente (testuali o grafici) del proprio Unix.

Le caratteristiche di /etc/shadow

Autore: al - Ultimo Aggiornamento: 2003-11-28 22:43:34 - Data di creazione: 2003-11-28 22:43:34
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Storicamente su Unix il file /etc/passwd contiene l'elenco di tutti gli utenti e la loro password in forma criptata.
Per la stessa natura di Unix tutti gli utenti devono poter aver accesso in lettura a questo file, per cui l'esporre le password di tutti, seppur criptate, risultava rischioso per la sicurezza del sistema.

Su tutti i Linux e gli Unix non troppo vecchi, la gestione della password è stata migliorata sia in termini di sicurezza che di versatilità affiancando al normale /etc/passwd la gestione del file /etc/shadow che introduce nuove funzionalità:
- Questo file è leggibile solo da root mentre viene lasciato l'accesso il lettura a /etc/passwd per tutti gli utenti;
- Le password in /etc/shadow sono criptate con algoritmi più complessi e robusti;
- E' possibile gestire il tempo di scadenza, la durata minima e massima e i tempi di notifica della password.

Notare che:
- se la password è scritta in /etc/shadow, in /etc/passwd c'è solo una x al posto della password criptata.
- se in /etc/passwd il campo password è un * , la password è nulla e l'utente non può accedere al sistema.

groupmod

Autore: neo - Ultimo Aggiornamento: 2002-10-17 14:46:54 - Data di creazione: 2002-10-17 14:46:54
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Comando che ti permette di modificare le caratteristiche di un gruppo, creato precedentemente.

groupmod [-g gid [-o]] [-n group_name ] group
-g  Identifica l'UID del gruppo
-o Flag che assicura l'uso di un UID non univoco
-n group_name Indica il nuovo nome del gruppo

chage

Autore: neo - Ultimo Aggiornamento: 2003-11-28 23:01:32 - Data di creazione: 2003-11-28 23:01:32
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Utility che permette di amministrare la scadenza delle password dei vari utenti del sistema

Modalità di editing
chage [-m mindays] [-M maxdays] [-d lastday] [-I inactive] [-E expiredate] [-W warndays] user

Modalità di visualizzazione delle informazioni
chage -l [user]
-m Indica i giorni minimi per poter cambiare password
-M Indica il numero massimo di giorni di validità della password.
-d Indica il numero del giorno in cui è stata cambiata la password
-I Indica il numero di giorni di intermezzo fra la scadenza della password e la disabilitazione dell'account
-E Indica la data di scadenza della password
-W Indica il numero di giorni per i quali il sistema avvisa che la password sta scadendo

/etc/skel

Autore: neo - Ultimo Aggiornamento: 2003-11-28 23:10:44 - Data di creazione: 2003-11-28 23:10:44
Tipo Infobox: PATH - Skill: 2- JUNIOR

Directory contenente i file predefiniti che vengono copiati nella home di ogni nuovo utente quando viene creato con le impostazioni di default.

Ecco l'elenco dei file contenuti in /etc/skel di una redhat 7.2 con impostazioni di default.
Per la maggior parte si trattano di file riguardanti le impostazioni delle shells o configurazioni per-user di programmi installati.


neo@dido neo]$ ls -latr /etc/skel/
total 28
File contenenti le impostazioni della bash
-rw-r--r--    1 root     root          124 Jul  9  2001 .bashrc
-rw-r--r--    1 root     root          191 Jul  9  2001 .bash_profile
-rw-r--r--    1 root     root           24 Jul  9  2001 .bash_logout
File contenenti le impostazioni di emcas
-rw-r--r--    1 root     root          820 Jul 30  2001 .emacs
File contenenti le impostazioni dell'utility screen
-rw-r--r--    1 root     root         3511 Aug  3  2001 .screenrc
drwxr-xr-x    2 root     root         4096 Jul 16 10:30 .
drwxr-xr-x   52 root     root         4096 Oct 17 12:36 ..

/etc/login.defs

Autore: neo - Ultimo Aggiornamento: 2003-11-28 23:16:22 - Data di creazione: 2003-11-28 23:16:22
Tipo Infobox: PATH - Skill: 3- INTERMEDIATE

File di configurazione, sui Linux basati sulla distribuzione RedHat che contiene tutte le opzioni di default sugli utenti del sistema.

[neo@dido skel]$ cat /etc/login.defs
# *REQUIRED*
#   Directory where mailboxes reside, _or_ name of file, relative to the
#   home directory.  If you _do_ define both, MAIL_DIR takes precedence.
#   QMAIL_DIR is for Qmail
#

#QMAIL_DIR    Maildir
MAIL_DIR    /var/spool/mail
#MAIL_FILE    .mail
# Password aging controls:
#
#    PASS_MAX_DAYS    Maximum number of days a password may be used.
#    PASS_MIN_DAYS    Minimum number of days allowed between password changes.
#    PASS_MIN_LEN    Minimum acceptable password length.
#    PASS_WARN_AGE    Number of days warning given before a password expires.
#

PASS_MAX_DAYS 99999
PASS_MIN_DAYS    0
PASS_MIN_LEN    5
PASS_WARN_AGE    7
#
# Min/max values for automatic uid selection in useradd
#

UID_MIN             500
UID_MAX        60000
#
# Min/max values for automatic gid selection in groupadd
#

GID_MIN              500
GID_MAX          60000
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#

#USERDEL_CMD    /usr/sbin/userdel_local
#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is ORed with the -m flag on
# useradd command line.
#

CREATE_HOME    yes

useradd [user]; echo "[user]" | passwd --stdin [user]; chage -d0 [user];

Autore: homer - Ultimo Aggiornamento: 2004-06-13 12:53:47 - Data di creazione: 2004-06-13 12:53:47
Tipo Infobox: BOFH - Skill: 3- INTERMEDIATE

Prima creazione di un utente con cambio password forzato.

Tra i compiti dell'amministratore di sistema vi è quello di gestire gli account utente. Solitamente, per ogni nuovo user, si crea un nuovo account con nome e password uguali, ricordando poi all'utente di modificare la propria password per non creare punti deboli nella sicurezza del sistema.

[root@Apollo13 root]# useradd morpheus ; echo "morpheus" | passwd --stdin morpheus; chage -d0 morpheus;
Changing password for user morpheus.
passwd: all authentication tokens updated successfully.


Questa command line permette di creare l'utente useradd [user], quindi ne setta la password uguale al nome  echo "[user]" | passwd --stdin [user] e successivamente forza il cambiamento della password al primo accesso con chage -d0 [user].

homer@Joker:/opt# ssh [email protected]
[email protected]'s password: *******
You are required to change your password immediately (root enforced)
Changing password for morpheus
(current) UNIX password: ********
New password: ********
Retype new password: *********
[morpheus@Apollo13 homer]$

Il sistema richiede il cambio password forzato al primo login

L'utilizzo di questo command line, è consigliato solo nel caso in cui l'accesso del nuovo utente al sistema avvenga immediatamente, pena un'alta vulenerabilita' delllo stesso data dall'uguaglianza di nome e password.


Installare programmi su Unix e Linux

Utilizzo di RPM per installare, aggiornare, rimuovere pacchetti .rpm. Utilizzo di tar.gz

Usare pacchetti (rpm) per l'installazione di programmi su Linux

Autore: al - Ultimo Aggiornamento: 2002-09-27 22:16:46 - Data di creazione: 2002-09-27 22:16:46
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Per installare dei programmi su Linux esistono vari modi:
- compilare il sorgente, pratica che può essere complessa ma è utile in casi particolari;
- utilizzare pacchetti (packages) che contengono i programmi già compilati e pronti per l'uso, facilitando e standardizzando la gestione del software sul sistema.

I sistemi di package più comuni su Linux sono RPM e DEB.
I pacchetti .deb vengono usati nelle distribuzioni derivate da Debian, gli .rpm sono stati definiti da RedHat e risultano essere i più diffusi.
Slackware pacchettizza il suoi programmi con normali tar gzippati: .tgz.

Affrontiamo qui l'uso di RPM, Red Hat Package Manager, sottolineando che file .deb e, in parte, .tgz vengono gestiti con comandi diversi ma hanno una logica simile.

Un package costruito con RPM è un archivio di file e informazioni che può essere installato, rimosso, interrogato sul sistema.
RPM permette di installare programmi, già compilati, con una facilità e rapidità estrema sul proprio Linux (è paragonabile ad un unico setup.exe su Windows).
Si sottolinea che ogni distribuzione e anche ogni versione della stessa distribuzione richiede pacchetti dedicati, 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.
La rimozione di un RPM non cancella mai nulla che non abbia installato. Se deve sostituire o cancellare un file di configurazione, per esempio, viene mantenuto il file esistente con il suffisso .rpmsave.

Le opzioni più comuni per usare il comando rpm per gestire file .rpm sono:
rpm -i [opzioni] pacchetto Installa il pacchetto .rpm specificato.
rpm -U [opzioni] pacchetto Aggiorna il pacchetto con una versione più recente.
rpm -e [opzioni] pacchetto Disinstalla il pacchetto, rimuovendone i file dal sistema.
rpm -q [opzioni] [pacchetto] Visualizza informazioni varie sul pacchetto (descrizione, file contenuti ecc.)

Le comuni distribuzioni Linux offrono svariati tool grafici per una semplice gestione dei pacchetti installati sul sistema. Di fatto questi programmi eseguono le stesse operazioni del comando rpm, ma sono più semplici ed immediate da usare.
La tendenza, sempre più diffusa, è quella di prevedere meccanismi di update automatizzato, per gestire il sempre alto numero di aggiornamenti (per sicurezza e bug fix) di programmi.
E' un principio analogo al Windows Update su sistemi Microsoft, ma si applica a tutti i programmi installati, e non solo al sistema operativo.

Slackware Package Management

Autore: homer - Ultimo Aggiornamento: 2003-04-08 15:51:16 - Data di creazione: 2003-04-08 15:51:16
Tipo Infobox: DISTRO - Skill: 3- INTERMEDIATE

Anche la distribuzione Linux Slackware utilizza software di Package Management, che sebbene più spartano rispetto a RPM di Red Hat o a Deb di Debian, permette di mantenere in ordine i pacchetti installati nel sistema

I packages di Slackware sono dei semplici tar compressi con gzip. Questa distribuzione mette a disposizione alcune utility per gestirne l'installazione, la rimozione, l'aggiornamento e di mantenere traccia delle operazioni tramite un database.

I principali tools forniti da Slackware per il management delle applicazioni sono quattro: pkgtool, installpkg, removepkg upgradepkg.

pkgtool
Pkgtool è un'utility di tipo menu-driven che permette di visualizzare, installare e rimuovere i packages. Attraverso questo tool è possibile visualizzare il contenuto di ogni package, disinstallarlo o scegliere da dove installarne uno nuovo. Tramite pkgtool non è però possibile effettuare l'aggiornamento, prerogativa disponibile solo per le utility di tipo command line che dispongono anche di un maggior numero di opzioni.  

Passiamo agli strumenti a linea di comando.

installpkg
Installpkg gestisce l'installazione di nuovi packages nel sistema.
Sintassi:
root@Joker:/# [ROOT=<path>] installpkg [options] <nome package>...
Opzioni:
-m: Esegue un makepkg (Utility per creare i packages) nella directory corrente;
-warn: Visualizza i cambiamenti nel sistema in caso di installazione del package. Usato sulle macchine di produzione per sapere cosa accadrà installando un software;
-r: Installa ricorsivamente i packages contenuti nella directory corrente e nelle subdirectory. E' possibile utilizzare delle wildcards.

Settando la variabile ROOT è possibile utilizzare una directory a propria scelta, diversa da /, per memorizzare i dati relativi all'installazione.

Al termine dell'installazione, se presente, nella subdirectory install/ del package verrà eseguito uno script di nome doinst.sh che permette di rifinire l'installazione creando per esempio link simbolici.

Le informazioni del database dei packages installati, ovvero un file in plain text per ogni programma, si trovano in /var/log/packages mentre gli eventuali script di post installazione si trovano in /var/log/scripts/<nomepackage>.

removepkg
Removepkg si occupa di disinstallare i packages dal sistema.
Sintassi:
root@Joker:/# [ROOT=<path>] removepkg [options] <nome package>...
Opzioni:
-copy: Il package non viene rimosso ma viene copiato in in una directory in /var/log/setup/tmp/preserved_packages uguale all'originale;
-keep: Tiene traccia dei file temporanei creati durante la disinstallazione. E' comodo per scopi di debugging;
-preserve: Il package viene rimosso, ma copiato per sicurezza in un'altra directory, ovvero /var/log/setup/tmp/preserved_packages;
-warn: Visualizza quali problemi potrebbero esserci rimuovendo il package;

Settando la variabile ROOT è possibile utilizzare una directory a propria discrezione, diversa da /, per memorizzare le informazioni relative alla disinstallazione.

Se presente, removepkg esegue lo script di postinstallazioine in modo da rimuovere, oltre ai file del package, anche eventuali link simbolici presenti.

Durante il processo di disinstallazione, vengono visualizzate le informazioni sullo stato dell'operazione. Una volta terminato li processo, le informazioni del packages e lo script di post installazione sono rispettivamente spostati in /var/log/removed_packages e /var/log/removed_scripts.

upgradepkg
Upgradepkg gestisce l'aggiornamento di un package Slackware già installato.

root@Joker:/# [ROOT=<path>] upgradepkg <package name>...
oppure:
root@Joker:/# [ROOT=<path>] upgradepkg [options] <vecchio nome package> <nuovo nome package>

Upgradepkg esegue nell'ordine, l'installazione del nuovo package e la disinstallazione del vecchio. Se il nome del package è cambiato da una versione all'altra è possibile usare la seconda versione del comando.

Al fine di evitare i problemi dovuti a qualche bug di upgradepkg come per esempio la sovrascrittura accidentale dei file di configurazione, è sempre consigliato fare un backup dei propri file di configurazione.

In tutte e tre le utility è possibile specificare più di un package utilizzando nel nome le wildcards.

Conversione di RPM in tgz

Autore: homer - Ultimo Aggiornamento: 2004-01-21 14:01:46 - Data di creazione: 2004-01-21 14:01:46
Tipo Infobox: DISTRO - Skill: 3- INTERMEDIATE

Tramite l'utility rpm2tgz è possibile trasformare un pacchetto RPM nel formato gestito dal Package Management di Slackware

Uno dei formati più popolari tra i sistemi di packaging è RPM di Red Hat, ed è quindi probabile trovare spesso software in questo formato. A volte è possibile che il pacchetto ricercato sia disponibile solamente in questo formato. In questo caso è possibile trovare una soluzione (anche se non in tutti i casi), per l'installazione  in una distribuzione Slackware, grazie all'utility rpm2tgz.

Il programma rpm2tgz crea un pacchetto con estensione .tgz partendo da un pacchetto RPM, la sua sintassi è: rpm2tgz <file.rpm>

Un esempio di utilizzo:
root@Joker:/test# ls
nmap-3.00-1.i386.rpm
Il file di partenza è un pacchetto di tipo RPM
root@Joker:/test# rpm2tgz nmap-3.00-1.i386.rpm
root@Joker:/test# ls
nmap-3.00-1.i386.rpm  nmap-3.00-1.i386.tgz
Una volta lanciata l'esecuzione del programma si ottiene un pacchetto di tipo tgz gestibile dalle utility di Slackware come pkgtool, installpkg, removepkg o upgpackage

Gestire pacchetti RPM e DEB

Autore: al - Ultimo Aggiornamento: 2009-02-05 13:30:12 - Data di creazione: 2009-02-05 13:21:47
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

Distribuzioni basate su RPM (RedHat, Mandriva, Suse...) e su DEB (Debian, Ubuntu...) utilizzano comandi diversi per fare gestire i pacchetti.
Vediamo in breve come si fanno le stesse operazioni nei due mondi.

- Software e comandi
dpkg e rpm sono i comandi base per gestire (installare, rimuovere, interrogare) pacchetti di tipo .deb e .rpm (rispettivamente).
apt-get, yum (ma anche urpmi su Mandrake, o up2date su RedHat o Yast2 su Suse ecc.) sono sistemi per gestire automaticamente lo scaricamento di pacchetti da Internet, il loro aggiornamento, la gestione delle dipendenze.
Quindi:
dpkg sta a pacchetti .deb come rpm sta a pacchetti .rpm
apt-get sta a dpkg come yum sta a rpm:

- Elenco completo dei programmi installati sul sistema
rpm -qa (su sistema basati su RPM)
dpkg -l  (su sistemi basati su DEB)

- Installare un pacchetto
yum install tcpdump ( o rpm -i tcpdump-ver.dist,arch.rpm  )
apt-get install tcpdump ( o anche dpkg -i tcpdump-ver.arch.deb )

- Rimuovere un pacchetto
rpm -e tcpdump ( o anche yum remove tcpdump )
dpkg -r tcpdump ( o anche apt-get remove tcpdump )

- Visualizzare l'elenco dei file forniti da un pacchetto
rpm -ql tcpdump (o, se non ancora installato: rpm -qlp tcpdump.arch.rpm)
dpkg -L tcpdump (o, se non ancora installato: dpkg --contents tcpdump-version.arch.deb)

- Visualizzare informazioni su un pacchetto
dpkg -s tcpdump
rpm -qi tcpdump

- Trovare da quale pacchetto è stato installato un dato file

rpm -qf /path/nomefile (es: rpm -qf /etc/issue)
dpkg -S /path/nomefile (es: dpkg -S /etc/issue)

- Aggiornamento del sistema
yum update su sistemi Fedora/RedHat
apt-get upgrade su sistemi Debian e derivati

- Ricerca all'interno del database dei pacchetti
yum search squirrelmail
apt-cache search squirrelmail

rpm -qa

Autore: w00binda - Ultimo Aggiornamento: 2003-01-30 16:55:45 - Data di creazione: 2003-01-30 16:55:45
Tipo Infobox: BOFH - Skill: 2- JUNIOR

Visualizza l'elenco completo degli rpm installati.
Utile sopratutto se usato assieme al grep.

Nel caso volessi sapere se il pacchetto abiword è installato sul mio sistema, dovrei digitare al prompt:
[root@hell] rpm -qa | grep abiw

rpm -qf `which [executable]`

Autore: ma01417 - Ultimo Aggiornamento: 2004-05-23 16:08:23 - Data di creazione: 2004-05-23 16:08:23
Tipo Infobox: BOFH - Skill: 3- INTERMEDIATE

Utilizzo della "command substitution" per conoscere di un eseguibile il pachetto che lo conteneva e la relativa versione.

rpm -qf `which tr`
voglio sapere il comando tr a quale pacchetto appartiene
coreutils-4.5.3-19.0.2
la risposta è coreutil alla versione 4.5.3

Nomenclatura di pacchetti .rpm

Autore: al - Ultimo Aggiornamento: 2002-10-30 15:33:39 - Data di creazione: 2002-10-30 15:33:39
Tipo Infobox: TIPS - Skill: 2- JUNIOR

Trovare l'rpm giusto per la propria distribuzione Linux può non essere semplice, come non lo è sempre capire quale rpm contiene il programma o il file che ci servono.

Esiste una convenzione standard per dare un nome ad un package RPM:
efax-0.8a-11.i386.rpm corrisponde a nome-versione-release.arch.rpm
- nome è generalmente il nome del programma fornito col pacchetto,
- versione indica la versione del programma, secondo la convenzione usata da chi lo ha realizzato,
- release è la release del pacchetto, può anche indicare la distribuzione (es: mdk indica un RPM per Mandrake),
- arch è l'architettura hardware per la quale il pacchetto è stato previsto (i386: sistemi Intel 386 o superiori; i686: ottimizzato per sistemi Pentium 2 o superiori; sparc: Sun Sparc; src: sorgenti da compilare; ),  
- rpm è l'estensione predefinita.

Se il nome di un pacchetto contiene il suffisso -devel, nel rpm ci sono librerie utilizzate dal programma indicato o da altri pacchetti che dipendono da questo.
A volte per installare un programma compiutamente sono necessari più pacchetti .rpm, spesso se un programma ha natura modulare, c'è un pacchetto diverso per ogni modulo.

rpm -qa --qf  "%-10{SIZE} %-30{NAME}\n" | sort -n

Autore: al - Ultimo Aggiornamento: 2004-02-07 12:45:29 - Data di creazione: 2004-02-07 12:45:29
Tipo Infobox: PATH - Skill: 2- JUNIOR

Con questa semplice riga è possibile visualizzare l'elenco dei pacchetti RPM installati sul sistema ordinandoli secondo le dimensioni.
Molto comodo per vedere quali pacchetti occupano più spazio.

Fonte: FedoraNews. Autore: Leonid Mamtchenkov


Backup e compressione di file

Tecniche di backup. L'uso di tar, gunzip, e altri comandi di compressione.

Il backup

Autore: Eberk - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-28 11:19:08 - Data di creazione: 2002-10-28 11:19:08
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Per backup si intende un procedimento di salvataggio di files o directory (o addirittura interi filesystem) attraverso il quale e' possibile in caso di danni o altre svariate necessita' ripristinare le condizioni di funzionamento del sistema, da qui si capisce la sua fondamentale importanza.
In caso di mancato backup, la perdita di dati importanti puo essere una vera tragedia e un buon backup può fare la differenza fra un disastro e una scocciatura.

Ci sono svariate procedure e filosofie sul backup ma uno degli aspetti importanti e' che i dati salvatirisiedano in un luogo fisico differente rispetto a quello dei file originali (anche in un diverso supporto nella stessa macchina).
Per il backup di dati si possono utilizzare da floppy-disks (ne bastano 3 per backuppare /etc), fino ad interi raid di harddisks (arrivando cosi a dimensioni di svariati Terabyte). I supporti piu' comuni utilizzati sono floppydisks, Zipdisks, CDR, DVD, tapes e harddisks. La scelta del supporto dipende sia dalla quantita' di dati da backuppare
(a volte si preferisce salvare solo dati essenziali, a volte si opta per il backup di interi filesystem) sia dalla frequenza del backup (che comunque dipende dalla quantita', in quanto e' difficile che giornalmente si effettuino backup di 500Gb).
Generalmente le procedure di backup avvengono quando non ci sono users operanti sul sistema e quando il carico della rete e' basso, cosa che avviene spesso e volentieri la notte.
Fra le svariate utility per il backup nel mondo Unix troviamo Dump e Restore (con nomi diversi fra i vari
OS Unix-based, anche se di poco), comandi molto sofisticati con una semplice interfaccia ed opzioni essenziali che permettono di backuppare e restorare semplicemente (con la possibilita' di scieglierne il livello) interi devices e filesystems, anche da remoto.
Altro comando di rilievo e' cpio, non potente come dump ma con piu' features.
Tools importanti per il backup di filesystems sono AMANDA (performato dall'universita' del  Maryland permette di settare un singolo master backup server in grado di backuppare piu hosts), BURT (altra utility, ottimizzata per il backup e restore da nastri) e CD backup Linux (performato per backup e restore automatici creando un CD-Rs bootabile mentre si lavora sul sistema).
Per il backup e' inoltre possibile utilizzare anche comandi di archiviazione (o compressione) come tar, gzip ecc...
Oltre alle opzioni elencate qui sopra vi sono anche un'infinita' di utility commerciali per backup e restore dei dati. Le case produttrici piu' importanti a livello commerciale di software per il backup sono VERITAS Software, FalconStor Software, BakBone Software, Arkeia.

Rsync over ssh

Autore: franz - Ultimo Aggiornamento: 2004-04-30 11:10:00 - Data di creazione: 2004-04-30 11:10:00
Tipo Infobox: TIPS - Skill: 3- INTERMEDIATE

Rsync è un ottimo tool per la replica dei dati, con ssh (ovvero con supporto cifrato) lo è ancora di più =)

rsync -avzlrt --exclude 'nothisdir' -e "ssh -p 4321" [email protected]:/'`find /my/secret -name '*$VAR*'`' /localbackup

Opzioni utilizzate:
a: archive mode;
v: abilito la modalità verbose per l'operazione in corso;
z: abilito la compressione;
l: mantiene i link;
r: modalità ricorsiva;
t: preserva data e ora dei file;
e: rsync si appoggia su un ssh server in ascolto sulla porta (-p) 4321

Nel pc remoto eseguo un find nel percorso /my/secret per tutti i file contenenti nel nome la variabile $VAR, dopodichè copio localmente su /localbackup.
L'operazione può essere schedulata per comodi (e sicuri) backup notturi con l'integrazione di chiavi dsa con passphrase blank, definendo un livello di security a mio parere accettabile per la maggior parte delle realtà di impiego.

Usare rsync per il backup

Autore: Eberk - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-28 11:22:01 - Data di creazione: 2002-10-28 11:22:01
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Rsync e' un comando (ed un protocollo) che permette la copia di file via rete, ottimizzando i tempi di backup e ripristino dei dati.

L'host da backuppare (su cui si devono leggere o scrivere file) deve avere in esecuzione rsync in modalita' server (rsync --daemon), e deve essere presente il file /etc/rsyncd.conf dove sono contenute le informazioni relative alla condivisione necessaria per il backup.
Sull'host remoto che deve leggere o scrivere file sulla macchina dove rsync gira come daemon, viene eseguito il comando rsync con una logica simile a quella di cp.
I parametri da settare in /etc/rsyncd.conf sono:
- [nomecondivisione] e' il nome della condivisione rsync;
- path e' il path locale a cui fa riferimento la condivisione;
- read only e' un opzione che protegge i file dalla scrittura (se settata = yes);
- uid e gid sono l'utente ed il gruppo con cui rsync accede al filesystem;
- host allow rappresenta gli IP da cui e' possibile collegarsi via rsync;
- list e' un opzione che prevede di poter impedire di elencare le condivisioni disponibili sul server rsync (se settata = false);

La prima volta che si esegue un backup da un certo host vengono copiati tutti i files specificati nella condivisione, le altre volte solo quelli modificati dall'ultimo backup.

Per un utilizzo sicuro di rsync (le password non vengono richieste!), e' consigliabile:
- Selezionare accuratamente gli IP degli host che possono accedere al server rsync;
- Consentire esclusivamente ingressi in sola lettura;
- Non utilizzare root come uid e gid ( a meno che non sia necessario per esigenze di backup).

La sintassi del client rsync è:
rsync [opzioni] [host da backuppare]::nomecondivisione/files /[directory host locale]
opzione spesso utile e' -av, che specifica di copiare i file mantenendo ownership, permessi e in modalita' "directory recursive".

/etc/rsyncd.conf

Autore: homer - Ultimo Aggiornamento: 2004-05-15 13:48:43 - Data di creazione: 2004-05-15 13:48:43
Tipo Infobox: PATH - Skill: 3- INTERMEDIATE

Il file di configurazione di rsync è simile ad un file .ini di un sistema Windows.

Le direttive di configurazione globali sono definite nella prima parte del file, mentre la seconda parte riguarda sezioni o moduli identificati da un nome racchiuso tra parentesi quadre. Il file può contentere linee vuote e commenti i quali devono iniziare con il carattere ; o con #.

Un esempio di rsyncd.conf utilizzato per il backup, dove vengono configurati due moduli:
log file =/var/log/rsyncd.log
definisce un file di log
motd file = /etc/rsyncmotd
definisce un file per il MOTD (Message Of The Day)

[Apollo13]
tra parentesi quadre viene indicato il nome del modulo
   path = /disco2/backup/Apollo13
   percorso attraverso il quale vengono localizzati i file
   comment = Backup Area Apollo13
   commento visibile interrogando il server rsync
   list = yes
   permette di visualizzare il modulo tra la lista di quelli disponibili
   read only = no
   rende il modulo disponibile in scrittura, di default questo non è possibile

[Enigma]
   path = /disco2/backup/Enigma
   comment = Backup Area Enigma
   list = yes
   read only = no

Configurare e usare rsync

Autore: al - Ultimo Aggiornamento: 2008-08-25 09:48:13 - Data di creazione: 2008-08-25 09:40:22
Tipo Infobox: TIPS - Skill: 3- INTERMEDIATE

Alcuni esempi di configurazione ed utilizzo di rsync, con uso di password su file esterni e pattern sui file da copiare

Configurazione server: /etc/rscynd.conf  

log file = /var/log/rsyncd.log  
# motd file = /etc/rsyncmotd  
   timeout = 300  
   max connections = 4  
   log format =  "%o %h [%a] %m (%u) %f %l %b"  
   transfer logging = yes  
   secrets file = /etc/rsyncd.secrets  

[bacco]  
   path = /  
   comment = Backup  
   list = no  
   read only = no  
   uid = root  
   auth users = ced  
   hosts allow = 172.16.1.9
  

Esempio di secret file: /etc/rsyncd.secrets (il path e' configurabile in modo arbitrario)  
ced:password  


Utilizzo lato client  
rsync -avz --password-file=/etc/rsyncd.secrets.ced --delete --exclude-from=/etc/rsyncd.patterns [email protected]::bacco/var  
/backup/
  
Copia in /backup la directory var remota, cancellando i file locali che non esistono piu' sul server, usando i pattern definiti nel file /etc/rsyncd.patterns e la password specificata (per l'utente ced) su /etc/rsyncd.secrests.ced  

rsync -avz --password-file=/etc/rsyncd.secrets.ced [email protected]::bacco/var/tmp/bacco  
Come sopra, senza esclusione di file e senza cancellazione dei file  
locali non piu' presenti sul server.  

Esempio di /etc/rsyncd.patterns (come invocato da comando rsync lato client)  
(copia di file che finiscono con .log, .gif .jpg )  
+ */  
+ *.log  
+ *.gif  
+ *.jpg  
- *  
  
Esempio di /etc/rsyncd.secrets.ced (come invocato da comando rsync lato client)  
password

tar

Autore: Eberk - Ultimo Aggiornamento: 2002-10-03 17:02:48 - Data di creazione: 2002-10-03 17:02:48
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Programma di archiviazione progettato per immagazzinare ed estrarre file da un archivio conosciuto come un tarfile.  
Un tarfile può essere fatto su un'unità a nastro magnetico o su un file normale.

tar [opzioni] file1, file2, ... , fileN
-A, --catenate, --concatenate aggiunge i file ad un archivio
-c, --create crea un nuovo archivio
--delete elimina dall'archivio  (da  non  usare  sui  nastri magnetici!)
-r, --append aggiunge i file alla fine di un archivio
-t, --list elenca il contenuto di un archivio
-u, --update aggiunge solamente i file che sono pi recenti della copia nell'archivio
-x, --extract, --get estrae i file da un archivio
-f, --file [NOME_HOST:]F usa il file di archivo o dispostivo F (default /dev/rmt0)
-L, --tape-length N cambia il nastro dopo aver scritto N*1024 byte
-p, --same-permissions, --preserve-permissions estrae tutte le informazioni relative ai permessi
-v, --verbose elenco minuzioso dei file elaborati
-z, --gzip, --ungzip filtra l'archivio attraverso gzip

zip

Autore: Eberk - Ultimo Aggiornamento: 2002-10-03 17:04:13 - Data di creazione: 2002-10-03 17:04:13
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

zip e' un utility di archivio e compressione di file per Unix, VMS, MSDOS, OS/2, Windows NT,  Minix,  Atari  and  Macintosh, Amiga and Acorn RISC OS.
E' analogo alla combinazione dei comandi Unix 'tar' e 'compress' ma utilizza algoritmi diversi.
Per la decompressione a differenza di altri comandi di archivio e compressione (tar, gzip e bzip2), e' possibile utilizzare esclusivamente il comando unzip, in quanto zip non prevede alcuna opzione che permetta di decomprimere un file.

-A Crea un archivio eseguibile auto-decompattante.
-b path Utilizza il path specificato per allocare i file zip temporanei. una volta terminato il processo copia il file.zip nella directory corrente eliminando i file zip temporanei.
-c Aggiunge una riga di commento per ogni file.
-d Rimuove i file origine una volta archiviati.
-f Sovrascrive un file contenuto nell'arichivio se viene inserito lo stesso file con data di modifica piu recente.
-i files Include solo i files specificati.
-j Mantiene solo il nome dei files archiviati senza salvare il nome delle directory. Di default zip salva il path completo.
-m Sposta i files nell'archivio specificato eliminando gli originali.
-e Assegna una password all'archivio creato.
-o Setta come data di modifica dell'archivio la data di modifica piu recente dei files archiviati.
-r Ricorsivo, se si comprime una directory, con questa opzione si archivieranno anche tutte le sue sottodirectory.
-t mmddyyyy (o yyyy-mm-dd) non operera su file modificati prima della data specificata.
-tt mmddyyyy (o yyyy-mm-dd) non operera su file modificati dopo la data specificata.
-T testa l'integrita' del nuovo zip file. se il test fallisce un eventuale vecchio zip file non viene eliminato e vengono mantenuti i file di origine.
-v Verbose, fornisce maggiori dettagli.
-# Regola il rapporto tra qualita' e velocita' (-1=veloce, -9=migliore).

gzip

Autore: Eberk - Ultimo Aggiornamento: 2002-10-03 17:07:36 - Data di creazione: 2002-10-03 17:07:36
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Comando che riduce la dimensione dei file usando la codifica di Lempel-Ziv (lo stesso algoritmo di zip e PKZIP). Quando  possibile, ogni file rimpiazzato da uno con l'estensione .gz, mantenendo le stesse proprietà, date  d'accesso e di  modifica. Se il nome del file compresso è troppo lungo per il file system, gzip lo tronchera'.

gzip [opzioni] file
-c --stdout --to-stdout Scrive l'uscita nello standard output; mantiene il file originale intatto.    
-d --decompress --uncompress Decomprime.
-f --force Forza la compressione o la decompressione anche se il file ha link multipli o corrisponde a un  file che già esiste, o se i dati compressi sono letti da (o scritti in) un terminale.
-l --list Per ogni file compresso, elenca dimensione del file compresso, dimensione del file decompresso, rapporto di compressione (0.0% se  sconosciuto), nome del file decompresso.
-N --name Quando comprime, salva sempre il nome di file e la time stamp originali; il comportamento di default. Quando decomprime, ripristina il nome di file e la time stamp se sono presenti.
-r --recursive Attraversa ricorsivamente la struttura della directory.
-S .suf --suffix .suf Usa il suffisso .suf invece di .gz. Può essere dato qualsiasi suffisso, ma suffissi diversi da .z e .gz dovrebbero essere evitati per evitare confusioni quando i file sono trasferiti su altri sistemi.
-t --test Test. Verifica l'integrità del file compresso.
-v --verbose Verbose. Mostra il nome e la percentuale di riduzione di ogni file compresso o decompresso.
-# --fast --best Regola la velocità di compressione usando la cifra # specificata, dove -1 o --fast indicano il metodo di compressione più veloce (minore compressione) e -9 o --best indicano il metodo di compressione più lento (migliore compressione). Il livello di compressione di default è -6.

bzip2

Autore: Eberk - Ultimo Aggiornamento: 2002-10-03 17:09:17 - Data di creazione: 2002-10-03 17:09:17
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Comando che riduce la dimensione dei file usando un algoritmo che offre generalmente una migliore compressione rispetto ai convenzionali compressori basati su codifiche LZ77/LZ78 (gzip e zip).
La command-line e' volutamente simile (ma non identica) a quella di gzip.
Come gzip il file compresso mantiene il nome, data, permessi del file origine (che verra' eliminato), ed avrà l'estersione '.bz2'.

-c --stdout --to-stdoutScrive l'uscita nello standard output; mantiene il file originale intatto.
-d --decompress Decomprime
-z --compress Comprime
-t --test Verifica l'integrita' del file compresso senza decomprimerlo.
-f --force Forza la compressione (o la decompressione), anche se il file corrisponde ad un file gia esistente (di default non lo fa)
-k --keep Non elimina i file originali durante la compressione o la decompressione.
-v --verbose Mostra il nome e la percentuale di riduzione di ogni file compresso o decompresso.
-1 (o --fast), -2, ... , -9 (o --best) Setta la dimensione dei blocchi di memoria da utilizzare (100k,...,900k) durante la compressione.
A differenza di gzip utilizzando l'opzione -1 ( o --fast) l'aumento di velocita' di compressione non e' molto precepibile. di default e' settata l'opzione -9 (--best).
Questa opzione non ha effetto in fase di decompressione.

gzip -c

Autore: Eberk - Ultimo Aggiornamento: 2002-10-03 17:12:13 - Data di creazione: 2002-10-03 17:12:13
Tipo Infobox: BOFH - Skill: 3- INTERMEDIATE

Con l'opzione -c, gzip scrive l'uscita nello standard output, lasciando il file originale intatto.

Percio' e' possibile concatenare piu file compressi con il comando gzip -c fileN >> gzfile.gz..
Quindi il comando gzip -cd gzfile.gz equivale a cat file1 file2,..., fileN.
Compressioni migliori si ottengono pero' con la riga cat file1,...,fileN | gzip > gzfile.gz, che comprime cosi' tutti i membri assieme, anziche' con il comando il comando gzip -c file1,...,fileN > gzfile.gz.
Se un file compresso e' formato da piu' membri, l'opzione --list fara' riferimento solo alla dimensione compressa, decompressa, rapporto di compressione ecc... dell'ultimo membro, nel caso interessi solo la dimensione decompressa per tutti i files membri si puo' usare gzip -cd file.gz | wc -c.
Nel caso si voglia ricomprimere files concatenati per ottenere una migliore compressione si puo' eseguire gzip -cd old_gzfile.gz | gzip > new_gzfile.gz.
Se si vuole pero' creare un archivio di piu' files compressi indipendenti bisogna utilizzare il tar, che con l'opzione -z filtra gli archivi con gzip, creando cosi' i .tar.gz.

rsync [nomehost]::

Autore: homer - Ultimo Aggiornamento: 2004-03-06 02:09:20 - Data di creazione: 2004-03-06 02:09:20
Tipo Infobox: TIPS - Skill: 2- JUNIOR

Permette di visualizzare i moduli disponibili su un host in cui è in esecuzione rsync in modalità server.

Prima di trasferire da o verso un host dei dati, è necessario sapere quali sono i moduli messi a disposizione dal server rsync per l'operazione. Questo è possibile attraverso il comando:
[azitti@topolino azitti]$ rsync pluto.it::
ftp             the whole ftp area
www             the whole web site
ildp            the ILDP web site
HOWTO-it        Italian HOWTOs

In questo caso possiamo notare che il Pluto Linux Documentation Project pluto mette a disposizione quattro moduli da cui scaricare files: ftp, www, ildp e HOWTO-it

Se sul server si vuole evitare la possibilità da parte dei client di visualizzare la lista dei moduli disponibili (per sicurezza o riservatezza) va inserita, in /etc/rsyncd.conf la voce:
list = false


Schedulazione dei processi

Utilizzo di crontab e at. Configurazione e alternative a crontab.

Introduzione al servizio Scheduling di crontab

Autore: pillolinux - Ultimo Aggiornamento: 2002-10-09 16:21:05 - Data di creazione: 2002-10-09 16:21:05
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Alcuni processi devono essere eseguiti a determinati orari, un determinato numero di volte. Esempi di questi possono essere i processi di backup che vengono lanciati ogni notte, oppure un analizzatore di log che deve girare ogni minuto.
Questi processi devono girare un certo numero di volte oppure in determinati giorni; il resto del tempo essi stanno fermi fino a quando un utente non interagisce con essi e li richiama (con gli appositi comandi). Qui è dove il CRON si rende utile. Vi permette di programmare (o "schedulare", come si dice in gergo) l'esecuzione di un lavoro in qualsiasi momento desideriate, ogni minuto, ogni ora, giornalmente, mensilmente.
E' un sollievo sapere che ci sono vari programmi che stanno girando senza alcun bisogno della vostra supervisione.

Le Basi
Cron può essere fatto partire da rc o da rc.local e ritorna immediatamente al prompt, sicchè non c'é bisogno di lanciarlo in background. Cron ricerca il file /etc/crontab per le voci (le cosiddette "entry") di sistema e /var/spool/cron per le voci relative agli utenti che si trovano nel file /etc/passwd. Tutte le voci ritrovate sono caricate in memoria.
Tutto ciò viene ripetuto ogni minuto appena cron "si sveglia" ed esegue diversi compiti:
a) ricerca le voci ed esegue i programmi che sono stati schedulati.
b) determina se il modtime (vale a dire la data e l'ora dell'ultima modifica) nella directory di cron è cambiato c) se il modtime nella directory cron è cambiato, cron ricerca tutti i file e ricarica i programmi che sono stati modificati.
Poiché cron cerca le modifiche ogni minuto, non è necessario farlo ripartire quando sono stati effettuati dei cambiamenti (editati) nei file nella directory cron.

Utilizzare crontab
Il "cron daemon" legge il file "crontab"; ogni utente può avere la propria versione di questo file, orientata agli specifici compiti che si vogliono eseguire. I flag associati con le applicazioni crontab specificano quando aprire crontab per avere la lista o per rimuovere e modificare compiti.
La sintassi per il programma crontab è la seguente:
crontab [-u user] file
crontab [-u user] -l -e -r

Questi parametri indicano:
-u questa opzione comunica al sistema il nome dell'utente che "possiede" il file. Se l'opzione -u è omessa, il sistema deduce per default che state usando il vostro crontab personale.
Il comando switch user (su) può confondere il crontab, così se siete nello switch "su" assicuratevi di utilizzare l'opzione -u.
-l questa opzione dice a crontab di elencare i file nello standard output, in poche parole visualizza il file.
-e questa opzione dice a crontab di editare il file. Cron usa l'editor definito dalla variabile EDITOR o da VISUAL. Se nessuna di queste variabili è definita, parte in automatico l'editor "vi". Quando si esce dall'editor, è immediamente piazzato nella locazione corretta e viene aggiornato il campo data/ora.
-r questa opzione rimuove il file crontab specificato, se nessun file viene specificato, rimuove il file crontab dell'utente.

Voci in Crontab
Solo 2 tipi di voci sono permesse nel crontab: i settaggi ambientali (Crontab Environmental settings) e i settaggi di comando (Crontab Command settings)

a) Crontab Environmental settings
I settaggi ambientali utilizzano la seguente forma:
nome = valore
Cron conosce già le diverse variabili ambientali. Per esempio, SHELL è settato a /bin/bash.
Altre variabili ambientali, come LOGNAME e HOME, sono associate al possessore del file. SHELL e HOME posso essere sovrascritte nello script, mentre non è possibile farlo con LOGNAME. Se MAILTO è definito (e non è settato a " "), tale variabile è inserita in una riga nel file crontab, e spedisce ogni messaggio generato all'utente specificato in questo campo.
La seguente riga mostra MAILTO settato ad uno specifico utente (luca): # spedisce tutti gli output all'utente *luca* (non importa chi è il proprietario di questo crontab)
MAILTO=luca

b) Crontab Command settings
I settaggi comandi usano un formato standard: ogni riga inizia con cinque campi ora/data. Se è il crontab di sistema, il campo successivo è lo username associato con la voce. Il campo seguente sarà il comando da eseguire. Il comando verrà eseguito solo quando la data e l'ora corrente coincideranno con tutti i valori dei campi time/date del crontab. Nel paragrafo succ. vi è un esempio.
I campi disponibili per la data e l'ora sono i seguenti:
Campi | Valori ammessi
----------------
minuti | 0-59
ore | 0-23
giorno | 1-31
mese | 1-12
giorno della settimana | 0-7 (0 & 7 indicano la domenica)


Questi campi possono anche contenere un asterisco (*) invece di un numero. Un asterisco indica che ogni possibile valore è ammesso.

Dettagli
La righe seguenti mostrano il /etc/crontab installato per default nella RedHat 6.2:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
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


Avete notato come crontab chiama i quattro diversi eventi?
Il primo è associato ad eventi orari (eseguiti nel primo minuto di ogni ora)
Il secondo è associato ad eventi giornalieri (eseguiti alle ore 4:02 di ogni giorno)
Il terzo è associato ad eventi settimanali (eseguiti alle 4:22 di ogni domenica)
L'ultimo è associato ad eventi mensili (eseguiti alle 4:42 nel primo giorno di ogni mese).

Qualcosa da ricordare:
Il sistema non va indietro e raccoglie i lavori cron, esso li esegue solo se la data e l'ora sono uguali alla voce nel file. Ad esempio se il computer è spento quando dovrebbe essere eseguito il cron, quel programma non viene più eseguito.

Permessi e divieti di accesso al servizio crontab
Ci sono due file che abilitano la root (solo la root dovrebbe avere il permesso di editare o creare questi file) per autorizzare o vietare l'utilizzo dei servizi crontab agli utenti; essi sono: /etc/cron.allow -- Questo file in genere non esiste, lo dovete creare. Ogni voce che piazzerete in questo file coprirà quella inserita in /etc/cron.deny. Se il file /etc/cron.allow esiste, solo gli utenti specificati dentro posso usufruire del servizio crontab.
/etc/cron.deny -- Questo file esiste per default. In esso, ci metterete lo username delle persone a cui vietate l'utilizzo del servizio crontab.

/etc/crontab

Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-24 15:39:32 - Data di creazione: 2002-10-24 15:39:32
Tipo Infobox: PATH - Skill: 2- JUNIOR

File di configurazione generale del demone crond contenente le operazioni schedulate di default o manulamente dall'utente root.

La sintassi di crontab prevede una riga, con campi separati da uno spazio o un tab, per ogni comando da schedulare.
mm hh gg MM GG user comando
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) mm Minuto in cui eseguire il comando. Valori da 00 a 59.
2) hh Ora in cui eseguire il comando. Valori da 0 a 23 (0 è mezzanotte, 12 mezzogiorno)
3) gg Giorno del mese in cui eseguire il comando. Valori da 1 a 31.
4) MM Mese dell'anno in cui eseguire il comando. Valori da 1 a 12.
5) GG 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.)

Vediamo un esempio:
[neo@dido neo]$ cat /etc/crontab
Variabili che settano l'enviroment per il lancio di script o di comandi
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

Le entry riportate di seguito sono quelle di default di una RedHat ed esegue a seconda della scadenza gli script contenuti nelle varie directory
# run-parts
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


Il file di crontab relativo al singolo utente in: /var/spool/cron/$user

Schedulare i processi con anacron

Autore: homer - Ultimo Aggiornamento: 2003-11-21 16:01:27 - Data di creazione: 2003-11-21 16:01:27
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Anacron è l'alternativa a cron da utilizzare per la schedulazione di processi su macchine non utilizzate come server e quindi non sempre in funzione.

Questo demone permette di eseguire processi schedulati nell'arco di tempo in cui la macchina non era in funzione e che quindi tramite cron non sarebbero stati eseguiti. Anacron utilizza il file /etc/anacrontab per la schedulazione e la directory /var/spool/anacron per tenere traccia dei compiti svolti.

Per ogni job-description line inserita in anacrontab, anacron controlla se il comando è stato eseguito nel periodo specificato ed in caso contrario lo esegue con il ritardo specificato. Una volta eseguito il comando, la sua data di esecuzione viene registrata in un file di time-stamps identificato dal nome univoco assegnato al processo nella directory /var/spool/anacron. Una volta terminati i job da eseguire anacron termina.

Per default in caso di errore viene inviata una mail all'utente che ha avviato anacron, mentre gli altri messaggi vengono loggati da syslogd.

anacron

Autore: homer - Ultimo Aggiornamento: 2003-07-13 19:04:24 - Data di creazione: 2003-07-13 19:04:24
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

E' l'eseguibile del demone anacron.

Anacron, viene tipicamente avviato tra gli script di boot del sistema. La sua sintassi è la seguente:

anacron [opzioni]
-f: forza l'esecuzione di anacron ignorando i timestamps;
-s: serializza l'esecuzione dei job. Non avvia l'esecuzione di un nuovo job finche' il precedente non e' stato terminato;
-n: avvia l'esecuzione dei job senza tenere conto di quanto specificato in /etc/anacrontab. Implica l'utilizzo dell'opzione -s.
-d: non esegue il demone in background, e visualizza i messaggi di stato sullo standard error:
-u: aggiorna solamente i file di time-stamps senza eseguire jobs;
-q: non visualizza messaggi sullo standard error quando l'esecuzione avviente con l'opzione -d;
-t <nomefile> : Utilizza il file di configurazione specificato anziche' quello di default;
-V: stampa la versione ed esce;
-h: visualizza la guida ed esce.

/etc/anacrontab

Autore: homer - Ultimo Aggiornamento: 2003-07-13 19:05:26 - Data di creazione: 2003-07-13 19:05:26
Tipo Infobox: PATH - Skill: 2- JUNIOR

E' il file di configurazione di anacron.

Questo file descrive il comportamento di anacron. Esso può contenere assegnamenti di variabili, linee vuote e linee di commento le quali iniziano con il carattere #.

Ogni entry nel file di configurazione contiene 4 parametri:
-1 periodo: ogni quanto tempo, in giorni, deve essere eseguito un comando;
-2 ritardo: il tempo di ritardo, in minuti, per l'avvio del comando (utile per non sovraccaricare il sistema con troppo processi attivi);
-3 nome-job: un nome univoco per identificare il comando;
-4 comando: il comando vero e proprio da eseguire;

Un esempio del contenuto di anacrontab:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Setting delle variabili per l'esecuzione dei job

1   65      cron.daily              run-parts /etc/cron.daily
7   70      cron.weekly             run-parts /etc/cron.weekly
30  75      cron.monthly            run-parts /etc/cron.monthly

Schedulazione rispettivamente di processi giornalieri, settimanali e mensili

run-parts

Autore: homer - Ultimo Aggiornamento: 2004-01-09 18:12:08 - Data di creazione: 2004-01-09 18:12:08
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Si occupa di mandare in esecuzione tutti gli script o i programmi contenuti in una directory.

Esegue tutti i programmi contenuti nella directory passata come parametro. Eventuali sottodirectory vengono ignorate. Gli script da eseguire devono contenere come prima linea il nome dell'interprete nel formato #!/bin/nome-interprete altrimenti non verrano eseguiti.

run-parts [opzioni] directory
--test: visualizza il nome degli script che dovrebbero essere eseguiti ma senza mandarli in esecuzione;
--verbose: stampa sullo standard error il nome di ogni script/programma prima di eseguirlo;
--report: simile a --verbose ma con la differenza che stampa solamente il nome degli script che producono un output;
--umask=<umask>: setta l'umask specificata prima di eseguire gli script/programmi; L'umask di default e' 022;
--arg=<argomenti>: passa eventuali argomenti allo script; E' necessario utilizzare --arg per ogni argomento passato;
--help: visualizza l'help in linea ed esce;
--version: visualizza la versione il copyright ed esce;

Il suo utilizzo tipico è all'interno del file di configurazione di crontab:
[root@pluto etc]# cat /etc/crontab
[...]
# run-parts
01 * * * * root nice -n 19 run-parts /etc/cron.hourly

In questo esempio vengono eseguiti in tutte le ore di ogni giorno (al minuto 01) tutti i programmi/script contenuti nela directory /etc/cron.hourly


Gestione e analisi dei log

Analisi, monitoring, rotazione e gestione dei log di sistema. Configurazione di syslogd.

Syslog e i log dei sistemi Unix

Autore: al - Ultimo Aggiornamento: 2002-09-27 21:28:02 - Data di creazione: 2002-09-27 21:28:02
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Molto spesso ci si ritrova a diagnosticare problemi, capire perchè una applicazione non parte o eseguire blandi compiti di reverse engineering sul funzionamento di parti del sistema.

La prima fonte da consultare per ogni operazione di troubleshooting sono i log, file di testo 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 del sistema vengono generalmente scritti in directory come /var/log e var/adm o dove definito nei file di configurazione dei singoli programmi.

In quasi tutti i sistemi Unix il demone syslogd si occupa della gestione dei log 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).
Sono inoltre disponibili versioni modificato o più sicure di syslog.

L'equivalente su Windows dei log Unix sono gli eventi.

/etc/syslog.conf

Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-24 19:50:09 - Data di creazione: 2002-10-24 19:50:09
Tipo Infobox: PATH - Skill: 2- JUNIOR

E' il file di configurazione principale del demone syslog. Di solito ha questo path in Unix vari ed è comodo consultarlo per verificare in fretta dove il sistema scrive i suoi log.

Il file si puo' suddividere in due campi, suddivisi da uno o piu' spazi bianchi o TAB:

SELECTOR: Diviso a sua volta in due parti separate da un punto: facility (identifica chi o cosa ha prodotto il messaggio) e priority(identifica il livello di priorita' del messaggio)

ACTION:Identifica il "logfile" dove vengono scritti i log corrispondenti. Oltre ad un normale file può essere un device coem la stampante o una console.

Analizziamo un esempio preso da una macchina RedHat Linux:
[neo@dido neo]$ cat /etc/syslog.conf
[...]
Nel file /var/log/messages vengono loggati tutti i messaggi di livello informativo, tranne quelli relativi alla posta (mail), all'accesso al sistema (authpriv) e al cron
*.info;mail.none;authpriv.none;cron.none        /var/log/messages
[...]
Tutti i log, di qualsiasi priorità, che hanno a che fare con l'accesso al sistema, sono loggati in /var/log/secure
authpriv.*                        /var/log/secure
[...]
Tutti i log riguardanti la posta sono scritti in /var/log/maillog
mail.*                            /var/log/maillog
[...]
Tutti i log di comandi eseguiti in cron sono scritti in /var/log/cron
cron.*                            /var/log/cron
[...]
Tutti i log con priorità di emergenza vengono inviati ai terminali di ogni utnete collegato al sistema
*.emerg                            *
I log relativi al boot (a cui è associata, su questo sistema la facility local7) sono scritti in /var/log/boot.log
local7.*                        /var/log/boot.log


Alcune interessanti opzioni che si possono configurare su questo file sono del tipo:
Tutti i log del sistema vengono inviati al syslog server chiamato pippo (il nome deve essere risolvibile)
*.*                        @pippo
Tutti i movimenti di posta vengono scritti sulla console tty10
mail.*                            /dev/tty10

Tutti gli accessi al sistema sono stampati direttamente su una stampante locale
authpriv.*                            /dev/lp0

Introduzione a logwatch

Autore: Eberk - Ultimo Aggiornamento: 2002-10-28 12:50:19 - Data di creazione: 2002-10-28 12:50:19
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

Logwatch e' uno strumento che permette l'analisi e il monitoraggio dei log.

E' molto semplice, versatile e flessibile in quanto permette di impostare il servizio che si vuole monitorare, il livello di monitoraggio, filtri customizzabili per il matching di pattern, periodi di tempo specifici ecc...
Oltre a questo e' possibile settare una mail a cui inviera' il report o un file dentro il quale salvarli.
I file e le directory principali di logwatch sono generalmente:
/etc/log.d/conf/logwatch.conf: file di configurazione di logwatch;
/etc/log.d/conf/services/: directory che contiene i file di configurazione per i diversi servizi i cui log possono essere processati da logwatch;
/etc/log.d/conf/logfiles/: directory che contiene i file di configurazione per i file contenenti i log di diversi servizi;
/etc/log.d/scripts/shared/: directory che contiene i filtri comuni per i servizi o logfiles;
/etc/log.d/scripts/logfiles/: directory che contiene i filtri specifici per logfiles particolari;
/etc/log.d/scripts/services/: directory che contiene i filtri attuali per i vari servizi.
Logwatch viene tipicamente schedulato in crontab per eseguire dei controlli periodici sui log di sistema ed inviarne il report via mail.

logrotate

Autore: homer - Ultimo Aggiornamento: 2003-06-03 21:02:51 - Data di creazione: 2003-06-03 21:02:51
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

E' l'applicazione inclusa in diverse distribuzioni Linux per la gestione dei log di sistema.

Logrotate permette di comprimere, rimuovere ed inviare via mail i file di log. Ogni file può essere gestito in base criteri temporali (giornalmente, settimanalmente, o mensilmente) oppure alle proprie dimensioni. Tipicamente l'utilizzo di logrotate viene schedulato tramite il demone cron ed i file di log da esso gestiti non vengono modificati più di una volta al giorno salvo che il criterio sia basato sulla dimensione e logrotate avviato più volte al giorno oppure che sia utilizzata l'opzione -f o --force e quindi logrotate sia forzato a rielaborare i file di log.

Logrotate utilizza /var/lib/logrotate/status per tenere traccia dei log elaborati e /etc/logrotate.conf per quanto riguarda la configurazione. Alcuni packages installano informazioni relative alla rotazione dei log in /etc/logrotate.d/.

La sintassi è la seguente:
logrotate [-dvf?] [-m command] [-s statefile] [--usage]
-d: Abilita il debug mode. Questa azione implica anche l'utilizzo automatico dell'opzione -v. In modalità di debug, non vengono apportati cambiamenti ai log o al file di stato;
-v: Abilita il verbose mode ovvero visualizza informazioni durante la rotazione dei log;
-f : Forza la rotazione dei log;
-?: Visualizza una breve guida in linea;
-m <comando>: Indica a logrotate quale comando utilizzare per inviare via mail i log. Di default viene utilizzato /sbin/mail -s;
-s <state-file>: Indica a logrotate di utilizzare un file di stato diverso da quello di default ovvero /var/lib/logrotate/status;
--usage: Visualizza le opzioni disponibili per l'applicazione.

Configurare Syslog per logging da router Cisco

Autore: al - Ultimo Aggiornamento: 2002-09-25 17:58:57 - Data di creazione: 2002-09-25 17:58:57
Tipo Infobox: TIPS - Skill: 2- JUNIOR

Per loggare su un syslog server Linux/Unix i log di un Cisco si deve intervenire sia sul router che sul server.

Su Cisco configurare lo IOS (conf term) per definire il syslog server (qui 10.0.0.20):
logging server 10.0.0.20
logging facility local2
logging trap 7
(opzionale, imposta il logging a livello 7: debug)
Sul syslog server Unix/Linux fare partire syslog con l'opzione di logging via rete (senza questo il syslogd non accetta messaggi via rete):
syslogd -r
e 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.

Considerare che syslog è un protocollo estremamente vulnerabile (accetta qualsiasi informazione, senza verificare contenuto o sorgente). E' opportuno limitare agli IP che servono (con packet filtering di vario tipo) l'accesso alla porta 514 di un syslog server.

Log rotation e archiviazione dei log

Autore: al - Ultimo Aggiornamento: 2003-02-01 10:52:22 - Data di creazione: 2003-02-01 10:52:22
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

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, dove generalmente risiedono i log, 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, preparandoli per un'archiviazione.

Su molte distribuzioni Linux è incluso 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 e di default sono configurati per gestire i log standard di sistema.

Altra applicazione che viene spesso usata per gestire, in particolare, i log di Apache è Cronolog, che rende particolarmente semplice la segmentazione di log in file diversi generati secondo unità di tempo configurabili (es: un file diverso ogni giorno). E' particolarmente utile per gestire siti ad alto traffico, in cui le dimensioni dei log tendono a crescere in modo spropositato.
Viene tipicamente usato come un filtro che riceve un log dallo standard input e lo scrive in stdout su più diversi file, secondo le specifiche indicate in un template. La sintassi di base è /path/cronolog [opzioni] template. Per esempio:
/usr/sbin/cronolog /web/logs/%Y/%m/%d/access.log divide il log che riceve in stdout in tanto diversi log in diverse directory secondo il criterio /web/logs/anno/mese/giorno/access.log, con risultati tipo: /web/logs/2003/01/17/access.log.
Viene tipicamente usato in httpd.conf sfruttando la funzionalità di Apache di inviare i log ad un comando esterno:
TransferLog "|/usr/sbin/cronolog /web/logs/%Y/%m-%d-access.log"
ErrorLog    "|/usr/sbin/cronolog /web/logs/%Y/%m-%d-errors.log"

Crea un file di log diverso ogni giorno e li mette in directory divise per anno.

Il vantaggio di simili programmi è quello di sollevare l'amministratore dalla noiosa e insidiosa pratica di gestione e archiviazione dei log, che se non automatizzata può portare a spiacevoli conseguenze quali file system riempiti al 100%, file di log enormi, perdita di dati e simili contrattempi.  

/etc/logrotate.conf

Autore: homer - Ultimo Aggiornamento: 2003-06-03 20:55:34 - Data di creazione: 2003-06-03 20:55:34
Tipo Infobox: PATH - Skill: 3- INTERMEDIATE

E' il file principale riguardante la configurazione di logrotate.

Attraverso il file di configurazione di logrotate è possibile definire il comportamento dell'applicazione in due contesti: a livello globale (nella prima parte del file) e a livello locale dove le regole ridefinite prevalgono su quelle globali. Per ogni file di cui si vuole effettuare la rotazione è necessario indicarne il percorso, al quale seguono tra parentesi graffe le direttive di gestione.

Tra le direttive più utili:
- Criteri di rotazione
   daily: Rotazione su base giornaliera;
   weekly: Rotazione su base settimanale;
   monthly: Rotazione su base mensile;
   size <dimensione>: Rotazione in base alla dimensione;
   notifempty: Non esegue la rotazione se il file è vuoto;
- Compressione
   compress: Una volta archiviato il file di log, viene compresso tramite gzip;
   compresscmd: Indica il programma da utilizzare al posto di gzip;
- Gestione File
   create  <mode> <owner> <group>: Immediatamente dopo la rotazione viene creato un nuovo file con il nome identico al precedente. E' possibile specificare, modalità di accesso, proprietario e gruppo;
   copy: Crea una copia del file di log e non modifica l'originale che non viene mai rimosso;
   copytruncate: Utilizzata nel caso in cui non sia possibile chiudere il file di log. Viene archiviata parte del file di log mentre ne viene eseguita una copia;
   olddir <directory>: I file di log vengono spostati nella directory indicata prima di eseguire la rotazione;
- Configurazione
   include <file o directory>: Legge il file oppure tutti i file della directory indicata ed applica le direttive incontrate all'interno di essi. E' possibile trovare include /etc/logrotate.d in quanto alcuni packages installano le proprie istruzioni in questa directory;
- Operazioni Pre-log e Post-log
   postrotate endscript: Tramite questo blocco di direttive è possibile eseguire delle operazioni in seguito alla rotazione;  
   prerotate endscript: Tramite questo blocco di direttive è possibile eseguire delle operazioni prima che avvenga la rotazione e solo se questa avrà luogo;  

Un esempio del file di configurazione:
  
#  
# Parametri Globali
#  
compress Abilita la compressione, di default con gzip, dei log dopo la rotazione
weekly   La rotazione di default è stabilita con criterio temporale settimanale ovvero ogni settimana viene creato un nuovo file di log

# Parametri Locali  

/var/log/debug {  
   rotate 2 Indica che verranno mantenuti due file di log, in particolare uno per ogni settimana. La rotazione in questo caso è settimanale in quanto la direttiva di default non è stata ridefinita.
   postrotate Blocco postrotate ovvero istruzioni eseguite in seguito alla rotazione di un log. Possono esistere solamente all'interno di direttive locali  
     /sbin/killall -HUP syslogd Ferma e riavvia il logging da parte di syslogd in modo che possa riprendere a lavorare sul nuovo file una volta effettuata la rotazione del vecchio file di log  
   endscript Termine blocco postrotate  
}  

/var/log/faillog {  
   monthly Il criterio temporale viene ridefinito localmente e passa da settimanale a mensile  
   rotate 2 Rotazione ogni 2 mesi  
   postrotate  
     /sbin/killall -HUP syslogd  
   endscript  
}  

/var/log/lastlog {  
   rotate 3 Rotazione ogni 3 settimane  
   postrotate  
     /sbin/killall -HUP syslogd  
   endscript  
}  

/var/log/maillog {  
   monthly    
   rotate 2 Rotazione ogni 2 mesi  
   postrotate  
     /sbin/killall -HUP syslogd  
   endscript  
}  

/var/log/syslog {  
   rotate 4 Rotazione ogni 4 settimane  
   postrotate  
     /sbin/killall -HUP syslogd  
   endscript  
}  

/var/log/messages {  
   rotate 2 Rotazione ogni 2 settimane  
   postrotate  
     /sbin/killall -HUP syslogd  
   endscript  
}  

/var/log/proftpd.log { Log ProFTPD Server  
   rotate 3 Rotazione ogni 3 settimane  
   postrotate  
     /sbin/killall -HUP syslogd  
   endscript  
}
  

Rsyslog - Installation on Centos 5

Autore: al - Ultimo Aggiornamento: 2009-02-23 19:51:27 - Data di creazione: 2009-02-23 18:53:40
Tipo Infobox: DESCRIPTION - Skill: 5- SENIOR

Brief report of the installation of rsyslog on Centos 5, with mysql support and PhpLogCon web interface.

This procedure has been tested on Centos 5 using the EPEL rpm repository.  

Ensure all necessary packages are installed:  
yum install rsyslog rsyslog-mysql  

If you want local mysql server and web interface:  
yum install mysql-server  
yum install httpd php php-mysyql php-gd
  

If not running, start mysqld:  
service mysqld status || service mysqld start  

Create mysql database for rsyslog (file path changes on other distros/releases ):  
mysql < /usr/share/doc/rsyslog-mysql-2.0.0/createDB.sql  

Set mysql permissions (must be the same in /etc/rsyslog.conf and /path/top/phplogcon/config.php )  
mysql> grant all on Syslog.* to syslog@localhost identified by 'mypass';  
mysql> flush privileges ;
  

vi /etc/rsyslog.conf  
# Log to Mysql Settings  
$ModLoad ommysql  
*.*       :ommysql:localhost,Syslog,syslog,phplogcon  
#Standard Redhat syslog settings  
*.info;mail.none;authpriv.none;cron.none                /var/log/messages  
authpriv.*                                              /var/log/secure  
mail.*                                                  -/var/log/maillog  
cron.*                                                  /var/log/cron  
*.emerg                                                 *  
uucp,news.crit                                          /var/log/spooler  
local7.*                                                /var/log/boot.log
  

Try rsyslog (disable sysklogd):  
service syslog stop  
service rsyslog start
  

If you get messages like:  
Feb 23 23:43:30 mon rsyslogd:could not load module '/usr/lib/rsyslog/ommysql', dlopen: /usr/lib/rsyslog/ommysql: cannot open shared object file: No such file or directory  

fix fast with:  
ln -s /usr/lib/rsyslog/ommysql.so /usr/lib/rsyslog/ommysql  
  
Enable rsyslog service at boot time (and disable default syslog)  
chkconfig syslog off  
chkconfig rsyslog on
  


CENTRAL RSYSLOG   
As with standard syslogd edit /etc/sysconfig/rsyslog with option -r:  
SYSLOGD_OPTIONS="-m 0 -r"  
to enable the listening of syslog on the default 514 UDP port.  
This is necessary for a centralized syslog server.  


PHPLOGCON   
Get latest package from http://www.phplogcon.org/  
Unpack and move relevant files under Apache documents:     
tar -zxvf phplogcon-2.5.24.tar.gz  
cd phplogcon-2.5.24  
mkdir /var/www/html/syslog  
cp -a src/* /var/www/html/syslog
  

cd /var/www/html/syslog  
To permit web configuration:    
chmod 666 config.php   
Browse to web interface: http://yourserver/syslog/ and follow on screen instructions.  
Enable a Mysql source and use the authentication settings defined before.  
Note that the logs table name is SystemEvents     
To restore safe settings (do it after web configuration):  
chmod 644 config.php


Internetworking


Networking - Configurazione

Configurare i parametri di rete e il DNS: ifconfig, route, resolv.conf

Configurare la rete su Linux

Autore: al - Ultimo Aggiornamento: 2002-09-29 10:47:14 - Data di creazione: 2002-09-29 10:47:14
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Tipicamente la configurazione di un host in rete prevede pochi dati fondamentali: Indirizzo IP, subnet mask, default gateway e DNS server.

Esistono molteplici metodi per configurare il servizio di rete in Linux, molto di quanto viene qui riportato si applica a tutti gli Unix:
- editare i singoli file di configurazione del networking (ristartare il servizio per applicare le modifiche);
- usare comandi shell come ifconfig, route
- utilizzare strumenti di configurazione con interfaccia a finestra come netconfig, linuxconf, webmin e altri facilmente individuabili su desktop KDE o GNOME.

File di configurazione:
/etc/sysconfig/network  Contiene le principali configurazioni per il Networking: hostname, domainname, default gateway (tipico di RedHat).
/etc/sysconfig/network-script/ifcfg-XXX Directory contenente i file di configurazione delle singole interfacce (tipico di RedHat).
/etc/hosts Contiene il mapping statico fra indirizzi e hostname ed alias. Segue un esempio.
/etc/services Contiene il mapping tra i numeri di porta e i nomi dei servizi.
E' un file che solitamente non si modifica, salvo l'aggiunta di porte e protocolli custom.
/etc/host.conf Specifica l'ordine secondo il quale il sistema effettuerà la ricerca di informazioni per risolvere gli indirizzi. Usato dalla resolver library in sistemi con libc versione 5.
order hosts,bind ; specifica di usare prima /etc/hosts e poi il DNS per risolvere gli IP.
/etc/nsswitch.conf Stessa funzione di host.conf nei sistemi con libc versione 6 (glibc). In pratica è sempe meglio avere entrambi i file correttamente configurati.
/etc/resolv.conf File di configurazione del client DNS ovvero contiene gli indirizzi del server DNS e un possibile dominio dell'host e l'ordine di ricerca

Comandi comuni
Tipicamente su Linux e su Unix i comandi che bastano per configurare la rete (con privilegi da root (sono:
ifconfig [interface] [options] | address Permette di configurare le interfacce di rete dell'host. Es: ifconfig eth0 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255 up. NOTA: Non esiste nessun controllo sulla corrispondenza fra netmask e broadcast.
route [ opzioni ] [comando] [parametri] Permette di manipolare la tabella di routing del kernel. Es: route add -net 0.0.0.0/0 gw 192.168.0.1
/etc/init.d/network Script di avvio/stop del networking. Es: Per riavviare il subsystem rete dopo una riconfigurazione basta scrivere /etc/init.d/network restart.
ip [ opzioni ] oggetto { comando } Comando estremamente potente e flessibile disponibile a chi ha installato i tool iproute2
E' possibile associare più indirizzi ip appartenenti alla stessa rete su un'unica interfaccia, ovvero è possibile associare più Alias a interfacce di rete.

/etc/resolv.conf

Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2005-07-23 21:27:46 - Data di creazione: 2002-10-16 17:43:33
Tipo Infobox: PATH - Skill: 2- JUNIOR

File di configurazione per il settaggio dei server DNS che il nostro sistema deve utilizzare (più precisamente è il file che configura il comportamente delle librerie del resolver, utilizzate da tutti i programmi fare query DNS).

[neo@dido neo]$ cat /etc/resolv.conf
Entry che identifica il nome del dominio a cui appartiene la propria macchina
domain dominio.it
Elenca domini che vengono aggiunti a nomi di host per ricerche DNS. Può generare traffico inutile e ritardi.
search dominio2.it dominio.com
Indirizzo IP del DNS primario
nameserver xxx.xxx.xxx.xxx
Indirizzo IP di un eventuale DNS secondario
nameserver xxx.xxx.xxx.xxx
Imposta a 3 secondi il tempo di timeout per una query DNS. Default 5 (su RedHat Linux)
options timeout 3
Imposta a 3 il numero di tentativi andati in timeout prima di rinunciare. Default 5 (su RedHat Linux)
options attempts 3

ifconfig

Autore: fargo - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-16 19:36:13 - Data di creazione: 2002-10-16 19:36:13
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Ifconfig serve essenzialmente a configurare l'indirizzo ip di un'interfaccia di rete, tipicamente una ethernet.
Un computer può avere più di un indirizzo IP. Ad ogni interface può corrispondere uno o più indirizzi IP.
per esempio potremmo avere un computer con due ethernet interface e avremmo quindi una eth0 e una eth1 (quindi due indirizzi), ma potremmo avere anche degli alias, quindi eth0:1, eth0:2 e così via.

Con ifconfig si possono configurare altri aspetti di un'interface, anche se molti parametri saranno difficilmente cambiati. Per esempio si possono cambiare e MTU e metrica, abilitare o disabilitare il multicast e la modalità promiscqua (di solito attivata automaticamente da programmi di sniffing). Sulla manuale (man ifconfig) si possono trovare queste opzioni, che consiglio di leggere.
Sicuramente i comandi dati sono sufficienti ad una configurazione standard.

Vediamo una panoramica dei principali comandi per utilizzare ifconfig:

ifconfig [interface] options | address
ifconfig -a mostra la configurazione IP di tutte le interface. Su molti sistemi è sufficiente digitare ifconfig, senza l'opzione -a. Un esempio dell'output di ifconfig può essere questo (i commenti spiegano le varie righe):
eth0      Link encap:Ethernet  HWaddr 00:50:8B:B0:15:7F
          indica il tipo di hardware e il suo indirizzo fisico (MAC address)
              inet addr:192.168.0.1  Bcast:192.168.1.255  Mask:255.255.255.0
          indica indirizzo IP, indirizzo di broadcast e maschera della rete.
             UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
            Indica lo stato (UP) e le opzioni attive (accetta broadcast e multicast) l'MTU e la Metrica.
              RX packets:2590603 errors:0 dropped:0 overruns:0 frame:0
            TX packets:2713120 errors:0 dropped:0 overruns:1 carrier:0
            collisions:0 txqueuelen:100
            RX bytes:987732693 (941.9 Mb)  TX bytes:1198865677 (1143.3 Mb)

          Mostra le statistiche in ricezione (RX) e trasmissione (TX)
            Interrupt:12 Base address:0x6100
            Mostra l'indirizzo hardware della scheda

ifconfig interface mostra la configurazione della interface specificata. Per esempio ifconfig eth0.
ifconfig interface ip netmask broadcast up/down attiva disattiva una determinata interface. Con questo comando possiamo facilmente configuare e attivare una interface. Questo si applica sia come indirizzo primario che come alias, consentendoci di creare più alias alla stessa interfaccia.

Vediamo qualche esempio:
ifconfig eth0 192.168.0.1 up assegna l'indirizzo IP 192.168.0.1 e attiva l'interface (di default viene assegnata la classe C in questo caso, che sarebbe stata una classe A se avessimo usato 10.0.0.1)
ifconfig eth0:1 192.168.0.1 up assegna l'indirizzo IP 192.168.0.1 alla eth0:1 e attiva l'interface. Eseguendo questo comando di fatto assegniamo un'altro indirizzo IP alla interface.
ifconfig eth0 192.168.0.1 netmask 255.255.255.128 broadcast 192.168.0.127 up assegna l'indirizzo IP 192.168.0.1 e attiva l'interface, creando una mask 192.168.0.0/25 (In questo modo la Classe C è divisa in due subnet di 126 indirizzi) e assegnando come indirizzo di broadcast 192.168.0.127.

route

Autore: al - Ultimo Aggiornamento: 2002-10-24 13:47:12 - Data di creazione: 2002-10-24 13:47:12
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Route è il comando Linux che viene utilizzato per manipolare le tabelle di routing. Permette di aggiungere ed eliminare route statiche e default gateway, oltre che semplicemente visualizzare la tabella di routing di un sistema.
Non è comune in altri Unix.

route add [-net|-host] indirizzo [gw gateway] [netmask netmask] [mss mss] [metric metric] [dev device]
route del indirizzo

Per aggiungere una route statica per un'intera rete si usa l'opzione add e si devinisce la rete con -net. Per esempio:
route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.0.0.254
Aggiunge una route statica per la rete 192.168.0.0/24 usando come gateway 10.0.0.254.

Per impostare il default gateway si può digitare qualcosa come:
route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.0.0.1 oppure:
route add default gw 10.0.0.1


Per cancellare una route esistente basta indicare il nome della rete:
route del -net 192.168.0.0

Per visualizzare la tabella di route basta: route, se si vuole evitare il reverse lookup degli IP e velocizzare l'operazione scrivere: route -n

Per visualizzare la cache del sistema sulle route usate: route -C

I nomi dei device di rete su Linux

Autore: al - Ultimo Aggiornamento: 2005-07-10 23:23:01 - Data di creazione: 2002-10-15 12:09:35
Tipo Infobox: TIPS - Skill: 2- JUNIOR

Linux, a differenza di altri Unix come Solaris (dove ogni modello di scheda di rete ha un nome diverso in /dev) raggruppa i nomi delle interfacce di rete secondo il tipo (etherner, token ring, tunnel. ppp ecc.)

Su Linux, a prescindere dal modello, la prima scheda di rete ethernet ha sempre nome eth0, le successive hanno nomi  eth1 - eth2 ecc.
Interfacce tipo eth0:0, eth0:1 sono interfacce logiche usate per ip virtuali attestati sulla stessa interfaccia fisiche.
Analogamente esistono nomi specifici per diversi protocolli di data link:
- token ring hanno nomi tipo tr0, tr1:0
- ppp: ppp0
- il loopback (127.0.0.1, localhost) si rappresenta con lo
Anche delle VPN possono attestarsi su nomi di interfacce di rete come:
- Ipsec: ipsec0
- OpenVPN: tun0


Networking - Diagnosi

I comandi e le tecniche per diagnosticare la rete: netstat, arp, tcpdump.

netstat

Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2004-05-23 16:10:35 - Data di creazione: 2004-05-23 16:10:35
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Netstat è un comando polifunzionale che ti permettere di verificare le connessioni, le route e statistiche del proprio sistema. Un comando che ogni sys adm deve conoscere alla perfezione, utile per diagnostica e controllo del sistema.

netstat [information-type] [options]
netstat {--help|-h} Richiama l'help

Per selezionare il tipo di informazioni da visualizzare, bisogna mettere come primo argomento una delle seguenti opzioni. Se non si specifica nulla il comando visualizzera' la lista delle socket aperte, opzione di default.

Information Type
--route , -r Visualizza le route impostate sul sistema
--groups , -g Visualizza informazioni riguardanti i multicast group membership (ipv4 e ipv6)
--interface=iface , -i Visualizza le statistiche di tutte le interfacce o della singola interfaccia specificata
--masquerade , -M Verifica le connessioni che hanno subito masquerading
--statistics , -s Visuallizza un sommario di statistiche

Options
--verbose , -v Abilita il verbose mode.
--numeric , -n Non risolve gli Ip e il numero delle porte, risparmiando i tempi per query DNS.
--protocol=family , -A Opzione per  specificare l'address family quando si vuole visualizzare le connessioni.
-c, --continuous Esegue il comando ogni secondo (o ogni intervallo di secondi specificato).
-p, --program Mostra il PID, ed il nome del programma proprietario della socket. Utile per capire, per esempio, quale programma utilizza una specifica porta TCP.
-l, --listening Mostra solo le conessioni in LISTENING
-a, --all  Mostra tutte le connessioni (LISTENING e non), se abbinato al flag -i visualizza  le informazioni per tutte le interfacce

Network troubleshooting - Introduzione

Autore: al - Ultimo Aggiornamento: 2002-10-16 23:13:18 - Data di creazione: 2002-10-16 23:13:18
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Diagnosticare problemi di rete è attività che difficilmente si spiega a parole.
Per essere in grado di affrontare problematiche di rete complesse (ma anche quelle relativamente triviali) sono necessari diversi skill, non tutti tramandabili facilmente:

1 - Solide basi teoriche e conoscenza dello stack TCP/IP.
Inutile fingere, si deve poter diagnosticare in fretta un problema di DNS rispetto a quello dovuto ad un cavo scollegato, un problema di routing rispetto ad un problema dovuto a troppi errori su una interfaccia.
Per farlo, a prescindere dai sistemi usati, è sempre necessario avere in mente network layers e protocolli.

2 - Esperienza.
Come sempre, i trucchi migliori sono quelli che si acquisiscono sul campo e la familiarità con ambienti e dispositivi specifici ci rende più efficaci e rapidi nelle scelte e nelle implementazioni.

3 - Conoscenza degli strumenti a disposizione.
Qui possiamo dare qualche indicazione utile, valida per quasi tutti gli Unix e anche sistemi Windows:
- ping, traceroute, telnet sono utili per diagnosticare problemi di raggiungibilità di sistemi remoti
- ifconfig, route servono per identificare la configurazione di rete corrente ed evidenziare routing particolari o problemi di errori a livello di interfaccia fisica.
- arp e le arp cache sono sempre da considerare quando si cambia IP di una macchina o la macchina associata ad un IP
- netstat è uno strumento flessibile per identificare connessioni di rete attive e errori e statistiche di traffico su IP, TCP, UDP e ICMP.
- tcpdump, snoop e altri sniffer sono fondamentali quando si devono analizzare nel dettagli dei flussi di pacchetti in rete
- nslookup e dig sono fondamentali per diagnosticare problemi di DNS.

arp

Autore: neo - Ultimo Aggiornamento: 2002-10-12 20:02:55 - Data di creazione: 2002-10-12 20:02:55
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Comando che ti permette di visualizzare e manipolare le voci di arp nella cache del sistema.
Come la maggior parte dei comandi relativi alla network ottiene informazioni dal proc file-system (/proc/net/arp)

Visualizzazione del contenuto di tutta la cache, oppure specificando l'host solo l'arp del suddetto host
arp [opzioni]  -a [hostname]
Cancellazzione dell'arp di uno specifico host
arp [opzioni]  -d hostname
Creazione manuale di uno specifico arp di un host
arp  [opzioni] -s hostname hw_addr [opzioni]

Options
-v, --verbose Abilita il verbose mode
-n, --numeric Non esegue il DNS lookup degli indirizzi ip
-H type, --hw-type type, -t type Specifica quale classe di arp deve visualizzare,cancellare inserire. ( ARCnet (arc­net) , PROnet (pronet) , AX.25 (ax25)  and  NET/ROM (netrom). Default=ether)
-i If, --device If Specifica l'interfaccia
-e Visualizza il risultato in linux standard

tcpdump

Autore: neo - Ultimo Aggiornamento: 2003-04-04 22:44:28 - Data di creazione: 2003-04-04 22:44:28
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

Tcpdump è un ottimo sniffer che permette di monitorare il traffico di rete con filtri flessibili per limitare l'output a video secondo varie regole di matching di pacchetti.

tcpdump [ options ] [ expression ]
-a Tenta di risolvere  network e broadcast address
-c [count] Esegue l'exit dopo aver raccolto tot pacc
-F [file] Specifica di utilizzare un file in input per le expression
-i Specifica l'interfaccia da cui sniffare
-n Non risolve gli indirizzi ip
-nn Non risolve ne gli ip ne il numero delle porte
-p Non abilita il promiscuous  mode sull'interfacce da cui tcpdump e' in ascolto
-v,-vv,-vvvAbilita il verbose mode
-x Printa ogni paccheto sniffato

Le expression servono per limitare il matching dei pacchetti
proto Specifica il protocollo [tcp,udp,ether etc...]
dst host [host] Specifica l'host di destinazione dei pacchetti
dst net Specifica la network di destinazione dei pacchetti
dst port Specifica la porta di destinazione dei pacchetti
src host [host] Specifica l'host sorgente dei pacchetti
src netSpecifica la network sorgente dei pacchetti
src port Specifica la porta sorgente dei pacchetti
`!' o `not' Simbolo di negazione, ovvero inverte il matching
`&&' or `and' Simbolo di concatenazione, visualizza il pacchetto che fa il match di tutte le regole concatenate
`||' or `or Simbolo di alternanza, visualizza il paccheto o con questa opzione o con quest'altra

Usare tcpdump su una macchina remota

Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-16 18:51:58 - Data di creazione: 2002-10-16 18:51:58
Tipo Infobox: TIPS - Skill: 3- INTERMEDIATE

Quando lanciate il comando tcpdump, su una macchina remota con una sola interfaccia oppure dovete sniffare il traffico dalla stessa interfaccia da cui avete aperto la connessione, dovrete utilizzare dei filtri per evitare di sniffare il vostro stesso traffico telnet o ssh e ricadere in vorticosi loop che rendono l'opera di analisi dei pacchetti improba.

Se mi collego ad un host remoto con SSH, dovro' sniffare tutto tranne i pacchetti con src e dst port 22
[root@morpheus pub]# tcpdump -i eth0  ! port 22
Kernel filter, protocol ALL, datagram packet socket
tcpdump: listening on eth0
[ Traffico sniffato ]

Per Interrompere Ctrl-c

Se devo sniffare ANCHE pacchetti SSH, ma non quelli generati dalla mia connessione posso scrivere (ipotizzando che il mio IP sorgente sia 10.0.0.10):
tcpdump -n -i eth0  ! host 10.0.0.10
(Notare il -n per evitare che venga fatto un DNS reverse lookup dell'IP 10.0.0.10, rendendo inefficace il filtro)

netstat -rn

Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-14 18:03:20 - Data di creazione: 2002-10-14 18:03:20
Tipo Infobox: STDOUT - Skill: 2- JUNIOR

Visualizzazione delle route configurate sul sistema.
L'output e' identico al comando route -n , l'unica differenza dei due comandi e' il PATH; ovvero il comando route non e' all'interno dei path settati di default da RH linux per i normali utenti netstat invece si.

Output del comando netstat.
[neo@dido neo]$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.208.0   0.0.0.0         255.255.255.0   U        40 0          0 eth0  
Route per i pacchetti che hanno come destinazione  la propria network
127.0.0.0       0.0.0.0         255.0.0.0       U        40 0          0 lo  
Route per i pacchetti che hanno come destinazione  lo
0.0.0.0         192.168.208.254 0.0.0.0         UG       40 0          0 eth0  
Route che identifica il default gw

Output del comando route. Da notare che si e' dovuto specificare il path assoluto del comando!
[neo@dido neo]$ route -n
bash: route: command not found
[neo@dido neo]$ /sbin/route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.208.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0  
Route per i pacchetti che hanno come destinazione  la propria network
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo  
Route per i pacchetti che hanno come destinazione  lo
0.0.0.0         192.168.208.254 0.0.0.0         UG    0      0        0 eth0  
Route che identifica il default gw

netstat -s

Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-12 20:08:02 - Data di creazione: 2002-10-12 20:08:02
Tipo Infobox: STDOUT - Skill: 2- JUNIOR

Visualizzazione delle statistiche per quanto riguarda la network.
Utili per capire se il vostro server ha problemi, anomalie in ambito network o semplicemente per dedurre quanto traffico ha prodotto la vostra macchina.

[neo@dido neo]$ netstat -s
Statistiche relative ai pacchetti IP
Ip:
    14743 total packets received
   0 forwarded
    0 incoming packets discarded
   14385 incoming packets delivered
    15907 requests sent out
Statistiche relative ai pacchetti ICMP
Icmp:
   6 ICMP messages received
    0 input ICMP message failed.
    ICMP input histogram:
        destination unreachable: 6
   6 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
        destination unreachable: 6
Statistiche relative ai pacchetti TCP
Tcp:
    1039 active connections openings
   0 passive connection openings
    0 failed connection attempts
   0 connection resets received
    2 connections established
   14419 segments received
   15721 segments send out
   145 segments retransmited
   0 bad segments received.
    25 resets sent
Statistiche relative ai pacchetti UDP
Udp:
    169 packets received
    2 packets to unknown port received.
    0 packet receive errors
    180 packets sent
TcpExt:
    ArpFilter: 0
    567 TCP sockets finished time wait in fast timer
    7 packets rejects in established connections because of timestamp
    269 delayed acks sent
    Quick ack mode was activated 134 times
    16 packets directly queued to recvmsg prequeue.
    400 packets directly received from prequeue
    6182 packets header predicted
    16 packets header predicted and directly queued to user
    TCPPureAcks: 1336
    TCPHPAcks: 1195
    TCPRenoRecovery: 0
    TCPSackRecovery: 0
    TCPSACKReneging: 0
    TCPFACKReorder: 0
    TCPSACKReorder: 0
    TCPRenoReorder: 0
    TCPTSReorder: 0
    TCPFullUndo: 0
    TCPPartialUndo: 0
    TCPDSACKUndo: 0
    TCPLossUndo: 0
    TCPLoss: 0
    TCPLostRetransmit: 0
    TCPRenoFailures: 0
    TCPSackFailures: 1
    TCPLossFailures: 0
    TCPFastRetrans: 0
    TCPForwardRetrans: 0
    TCPSlowStartRetrans: 0
    TCPTimeouts: 69
    TCPRenoRecoveryFail: 0
    TCPSackRecoveryFail: 0
    TCPSchedulerFailed: 0
    TCPRcvCollapsed: 0
    TCPDSACKOldSent: 158
    TCPDSACKOfoSent: 29
    TCPDSACKRecv: 0
    TCPDSACKOfoRecv: 0
    TCPAbortOnSyn: 0
    TCPAbortOnData: 4
    TCPAbortOnClose: 34
    TCPAbortOnMemory: 0
    TCPAbortOnTimeout: 8
    TCPAbortOnLinger: 0
    TCPAbortFailed: 0
    TCPMemoryPressures: 0

ttcp - Network Benchmark Tools

Autore: neo - Ultimo Aggiornamento: 2003-11-16 19:49:46 - Data di creazione: 2003-11-16 19:49:46
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

TTCP, test TCP è  un tool Open Source originariamente scritto da  Mike Muuss  che permette di verificare le performance (Throughput) della propria network evitando di scrivere o leggere dati su disco dando dunque la possibilità di testare anche network basate su fibra.
Il test si basa sull'invio e ricezione di pacchetti UDP o TCP tramite due host oppure utilizzandolo come "network pipe" , quindi con un terzo host che ha la funzione di inviare e ricevere, è possibile verificare il Throughput di un segmento di network che originariamente per motivi di routing o strutturali non possono colloquiare fra di loro.

Installazione
L'installazione non richiede nessuna particolare attenzione, sia tramite rpm o compilazione dei sorgenti. Per i primi ci si può appoggiare ai vari repository come http://www.rpmfind.net per trovare il package più adatto per i sorgenti si possono  trovare in rete in varti ftp server pubblici come
Installazione da RPM
[root@dido root]# wget ftp://216.254.0.38/linux/redhat/9/en/os/i386/RedHat/RPMS/ttcp-1.12-7.i386.rpm
--11:12:45--  ftp://216.254.0.38/linux/redhat/9/en/os/i386/RedHat/RPMS/ttcp-1.12-7.i386.rpm
           => `ttcp-1.12-7.i386.rpm'
Connecting to 216.254.0.38:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD /linux/redhat/9/en/os/i386/RedHat/RPMS ... done.
==> PORT ... done.    ==> RETR ttcp-1.12-7.i386.rpm ... done.
Length: 12,259 (unauthoritative)

100%[=================================================================================>] 12,259        33.72K/s    ETA 00:00

11:12:47 (33.72 KB/s) - `ttcp-1.12-7.i386.rpm' saved [12259]

[root@dido root]# rpm -ihv /home/neo/fastweb/ttcp-1.12-7.i386.rpm
Preparing...                ########################################### [100%]
   1:ttcp                   ########################################### [100%]
[root@dido root]# rpm -qil ttcp
Name        : ttcp                         Relocations: (not relocateable)
[...]
Binario
/usr/bin/ttcp
Manual e file README
/usr/share/doc/ttcp-1.12
/usr/share/doc/ttcp-1.12/README
/usr/share/man/man1/ttcp.1.gz

Installazione da sorgenti
[root@dido root]# wget http://www.netcordia.com/tools/tools/TTCP/ttcp.c
--11:22:11--  http://www.netcordia.com/tools/tools/TTCP/ttcp.c
           => `ttcp.c'
Resolving www.netcordia.com... done.
Connecting to www.netcordia.com[63.208.176.20]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 19,554 [text/plain]

100%[=================================================================================>] 19,554        60.81K/s    ETA 00:00

11:22:12 (60.81 KB/s) - `ttcp.c' saved [19554/19554]
[root@dido root]# gcc -O3 -o ttcp ttcp.c
ttcp.c:539: warning: static declaration for `gettimeofday' follows non-static


Esempi di uso
Qualunque sia la funzione del test o l'invio dati tramite ttcp occorre attivarlo almeno su due host, sul primo in modalità "trasmitter" e il secondo in modalità "receiver".

Abilitazione del receiver tramite l'opzione  -r, maggior verbosità con l'opzione -v e l'opzione -s per eviatre che i dati in stdin vengano printati sullo stdout.
La porta di ascolto di default è la 5001

[root@nefertiti root]# ttcp -r -v -s
ttcp-r: buflen=8192, nbuf=2048, align=16384/0, port=5001  tcp
ttcp-r: socket
Abilitazione del trasmitter tramite l'opzione -t , specificando nella linea di comando l'host receiver o l'host che ha la funzione di network pipe e come era per il receiver anche qui l'opzione -s è dobbligo se si vuole effetuare un test.
[root@pippo root]# ttcp -t -v -s 192.168.1.2  
Esempio Risulato
Per un considerare un  test valido vengono richiesti almeno dieci secondi di trasferimento dati.

ttcp-r: accept from 192.168.1.5
ttcp-t: 16777216 bytes in 408.85 real seconds = 40.07 KB/sec +++
ttcp-t: 16777216 bytes in 0.00 CPU seconds = 1638400000.00 KB/cpu sec
ttcp-t: 2048 I/O calls, msec/call = 204.42, calls/sec = 5.01
ttcp-t: 0.0user 0.0sys 6:48real 0% 0i+0d 0maxrss 0+2pf 0+0csw
ttcp-t: buffer address 0x8050000
Esempio di utilizzo di ttcp come "network pipe"
[root@pippo root]# ttcp -rvs | ttcp -tvs 192.168.1.5
ttcp-r: socket
ttcp-t: buflen=8192, nbuf=2048, align=16384/0, port=5001  tcp  -> 192.168.1.5
ttcp-t: socket
ttcp-t: connect
In questo caso tutto il traffico ricevuto dall'host pippo sulla porta 5001 verrà dirottato sull'host 192.168.1.5

netstat -nlp

Autore: homer - Ultimo Aggiornamento: 2004-12-04 23:02:37 - Data di creazione: 2004-12-04 23:02:37
Tipo Infobox: STDOUT - Skill: 2- JUNIOR

Visualizzazione dei software che mantengono porte in listening, con relativo indirizzo IP.

root@enigma:/# netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:2401            0.0.0.0:*               LISTEN      640/inetd
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      773/mysqld
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN      640/inetd
tcp        0      0 192.168.0.2:80          0.0.0.0:*               LISTEN      783/httpd
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      640/inetd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      643/sshd
tcp        0      0 0.0.0.0:631             0.0.0.0:*               LISTEN      722/cupsd
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      692/master
udp        0      0 0.0.0.0:631             0.0.0.0:*                           722/cupsd
...

L'opzione -n visualizza gli indirizzi in formato numerico, -l filtra solamente le porte in stato listen mentre -p visualizza il PID ed il nome del programma che mantiene aperta una determinata porta


Networking -  Tool comuni

I comandi comuni per utilizzare la rete: finger, ftp, nslookup, dig, lynx, wget.

nslookup

Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-10 18:42:13 - Data di creazione: 2002-10-10 18:42:13
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Comando che permette di lanciare query dns per la risoluzione di ip o hostname.
Agisce in due modalita:
Interactive: Permette di effettuare piu' query e visualizza i singoli riultati. Viene abilitato in modo automatico quando il comando non e' seguito da argomenti oppure se il primo argomento e' un trattino (-) seguito dal secondo argomento che corrisponde all'host name o all'ip del name server.
non-interctive: Permette di effettuare una sola query e ovviamente visualizza il risultato della singola query. Abilitato ogni qualvolta che si specifica l'host-to-find.

Il DNS di default a cui si effettuano le query e' quello configurato in /etc/resolv.conf

nslookup [opzioni] [host-to-findi] [-server]

INTERACTIVE COMMAND
? richiama l'help
host [server]look up dell'host eseguendo una query al dns di default oppure al server specificato
server nomeserver Modifica il dns di default per la sessione corrente
set keyword [value] Comando che permette di cambiare i criteri di ricerca e visualizzazione delle informazioni che si vanno a richiedere al dns. Di seguito sono riportati alcune opzioni di questo comando.
all Visualizza tutte le opzioni che sono selezionate di default
class=value Modifica la query class
type Modifica il tipo di informazioni da richiedere al dns.
CLASS
IN Internet class
CHAOS chaos class
HESIOD MIT Athena Hesiod class
ANYwildcard, cioe' tutte le classi
TYPE
A L'indirizzo internet di un host
CNAME canonical name di un alias
MX mail exchanger
NS Name server autoritativo della zona
PTR l'host name se la query e' per un indirizzo internet altrimenti altre informazioni
SOA Visualizza i dns autoritativi della zona

Strumenti e comandi per la rete

Autore: al - Ultimo Aggiornamento: 2002-10-16 18:05:20 - Data di creazione: 2002-10-16 18:05:20
Tipo Infobox: DESCRIPTION - Skill: 1- NOVICE

Parlare di reti vuol dire anche parlare di protocolli e servizi di tutti i tipi, per vari scopi. Alcuni sono un retaggio del passato, di quel mondo accademico basato su Unix su cui Internet è cresciuta.
I comandi testuali per utilizzare, diagnosticare rete e servizi sono comuni a tutti gli Unix e, spesso a tutti i sistemi operativi, in quanto costituiscono spesso dei normali client per protocolli condivisi.
Le stesse funzioni e gli stessi protocolli sono comunemtne usati con analoghi strumenti e programmi grafici.

Gli strumenti più comuni, accessibili dalla shell di molti Unix sono:
telnet Permette un collegamento su una shell di un host remoto. E' comunissimo e molto diffuso. Richiede una login e un password che vengono trasmesse in chiaro sulla rete.
ssh Come telnet permette l'accesso remoto via shell ad un sistema, ma i dati trasmessi vegnono criptati per maggior sicurezza.
nslookup - dig Sono di fatto dei client DNS, permettono di interrogare server DNS e consentono precise operazioni di analisi e troubleshooting.
ftp E' un comune protocollo di trasferimento di file fra host remoti. E' anche il nome di base del client con cui si possono uploadare o downlodare file da server FTP remoti.
lynx - links Sono dei cleint HTTP testuali, cioè dei browser che visualizzano solo i testi dei siti web e non le immagini.
wget E' un comodo comandi, comuni in molti Linux ma disponibile anche su Unix, per scaricare file remoti tramite FTP o HTTP.
finger E' il client dell'omonimo protocollo, permette di elencare gli utenti collegati su un host remoto. Ormai è usato raramente.
traceroute Permette di visualizzare l'elenco degli nodi che esistono fra il nostro host e l'indirizzo specificato.
ping Permette di diagnosticare se è raggiungibile via retel'indirizzo specificato.
whois Esegue una query whois, utile anche per ottenere dati su chi ha registrato il dominio specificato.

wget

Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-10 18:43:48 - Data di creazione: 2002-10-10 18:43:48
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Utility GNU per downlodare files, sia tramite HTTP che FTP, con la possibilita' del resume, di logging e tante altre features.
Possiede due file di configurazioni che possono contenere le opzioni di default del comando:
-.wgetrc file di configurazione del singolo utente
- /usr/local/etc/wgetrc file di configurazione globale

Di seguito sono riportate le opzioni piu' interessanti:

wget [option]... [URL]...

BASIC OPTIONS
-b; --background Esegue il processo in background
-e; --execute Esegue il comando come se fosse all'interno del file di configurazione dell'utente  .wgetrc

LOGGING E INPUT FILE OPTIONS
-o logfile;--output-file=logfile Logga tutti i messaggi dello STERR in un file.
-a;--append-output=logfile Come sopra, con la differenza che esegue un'append al file di log se tale file esiste gia'.
-d;--debug Abilita il debug
-i;--input-file=file Legge l'eleco degli indirizzi dal file specificato
-F;--force-html Opzione per indicargli che il file in input e' un file html, e i vari url a cui si deve connettere sono quelli all'interno del tag del link (href="url")

DOWNLOAD OPTIONS
--bind-address Specifica l'indirizzo a cui bindarsi sulla macchina locale
-c;--continue Opzione per abilitare il resume di un download
--spider Abilita lo spider mode, ovvero non scarica niente ma verifica che l'url esista
-Q;--quota Specifica quanto scaricare, non funziona con un singolo file!

DIRECTORY OPTIONS
-nd;--no-directories Non ricrea la struttura completa trovata sul server remoto, quindi tutti i file vengono scaricati nella directory corrente.
-x;--force-directories Esattamente l'opposto dell'opzione -nd, ovvero foza la creazione della struttura ristrovata sul server remoto

HTTP OPTIONS
--http-user=user;--http-passwd=password Specifica Utente e password per connettersi via http ad un server remoto
-C on/off; --cache=on/off Abilita o meno la cache lato server
--cookies=on/off Abilita o meno l'uso dei cookies
-U agent-string;--user-agent=agent string Opzione che ti permette di modificare l'user-agent per identificarsi al web server

FTP OPTIONS
-g on/off;--glob=on/off Abilita o meno l'uso delle wildcards. [ " * ", " ? "  etc..]
--passive-ftp Abilita il passive mode

RECURSIVE RETRIEVAL OPTIONS
-r;--recursive Abilita il recursive mode
--delete-after Cancella cio' che e' stato scaricato (ovviamente sulla macchina locale)
--convert-link Opzione che permette di modificare in modo automatico i link all'interno di una pagina html per permettere la visualizzazioenda locale

ftp

Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2004-05-23 16:11:14 - Data di creazione: 2004-05-23 16:11:14
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Ftp oltre ad essere un protocollo e' anche il comando (user-interface) per connettersi ad un server ftp.
Utilizzato per downloadare e uploadare files. Disponibile in tutti gli Unix e su Windows.
I comandi che si possono dare dal client sono quelli tipici del protocollo FTP e risultano disponibili su ogni client ftp.

ftp  -pievd [host]
-p Abilita il passive mode, utile se ci sono firewall fra il server ed il client
-i Disabilita l'interctive prompting
-e Disabilita il command editing e l'history
-v Abilita il verbose mode
-d Abilita il debugging

Comandi FTP
open nomehost Si collega all'host specificato
user login Si logga all'host a cui si è connessi con la login indicato
open nomehost Si collega all'host specificato
dir Visualizza file e directory.
get nomefile Scarica il file specificato
put nomefile Fa un upload sul server ftp del file locale specificato
cd nomedir Cambia la directory corrente
ascii Attiva la modalità di trasferimento file ascii
bin Attiva la modalità di trasferimento file binari
pas Attiva/disattiva la modalità passiva
! Esegue il comando localmente. Es: !dir visualizza la directory corrente locale e non quella sul server FTP remoto.

dig

Autore: neo - Ultimo Aggiornamento: 2002-10-10 18:45:34 - Data di creazione: 2002-10-10 18:45:34
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Valida alternativa a nslookup per effettuare query sul dns.
Come nslookup ha due modi di utilizzo:
- Interactive mode, per effettuare una semplice query
- Batch mode, per effettuare una serie di query contenute in un file

dig [@server] domain [] []  [-]
@server Specifica il server DNS a cui fare le query
query-type Specifica che tipo di query effettuare
query-class Seleziona la class della query
-f -dig-options che specifica il file contenente le query da effettuare in modalita' batch mode.

wget -c -b -o [log-file] [nomefile]

Autore: homer - Ultimo Aggiornamento: 2006-09-20 21:59:26 - Data di creazione: 2004-03-07 04:50:25
Tipo Infobox: BOFH - Skill: 2- JUNIOR

Permette di scaricare un file dalla rete, eseguendo il processo in background (opzione -b) con possibilità di recupero in caso di interruzione (opzione -c) partendo dal file di log generato (opzione -o).

homer@Joker:~$ wget -c -b -o disc1-log ftp://ftp.edisontel.com/pub/Fedora_Mirror/1/i386/iso/yarrow-i386-disc1.iso
Continuing in background, pid 1340.


Utile nel caso sia necessario, abbandonare una shell remota di una macchina con un download in corso. Wget continuerà a scaricare i file anche dopo la disconnessione e in caso di interruzione imprevista il download potrà comunque essere ripreso.

finger

Autore: neo - Ultimo Aggiornamento: 2004-05-23 16:11:34 - Data di creazione: 2004-05-23 16:11:34
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Restituisce informazioni utili dei vari utenti del sistema (anche remoti).
Ormai, per questioni di riservatezza e sicurezza, il numero di server finger in rete è ridottissimo.

finger [-lmsp] [user] [user@host]
-m Switch per identificare se il nome dell'utente corrisponde al login name oppure al real-name.
-s Visualizza login name, real name, terminal name,write status, idle time, login time, e eventuali informazioni sull'ufficio e il numero di telefono.
-p Utilizzato con l'opzione -l non visualizza alcune informazioni contenute nei seguenti file ``.plan'', ``.project'' e ``.pgpkey''

lynx

Autore: neo - Ultimo Aggiornamento: 2004-05-23 16:12:32 - Data di creazione: 2004-05-23 16:12:32
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Lynx è un web browser testuale molto popolare, veloce e comodo, ma non supporta i frame.
Le opzioni disponibili sono infinite, di seguito sono riportati i comandi piu comuni da utilizzare una volta che lynx è stato lanciato

lynx [options] [path or URL]
lynx --help Per richiamare l'help

COMMANDS
Up arrows e Down Arrows Permette lo scroll della pagina visualizzata
Return e right Arrows Segue il ink selezionato nella pagina visualizzata, equivalente al click con il mouse sul link.
Left Arrows Richiama la pagina precedentemente caricata.
H; ? Richiama l'help.
K Richiama la lista dei comandi con le relative key bindate.
d Esegue il download.
g Abilita la funzione goto, ovvero ti permette di cambiare url.
q Chiude il browser.
o Richiama una finistra con la possibilita' di cambiare le opzioni.
p Esegue la stampa
^A Richiama la home page
! Richiama la shell senza chiudere il browser, e' possibile richiamarlo digitando in shell exit

links

Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-10 18:30:16 - Data di creazione: 2002-10-10 18:30:16
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Un web browser testuale con comandi simili a lynx che supporta anche tabelle e frames.
Come tutti i web browser testuali risulta essere un prodotto veloce, leggero e funzionale, ma può presentare difficoltà di visualizzazione con siti con alto contenuto grafico o dinamico.

links -[OPTIONS] [filename|URL]

I comandi riportati sono quelli in aggiunta o diversi da lynx
F9 e F10 Richiama il menu.
^C Exit
Left Arrow Permette di fermare il download
\ Switch che permette la visualizzazione dei src della pagina html
^Z Links passa in background. Per richiamarlo fg links.


Il superdemone Inetd (e Xinetd)

Configurazione di inetd e tcp wrappers. Configurazione di xinetd.

Introduzione a inetd

Autore: al - Ultimo Aggiornamento: 2002-10-17 12:33:51 - Data di creazione: 2002-10-17 12:33:51
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Inetd è un demone (servizio) che ascolta sulle porte specificate nel suo file di configurazione e fa avviare il relativo servizio nel momento in cui viene fatta una richiesta.

Viene chiamato superdemone proprio per questa sua funzione di controllo di altri demoni.
Il vantaggio di usarlo è di ottimizzare le risorse del sistema, avviando il programma che gestisce un determinato servizio solo quando ci sono effettive richieste.
Sebbene possa essere usato per gestire quasi tutti i servizi è consigliabile farlo solo per quelli a basso e occasionale traffico.
/etc/inetd.conf E' solitamente il suo file di configurazione
/etc/services E' un file che assegna un nome di servizio alla relativa porta. Viene usato anche da altri programmi.

Spesso inetd si trova abbinato ai tcp wrappers che permettono di introdurre delle access list che regolano quali IP possono accedere a determinati servizi.
Spesso un'installazione standard di Unix lascia il file inetd.conf con molte porte inutilmente aperte: è consigliabile commentare le relative righe per evitare che inet ascolti su porte non utilizzate e potenzialmente soggette ad intrusioni.
Ogni volta che viene cambiato il suo file di configurazione, va riavviato il servizio.

Inetd è comune su tutti gli Unix, ma su Linux più recenti si utilizza Xinetd, che è una versione più evoluta che introduce nuove funzionalità.

/etc/inetd.conf

Autore: al - Ultimo Aggiornamento: 2004-05-23 16:13:13 - Data di creazione: 2004-05-23 16:13:13
Tipo Infobox: PATH - Skill: 2- JUNIOR

E' il file di configurazione del superdemone Inetd.
Qui si configurano quali servizi e relative porte vengono resi disponibili sul sistema.
Ogni riga di /etc/inetd.conf corrisponde ad un servizio che viene gestito da inetd.
Se è commentata con un # il servizio non viene avviato e inetd non mette la relativa porta in listening.

Il formato di ogni riga è:
service type protocol wait user server argument
Un esempio di una riga tipica è:
ftp stream tcp nowait root /usr/sbin/in.ftpd -l
Se si vogliono utilizzare i tcpwrapper per limitare l'accesso al servizio la riga sopra diventa:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l
Vediamo nei dettagli le varie voci:
service E' il nome del servizio a cui si riferisce la riga di inetd.conf. La porta a cui è associato viene ottenuta dal file /etc/services. Di default inetd.conf prevede vari servizi. Alcuni sono attivati, altri commentati. Tipicamente gli unici che si dovrebbero lasciare attivati (se serve) sono ftp e telnet o ssh (se si decide di non far partire il server ssh autnonomamente).
type Specifica il tipo di socket usata per il protocollo indicato. Può essere: stream, dgram, sunrpc_tcp, sunrpc_udp.
protocol Indica il tipo di protocollo: tcp o udp. Si basa sul file /etc/protocols
wait Indica se aspettare o no che il server invocato rilasci la socket prima di rimettersi in listening sulla relativa porta
user L'utente con cui viene lanciato il server. Inetd di suo viene eseguito come root.
server Il path completo del programma da eseguire per gestire la connessione per il servizio specificato
argument Gli argomenti da passare al comando di server lanciato.

Gestire troppi collegamenti via inetd

Autore: al - Ultimo Aggiornamento: 2002-10-17 13:19:31 - Data di creazione: 2002-10-17 13:19:31
Tipo Infobox: TIPS - Skill: 3- INTERMEDIATE

Di default inetd permette fino a 40 connessioni al minuto su una specifica porta (è una misura anti attacchi DOS).

Questo può essere un limite per server particolarmente affollati.
Tipicamente un server pop3 con parecchie connessioni può superare questo limite e venire temporaneamente disattivato, lasciando un esplicativo messaggio di errore nei log.
Per impostare, per esempio a 100, il numero massimo di connessioni al minuto inserire una simile riga in inetd.conf:
pop-3 stream tcp nowait.100 root /usr/sbin/tcpd ipop3d

I TCP wrappers

Autore: al - Ultimo Aggiornamento: 2002-10-17 12:58:23 - Data di creazione: 2002-10-17 12:58:23
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

I tcp wrapper (tcpd), sviluppati dall'olandese Wietse Venema, sono un layer software che permette il controllo e il filtro degli accessi a servizi del sistema, tipicamente gestiti con inetd.

In pratica da una logica:
1- client (che esegue una connessione)
2- inetd (che risponde alla connessione e lancia il relativo server)
3- server (che processa la connessione al suo servizio)
si passa ad una configurazione:
1- client  2- inetd  3- tcpd  4- server
in cui i tcpwrappers possono limitare l'accesso al servizio secondo criteri configurabili ed hanno funzionalità anti-spoofing e anti tcp sequence guessing.
La configurazione dei tcp wrappers si fa essenzialmente in due file:
/etc/hosts.allow Permette di specificare quali servizi permettere e da quali indirizzi IP
/etc/hosts.deny Permette di specificare come limitare l'accesso a specifici servizi

In alcuni sistemi con Xinetd (es: RedHat) la configurazione dei wrappers viene direttamente inglobata nella configurazione dei singoli servizi.

Introduzione a Xinetd

Autore: al - Ultimo Aggiornamento: 2002-10-17 13:09:46 - Data di creazione: 2002-10-17 13:09:46
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Nelle versioni di Linux più recenti Inetd viene sostituito da un superdemone più versatile e sicuro: Xinetd.

A differenza del precedessore, xinetd:
- Limita o regola l'accesso a determinati servizi sia con un sistema proprio sia inglobando nella sua configurazione i TcpWrappers
- Offre un sistema di logging indipendente da syslog
- Permette di limitare l'accesso ai servizi in determinate ore della giornata
- Supporta il protocollo Ipv6
- Utilizza vari meccanismi che mitigano l'impatto di un attacco DOS.
La configurazione del demone e dei servizi può essere suddivisa in più file (non compatibili con /etc/inetd.conf).
Su RedHat si deve operare su:
/etc/xinetd.conf File principale di configurazione del demone
/etc/xinetd.d/* Directory che contiene i singoli file dei servizi offerti da xinetd

grep disable /etc/xinetd.d/*

Autore: al - Ultimo Aggiornamento: 2002-10-18 12:59:23 - Data di creazione: 2002-10-18 12:59:23
Tipo Infobox: BOFH - Skill: 2- JUNIOR

Visualizza rapidamente quali servizi sono attivati e quali disattivati nella configurazione di xinetd.

Le righe dove si trova un disable = no indicano che il rispettivo servizio è attivato.
grep disable /etc/xinetd.d/*
/etc/xinetd.d/chargen:  disable = yes
/etc/xinetd.d/chargen-udp:      disable = yes
/etc/xinetd.d/daytime:  disable = yes
/etc/xinetd.d/daytime-udp:      disable = yes
/etc/xinetd.d/echo:     disable = yes
/etc/xinetd.d/echo-udp: disable = yes
/etc/xinetd.d/finger:   disable = yes
/etc/xinetd.d/ntalk:    disable = yes
/etc/xinetd.d/rexec:    disable = yes
/etc/xinetd.d/rlogin:   disable = yes
/etc/xinetd.d/rsh:      disable = yes
/etc/xinetd.d/rsync:    disable = no
/etc/xinetd.d/servers:  disable = yes
/etc/xinetd.d/services: disable = yes
/etc/xinetd.d/talk:     disable = yes
/etc/xinetd.d/telnet:   disable = yes
/etc/xinetd.d/time:     disable = yes
/etc/xinetd.d/time-udp: disable = yes
/etc/xinetd.d/wu-ftpd:  disable = no

/etc/xinetd.conf

Autore: al - Ultimo Aggiornamento: 2002-10-18 13:48:33 - Data di creazione: 2002-10-18 13:48:33
Tipo Infobox: PATH - Skill: 3- INTERMEDIATE

E' il file di configurazione del superdemon Xinetd. Ha una sintassi leggermente più complicata e flessibile del suo analogo /etc/inet.conf e può prevedere degli "include" che ne facilitano la gestione.
In particolari su distribuzioni Linux come RedHat si usa inserire per ogni servizio un omonimo file di configurazione nella directory /etc/xinetd.d/

Vediamo un esempio di xinetd.conf leggermente modificato (in versione security paranoia) rispetto a quello standard.

[root@95 al]# cat /etc/xinetd.conf
Si definiscono fra parentesi graffe le proprietà comuni a tutti i servizi (defaults)
defaults
{
Numero di istanze del server evocato. Di default sono infinite
        instances               = 60
Specifica di usare SYSLOG con facility authpriv per il logging. Può anche essere FILE /path/nomelog
        log_type                = SYSLOG authpriv
Cosa viene loggato di ogni connessione. Può essere uno o più delle seguenti voci: HOST remoto, PID del server, DURATION della sessione, EXIT status del server, USERID dell'utente remoto (tramite identd - sconsigliato)
        log_on_success          = HOST PID
Cosa viene loggato di ogni connessione non riuscita (per access list o problemi nel lancio del server): HOST remoto, ATTEMPT registrato, USERID dell'utente remoto (identd), RECORD di ogni dato utile
        log_on_failure          = HOST RECORD
Limita il numero massimo di connessioni contemporanee per server: il primo numero è il numero di connessioni al secondo, superato il quale il servizio viene temporaneamente disabilitato per il numero di secondo indicato con la seconda cifra. Su server molto   
        cps                     = 25 30
Il numero massimo di connessioni da un singolo IP ad un determinato servizio  
        per_source  = 5
}
Specifica la directory che contiente ulteriori file di configurazione (in genere 1 per ogni servizio)
includedir /etc/xinetd.d


Prendiamo un file di esempio di configurazione di un singolo servizio:
cat /etc/xinetd.d/wu-ftp
Definisce il servizio, associa la relativa prota tramite il file /etc/services
service ftp
{
Indica se disattivarlo o farlo funzionare, in questo caso il servizio è attivo
        disable = no
Come viene gestito il flusso di dati sulla socket: stream Servizio basato su stream di dati, dgram Servizio basati su datagrammi, raw Servizio che richiede accesso diretto all'IP, seqpacket Sercizio che richiede una trasmissione di datagrammi affidabile
        socket_type             = stream
Indica se il server lanciato è single-threaded (wait=yes: Xinetd non accetta più connessioni fino a quando il server lanciato muore) o multi-threaded (wait=no: Xinetd continua ad accettare connessioni per il servizio ed invocare nuove istanze del server)
        wait                    = no
L'utente con cui viene lanciato il server
        user                    = root
Il path completo del comando per lanciare il server
        server                  = /usr/sbin/in.ftpd
Gli argomenti eventualmente passati al comando lanciato
        server_args             = -l -a
Il += indica di aggiungere le impostazioni qui indicate a quelle impostate di default
        log_on_success          += DURATION
Il livello di priorità del server lanciato
        nice                    = 10
Limita l'accesso al servizio solo dagli IP o reti indicati (Alcune notazioni valide: 10.0.0.0/24, 10.0.0.1, 0.0.0.0 (tutti gli IP)
        only_from               = 192.168.0.0/24
Esclude l'accesso dagli IP o reti indicati. Insieme a only_from gestire le access list di xinetd
        no_access               = 192.168.4.0/24
Definisce il range di ore del giorno in cui servizio è attivo. Formato hh.mm-hh.mm (hh da 0 a 23, mm da 0 a 59)
        access_times            = 0:0-6:30
}


Gestione e hardening del sistema


Aggiornamento di un sistema Linux

I metodi e le tecniche per l'upgrade manuale e automatico di un sistema Linux

Strumenti di aggiornamento del software su Linux

Autore: al - ( Revisione: al ) - Ultimo Aggiornamento: 2006-03-23 11:52:41 - Data di creazione: 2004-10-22 19:06:37
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

L'aggiornamento di un sistema operativo è un operazione fondamentale per la sua sicurezza, sia in ambito aziendale che domestico, sia su server che su desktop.
L'unica differenza sostanziale saranno i mezzi, le necessità e le modalità ma l'obbiettivo è comune: proteggere i propri sistemi aggiornandone il software regolarmente per eliminare possibili vie di intrusione tramite vulnerabilità note.
Esistono molteplici vie per eseguire l'update di sistemi Linux:
- utilizzare tool automatici o semi-automatici per il download e l'installazione di pacchetti rpm o deb,
- installare manualmente nuovi pacchetti binari per l'aggiornamento dei programmi installati,
- compilare i sorgenti con le patch del software da aggiornare.

L'uso di strumenti (semi)automatici, generalmente consigliabile quando si deve gestire un parco macchine considerevole, può basarsi su mirror distribuiti nel mondo o su un servizio, generalmente a pagamento, offerto dal produttore della distribuzione che si usa.
Ogni distribuzione Linux ha i propri metodi preferenziali per l'aggiornamento del software.

REDHAT
La versione commerciale di RedHat (Enterprise edition) si aggiorna tramite il RedHat Network (RHN) che permette di gestire e aggiornare facilmente anche via Web una moltitudine di sistemi. up2date, utilizzabile sia via command line che tramite interfaccia grafica, è il programma utilizzato per aggiornarsi tramite RHN.
Fedora, la distribuzione free di RedHat, aperta alla community, si aggiorna tramite yum (tool di aggiornamento derivato da Yellow Dog Linux) che si appoggia a svariti mirror worldwide.
Sono disponibili, ma non inclusi dei CD ufficiali, altri strumenti di aggiornamento come autorpm o la versione per rpm di apt.

DEBIAN
I pacchetti .dep di Debian vengono gestiti e aggiornati tramite il potente apt che appoggiandosi ad un elenco di mirror distribuiti permette di scaricare e aggiornare software sia del ramo "stable" che quello "testing". Con il comando apt-get di fatto si gestisce ogni attività.

MANDRIVA
L'aggiornamento e la gestione dei pacchetti rpm avviene tramite l'interfaccia grafica rpmdrake o il tool testuale urpmi. Entrambi si appoggiano a dei mirror configurabili e sono presenti di default sul sistema.

NOVELL - SUSE
Tramite il tool grafico di configurazione Yast2, strettamente integrato in ogni distribuzione Suse, è possibile gestire e automatizzare gli aggiornamenti dai mirror selezionati.

SLACKWARE
I pacchetti tgz di Slackware possono essere aggiornati dai mirror ufficiali tramite tool come swaret e slapt-get, che vanno scaricate a parte.

GENTOO
E' fortemente radicato nel sistema di gestione dei portage di Gentoo l'aggiornamento (tramite scaricamento dei sorgenti e ricompilazione automatica degli stessi) e l'installazione del software. Il comando emerge provvede a tutto.

Patching dei Sorgenti
Tramite utility come patch o diff, o semplicemente ricompilando i sorgenti presenti nel tar.gz (./configure ; make ; make install), è possibile applicare o creare patch (file contenenti modifiche da apportare ai file originari) al software installato sul sistema senza l'utilizzo di pacchetti. Questa operazione viene eseguita principalmente quando si lavora direttamente dai sorgenti, ricompilandoli una volta applicata la patch e può applicarsi a qualsiasi distribuzione.
Non essendo legata ad uno specifico sistema di packaging, va fatta manualmente.

RedHat Network (RHN)

Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2003-05-05 23:08:20 - Data di creazione: 2003-05-05 23:08:20
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

RedHat Network è nata per gestire con più facilità gli aggiornamenti software di uno o più sistemi RedHat, anche di vecchia data.
La sua prima comparsa risale nella distribuzione RedHat 6.0, tramite l'utility up2date.

Attualmente oltre all'utility testuale up2date si ha disposizione una GUI (interfaccia grafica) e un demone (RHNSD) che si occupa di gestire in via del tutto automatica i check periodici per gli upgrade.
Il principio su cui si basa RHN è molto semplice, di fatto RedHat mette a disposizione dei repository da cui poter scaricare gli aggiornamenti tramite un client specifico, up2date.
Questo client si occupa di scaricare gli aggiornamenti in modo "intelligente", ovvero facendo ricerche incrociate per downlodare solo i RPM necessari.
Da sottolineare che lo scambio dei dati fra client e server RHN viene effettuato tramite il protocollo SSL e che sui pacchetti scaricati vengono fatti controlli di integrità attraverso il checksum GPG per evitare spiacevoli problemi di intercettazione dati e malformazione dei pacchetti.
Inoltre l'utility è estremamente flessibile poichè da la possibilità al sistem administrator di configurare molteplici opzioni, come ad esempio la possibilità di creare liste di rpm che non dovranno mai essere aggiornati oppure la creazione di più utenti per la gestione dei singoli canali (Es RedHat 8.0 i386 e RedHat 6.2 sparc sono due canali diversi) con permessi differenti, oppure decidere semplicemente di downlodare e non installere gli upgrade.

Esistono anche soluzioni per ottimizzare e velocizzare tutte le procedure di automatizzazione dell'upgrade di più sistemi come:

RHN proxy
RHN proxy, come si può intendere dal nome stesso è un sistema che permette di usufruire del servizio RHN tramite un proxy, il quale avrà il compito di scaricare e mettere in cache tutti gli aggiornamenti necessari per i sistemi della propria network. Il vantaggio risiede nella riduzione del traffico (Es. l'aggiornamento del RPM del kernel viene scaricato una volta, salvato sul proxy ma utilizzato da tutti i sistemi che lo richiedono) oltre alla possibilità di propagare rpm personalizzati o che non sono stati rilasciati ufficialmente dallo staff di RedHat.

RHN Satellite
RHN Satellite, oltre a tutti i vantaggi di RHN Proxy, permette di avere nella propria network un vero e proprio server RHN con tutti i vantaggi del caso.
Per usufruire di questa possibilità vengono richiesti sforzi maggiori per quanto riguarda i requisiti di sistema (ES: Installazione di Oracle e di RedHat Advanced Server).
Anche in questo caso si ha la possibilità di configurare nei minimi dettagli tutte le singole opzioni oltre che utilizzare questo sistema anche come server kickstart per effettuare installazioni personalizzate direttamente via rete.
Questa soluzione risulta essere vantaggiosa solo in caso di reti aziendali molto grosse, nell'ordine di 1000 host e più.

up2date

Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2003-04-19 18:45:02 - Data di creazione: 2003-04-19 18:45:02
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

up2date è l'utility testuale che permette di usufruire del servizio RedHat Network per aggiornare gli RPM del sistema.

up2date [opzioni] [nome RPM]
up2date-nox  [opzioni] [nome RPM]
up2date-config [opzioni] [nome RPM]

Opzioni:
--configure Abilita la modalità configurazione, attraverso un menu in shell. (update-config)
-d, --download Esegue il download dei RPM ma non li installa.
-f, --force Forza l'installazione dei RPM.
-i, --install Installa tutti gli RPM scaricati.
-k, --packagedir Specifica la direcory che funge da repository di RPM, per evitare di scaricare più volte lo stesso package.
--nosig Evita il check con gpg dei singoli rpm.
--tmpdir=directory Specifica la directory temporanea. Default /var/spool/up2date.
--justdb Non installa gli RPM sul sistema, ma li aggiunge nel db di RPM.
--dbpath=dir Specifica il path del db di RPM.
-l, --list Mostra l'elenco dei vari RPM disponibili.
--showall Mostra l'elenco di tutti gli RPM scaricabili.
--undo Esegue l'undo dell'ultimo update.
-u, --update Esegue l'update di tutti i RPM disponibili.
--register Registra il server al servizio RHN.
--show-channels Visualizza i canali disponibili.

Paths utili (RedHat):
/var/spool/up2date - Directory in cui vengono scaricati gli rpm.
/etc/sysconfig/rhn/up2date - Il file di configurazione principale.
/etc/sysconfig/rhn/up2date-uuid - Il codice unico che identifica il proprio sistema su RHN

Creazione di un repository di RPM per Fedora 3

Autore: al - Ultimo Aggiornamento: 2005-04-26 16:49:38 - Data di creazione: 2005-02-10 17:08:42
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

La procedura per la creazione di un repository di RPM (usando i CD ufficiali e un mirror degli update) è simile a quella utilizzabile per un repository di Fedora2.
Prevede diverse fasi:
1- Installazione del software necessario per creare un repository (createrepo) ed esportarlo via Web (apache)
2- Creazione di uno script che esegua il mirror degli rpm da un sito ufficiale su una directory locale e che provveda a ricreare, ogni volta, gli indici dei pacchetti presente nel repository (repodata);
3- Mount in loopback sul sistema delle iso dei CD ufficiali e creazione, una tantum, dei repodata
4- Configurazione di apache per esportare tutto via web
5 (Sui Client) - Configurazione di yum per scaricare i pacchetti dal proprio repositoy locale.

1 - Installazione software
Per creare un proprio repository essenzialmente basta il pacchetto createrepo, per condivederlo via web basta Apache e per usare lo script sotto riportato per sincronizzare il proprio sistema con un mirror ufficiale, è necessario rsync:
yum install createrepo
yum install apache
yum install rsync

E' probabile che sul proprio sistema siano già installati sia Apache che Rsync.

2 - Script di sincronizzazione e creazione repository
Il seguente script scarica via rete, dall'url definito in REMOTE_UPDATES i pacchetti di tipo rpm (sono esclusi pacchetti di sorgenti, di debug o per sistemi non i386, per evitare tempi di download eccessivi) e li copia della directory locale definita in LOCAL.
Dopo il download (eseguito tramite rsync) viene eseguito in comando createrepo passandogli come argomento la directory in cui si trova la directory packages contenenti gli rpm. Allo stesso livello di questa directory viene creata la directory repodata con tutti i metadati necessari a yum.
Notare che rispetto a Fedora 2, qui c'è una sostanziale differenza: i metadati vengono creati con l'utility createrepo (più veloce) invece dell'ormai superato yum-arch.
Notare altresì che questo script, oltre a scaricare gli update, fa anche il mirror di due interessanti repository con RPM aggiuntivi (extra e livna).

#!/bin/sh
#### FEDORA 3 ######

## DEFINE LOCAL DIRECTORY
LOCAL=/distro/fedora3/

## DEFINE OFFICIAL FEDORA UPDATES MIRROR
REMOTE_UPDATES=rsync://ftp.join.uni-muenster.de/fedora-linux-core

## DEFINE FEDORA.US EXTRAS MIRROR
REMOTE_EXTRA=rsync://mirrors.kernel.org/fedora.us/fedora
# REMOTE_EXTRA=rsync://ftp-stud.fht-esslingen.de/fedora
# REMOTE_EXTRA=rsync://sunsite.mff.cuni.cz/fedora.us

## DEFINE LIVNA MIRROR
REMOTE_LIVNA=rsync://rpm.livna.org/rlo/fedora

# Fedora 3 Updates (RPM i386)
/usr/bin/rsync --ignore-existing -v $REMOTE_UPDATES/updates/3/i386/*.rpm $LOCAL/updates/packages/
/usr/bin/createrepo $LOCAL/updates

## Optional extra RPM packages repositories

## Fedora 3 Extras
#/usr/bin/rsync --ignore-existing -av $REMOTE_EXTRA/fedora/3/i386/RPMS.extras/*.rpm $LOCAL/extras/packages/
#/usr/bin/createrepo $LOCAL/extras

## Fedora 3 Livna
#/usr/bin/rsync --ignore-existing -v $REMOTE_LIVNA/3/i386/RPMS.stable/*.rpm $LOCAL/livna/packages/
#/usr/bin/createrepo $LOCAL/livna


3- Creazione repository per i pacchetti dei CD  
Per quanto riguarda il contenuto dei CD ufficiali di Fedora, uno dei metodi più rapidi ed efficaci è di montare in loop le rispettive iso e creare gli indici (visto che i pacchetti sono sempre gli stessi, i repodata vengono generati una volta soltanto.
Nel nostro esempio abbiamo le iso nella directory /distro/iso e vogliamo montarle nelle directory /distro/fedora3/cd/disc1, disc2 ecc.
Creazione delle directory su cui montare ed "esplodere" il contenuto delle iso.
E' molto importante chiamare le directory in questo modo (disc1, disc2, disc3 e disc4) per poter gestire anche installazioni centralizzate via rete:
mkdir -p /distro/fedora3/cd/disc1
mkdir -p /distro/fedora3/cd/disc2
mkdir -p /distro/fedora3/cd/disc3
mkdir -p /distro/fedora3/cd/disc4

Mount in loop delle iso (che vanno ovviamente copiate precedentemente in /distro/iso/ o directory analoga):
mount -t auto -o loop /distro/iso/FC3-i386-disc1.iso /distro/fedora3/cd/disc1
mount -t auto -o loop /distro/iso/FC3-i386-disc2.iso /distro/fedora3/cd/disc2
mount -t auto -o loop /distro/iso/FC3-i386-disc3.iso /distro/fedora3/cd/disc3
mount -t auto -o loop /distro/iso/FC3-i386-disc4.iso /distro/fedora3/cd/disc4

Creazione del repository:
createrepo /distro/fedora3/cd/
Questo comando crea la directory /distro/fedora3/main/repodata/con tutti i metadati relativi ai pacchetti contenuti nei CD (nelle directory incluse in main).

4- Configurazione di Apache
Esportare via web i pacchetti rpm e i metadati è necessario sia per eventuali installazioni via rete che per gli aggiornamenti tramite yum dei client.
Fermo restando che nomi delle directory, path e indirizzi possono essere variati secondo i propri sistemi possiamo configurare in modo semplice Apache creando un file di configurazione, chiamato, per esempio, /etc/httpd/conf.d/yumrepository.conf con simili contenuti (accesso da qualsiasi IP e possibilità di browsing delle directory):
Alias distro /distro

Options + Indexes
AllowOverride None
Order allow,deny
Allow from all

In questo modo, ipotizzando che il nostro server abbia IP 10.42.42.1, all'URL http://10.42.42.1/distro/ troveremo i contenuti della directory /distro locale, in cui esiste una sottodirectory iso, con le iso dei CD, e la sottodirectory fedora3 con i vari pacchetti e i relativi metadati.

5- Configurazione dei client
A questo punto la configurazione del server centrale con le funzioni di repository è completa. Possiamo procedere alla configurazione dei client, cioè dei sistemi (desktop o server che siano) che useranno questo repository locale (accessibili a velocità da LAN) per tutte le operazioni di installazione e aggiornamento dei pacchetti RPM.

Su ogni host su cui si è installato Fedora 3 (o in genere ogni sistema RedHat o basato su RPM) è opportuno importare le chiavi pubbliche GPG con cui sono stati firmati i pacchetti ufficiali. Questo permette di forzare l'aggiornamento e l'installazione solo dei pacchetti di cui la fonte è certa e validata.
Per farlo, su Fedora3, scrivere:
rpm --import /usr/share/doc/fedora-release-3/RPM-GPG-KEY
(questa è la chiave GPG con cui sono firmati tutti i pacchetti degli aggiornamenti) e:
rpm --import /usr/share/doc/fedora-release-3/RPM-GPG-KEY-fedora
(la chiave con cui sono firmati i pacchetti di base presenti nei CD ufficiali).

Notare che questa attività va fatta anche su un sistema Fedora che si vuole aggiornare normalmente via Internet, senza usare un repository locale, in quanto, di default, nessuna chiave GPG è importata e viene automaticamente impostato l'obbligo di fare un check della presenza della firma GPG (opzione gpgcheck=1 allinterno del file di configurazione /etc/yum.conf e dei singoli file di configurazione dei repository)

Il passo successivo, e l'ultimo per avere l'infrastruttura di aggiornamento centralizzata, è quello di modificare gli URL da cui il sistema preleva i suoi rpm.
Modificare il file /etc/yum.repos.d/fedora.repo (relativo al repository base, con gli rpm presenti nei cd ufficiali) in qualcosa tipo:
[base]
name=Fedora Core $releasever - $basearch - Base
#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/$releasever/$basearch/os/
# mirrorlist=http://fedora.redhat.com/download/mirrors/fedora-core-$releasever
baseurl=http://10.42.42.1/distro/fedora3/cd/
enabled=1
gpgcheck=1

In pratica si sono solamente commentate le righe esistenti (meglio commentarle che cancellarle, potrebbero essere utili in caso di problemi con il repository locale) e si è aggiunta la righa che punta al proprio server (ovviamente l'IP 10.42.42.1 e il path possono cambiare).

Analogamente, per il file /etc/yum.repos.d/fedora-updates.repo (relativo agli aggiornamenti ufficiali) scrivere:
[updates-released]
name=Fedora Core $releasever - $basearch - Released Updates
#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/updates/$releasever/$basearch/
#mirrorlist=http://fedora.redhat.com/download/mirrors/updates-released-fc$releasever
baseurl=http://10.42.42.1/distro/fedora3/updates/
enabled=1
gpgcheck=1


Gestione repository aggiuntivi
Oltre ai repository ufficiali (base e updates) è possibile aggiungere al proprio sistema uno o più dei molteplici repository di pacchetti rpm per software aggiuntivo, che estendono considerevolmente la facilità di installazione di pacchetti interessanti o utili che non sono presenti nel CD ufficiale.
Nello script sopra riportato sono presenti, commentate, delle righe per eseguire il mirror e la creazione dei metadati, per i repository Extras (pacchetti RPM extra, semi-ufficiali, gestiti dalla community e ospitati da RedHat) e Livna (altri pacchetti, basati e con dipendenze da quelli Extra, particolarmente interessanti).
Per includere anche questi repository, oltre a scommentare le righe dello script di mirror e a creare le directory utilizzate sul server, sui client vanno creati file come: /etc/yum.repos.d/extras.repo contentente:
[extras]
name=Fedora Core $releasever - $basearch - Extra
baseurl=http://10.42.42.1/distro/fedora3/extras/
enabled=1
gpgcheck=1


E il file /etc/yum.repos.d/livna.repo con:
[livna]
name=Fedora Core $releasever - $basearch - Livna
baseurl=http://10.42.42.1/distro/fedora3/livna/
enabled=1
gpgcheck=1


Ricordarsi che anche per questi due repository vanno importate le chiavi GPG:
rpm --import http://download.fedora.redhat.com/pub/fedora/linux/extras/RPM-GPG-KEY-Fedora-Extras
rpm --import http://rpm.livna.org/RPM-LIVNA-GPG-KEY-i386

apt-cache

Autore: neo - Ultimo Aggiornamento: 2003-03-14 22:30:25 - Data di creazione: 2003-03-14 22:30:25
Tipo Infobox: COMMANDS - Skill: 4- ADVANCED

Utility di APT per la gestione della cache di supporto.

apt-cache [opzioni] comando
apt-cache [opzioni] add file1 [file2 ...]
apt-cache [opzioni] showpkg pkg1 [pkg2 ...]
apt-cache [opzioni] showsrc pkg1 [pkg2 ...]


Comandi:
add  Aggiunge un pacchetto alla cache
showpkg  Visualizza informazioni generali di un singolo pacchetto (versione,dipendenze etc..)
showsrc  Visualizza i sources record (descrizione, mantainer del package etc.. )
stats  Visualizza alcune statistiche
dump  Mostra il contenuto della cache
search  Abilita la ricerca di un package per il nome
show  Mostra tutto il contenuto di un package
depends  Visualizza le dipendenze di un package
pkgnames  Visualizza l'elenco di tutti i package scaricabili

Opzioni:
-p=? Specifica il file per salvare la cache dei package.
-s=? Specifica il file per salvare la source cache.
-q   Abilita il quiet mode.
-c=? Specifica quale file di configurazione utilizzare.
-o=? Permette di settare un opzione.

Import delle chiavi GPG per installare i pacchetti rpm

Autore: neo - Ultimo Aggiornamento: 2005-05-06 11:53:22 - Data di creazione: 2003-07-29 17:07:23
Tipo Infobox: TIPS - Skill: 4- ADVANCED

I pacchetti rpm che venongo distribuiti da chi produce una distribuzione o da chi gestisce repository alternativi, sono quasi sermpre "firmati" con una chiave GPG che certifica l'autore del pacchetto, assicurandone la fonte.
E' bene, al termine di una installazione Linux, importare le chiavi pubbliche (rpm --import) dei packager che forniscono gli aggiornamenti o i pacchetti che si intendono utilizzare. Questa operazione potrebbe rendersi indispensabile quando si utilizzano tool di aggiornamento automatici come yum o autorpm se sono configurati per eseguire il gpgcheck dei pacchetti da aggiornare.

Se si prova ad installare un pacchetto creato da un packager di cui non si è importata la chiave GPG pubblica si ottiene un output di questo genere:
[root@zoe root]# rpm -Uhv httpd-2.0.40-21.3.i386.rpm
warning: httpd-2.0.40-21.3.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing...                ########################################### [100%]
   1:httpd                  ########################################### [100%]


Le chiavi GPG pubbliche sono comunemente rintracciabili nella directory principale del primo CD di installazione o in /usr/share/doc/, ad esempio su Fedora in /usr/share/doc/fedora-release-XX/RPM-GPG-KEY:
[root@zoe root]# rpm --import /usr/share/doc/fedora-release-2/RPM-GPG-KEY
[root@zoe root]# rpm -Uhv httpd-manual-2.0.40-21.3.i386.rpm
Preparing...                ########################################### [100%]
   1:httpd-manual           ########################################### [100%]

apt-get

Autore: neo - Ultimo Aggiornamento: 2003-03-14 22:34:23 - Data di creazione: 2003-03-14 22:34:23
Tipo Infobox: COMMANDS - Skill: 4- ADVANCED

Utility per la gestione dei package di un sistema tramite command line.

apt-get [opzioni] comando
apt-get [options] install|remove pkg1 [pkg2 ...]
apt-get [options] source pkg1 [pkg2 ...]


Comandi:
update Scarica la nuova package list
upgrade Esegue l'upgrade dei package
install Installa un nuovo pacchetto
remove Rimuove un pacchetto
source Scarica i sorgenti del pacchetto specificato
build-dep Configura le build dependency
clean Cancella tutti  i vecchi file
autoclean - Cancella i vecchi file scaricati e archiviti
check - Verifica che tutte le dependency siano presenti

Opzioni:
-qq Abilita il quiet mode, visualizza solo gli errori (utile in script schedulati)
-d I package vengono solo scaricati e non installati
-y Risponde Yes in modo automatico a tutte le domande presentate (utile in script schedulati)
-D Abilita la rimozione di un package con tutte le sue dipendenze
-c=? Specifica la lettura di un file do configurazione
-o=? Permette di settare alcune opzioni specifiche


Tool grafici per l'amministrazione del sistema

Le alternative grafiche alla command line per la gestione e configurazione di sistemi Linux / Unix. Webmin e altri tool grafici.

Attività da sistemista

Autore: al - Ultimo Aggiornamento: 2006-03-23 11:55:26 - Data di creazione: 2004-05-23 16:14:50
Tipo Infobox: DESCRIPTION - Skill: 1- NOVICE

Spiegare cosa fa un sistemista non è sempre ovvio.
Definire quali sono i suoi compiti è quantomeno pretenzioso.
Inquadrare gli skill di cui ha bisogno è limitativo, visto che di fatto, in molte realtà, un sistemista deve poter gestire e configurare hardware e software eterogenei che richiedono conoscenze ed esperienza disparate.

Le attività sistemistiche su un server con qualsiasi sistema operativo 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 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, spesso basterebbe un po' di lucidità progettuale e lungimiranza per 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. Di 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.

Introduzione a Webmin

Autore: Eberk - Ultimo Aggiornamento: 2004-05-23 16:15:32 - Data di creazione: 2004-05-23 16:15:32
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Webmin e' un semplice tool web-based che permette, attraverso un interfaccia molto user-friendly, di poter amministrare praticamente l'intero sistema. E' anche un ottimo strumento "didattico", in quanto permette di verificare la sintassi di file di configurazione e le funzionalità di servizi e programmi vari, editandoli tramite una intuitiva interfaccia grafica.

E' composto da un server web (che di default lavora sulla porta 10000) e da numerosi CGI scritti in Perl che agiscono direttamente su file di sistema come /etc/inetd.conf e /etc/passwd.
Per poter utilizzare webmin, bisogna innanzi tutto scaricarlo dal sito ufficiale (disponibile sia il .tar.gz che l'RPM), dopodiche', tramite un piccolo script, eseguire l'installazione.
Durante l'installazione verranno chieste svariate cose (in linea di massima, a parte user name, le soluzioni di default vanno piu' che bene) tra cui file di configurazione, file di log, path del binario di perl, porta per il server web, utente e password.
Attenzione: se possedete una versione di webmin compresa tra la 0.91 e la 0.960, affrettatevi a scaricarne una piu' aggiornata, in quanto quelle versioni presentano un grave buco che spalanca le porte del vostro sistema ai cracker.
La falla riguarda il modo in cui comunicano il processo padre ed il processo figlio di webmin.
Sfruttando questo l'aggressore, da remoto, puo' ingannare il programma utilizzando il sessionID di un qualsiasi utente gia' loggato nel sistema, e poter cosi' eseguire  ogni tipo di azione con i privilegi di root. Per fare questo si deve essere a conoscenza di almeno un nome utente valido, cosa non molto difficile, visto e considerato che di default webmin assegna il nome admin.
Webmin puo' essere compilato tranquillamente su una grande varieta' di sistemi operativi, da Linux alle piu disparate versioni di Unix, compreso il mac OS X.
La sua natura modulare ha permesso la creazione di innumerevoli plug-in in grado di gestire e configurare diversi servizi.

Introduzione a Linuxconf

Autore: Eberk - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-13 20:23:10 - Data di creazione: 2002-10-13 20:23:10
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Linuxconf e' un tool che permette, tramite 3 interfacce diverse, di amministrare il proprio sistema Linux in maniera abbastanza semplice ed intuitiva.

E' facilmente installabile via rpm ( rpm -i linuxconf-ver-arch.rpm )
Vi sono 3 interfacce per linuxconf: testuale, web e grafica.
La prima e' eseguibile da shell digitando linuxconf (o digitando il path completo /sbin/linuxconf) ed e' composta da menu e sottomenu a tendina con tanto di help per ogni singola voce.
La seconda e' eseguibile da un qualsiasi browser e lavora sulla porta 98 ( http://localhost:98 ).
La terza (disponibile dalla versione 1.9 release 26-12) gira in ambiente grafico, ed ha un impostazione molto simile alla modalita' testuale, anche se e' un po piu' user-friendly di quest'ultima.
Tramite Linuxconf varie operazioni di amministrazione del sistema e di specifici servizi sono presentate con una intuibile interfaccia. In alcuni casi tende a riscrivere i file di configurazione secondo dei propri canoni e questo puo' creare confusione o problemi a chi lo usa.

PhpSysInfo: overview ed installazione

Autore: homer - Ultimo Aggiornamento: 2004-11-12 17:50:35 - Data di creazione: 2004-11-12 17:50:35
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

PhpSysInfo è uno script PHP per la visualizzazione di informazioni sul sistema.

OVERVIEW
PhpSysInfo è uno script sviluppato in linguaggio PHP che permette di visualizzare tramite browser informazioni sul sistema riguardanti, la rete, la memoria, il filesystem, e l'hardware. E' rilasciato sotto licenza GPL ed è disponibile per tutti i sistemi BSD e le piattaforme Posix. Per utilizzare questo tool è necessario avere sulla macchina da monitorare, un web server con supporto di PHP.

DOWLOAD
E' possibile effettuare il download presso SourceForge.net:
root@Joker:/software# wget http://puzzle.dl.sourceforge.net/sourceforge/phpsysinfo/phpsysinfo-2.3.tar.gz
--18:31:38--  http://puzzle.dl.sourceforge.net/sourceforge/phpsysinfo/phpsysinfo-2.3.tar.gz
           => `phpsysinfo-2.3.tar.gz'
Resolving puzzle.dl.sourceforge.net... done.
Connecting to puzzle.dl.sourceforge.net[195.141.101.221]:80... connected. <br>
HTTP request sent, awaiting response... 200 OK
Length: 163,674 [application/x-gzip]

100%[=================================================================================================================================>] 163,674        3.62K/s    ETA 00:00
18:32:23 (3.62 KB/s) - `phpsysinfo-2.3.tar.gz' saved [163674/163674]

In caso di utilizzo con PHP 5.0 o sucessivi, è necessario scaricare le versione 2.3.

INSTALLAZIONE
Una volta eseguito il download, il pacchetto andrà scompattato nella document root del webserver sull'host che di cui si vuole eseguire il monitoraggio:
root@Joker:/home/webuser# tar xvfz phpsysinfo-2.3.tar.gz
phpsysinfo-dev/
phpsysinfo-dev/includes/
phpsysinfo-dev/includes/lang/
phpsysinfo-dev/includes/lang/big5.php
phpsysinfo-dev/includes/lang/bg.php
phpsysinfo-dev/includes/lang/br.php
phpsysinfo-dev/includes/lang/ca.php
phpsysinfo-dev/includes/lang/cn.php
phpsysinfo-dev/includes/lang/cs.php
phpsysinfo-dev/includes/lang/ct.php
phpsysinfo-dev/includes/lang/da.php
phpsysinfo-dev/includes/lang/de.php
phpsysinfo-dev/includes/lang/en.php
...


Quindi è necessario rinominare il file principale di configurazione config.php.new in config.php:
root@Joker:/home/webuser/phpsysinfo-dev# cp config.php.new config.php

CONFIGURAZIONE
Per utilizzare il tool, si andrà ad inserire una entry nel file di configurazione del web server, in modo da potervi accedere via web. Un esempio di configurazone utilizzando Apache:
root@enigma:/home/webuser/phpsysinfo-dev# cat /usr/local/apache/conf/httpd.conf
...
Alias /sysinfo/ "/home/webuser/phpsysinfo-dev/"
<Directory "/home/webuser/phpsysinfo-dev">
   Options Indexes
   AllowOverride None
   Order allow,deny
   Allow from 192.168.0.
</Directory>
...

Le informazioni vengono richiamate puntando a http://nomehost/sysinfo e ne è permessa la visualizzazione solamente alle macchine della rete 192.168.0

L'ultimo settaggio riguarda il file php.ini, il quale deve includere nela variabile include_path il "." e in cui la variabile safe_mode deve essere settata a off, in quanto lo script deve poter accedere in lettura alla directory /proc del sistema al fine di ricavarne le informazioni. Terminate queste operazioni, dopo il riavvio del webserver, sarà possibile accedere alla pagina generata da PhpSysInfo.


Esempi di configurazione di Iptables

Esempi di configurazioni di un firewall Linux con iptables

Scenario comune: Personal Firewall

Un Personal Firewall, se non ha servizi da esporre, può avere una configurazione essenziale: permette ogni pacchetto in uscita e accetta in entrata solo i pacchetti di ritorno:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT


Configurazioni più elaborata possono prevedere logging dei pacchetti droppati:
iptables -A INPUT -m pkttype --pkt-type ! broadcast -j LOG --log-prefix "INPUT DROP: "
iptables -A FORWARD -m pkttype --pkt-type ! broadcast -j LOG --log-prefix "FORWARD DROP: "

Controllo, se match owner è supportato, degli utenti autorizzati a far traffico in rete:
iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -m owner --uid-owner 501 -j ACCEPT

Script per la configurazione di un firewall a 3 interfacce

Autore: al - Ultimo Aggiornamento: 2007-03-28 12:18:33 - Data di creazione: 2007-03-28 12:11:14
Tipo Infobox: SCRIPTS - Skill: 4- ADVANCED

Viene proposto uno script, customizzabile, utilizzabile in un firewall Linux con 3 interfacce: esterna, DMZ e interna. Contiene degli esempi per gestire VPN IpSec e PPTP sia fra il server stesso su gira lo script e un peer remoto, sia fra client della rete interna e un server esterno.
Vanno cambiati i parametri relativi agli indirizzi usati e commentate o scommentate delle regole secondo proprie esigenze.

#!/bin/bash

PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin

## SCRIPT DI CONFIGURAZIONE IPTABLES PER FIREWALL A 3 INTERFACCE:
##
## EXTERNAL - Tipicamente con IP pubblici, con accesso IPSEC e PPTP
## DMZ - Per server pubblici, nattati, esposti alla rete pubblica
## INTERNAL - Permette l'accesso Internet ai client della rete interna
##
## INSTRUZIONI PER L'USO
## Lo script è diviso in varie parti:
## - Definizione di Variabili generali (modifica necessaria)
## - Impostazione parametri del kernel (modifica facoltativa)
## - Impostazione regole generali (modifica facoltativa)
## - Impostazione regole per specifiche funzioni (DMZ, VPN, LAN NAT ecc.)
##   (Attivare/Disattivare e impostare parametri secondo proprie necessità)
##
## Versione 0.2 - [email protected]
## Revisione 20070328

############################################################
## DEFINIZIONE DI VARIABILI GENERALI
## Modificare i parametri sulla base delle proprie impostazioni
## Nota: Per maggiore leggibilità sono definite e vanno adattate
## altre variabili nella sezione in cui sono utilizzate
############################################################

## Impostazione indirizzo IP primario delle interfacce:
## esterna (ext), dmz (dmz), interna (int)
extip="151.151.151.151"
dmzip="172.16.0.1"
intip="192.168.0.1"

## Associazione interfacce alle reti:
## esterna (ext), dmz (dmz), interna (int)
extint="eth0"
dmzint="eth2"
intint="eth1"

## Indirizzi delle reti:
## esterna (ext), dmz (dmz), interna (int)
extnet="151.151.151.0/24"
dmznet="172.16.0.0/16"
intnet="192.168.0.0/24"




############################################################
## IMPOSTAZIONE PARAMETRI E CARICAMENTO MODULI DEL KERNEL
## Possono essere impostati anche su /etc/sysctl.conf
############################################################

## Abilita IP forwarding (fondamentale)
echo "1" > /proc/sys/net/ipv4/ip_forward

## Non risponde a ping su broadcast
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

## Abitilita protezione da messaggi di errore
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

## Non accetta icmp redirect
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects

## Abilita protezione (parziale) antispoof
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

## Logga pacchetti strani o impossibili
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

## Pre-carica i moduli del kernel che servono
modprobe ip_tables
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
modprobe ipt_MASQUERADE




############################################################
## IMPOSTAZIONE REGOLE IPTABLES GENERALI
## Questa parte, in linea di massima, non necessita customizzazioni
## In questo script si segue questa logica:
## - Drop di default di ogni pacchetto
## - AGGIUNTA di regole sul traffico accettato
## - Log finale dei pacchetti prima che siano droppati
##
## Per ottimizzare le prestazioni può servire modificare l'ordine
## delle regole, inserendo per prime quelle più utilizzate.
## Si suggerisce, nel caso, di riordinare interi blocchi di configurazione
## (regole per dmz, nat, ipsec ecc.) facendo sempre attenzione all'ordine
## con cui sono aggiunte le regole per evitare disfunzioni
## Nota: Lo script è stato testato solo con l'ordine qui impostato.
############################################################

## Azzeramento di ogni regola e counter esistenti
iptables -t filter -F
iptables -t filter -X
iptables -t filter -Z
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z

## Impostazione policy di default
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -P PREROUTING ACCEPT

## Abilitazione traffico di loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT




############################################################
## TRAFFICO IN ENTRATA E IN USCITA DAL FIREWALL
## Adattare secondo proprie preferenze
############################################################

## INDIRIZZO IP o RETE da cui è possibile accedere al firewall (ssh)
## Inserire un indirizzo di amministrazione
admin="100.0.0.254"


############################################################
## INPUT - Traffico permesso in ingresso verso il firewall

## Accesso dalla rete interna (su porta ssh e proxy)
iptables -A INPUT -s $intnet -i $intint -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s $intnet -i $intint -p tcp --dport 3128 -j ACCEPT

## Accesso incondizionato da indirizzo di amministrazione
iptables -A INPUT -s $admin -j ACCEPT

## Viene permesso in entrata il traffico correlato a connessioni già esistenti
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Abilitazione pacchetti ICMP (es: ping) da rete interna e dmz
iptables -A INPUT -p icmp -i $dmzint -j ACCEPT
iptables -A INPUT -p icmp -i $intint -j ACCEPT


############################################################
## OUTPUT - Traffico permesso in uscita dall'host del firewall
## Vengono proposte 2 alternative (commentare una o l'altra):
## A) Traffico in uscita ristretto (potrebbe impedire alcune attività di sistema)
## B) Traffico in uscita dal firewall libero (viene solo fatto un sanity check)

## A) Il firewall può pingare e uscire via ssh, stmp, dns:
# iptables -A OUTPUT -p icmp -j ACCEPT
# iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
# iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
# iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
# iptables -A OUTPUT -p tcp --dport 22227 -j ACCEPT
# iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Dal firewall si può navigare sul web (necessario per proxy)
# iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
# iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT


## B) I pacchetti in uscita dal firewall all'esterno non hanno filtri
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT




############################################################
## REGOLE PER VPN IPSEC LAN 2 LAN
## Necessarie per permettere il collegamento ad un peer ipsec remoto
## e gestire il traffico fra le due reti
## Modificare i parametri secondo proprie necessità
############################################################

## Definizione degli indirizzi IP (pubblici) dei due peer IPSEC
## Server locale, questo (local) - Peer IpSec remoto (remote)
remote="212.212.212.212"
local="151.151.151.151"

## Rete locale e remota da mettere in comunicazione via ipsec
## (Coincidono con "leftsubnet" e "rightsubnet" di OpenSwan)
locallan="192.168.1.0/24"
remotelan="192.168.0.0/24"


############################################################
## Regole per ogni peer di una VPN IPSEC LAN 2 LAN

iptables -A OUTPUT -d $remote -p udp --dport 500 -j ACCEPT
iptables -A OUTPUT -d $remote -p ah -j ACCEPT
iptables -A OUTPUT -d $remote -p esp -j ACCEPT

iptables -A INPUT -s $remote -p udp --sport 500 -j ACCEPT
iptables -A INPUT -s $remote -p ah -j ACCEPT
iptables -A INPUT -s $remote -p esp -j ACCEPT

## Regole per IPSEC LAN 2 LAN con NAT-TRAVERSAL
## AGGIUNGERE le seguenti regole se è previsto l'uso di NAT-T
iptables -A OUTPUT -d $remote -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -s $remote -p udp --dport 4500 -j ACCEPT

## Regola per permettere al server locale di contattare macchine della rete remota
iptables -A OUTPUT -d $remotelan -j ACCEPT


############################################################
## Regole per permettere ad un CLIENT VPN IPSEC INTERNO
## di collegarsi ad un server IPsec esterno
## Scommentare e usare se necessario

$ipsecserver = "21.21.21.21"
# iptables -A FORWARD -s $intnet -i $intint -p udp -d $ipsecserver -j ACCEPT
# iptables -A FORWARD -s $intnet -i $intint -p ah -d $ipsecserver -j ACCEPT
# iptables -A FORWARD -s $intnet -i $intint -p esp -d $ipsecserver -j ACCEPT


############################################################
## Definizione del traffico permesso fra le due reti
## Qui non vengono impostate alcune limitazioni:
## le due reti non hanno filtri tra loro.
## Restringere queste impostazioni secondo proprie necessità, nell'impostare
## gli indirizzi degli HOST delle LAN, usare il loro IP interno

iptables -A FORWARD -s $locallan -d $remotelan -j ACCEPT
iptables -A FORWARD -s $remotelan -d $locallan -j ACCEPT




############################################################
## REGOLE PER VPN PPTP
## Impostazioni per:
## - Permettere accesso PPTP da Internet a server locale
## - Permettere accesso PPTP da host locale a un pptp server esterno
## - Permettere accesso PPTP da host locale a qualsiasi pptp server
## - Permettere a client della rete interna di accedere ad un pptp server esterno
## - Permettere a client della rete interna di accedere a qualsiasi pptp server
## NOTA: Scommentare le regole che interessano
############################################################

## Indirizzo IP di un server PPTP esterno
pptpserver="85.85.85.85"


############################################################
## Regole per permettere accesso PPTP da Internet a server locale
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT
iptables -A OUTPUT -p gre -j ACCEPT

## Ciclo per regole da applicare alle interfacce pptp create con il tunnel
## Da adattare se si prevede di avere più di 10 tunnel contemporaneamente.
for i in 0 1 2 3 4 5 6 7 8 9 ; do
    iptables -A FORWARD -i ppp$i -j ACCEPT
    iptables -A FORWARD -i $intint -o ppp$i -j ACCEPT
    iptables -A OUTPUT -o ppp$i -j ACCEPT
    iptables -A INPUT -i ppp$i -p icmp -j ACCEPT
done


############################################################
## Regole per permettere accesso PPTP da host locale a un pptpserver esterno
iptables -A OUTPUT -p tcp --dport 1723 -d $pptpserver -j ACCEPT
iptables -A OUTPUT -p gre -d $pptpserver -j ACCEPT


############################################################
## Regole per permettere accesso PPTP da host locale a qualsiasi server
# iptables -A OUTPUT -p tcp --dport 1723 -j ACCEPT
# iptables -A OUTPUT -p gre -j ACCEPT


############################################################
## Regole per permettere a client della LAN di accedere ad un pptpserver esterno
# iptables -A FORWARD -s $intnet -i $intint -p tcp --dport 1723 -d $pptpserver -j ACCEPT
# iptables -A FORWARD -s $intnet -i $intint -p gre -d $pptpserver -j ACCEPT


############################################################
## Regole per permettere a client della LAN di accedere a qualsiasi server pptp
# iptables -A FORWARD -s $intnet -i $intint -p tcp --dport 1723 -j ACCEPT
# iptables -A FORWARD -s $intnet -i $intint -p gre -j ACCEPT




############################################################
## LOCAL LAN NATTING (MASQUERADING)
## Impostazioni che permettono il natting (masquerading) della rete interna (LAN)
## e determinano quale traffico è concesso dalla rete interna verso Internet
## Adattare secondo proprie necessità
############################################################

## Indirizzo IP assegnato ai client quando escono su Internet
## Deve stare sull'interfaccia esterna e può essere lo stesso $extip
## precedentemente definito
## Se si usa un indirizzo diverso ricordarsi di abilitarlo come alias
## sull'interfaccia esterna (si può fare direttamente in questo script:
ifconfig eth0:1 151.151.151.152 netmask 255.255.255.0 broadcast 151.151.151.255

#extiplan=$extip
extiplan="151.151.151.152"

## Vengono proposte due alternative:
## A) Natting della rete locale con esclusione degli indirizzi della LAN remota
## B) Normale natting di tutta la rete locale
## Utilizzare A se il firewall è anche peer di una VPN ipsec lan-to-lan
## Nota: Se si usa l'opzione A, assicurarsi che questo blocco di regole sia
## successivo a quello relativo alla VPN IPsec

## A) LAN natting in caso di utilizzo VPN IPsec lan 2 lan:
# iptables -t nat -A POSTROUTING -s $intnet -d ! $remotelan -j SNAT --to-source $extiplan

## B) LAN natting normale
iptables -t nat -A POSTROUTING -o $extint -s $intnet -j SNAT --to-source $extiplan


############################################################
## Definizione del traffico Internet permesso ai client della rete Interna
## Vengono proposte due alternative:
## A) Libero accesso ad Internet a tutti i client della rete Interna
## B) Accesso limitato ai client della rete interna

## A) Libero accesso ad Internet a tutti i client della rete Interna
# iptables -A FORWARD -s $intnet -i $intint -j ACCEPT

## B) Accesso limitato ai client della rete interna
## Qui solo traffico di posta, dns e ssh (di default lo script prevede l'uso
## di un proxy locale per la navigazione dei client)
iptables -A FORWARD -s $intnet -i $intint -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -s $intnet -i $intint -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -s $intnet -i $intint -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -s $intnet -i $intint -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -s $intnet -i $intint -p tcp --dport 143 -j ACCEPT
iptables -A FORWARD -s $intnet -i $intint -p tcp --dport 995 -j ACCEPT
iptables -A FORWARD -s $intnet -i $intint -p tcp --dport 993 -j ACCEPT
iptables -A FORWARD -s $intnet -i $intint -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -s $intnet -i $intint -p tcp --dport 80  -j ACCEPT
iptables -A FORWARD -s $intnet -i $intint -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -s $intnet -i $intint -p tcp --dport 3389 -j ACCEPT
iptables -A FORWARD -s $intnet -i $intint -p udp --dport 3389 -j ACCEPT



############################################################
## Viene accettato il traffico di ritorno a connessioni già stabilite
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT




############################################################
## DMZ
## Impostazioni che nattano i server presenti in DMZ e li rendono accessibili
## ad Internet sulle porte dei servizi di produzione
## Adattare e ampliare secondo proprie necessità
############################################################


############################################################
## Regole generali per permettere ai server in DMZ di accedere a servizi pubblici
## Sono proposti 2 approcci alternativi:
## A) Nessun filtro in uscita dalla DMZ
## B) Traffico in uscita limitato (può filtrare traffico necessario,customizzare)

## A) Nessun filtro in uscita dalla DMZ
# iptables -A FORWARD -i $dmzint -o ! $intint -j ACCEPT

## B) Traffico in uscita limitato (customizzare)
##
## iptables -A FORWARD -s $dmznet -i $dmzint  -j DROP

iptables -A FORWARD -i $dmzint -o ! $intint -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -i $dmzint -o ! $intint -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i $dmzint -o ! $intint -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -i $dmzint -o ! $intint -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -i $dmzint -o ! $intint -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A FORWARD -i $dmzint -o ! $intint -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A FORWARD -i $dmzint -o ! $intint -p icmp --icmp-type echo-request -j ACCEPT



############################################################
## Accesso totale da indirizzo di amministrazione anche a server in DMZ
# iptables -A FORWARD -s $admin -j ACCEPT


##########################################################################
## Regole sul traffico da LAN a DMZ (accesso completo, restringere secondo necessità)
iptables -A FORWARD -s $intnet -i $intint -d $dmznet -o $dmzint -j ACCEPT


############################################################
## Natting di un server web, con accesso http pubblico e ftp da IP
## del webmaster.
## Vengono proposte due alternative:
## A) Natting 1 a 1, dove un IP pubblico corrisponde ad un IP interno
## B) Natting 1 a molti, dove a seconda della porta si redireziona su un diverso host interno

## IP pubblico del webserver (su rete esterna):
#extipwebserver="172.16.0.30"

## Impostazione IP aliasing su interfaccia pubblica
#ifconfig eth0:2 10.0.1.4 netmask 255.255.255.0 broadcast 10.0.0.255

## IP privato del webserver (su dmz)
#webserver="172.16.0.30"

## IP da cui può accedere un webmaster via ftp
#webmaster="10.0.0.150"

## A) NATTING 1-1 (Viene usato l'IP esterno definito in: $extipwebserver)
#iptables -t nat -A PREROUTING -d $extipwebserver -j DNAT --to-destination $webserver
#iptables -t nat -A POSTROUTING -s $webserver -j SNAT --to-source $extipwebserver

## B) NATTING 1-* (Viene usato l'IP esterno del firewall)
#iptables -t nat -A PREROUTING -d $extip -p tcp --dport 80 -j DNAT --to-destination $webserver:80

## Regole di firewalling per permettere l'accesso da Internet ai servizi in DMZ
#iptables -A FORWARD -d $webserver -p tcp --dport 80 -j ACCEPT
#iptables -A FORWARD -d $webserver -s $webmaster -p tcp --dport 21 -j ACCEPT


############################################################
## Natting di un terminal server.
## Sono definite le stesse logiche del webserver di cui sopra
## In forma compatta. Come sempre le opzioni A) o B) sono ALTERNATIVE fra loro

## IP Pubblico terminal server (solo per opzione A)
# extipterminalserver="10.0.0.3"
# ifconfig eth0:3 10.0.0.3 netmask 255.255.255.0 broadcast 10.0.0.255


## IP privato (in DMZ) del terminal server
ifconfig $dmzint  172.16.0.178 netmask 255.255.0.0
terminalserver="172.16.0.3"

## A) Natting 1-1
# iptables -t nat -A PREROUTING -d $extipterminalserver -j DNAT --to-destination $terminalserver
# iptables -t nat -A POSTROUTING -s $terminalserver -j SNAT --to-source $extipterminalserver

## A) Natting 1-*
iptables -t nat -A PREROUTING -d $extip -p tcp --dport 3389 -j DNAT --to-destination $terminalserver:3389

## Traffico concesso da Internet a porta 3389 Terminal Server
iptables -A FORWARD -d $terminalserver -p tcp --dport 3389 -j ACCEPT


############################################################
## Source natting degli IP della DMZ su IP esterno
## Lasciare alla fine del blocco relativo alla DMZ
iptables -t nat -A POSTROUTING -s $dmznet -j SNAT --to-source $extip



############################################################
## LOGGING dei pacchetti droppati
## Regole da inserire alla fine, appena prima del DROP di default
## Notare che non vengono loggati eventuali pacchetti droppati precedentemente
## Vegnono loggati solo pacchetti unicast (no broadcast/multicast) con prefisso
############################################################

iptables -A INPUT -m pkttype --pkt-type unicast -j LOG --log-prefix "INPUT DROP: "
iptables -A OUTPUT -m pkttype --pkt-type unicast -j LOG --log-prefix "OUTPUT DROP: "
iptables -A FORWARD -m pkttype --pkt-type unicast -j LOG --log-prefix "FORWARD DROP: "

Scenario comune: LAN Gateway

Un firewall che agisce come gateway per una rete locale (es: 10.0.0.0/24), che natta su un unico IP pubblico tutti gli IP interni, richiede:
iptables -A FORWARD -s 10.0.0.0/255.255.255.0 -i eth0 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -j MASQUERADE


IMPORTANTE: Abilitare l'IP forwarding a livello del kernel:
sysctl -w net.ipv4.ip_forward = 1

Il controllo su quali host della rete interna possono accedere a Internet può essere molto più fine, agendo a livello di porte concesse:
iptables -A FORWARD -s 10.0.0.0/255.255.255.0 -p tcp --dport 80 -i eth0 -j ACCEPT
A livello di MAC address degli host abilitati:
iptables -A FORWARD -m mac  --mac-source 00:50:8B:4D:55:BB -i eth0 -j ACCEPT
Introducendo un limite sul traffico che un host può avere:
iptables -A FORWARD -s 10.0.0.120 iptables -m connrate --connrate :36000 -j ACCEPT

Scenario comune: Transparent Proxy

Un transparent proxy è un normale proxy server che viene usato senza la necessità di configurazione di alcun parametro sul client.
Viene gestito, su Linux, operando su due livelli:
- Iptables per redirezionare il traffico dei client
- Squid (o analogo proxy server) per gestire questa funzionalità.

Configurazione Iptables
E' necessario redirezionare destinato ad host esterni verso la porta su cui ascolta il proxy.
Per esempio, se si vuole redirezionare il traffico web per un proxy locale in ascolto sulla porta 8080, sul gateway inserire:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Se il proxy fosse su un altra macchina (LAN: 10.0.0.0/24 . Proxy: 10.0.0.15, Iptables FW: 10.0.0.1) si devono impostare regole tipo:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -s ! 10.0.0.15 -j DNAT --to-destination 10.0.0.15:8080
iptables -t nat -A POSTROUTING -i eth0 -s 10.0.0.0/24 -d 10.0.0.15 -j SNAT --to-source 10.0.0.1
iptables -A FORWARD -s 10.0.0.0/24 -d 10.0.0.15 -i eth0 -o eth0 -p tcp --dport 8080 -j ACCEPT
iptables -A FORWARD -s 10.0.0.15 -i eth0 -o eth1 -j ACCEPT


Configurazione Squid
Se si usa Squid assicurarsi che siano impostati in squid.conf:
http_port 8080
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Scenario comune: Server firewall

Se applicate su un host che eroga un servizio pubblico, è bene bloccare tutto di default e abilitare il traffico in uscita:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

Il traffico permesso in entrata, ad esempio per un server web:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Eventuale traffico di servizio da IP limitati (ftp, ssh):
iptables -A INPUT -p tcp --dport 22 -s 213.25.10.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -s 143.20.12.7 -j ACCEPT


Stessi risultati si possono avere per configurazioni più "paranoiche" che limitano il traffico in uscita (attivandolo solo per risposte a richieste su porte aperte):
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 443 -j ACCEPT

Scenario comune: DMZ Firewall

Un firewall di rete classico permette di filtrare il traffico esterno prima che raggiuna dei server in una DMZ. Ha almeno 2 interfacce (una esterna, esposta ad Internet, una sulla DMZ, che costituisce il default gateway dei server pubblici).

Può agire in 2 modi principali:
- Routing fra rete esterna e DMZ con IP pubblic
- Natting fra rete esterna e DMZ con IP privati nattati dal firewall
In entrambi i casi l'IP forwarding va attivato.

Su un routing firewall con DROP di default, per quanto riguarda il controllo del traffico in transito bastano regole come:
iptables -A FORWARD -d 217.56.217.2 -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -d 217.56.217.2 -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -m tcp -p tcp -s 217.56.217.0/255.255.255.240 -i eth1 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT


Se viene introdotto il natting dei server pubblici su host con IP privato (10.0.0.x):
iptables -A FORWARD -d 10.0.0.2 -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -d 10.0.0.2 -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -m tcp -p tcp -s 10.0.0.0/255.255.255.0 -i eth1 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -d 217.56.217.2 -j DNAT --to-destination 10.0.0.2
iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -j SNAT


Notare che per ogni IP di cui il firewall fa destination natting è necessario che il sistema risponda ad arp request, per cui deve avere tutti gli IP nattati configurati come alias sulla sua interfaccia esterna.


Linux post-installation check-list

Operazioni da compiere su un sistema Linux dopo averlo installato dal CDROM. Security fixes e patches.

Procedure di post-installazione su server

Autore: al - Ultimo Aggiornamento: 2002-10-14 17:53:20 - Data di creazione: 2002-10-14 17:53:20
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

L'installazione di un sistema Unix o Linux con il CD-ROM ufficiale è solo la prima fase della preparazione di un server per essere messo in produzione.

A questa vanno fatte seguire alcune customizzazioni quali:
- Aggiornamento dei pacchetti, per evitare di avere programmi con bug o buchi.
- Rimozione dei servizi non utilizzati e potenzialmente pericolosi
- Ricompilazione del kernel. Non indispensabile ma raccomandabile.
- Customizzazione del sistema secondo policy congruenti e generali.
- Intervento su alcune configurazioni riguardanti la sicurezza del sistema.
- Installazione e configurazione dei servizi di produzione.

Sono indicazioni di massima generiche che possono essere evitate su macchine desktop o sistemi senza problematiche di sicurezza ma che diventano fondamentali su sistemi direttamente su Internet.

Aggiornamento del software installato

Autore: al - Ultimo Aggiornamento: 2005-05-06 12:10:29 - Data di creazione: 2003-02-01 10:27:11
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Utilizzare software opensource ha vantaggi e svantaggi.
Uno degli svantaggi, o quantomeno effetti collaterali, è che relativamente spesso vengono rilasciati aggiornamenti di software comuni, caratteristica per'altro comune anche a software proprietario.
Le nuove versioni possono avere nuove feature, dei bug corretti o dei buchi di sicurezza tappati.
Abituarsi a sapere quali software vengono utilizzati sui server in produzione e sapere che è fisiologico doverli aggiornare è fondamentale per un approccio sicuro all'uso di Linux su server pubblici.

Ogni sistema Linux DEVE (dovrebbe?) essere aggiornato appena dopo l'installazione ed essere mantenuto costantemente aggiornato, almeno per i programmi che offrono servizi accessibili dalla rete.
Ogni distribuzione Linux seria prevede il rilascio regolare di pacchetti di aggiornamento (alcuni li chiamano "errata") per il software fornito con i CD ufficiali.

Possono essere diversi gli strumenti utilizzati in diverse distribuzioni (i principali sono: apt per Debian e derivate, yum per Fedora e derivate, swaret per Slackware, yast2 per Suse, urpmi per Mandrake...) ma simile è la loro logica: permettere l'aggiornamento, anche automatico, di tutti i pacchetti installati sul sistema, appoggiandosi a mirror pubblici ufficiali.
In linea con la logica conservativa dei sistemi di pacchettizzazione del software su Linux, gli aggiornamenti generalmente non generano disservizi:
- Se si sono dipendenze, queste vengono gestite coerentemente;
- I file di configurazione modificati dall'utente non vengono sovrascritti;
- I servizi vengono patchati e riavviati;
- Tutto funziona esattamente come è giusto che funzioni (e non si deve riavviare il sistema se non per l'aggiornamento del kernel stesso).

E' possibile valutare e decidere, sulla base della criticità, del numero e di quanto sia aderente agli standard della propria distribuzione, se gestire in modo automatico gli aggiornamento (tipicamente tramite schedulazione notturna) o farlo manualmente.
In ogni caso è buona norma, soprattutto se si devono amministrare più server Linux, avere in un proprio repository locale un mirror con tutti gli aggiornamenti che vengono rilasciati.
Fa risparmiare parecchio tempo e, se ben mantenuto, facilita l'ordinaria amministrazione e l'aggiornamento dei server.

Selezione dei servizi da avviare su Linux

Autore: al - Ultimo Aggiornamento: 2005-05-06 12:56:21 - Data di creazione: 2003-05-07 12:53:52
Tipo Infobox: TIPS - Skill: 3- INTERMEDIATE

Ogni distribuzione Linux installa una quantità di servizi che vengono automaticamente avviati al boot.
Alcuni sono necessari per il funzionamento generale del sistema, altri funzionali ai servizi che il server deve offrire, alcuni possono essere inutili per la sua attività e quindi andrebbero disattivati.
L'amministratore del sistema, a seconda della distribuzione usata, ha a disposizione diversi strumenti per gestire quali servizi far avviare al boot. Questi possono essere tool grafici, integrati nelle interfacce di amministrazione di default o comandi shell e variano:
Su Fedora, RedHat e derivati: ntsysv, chkconfig e tool grafico system-config-services
Su Debian: update-rc.d
Su Suse: chkconfig e Yast2
Su Mandrake: chkconfig e Mandrake Control Center
Su Gentoo: rc-update
Strumenti di ammnistrazione generici come Webmin o Linuxconf permettono altresì la gestione dei servizi da avviare ai vari run level del sistema.

Segue una lista, non completa, dei principali servizi che si trovano di default su installazioni Linux, alcuni nomi sono comuni anche in altri Unix. Viene indicato quando è il caso di disattivarli e quando sono sempre necessari, ovviamente sono indicazioni di massima, che vanno adattate alle singole situazioni.
E' basata sui servizi di una RedHat ormai datata, su nuove e altre distribuzioni possono variare i nomi e la quantità, ma in questo caso è importante considerare quali sono i servizi strettamente indispensabili.
anacron Controlla il demone di pianificazione anacron - Comodo su workstation, inutile su un server
apmd Controllo dell'alimentazione e del login - Utile in un portatile  
arpwatch Monitora le variazioni di arp entry. Utile per individuare azioni di arp poisoning
atd Controlla il demone at - Evitabile in un server
autofs Controlla il demone per l'automount di Filesystem - Utile in una workstation
crond Controlla il demone di pianificazione di sistema cron - Sempre attivo
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  
(x)inet Superdemone Inet - Da attivare solo se configurato per lanciare altri servizi (telnet, ftp, ecc.)
innd Server News - Solo su server news
keytable Controlla il caricamento della mappa di tastiera - Sempre attivo
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 su un server
lpd Controlla i servizi dello spooling di stampa - Da evitare su un server  
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 usano FS di rete
network Controlla l'avvio e l'arresto dei sistemi di rete - Sempre attivo
nfs Controlla i servizi del Network File System - Solo su server NFS
nfslock Controlla i servizi del Network File System - Solo su server NFS
pcmcia Controlla i servizi delle schede per computer portatili - Solo su portatili
portmap Controlla i servizi per la procedura di chiamata remota - Necessario per NFS, NIS+ ecc.
postgresql Controlla il demone di PostgreSQL database - Solo su un SQL Server
random Controlla la generazione dei numeri casuali - Sempre attivo
routed Controlla un RIP router daemon - Solo su un router, se serve
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 file server CIFS-SMB
snmpd Controlla il demone del protocollo Simple Network Management - Utile per monitoring  
syslog Avvia e arresta i servizi di logging di sistema - Sempre attivo
xfs Avvia e arresta il server font X11 - Necessario per l'uso di Xwindows
*bind Controlla i servizi di binding NIS - Solo su sistemi NIS

Esempi di customizzazione del sistema

Autore: al - Ultimo Aggiornamento: 2005-05-06 13:13:05 - Data di creazione: 2002-10-13 22:25:56
Tipo Infobox: TIPS - Skill: 3- INTERMEDIATE

Esempi di customizzazioni post-installazione praticabili su sistemi Linux - Unix.

Sincronizzare l'ora con un time server
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, o un ntp server Linux) e usarlo come time server da parte di tutti gli host.
Su Linux il comando ntpdate time.server.com (presente nel pacchetto ntp-*.rpm|dep ) esegue la sincronizzazione dell'ora locale con quella di time.server.com.
Si consiglia di crontabbare questo comando e di eseguirlo ad ogni boot.

Redirezionare le mail per root
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, oppure aggiungere a /etc/alias una riga tipo: root: [email protected].

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 esistono comodi e rapidi strumenti che analizzano i log di sistema e mandano, per esempio, una mail di report. Uno dei più usati è Logwatch installato di default in qualche distribuzione, che genera un report quotidiano sullo stato del sistema e lo invia via mail a root (altro buon motivo per leggere le mail di root).

Se si vuole procedere con una soluzione custom, segue 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 con mail root < /home/getdata/nomefile):

#!/bin/sh
home=/home/getdata
file=$(date '+%Y-%m-%d')
touch $home/$file
/bin/uname -a >> $home/$file Nome del sistema
/bin/df -k >> $home/$file Spazio su disco disponibile
/bin/netstat -rn >> $home/$file Tabella di routing
/sbin/ifconfig >> $home/$file Statistiche su interfacce di rete
/bin/netstat -lp >> $home/$file Programmi con porte aperte
/bin/netstat -s >> $home/$file Statistiche sul TCP/IP
cat /etc/resolv.conf >> $home/$file Nameserver utilizzato
cat /etc/hosts >> $home/$file Mapping statici nome host - IP
ps -adef >> $home/$file Processi in esecuzione
/sbin/iptables -L -n -v >> $home/$file Stato del firewall
/usr/bin/who >> $home/$file Utenti connessi al sistema
/bin/cat /root/.bash_history >> $home/$file History dell'utente root
/usr/bin/sar -A >> $home/$file
Se è installato sar, fornisce numerose statistiche sull'utilizzo delle risorse

Linux security check-list

Autore: al - Ultimo Aggiornamento: 2002-10-13 22:54:54 - Data di creazione: 2002-10-13 22:54:54
Tipo Infobox: DESCRIPTION - Skill: 4- ADVANCED

Riassumiamo qui una serie di configurazioni e ottimizzazioni post-installazione che possono aumentare il livello di sicurezza del sistema.

Non ci addentriamo nei particolari, ci si limita a dare indicazioni operative, 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!).

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 da floppy o CDROM estranei. 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 forzando a 8 il numero minimo di caratteri della password con PASS_MIN_LEN 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.

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?

Restrizione /etc/aliases - PARANOID - DISFUNCTION?
/etc/aliases gestisce gli alias di posta, spesso di default si forwardando a root la posta di altri 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= e assicurarsi che lilo.conf sia leggibile solo da root.
Se si usa grub aggiungere a /etc/grub.conf la riga password  e assicurarsi che grub.conf sia leggibile solo da root o, meglio, usare l'opzione password --md5  

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! - PARANOID
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
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 syslog 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 - DISFUNCTION?
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.

Privacy Policy