OpenSkills Documentazione basata su Openskills.info.
Distribuito sotto licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo:
- E' possibile distribuire e utilizzare liberamente questo documento;
- Si devono mantenere i crediti a OpenSkills;
- L'uso per scopi commerciali va concordato con OpenSkills;
- Eventuali opere derivate devono mantenere questa licenza.

Introduzione a Unix e OpenSource - Domotica 3

Web Version
Print Version
Esercitazioni (Risposte)
Esempi di configurazioni

Introduzione a Unix e OpenSource - Domotica 3

Questo è il modulo Introduzione a Unix e OpenSource del corso Domotica 3.

Programma

Linux - Introduzione e Installazione

Il variegato mondo Linux.
I riferimenti, le filosofie, lo spirito, il business.
La scelta delle distribuzioni, la pianificazione dell'installazione.

Obiettivo:
Conoscere il mondo, le logiche, i riferimenti di Linux e l'OpenSource.
Scelta della distribuzione e dell'hardware.
Installazione di Linux.

Storia di un pinguino e altri animali liberi

Storia di Unix e Linux. Il modello OpenSource. GPL e licenze aperte. Statistiche sulla diffusione.

Kernel, dialetti e distribuzioni

Il kernel. I dialetti Unix. Le distribuzioni Linux.

Partizionamento di un sistema Linux

La struttura del filesystem. Fdisk e diskdruid. Policy di partizionamento.

Installare Linux

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


Primi passi su un sistema Linux

Le procedure di login e logout.
La differenza fra shell e ambiente grafico.
Riferimenti per trovare documentazione e risorse su Linux.

Obiettivo:
Eseguire il login sul sistema.
Usare shell e ambiente a finestre.
Trovare documentazione.

Login sul sistema, utenti normali e root

Procedure di login e logout. Root e altri utenti. Acceso remoto via telnet.

Introduzione alla interfaccia testuale: la shell

Definizione di shell. Panoramica delle shell più diffuse. Introduzione alla bash.

Introduzione all'interfaccia grafica: X Window System

Introduzione all'uso e alla comprensione delle interfacce grafiche a finestre di Linux

Istruzioni e documentazione su Linux

Le risorse online [siti e mailing list , Libri e riviste] - Man, info, /usr/docs

Linux Software

Risorse e informazione su dove trovare software per Linux


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.


Assegnazione di IP e nomi in una LAN

IN questo capitolo si valutano le possibilità di usare Linux come server DHCP e come DNS resolver per una rete interna

Obiettivo:
- Conoscere e configurare un server DHCP
- Configurare un DNS resolver server
- Configurare il DNS per una rete interna

DHCP server

Protocollo, installazione, configurazione ed uso di un server DHCP (ISC)

Installazione e gestione di BIND

Installazione di BIND tramite RPM e sorgenti, file installati e posizioni. Gestione del servizio.

Configurazione di BIND

Configurazione di BIND - In particolare la versione 9.x


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.


Usare Samba

Analisi della configurazione di Samba, gestione del servizio, reperimento documentazione. Utilizzo si Samba in ambienti misti.

Obiettivo:
- Installare Samba tramite rpm e sorgenti
- Capire la logica di smb.conf
- Gestire il servizio
- Utilizzare tool grafici per la configurazione
- Reperire informazioni in rete
- Conoscere le opzioni di configurazione avanzata di Samba
- Progettare una rete mista Unix/Windows
- Configurare un print server
- Diagnosticare problemi con Samba

File sharing in una rete locale

Visione d'insieme sul file sharing in LAN e le alternative possibili

Il protocollo CIFS/SMB

Common Internet File System / Server Message Block

Installazione e gestione di Samba

Installazione di Samba tramite RPM e sorgenti, file installati e posizioni - Gestione del servizio

Documentazione e tool di configurazione di Samba

Manuali, libri, documentazione online, risorse e tool grafici di configurazione su Samba

Configurazione di Samba

File di configurazione e settaggio dei parametri base e avanzati.

SMB troubleshooting

Utilizzo dei log, del debug e di altri strumenti di diagnosi.

Stampa e condivisione stampanti

La stampa su Linux e la condivisione delle stampanti in rete.

Reti miste Windows - Linux

Casi e situazioni comuni con rete miste Windows-Linux - WINS - PDC.

Samba security

Breve rassegna della security history, problematiche attuali


Mail server in una rete locale

Le problematiche e gli utilizzi di un server di posta interno.

Obiettivo:
- Configurare un server SMTP interno
- Configurare sistemi di mail retrieving
- Impostare soluzioni Anti Spam
- Configurare un antivirus su Linux

Il protocollo SMTP

Simple Mail Transfer Protocol: sintassi base

Installazione e gestione di Sendmail

Installazione di Sendmail tramite RPM e sorgenti, file installati e posizioni. Gestione del servizio

Configurazione di Sendmail

File di configurazione e settaggio dei parametri di Sendmail

Postfix

Installazione, configurazione, gestione

Soluzioni Antivirus

Rassegna delle soluzioni antivirus server based

Meccanismi Anti-Spam

Verifica relay e implementazione di sistemi anti-spam

Fetchmail

Overview e approfondimenti su fetchmail


Apache Web Server

Introduzione ai server web e al protocollo http.
Apache su Linux:
Installazione, gestione, configurazione base ed avanzata, configurazione dei moduli aggintivi.
Note sulla sicurezza e il design di una infrastruttura web.

Obiettivo:
- Conoscere i server web e l'http
- Saper installare e gestire Apache
- Saper configurare Apache
- Usare i moduli più importanti (SSL, PHP, Perl)
- Eseguire l'hardening di un server web

Il Web e i server Web

Definizione del Web, visione d'insieme sui server disponibili, statistiche.

I protocolli HTTP e HTTPS

HyperText Transfer Protocol: sintassi, headers, URI e methods. Introduzione a HTTPS.

Installare e compilare APACHE

Installazione e upgrade di Apache tramite package e sorgenti.

Principi di configurazione di Apache

Prima analisi di httpd.conf, settaggio dei parametri base. Tool grafici per la configurazione.

Gestione del servizio httpd

Avvio, chiusura, verifica del servizio, opzioni di invocazione.

Manuali, libri, risorse online su Apache

Documentazione e risorse su Apache.

Monitoring di Apache

Server-status, server-info, uso di netstat, top, vmstat, ldd, lsof, strace. Environment variables.

Analisi e gestione dei log httpd

Configurazione, analisi e gestione dei log di un server Web. Software di analisi dei log.

Elementi base della configurazione di Apache

Le direttive per la gestione della configurazione: IfModule, IfDefine, Include, Options e Overrides.

Default index e directory listings

Gestione della visualizzazione di directory. Definizione index predefiniti.

Configurazione di VirtualHost

Configurazione di Virtual Hosts named based e ip based.

Apache performance tuning

Suggerimenti e informazioni per migliorare le performance di Apache.

Design di una infrastruttura Web

Design della rete, dei server, dei servizi.


Condivisione dell'accesso ad Internet

Conoscere e implementare le soluzioni di accesso condiviso ad Internet con Linux

Obiettivo:
- Installare, configurare e usare le IPTABLES per nattare la rete locale
- Installare, configurare e usare Squid con filtri custom
- Installare e configurare strumenti di monitoraggio del traffico

Linux firewalling: Introduzione a Iptables

Overview, gestione, utilizzo di iptables su Linux per packet filtering

iptables - Linux natting e packet mangling

Utilizzo di iptables per natting, masquerading e mangling di pacchetti.

SQUID Proxy server

Installazione e configurazione del proxy server Squid

Traffic monitoring

Tools per il monitoraggio del traffico IP


Principi di sicurezza su Linux

Visione d'insieme e approfondimenti sul mondo della sicurezza Linux: Le problematiche, i riferimenti, la documentazione, le minacce, gli strumenti di difesa, i software OpenSource più comuni.

Obiettivo:
- Avere le idee chiare sulle problematiche di sicurezza di un server in rete;
- Conoscere le minacce e sapere come afforntare;
- Utilizzare i software più comuni relativi alla sicurezza.

Link e documentazione sulla security

Libri, risorse, siti sulla sicurezza

Introduzione alla sicurezza

Introduzione alle problematiche di sicurezza su Internet

Network sniffing: strumenti e tecniche

Teoria e pratica sulla subdola arte dello sniffing. Anti-sniffer tools. Arp spoofing e tecniche di prevenzione.

Network scanning: strumenti e tecniche

Strumenti e tecniche di network e vulnerability scanning. Information gathering.

Passwords e password cracking

Scelta di password sicure e metodi di password cracking.

Linux e la sicurezza fisica

Problematiche di sicurezza su server fisicamente non protetti

Intrusion detection e analisi dei log

Overview sugli strumenti di intrusion detection e analisi del sistema

Attacchi DOS

Overview su Denial Of Service attacks e sui DDOS

Rootkits

Analisi della logica dei rootkit e dei metodi per individuarli - chkrootkit

Linux VPN

Le soluzioni VPN disponibili su Linux. Teoria e implementazione.

Disaster recovery

Backup e disaster recovery



Linux - Introduzione e Installazione

Linux, da alcuni chiamato GNU/Linux, è un sistema operativo dalle caratteristiche uniche:
- si può liberamente utilizzare, senza pagare licenze d'uso,
- si può liberamente adattare alle proprie esigenze e, sapendo come, modificare,
- è realizzato da un numero imprecisato di persone, società, enti distribuiti su tutto il pianeta,
- è un colossale progetto condiviso di sviluppo software.
- funziona bene, sia su server che su computer desktop.
Linux è composto da un kernel, il cui sviluppo è coordinato da Linus Torvalds, da vari tool e programmi del progetto GNU e da altri software rilasciati con licenze Open Source e in vario modo "impacchettati" dai produttori delle varie distribuzioni.
Approfondimenti in: Kernel, dialetti e distribuzioni

La sua storia è legata a quella del software libero ed è popolata da protagonisti i cui nomi, nell'ambiente, sono piuttosto noti.
Per ragguagli consultare: Storia di un pinguino e altri animali liberi

L'installazione di Linux è ormai una pratica semplice grazie al lavoro svolto dalle varie, diverse, distribuzioni, con cui Linux si può presentare.
Procedure e riferimenti in: Installare Linux

Le uniche, minime, complicazioni si possono avere quando si deve installare Linux su un sistema in cui si vuole mantenere Windows.
In questo caso è necessario avere delle partizioni libere su cui operare e il processo di ripartizionamento del sistema può, per i neofiti, comportare preoccupazioni e problemi.
Per approfondimenti:  Partizionamento di un sistema Linux


Storia di un pinguino e altri animali liberi

Storia di Unix e Linux. Il modello OpenSource. GPL e licenze aperte. Statistiche sulla diffusione.

Storia di Linux, Software Libero e OpenSource

Linux  
Linux nasce nel 1991 ad opera del giovane programmatore finlandese Linus Torvalds.  
Era un clone di Minix, un sistema operativo tipo Unix basato sui comuni processori Intel.  
La sua diffusione e crescita e' stata aiutata dal fatto di essere rilasciato con licenza GPL.  

FSF, GNU e GPL  
La GPL (General Public License) e' un modello di licenza software in cui vengono dati agli utenti diritti e liberta'.
E' alla base del progetto GNU della Free Software Foundation (FSF), creata nel 1985 da Richard Stallman.  
GNU (Gnu Is Not Unix) doveva essere un sistema operativo totalmente libero basato su licenza GPL.  
La GPL offre agli utenti 4 livelli di liberta' di utilizzo del software e del suo codice:  
0 - Liberta' di usare il programma, per qualsiasi scopo.  
1 - Liberta' di accedere al codice sorgente, studiare come funziona e adattarlo alle proprie necessita'  
2 - Liberta' di copiarlo e distribuirlo  
3 - Liberta' di migliorarlo e ridistribuirlo in modo che l'intera comunita' possa beneficiarne.  
Molta liberta' per gli utenti e vari obblighi che chi usa, modifica e rilascia lavori derivati:  
- mantenere sotto gli stessi termini il proprio software derivato, nel momento in cui lo si cede o distribuisce;  
- indicare sempre licenza e autori originali;  
- mettere a disposizione il codice sorgente.


Breve storia di Linux

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-21 19:32:37

La storia di Linux è la storia del più colossale progetto di sviluppo condiviso di software di tutti i tempi.
Sotto la direzione di Linux Torwalds quello che inizialmente doveva essere un programma sviluppato ad uso personale è diventato il più noto risultato di un modello di sviluppo basato sulla disinteressata collaborazione di migliaia di sviluppatori tramite Internet.
E' una storia relativamente breve, perchè in campo informatico tutto accade velocemente e perchè la collaborazione creativa di tante persone, se ben coordinate, ha un potenziale enorme.

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

5 Ottobre 1991 - Nello stesso anno viene rilasciata la versione 0.02. Il post su usenet che ne annuncia la presenza è diventato un classico.

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

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

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

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

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

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

1999 - Dopo lunga attesa il kernel 2.2 vede la luce, un passo avanti notevole. Nel pieno del boom della new economy si quotano al Nasdaq con successo società che basano il loro business interamente su Linux come RedHat, Va Linux e Caldera (che, paradossalmente, dopo alcuni anni, movimenti societari e il cambio di nome in Sco Group, diventerà uno dei peggiori nemici del pinguino).

2001 - Agli inizi dell'anno, dopo varie pre-version, su kernel.org appare l'immagine da 19.788.626 byte del 2.4.0 La  prima release di un altro stable thread, con un maggiore e più ampio supporto di hardware di livello enterprise.

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

2003 - Le guerre si combattono per il petrolio e, più sotterraneamente, per il controllo dei computer. Il 2003 sarà ricordato anche per l'anno di SCO e dei suoi attacchi a Linux e al mondo OpenSource, consequenziali ad una azione legale intrapresa contro IBM.
Le modalità degli attacchi, la loro natura, il modo con cui si cerca creare FUD intorno a Linux (Fear Uncertainty and Doubt) sono sintomo di interessi che vanno oltre la protezione di presunte proprietà intellettuali per parti di codice che vengono nominate ma non mostrate sembrano delinearsi come un banco di prova decisivo per la definitiva affermazione di Linux anche sul lato desktop e per un cambio paradigmatico su come viene valorizzato e diffuso il software.
Tecnologicamente la strada è chiara e le carte sono vincenti: Linux e tutto il software OpenSource sono decisamente all'altezza sia sui sistemi di fascia alta che sui desktop, oltre ad essere presente nel cuore invisibile di innumerevoli device elettronici.

2004 - Sgonfiato, anche se non concluso, il caso SCO, nuove minacce si profilano all'orizzonte di un pinguino che continua a diffondersi e conquistare nuovi territori: in particolare leggi draconiane sui brevetti, che permettono di brevettare indiscriminatamente algoritmi, soluzioni e idee informatiche triviali e ambiamente diffuse, o soluzioni tecniche tali da rendere impossibile o soggetta a una fee arbitraria l'interoperabilità fra sistemi operativi.
Intanto il kernel 2.6 si diffonde e viene usato nelle principali distribuzioni, sempre più user friendly e pronte per il desktop. E' una guerra, più o meno dichiarata, i cui i nemici spesso mostrano una faccia sorridente e colpiscono su campi e livelli che non hanno nulla a che vedere con l'innovazione e l'eccellenza tecnica.


Piccola guida alle licenze

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Luca 'pillolinux' Bove - Ultimo Aggiornamento: 2004-05-21 19:33:35

Uno degli aspetti più confusionari del fenomeno open source é la proliferazione di differenti licenze che regolano la proprietà intellettuale e la distribuzione del software. In questo articolo presenteremo una piccola guida sulla terminologia utilizzata nelle licenze che accompagnano i vari software free. In particolare illustreremo i seguenti termini:
->Software Proprietario
->Shareware
->Freeware
->Free Software
->Public Domain Software
->GNU General Public License (GPL)
->GNU Lesser General Public License (LGPL)
->Open Source
->Community Source

Software Proprietario
E' il modello di licenza più tradizionale per il software commerciale: nessuna persona ha il permesso di esaminare il codice sorgente per il prodotto. L'unica eccezione è un cliente disposto a pagare un cifra, spesso esorbitante, come "tassa" per avere a disposizione il codice sorgente. Ma anche se comprate il codice sorgente per tale prodotto, non potrete pubblicarlo o sarete fuorilegge poiché la licenza per il codice sorgente proprietario non può essere ceduta. E inoltre i vostri diritti di modificare il codice sorgente per meglio adattarlo alle vostre esigenze sono ristretti.

Shareware
Con la licenza Shareware, il modello tradizionale è (leggermente) rovesciato. Vale la filosofia "prima prova, poi paga". Il software è distribuito gratuitamente, e ve lo potete passare l'un l'altro. Gli utenti dei prodotti shareware sono poi legalmente tenuti a pagare un compenso allo sviluppatore per la registrazione; questo compenso alcune volte è libero altre volte è predeterminato. Una variante di questa licenza, chiamata "crippleware" (si potrebbe tradurre software "storpiato"), fa in modo che il software non abbia tutte le funzionalità abilitate sino a quando non viene pagato il compenso per la registrazione. Un'altra tipica variante è la shareware a scadenza: il programma funziona solo per un determinato periodo di tempo, la durata viene estesa solo se viene pagato il compenso.
Il codice sorgente non è tipicamente incluso con i programmi.

Free software
Il free software (software libero) è il software in cui si ha pieno accesso al codice sorgente. Esiste una vera e propria organizzazione politica che ne difende i diritti: il Movimento per il Free Software (http://www.fsf.org). Sotto il modello di licenza "free software" è un vostro sacrosanto diritto usare il software, modificarlo e ridistribuirlo con ogni mezzo a disposizione. Ma è anche possibile far pagare dei soldi per la distribuzione.
Comunque, dietro a questi diritti ci sono dei doveri: tutte le modifiche devono essere accessibili a tutti e nessuno può restringere i diritti di distribuzione libera.
La maggior parte dei sostenitori del free software, crede che l'informazione, e specialmente il codice sorgente, debba essere libera. Nei paesi di lingua inglese la parola "free" racchiude i termini di libero e di gratis, e si usa dire che il free software va inteso come "libero discorso" ("Free Speech") e non come "birra gratis" ("Free Beer"). I seguaci del Free Software difendono la frase principale della copyleft che recita: "coloro che ridistribuiscono il software, con o senza modifiche, devono lasciare intatta la libertà di effettuare ulteriori copie e modifiche" ("anyone who redistributes the software, with or without changes, must pass along the freedom to further copy and change it").

Software di Pubblico Dominio
Il software di pubblico dominio è sia software gratis (freeware) che free software, ma meno restrittivo. Esso può essere usato, modificato o ridistribuito con ogni mezzo. Però voi siete liberi di fare cambiamenti al software e rendere tali modifiche proprietarie. Potete anche scegliere di far pagare il codice o i suoi derivati senza fornire alcun accesso al codice sorgente. In ogni modo, chiunque può fare uso (e abuso) di software di pubblico dominio, senza consultare alcun uomo di legge.

GNU General Public License (GPL)
Dal 1984, lo scopo del progetto GNU è stato di sviluppare un ambiente UNIX completo che comprenda la licenza dei free software.
Sebbene una parte del codice utilizzato nel progetto GNU ricada nell'ambito del pubblico dominio, la grande maggioranza ha licenza GPL. GPL è una specifica implementazione del copyleft, gioco di parole che indica il contrario di copyright:
right=destra left=sinistra ma anche right=diritto left=permesso, quindi copia permessa.
Il software copyleft deve essere libero, deve includere il codice sorgente e deve essere modificabile e ridistribuibile senza limitazioni. La GPL proibisce i brevetti proprietari relativi alla modifica del software, proibisce le royalties e richiede che gli stessi termini di libera distribuzione siano allegati quando si ridistribuisce il software o anche derivazioni di esso. Per questo motivo la licenza è anche conosciuta come "licenza virus". Questa licenza non è ristretta solo ai progetti GNU, chiunque può creare del software e rilasciarlo con questa licenza.
Ad esempio il popolare compilatore GNU e gli strumenti associati hanno licenza GPL. Questo significa che tutti coloro che effettuano dei miglioramenti al compilatore GNU devono poi dare il nuovo codice alla comunità. E' importante comunque notare che questo non significa che il software costruito con il compilatore debba essere free.
Quindi e' legale utilizzare uno strumento free software per produrre software proprietario.

GNU Lesser General Public License (LGPL)
La LGPL è usata come licenza per il free software in modo che quest'ultimo possa essere incorporato sia nel software free sia in quello proprietario. Si puo' dire che sia il fratellastro più debole della GPL.
Le regole sono sostanzialmente le stesse, tranne una: è eliminato l'obbligo che le proprie estensioni al software siano aperte. In questo modo i componenti LGPL rimangono sempre free software, ma possono essere inclusi in un pacchetto software proprietario.
La GPL è stata progettata per scoraggiare la creazione di software proprietario e incoraggiare il free software. Se volete costruire il vostro codice intorno a una libreria o pacchetto GPL, sarete poi costretti a dare il codice sorgente delle vostre modifiche. Questo non è un problema con un pacchetto LGPL, come la libreria GNU C, che può essere legalmente inclusa in un software proprietario.
Questa licenza viene in genere utilizzata per le librerie, che sono sfruttate nella produzione di software.
Ricapitolando il software GPL non può essere incluso in software proprietario, mentre quello LGPL si. In entrambi i casi si possano comunque utilizzare (ma con la GPL non includere) in prodotti proprietari.

Open Source
Questo termine ha creato molta confusione. Sebbene abbiamo iniziato l'articolo con questa parola, non c'é alcuna chiara definizione per "software open source" e nessuna licenza standard. Diverse società usano il termine "open source" in modi completamente diversi. L'idea è simile a quella del free software (si può generalmente usare, modificare e ridistribuire il software), ma c'é poca enfasi sui diritti del software di essere libero. Questo perché le grandi società mostrano grandi riserve quando si tratta di perdere il controllo del loro software. C'é anche una definizione di Open Source che si può trovare a http://www.opensource.org (la traduzione italiana si trova in http://www.apogeonline.com/openpress/op_definition.html ). Nonostante la proliferazione di diverse licenze che rientrano nella cerchia dell'Open Source (una lista completa si può trovare in http://www.opensource.org/licenses ), in genere esse si avvicinano più alla licenza LGPL piuttosto che alla GPL. In altre parole se utilizziamo del software Open Source, lo possiamo in genere includere in codice proprietario.
Riguardo questa classe di licenza c'é stato un ampio dibattito tra i sostenitori del puro Free Software e quelli del più generico Open Source. In questo momento sembra prevalere quest'ultimo.


GNU e Open Source

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-03-27 22:41:32

Nel 1985 Richard Stallman, ex ricercatore del MIT, fondò la Free Software Foundation (FSF), finanziata prevalentemente da donazioni, alla cui base c'era il progetto GNU, che ambiva alla realizzazione di un sistema operativo free, libero di essere usato, studiato, modificato, distribuito.
Il software free, rilasciato con la GNU General Public Licence (GPL), in questo contesto, implica:
- Ridistribuzione Libera del software e del codice
- Il Codice Sorgente è disponibile per lettura, modifiche, analisi, controllo
- Chiunque può prendere del software libero e modificarlo come vuole, ma deve mantenere per il suo prodotto derivato la licenza GPL
- Il Copyright del software appartiene all'autore. Chi ne fa modifiche deve segnalare la fonte.
- Libero, free, non significa necessariamente gratis. Chiunque può vendere software free o servizi correlati al prezzo che vuole.

Linux è il più famoso progetto GNU, di fatto è composto dal kernel di Torvalds e da molte altre utility e programmi di base, ispirate agli equivalenti Unix.

Spesso associato al concetto di free software è quello di OpenSource le differenze sono apparentemente sottili ma ben precise. L'Open Source è stato definito e si è diffuso in tempi successivi per definire software rilasciato con modelli di licenza che permettono l'accesso e la modifica del codice sorgente.
Si basa su logiche pragmatiche, mentre il Free Software (così come descritto nella GPL) ha radici più etiche e filosofiche, anche se non escludono la commercializzazione e la vendita.
Per l'OSI (Open Source Initiative) si dovrebbe rilasciare il codice del proprio software perchè è una scelta sostenibile e valida, che ne aiuta la diffusione e il miglioramento, per la FSF il codice dovrebbe essere aperto per rispettare la libertà degli autori e degli utenti. Non esiste inoltre una licenza di riferimento dell'OSI, come può essere la GPL per la FSF, ma un elenco di licenze considerate compatibili per essere definite OpenSource.
Fra i fondatori dell'OSI figura Eric Raymond noto fra l'altro per aver scritto il libro/manifesto "The Cathedral and the bazaar" il cui percorso editoriale è emblematico su cosa può essere un modello di business basato sull'open source: il libro è liberamente disponibile, nella sua interezza, in rete e chiunque può leggerlo ma l'autore ha venduto i diritti di pubblicazione su carta alla O'Reilly (che ne vende parecchie copie).


Dati sulla diffusione di Linux

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2006-03-24 10:01:21

Non essendoci dati di vendita centralizzati è difficile valutare la diffusione di Linux.

Informazioni e indicazioni utili ma incomplete vengono date da Linux Counter, dove viene fatto un censimento (su base volontaria) sul numero di utenti Linux: nel Marzo 2006 risultano 138056 utenti registrati e 153627 macchine registrate.
Questa stima è ovviamente per difetto (la registrazione viene fatta sul sito stesso e molti che usano Linux nemmeno sanno della sua esistenza).
Il gestore di questo sito (ovviamente un Linux enthusiast) stima intorno a 29 milioni il numero effettivo di utenti Linux, sulla base di statistiche, proiezioni e analisi varie.

Altro indicatore interessante è Netcraft, che, pur senza fare riferimento a singoli OS, da indicazioni utili sui server Web utilizzati in rete. Qui domina Apache (che può girare sia su Unix vari che su Windows) con 51.810.676 siti web pari al 69,01% dei server web totali analizzati.

Ricerche varie fatte in passato sulla diffusione di Linux nel mondo danno risultati diversi:
- IDC ha stimato 1.300.000 server Linux consegnati nel 1999 e ha previsto uno share del 4% su totale dei computer sul desktop nel 2004.
- Dataquest ben più prudenzialmente stima in 543.778 il numero di server Linux consegnati nel 2001.
A titolo di curiosità Google, nel Maggio 2004 conta circa 115.000.000 pagine contenenti la parola Linux (erano nel 50.500.000 Gennaio 2002 e 64.300.000 nel Settembre 2003). Per confronto la parola Windows appare in 121.000.000 pagine (erano 65.900.000 a Settembre 2003).
Sempre nel Maggio 2004 esistevano 629 Linux User Groups (LUG).

Comunque si vogliano considerare questi numeri il dato certo è:
- La crescita nella diffusione di Linux è innegabile;
- Il suo utilizzo in ambiti aziendale, corporate e accademico sempre maggiore;
- La conoscenza delle sue potenzialità è sempre più precisa e consapevole.


Sistemi Operativi OpenSource (o quasi)

Tipo Infobox: ETCETERA - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-09-20 08:47:36

Linux non è l'unico sistema operativo Open source ma è sicuramente il più conosciuto.
Ne esistono molti altri in circolazione tra cui i dialetti *BSD (FreeBSD, OpenBSD, NetBSD) e GNU/Hurd, che costituisce il secondo sistema operativo "ufficiale" della FSF.
Lo stesso kernel di Mac Os X, Darwin, è open source (è basato su FreeBSD e Mach 3.0) ed esistono versioni open di sistemi del passato (ma non troppo) come Open BeOS o OpenVMS.


Kernel, dialetti e distribuzioni

Il kernel. I dialetti Unix. Le distribuzioni Linux.

Panoramica sulle distribuzioni Linux

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-03-23 18:20:13

Linux si presenta in multiformi e numerose distribuzioni, dai nomi a volte curiosi: Debian, Ubuntu, Mandrake, Fedora, Slackware che ormai sono noti e conosciuti da molti per quello che permettono di fare facilmente: installare un sistema Linux completo di software OpenSource in grado di placare la dieta informatica di ogni tipo di utente o sistemista.

Si consideri che il "Linux di Linus Torvalds" non è un sistema operativo completo come comunemente percepito, ma il semplice kernel, il cuore del sistema, che, a basso livello, si occupa della gestione diretta delle risorse hardware (CPU,memoria, dischi, interfacce, schede audio/video...).
Al kernel ogni distribuzione aggiunge tutto il software necessario per avere un sistema completo di programmi applicativi, utility e software lato server per gestire diversi servizi Internet.
Il panorama del software open source comunemente fornito in ogni distro prevede una grande varietà di programmi realizzati da persone, società ed organizzazioni diverse che riescono a interagire grazie a standard e librerie condivise.
Anche per questo molti preferiscono chiamarlo GNU/Linux poiché tutte le utility di base, dal gcc (compilatore di riferimento) alle utility tipiche del mondo Unix fanno parte del progetto GNU, ideato da Richard Stallman.

Le distribuzioni differiscono per:
- Numero e versioni dei programmi installabili;
- Versione del kernel utilizzata e modalità di pre-installazione (il kernel solitamente non viene compilato durante una normale installazione);
- Procedura di installazione (interfaccia utente e possibilità di definire opzioni e scegliere quale software installare);
- Organizzazione di file di configurazione, programmi, log nel file system;
- Configurazioni predefinite del software installato.

PRINCIPALI DISTRIBUZIONI
Red Hat
Red Hat è la più popolare distribuzione Linux e si adatta bene ad usi diversi (desktop, server, laptop) pur avendo una storia di sicurezza non certo esemplare. Pioniera nell'includere un meccanismo di update User Friendly e l'aggiornamento automatico tramite il RedHat Network. Ha introdotto il sistema di gestione di pacchetti software con estensione  .RPM che facilita installazione e aggiornamento del software.
Fornisce due linee principali di prodotto:
Fedora, distribuzione completamente libera, aggiornata spesso e sviluppata in collaborazione con la community, con tempi di vita relativamente brevi.
Red Hat Enterprise Edition, versione commerciale, con supporto online per assistenza e aggiornamenti a pagamento,  con tempi di vita lunghi e costo, non trascurabile, per singola licenza (in base alla possibilità di collegarsi al RedHat Network).

Debian
Distribuzione completamente sviluppata da una comunità che consta di migliaia di persone in tutto il mondo incarnando appieno lo spirito del Free Software. Fornisce un proprio sistema di pacchettizzazione simile all'RPM (pacchetti .DEB). Viene considerata per puristi ed esperti e risulta generalmente meno user-friendly e più stabile delle altre.
Ha tempi di vita decisamente superiori a quelli di altre distribuzioni free (spesso soggette ad aggiornamenti e cambi di versione frequenti) e per questo ben si presta per sistemi server dove la durata di vita del sistema è prioritaria rispetto alla necessità di software recente.

S.U.S.E.
Distribuzione nata in Germania, solida e ben accessoriata, RPM compatibile e user-friendly. Utilizza un software di gestione e configurazione (YAST) completo e piuttosto semplice, che può facilitare l'uso ad utenti non esperti.
Acquistata nel 2004 da Novell, Suse si propone come il più agguerrito concorrente commerciale di RedHat.
Viene fornita in diverse versioni:
Suse Linux Personal e Professional per il desktop (la versione Personal è liberamente scaricabile)
SuSE Linux Enterprise Server per ambienti enterprise, con costi di licenza superiori e supporto più duraturo.

Mandrake
In crescente diffusione, usa pacchetti simili a RPM (MDK) che sono aggiornati molto rapidamente. E' molto user friendly e probabilmente è una delle più adeguata per sistemi desktop. Prevede anche versioni server esplicitamente rivolte al mercato enterprise.

Slackware
Slackware è una delle prime distribuzioni, a differenza delle altre, è fortemente basata sulla attività di una singola persona, supportata comunque da una fedele comunità. Si distingue dalle altre per non usare package tipo RPM o DEB. E' essenziale nella sua logica e questo può essere gradito ai puristi e gli esperti ma risulta ostica per i principianti.

Gentoo
E' una distro relativamente recente ma a suo modo rivoluzionaria per il mondo Linux. E' fatta per essere compilata direttamente sul PC di installazione in ogni sua parte. Si basa su un sistema simile ai ports BSD basati su semplici file di testo con tutti i riferimenti su un programma/pacchetto in termini di nome, descrizione, caratteristiche, dipendenze e url per scaricare i sorgenti e procedure di compilazione.
E' decisamente per esperti, ma permette tuning e personalizzazioni notevoli.

Linspire
E' una delle distribuzioni più "commerciali", espressamente dedicata ad utenti non esperti che sono abituati a Windows. Incorpora e integra Wine e altri strumenti per rendere il sistema il più possibile simile a Windows, prevede un sistema di abbonamento online (Click'n'Run) tramite il quale si possono facilmente installare nuovi programmi. Non include nemmeno il compilatore gcc. Precedentemente chiamata Lindows ha dovuto cambiare nome in seguito a screzi legali con Microsoft.

ALTRE DISTRIBUZIONI
Il numero delle distribuzioni Linux supera le 300 unità, sviluppate in più di 50 nazioni diverse molte sono sfrozi collaborativi a livello mondiale), gli utilizzi sono svariati: molte sono "general purpose", alcune sono specifiche per il desktop, altre per il firewall, varie sono adatte per systemi embedded o incluse in network appliance di varia natura... Esistono inoltre distribuzioni specializzate per piattaforme non basate su processori Intel: PowerPC, sparc, alpha, motorola 68000, i390 e disribuzioni "Live" che possono essere utilizzate caricandole direttamente da un CDROM, senza installarle su Hard Disk.
Questo apparente caos e frammentazione, in realtà non devono fuorviare: le distribuzioni principali sono poche e da queste derivano gran parte delle altre, i punti in comune, inoltre, sono parecchi (kernel, software GNU, logica Unix, gerarchia del file system...) e un sistemista esperto non ha difficoltà a gestire una o l'altra.


Introduzione al Kernel Linux

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-03-23 20:06:05

Il kernel è il codice che gestisce le risorse presenti in un computer e le rende disponibili alle applicazioni con cui l'utente comunemente interagisce. In un sistema operativo, inteso in senso esteso, come può esserlo Windows completo di programmi accessori (Explorer, Internet Explorer, notepad e via dicendo), il kernel costituisce solo lo strato più profondo, quello che si occupa del "lavoro sporco" di interagire direttamente con l'hardware.
Il kernel si occupa principalmente di gestire:
- le comunicazioni con le memorie di massa (hard disk, floppy cdrom, dispositivi usb rimuovibili... ),
- i file system, cioè il modo con cui sono organizzate le informazioni sulle memorie di massa (fat, fat32, ntfs, ext3, reiserfs...),
- la memoria RAM, l'accesso dei singoli programmi alla stessa e il paging della memoria su hard disk,
- l'utilizzo della CPU e la condivisione della stessa fra i vari programmi,
- l'interfacciamento e la comunicazione con hardware vario (schede di rete, porte seriali, USB, parallele, schede audio, schede video ecc.

Le versioni del kernel Linux sono identificate con numeri a tre cifre separate da un punto (ed: 2.1.45) con una convenzione ben precisa.
Per esempio il kernel 2.4.15 ha:
2- Il major number, la serie principale. I kernel della serie 1.x sono ormai piuttosto vecchi e poco usati, quelli della serie 0.x sono ancora più vecchi e ormai rarità da collezionista (si fa per dire, dal sito ufficiale del kernel Linux sono ancora scaricabili.
4- Il minor number, il numero di versione principale. Se è pari il kernel viene considerato stable e pronto per sistemi in produzione, se è dispari lo si considera in development e da usare con cautela o per sperimentazione. Le release stable sono sempre figlie delle devel precedenti. Ad esempio il kernel attualmente considerato stabile, il 2.6, deriva dal 2.5 che era la versione in sviluppo mentre la 2.4 era quella considerata stabile. Solitamente nei kernel stable si tende a fare maintenance ed a implementare solo le feature strettamente necessarie, lasciando a quello in development lo sviluppo di nuove funzionalità.
15- E' la revisione (patch) corrente. Questo è un numero progressivo che parte da 0. Da una revisione alla successiva possono passare da pochi giorni a varie settimane.
Esistono inoltre varie patch temporanee, anche non di Torvalds stesso (comuni sono le -ac patch, di Alan Cox) che rappresentano stadi intermedi prima della release di una revisione definitiva.
Ha senso utilizzarle subito solo in caso di utilizzo di kernel con gravi problemi di sicurezza o stabilità (sul proprio sistema) che vengono risolte con le relative patch parziali.
Il kernel in development è attualmente composto da sorgenti realizzati da centinaia di programmatori e assemblati da Linus Torvalds che rilascia personalmente le nuove versioni.

Navigare e leggere il codice sorgente del kernel
Poter avere accesso completo al codice sorgente del proprio sistema operativo può essere per molti totalmente irrilevante ma per alcuni è una fonte inesauribile di studio, approfondimento e supporto allo sviluppo.
Esistono in rete progetti che favoriscono la possibilità di lettura ed analisi dei sorgenti di Linux, fra questi Cross-Referencing Linux.
E' un sito che permette il browsing all'interno del codice del kernel. E' particolarmente affascinante ed utile perchè, tramite una moltitudine di link, permette di correlare funzioni, variabili e strutture risultando piuttosto interessante, anche per il semplice curioso senza particolari cognizioni di programmazione in C.

Le discussioni sul kernel
Gli sviluppatori che affiancano Torvalds sono molti e tipicamente discutono e comunicano in una mailing list dedicata e piuttosto affollata: la linux-kernel mailing-list (è fortemente sconsigliato iscriversi, a meno che si sia direttamente coinvolti nello sviluppo del kernel.
Esistono in rete siti che riassumono le attività in corso sul kernel e le presentano in forme più accessibili a chi non è un kernel hacker:
Kernel Trap è un blog completo e aggiornato sugli sviluppi del kernel.
Kernel Traffic è una mailing list che riassume le principali discussioni su linux-kernel.
Kernel Newbies è un sito indicato per chi il kernel lo deve usare, compilare e imparare. Di fatto è il punto di partenza ideale per un sistemista Linux che vuole approfondire le sue conoscenze sul kernel.


Guida minima alla scelta della distribuzione Linux

Tipo Infobox: TIPS - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2006-03-24 12:43:11

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.


Distribuzioni Live CD

Tipo Infobox: DISTRO - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-12-19 18:38:44

Esistono distribuzioni che si presentano come un "LIVE CD" che permette l'esecuzione sul proprio computer di un Linux completo, che viene caricato direttamente dal CD-ROM e non ha bisogno di essere installato su Hard Disk.
In questo caso l'hard disk può essere assente o venir utilizzato solo per creare file temporanei, ed eventuali dati dell'utente.
Simili Live CD, che ovviamente richiedono l'impostazione del CDROM come device di boot principale, possono essere utili per operazioni di disaster recovery e, soprattutto, per provare sulla propria macchina un Linux senza di fatto doverlo installare sull'Hard Disk.
Una interessante applicazione di un LiveCD è quella specificatamente dedicata all'utilizzo di una macchina Linux come firewall. In questi casi basta un Live CD, che viene caricato al boot, e un floppy da cui caricare le impostazioni e le configurazioni specifiche: al termine del caricamento si potrà avere un firewall basato su Linux particolarmente sicuro, in quanto non presenta la possibilità di scrivere file da alcuna parte e, fatte salve adeguate regole di packet filtering, risulta praticamente impermeabile a molti tipi di attacco.

Fra queste distribuzione una delle più complete, interessanti ed efficaci è Knoppix che condensa in un singolo CD, 2Gb di software compattato che può essere eseguito e scompattato on-the-fly, dopo un rapido boot (nell'ordine di 2 minuti, dal Bios ad un KDE completo) direttamente da CD, senza scrivere un byte su hard disk e con attime capacità di riconoscimento dell'hardware locale.
Consigliato a chi vuole provare Linux o deve farne dimostrazioni pubbliche.


I costi delle versioni commerciali di Linux

Tipo Infobox: DISTRO - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-10-15 17:17:09

Questa è un sommario elenco dei prezzi delle varie distribuzioni Linux, così come esposti sui siti ufficiali.
Va vista come lista indicativa dell'offerta commerciale su Linux basata sui prezzi di listino online, ovviamente non comprende costi indiretti potenzialmente legati all'uso di Linux (assistenza, formazione, hardware ecc) e si riferisce alle versioni commerciali delle varie distribuzioni, dove generlamente viene fornito supporto e assistenza di livello enterprise.
Dove specificato "ISO Online" si indica che le relative ISO sono scaricabili da Internet (un buon sito è www.linuxiso.org ) e liberamente distribuibili.

Aggiornamento: 15 Ottobre 2004
Prezzi e condizioni possono essere riportati in modo inesatto o incompleto, si rimanda ai siti ufficiali per informazioni dirette.

REDHAT
http://www.redhat.com/apps/commerce/ - RedHat Store
Per i suoi prodotti commerciali RedHat offre diverse "edition" che fondamentalmente si differenziano per il livello di supporto, e diverse versioni per WorkStation o Server.
Esistono poi delle soluzioni per il desktop e per sistemi di managemnt e assistenza.
Red Hat Enterprise Linux WS (WorkStation) - Basic Edition: $179 - Standard Edition: $299
Red Hat Enterprise Linux ES (Enterprise Server) - Basic Edition: $349 - Standard Edition: $799
Red Hat Enterprise Linux AS (Advanced Server) - Standard Edition: $1499 - Premium Edition: $2499
RedHat Desktop - Proxy Starter Pack: $2500 (10 Licenze RedHat Desktop + Red Hat Network Proxy Server (include Red Hat Enterprise Linux AS, Premium Edition)
RedHat Desktop - Extension Pack: $3500 (50 Licenze RedHat Desktop aggiuntive)

SUSE
http://store.suse.com - SUSE Store
SUSE Linux 9.1 Professional: $89.95
SUSE Linux 9.1 Professional Update: $59.95
SUSE Linux 9.1 Personal: $29.95 - ISO Online
SUSE Linux Enterprise Server 9 - 2CPU: $389 - 16 CPU: $939

MANDRAKE
http://store.mandrakesoft.com/ - Mandrake Store
Su Mandrake Store esistono vari bundle che alla distribuzione base aggiungono hardware e gadget di varia natura. Vediamo i costi delle versioni essenziali, su CD o DVD e dell'inscrizione al Mandrake Club, da cui è possibile scaricare tutte le versioni desktop di Mandrake.
Mandrakeclub membership Silver 120,00 € / anno (Accesso alla PowerPack Edition e altri bonus)
Mandrakelinux 10.1 Community DVD: 54,00 € ISO Online
Mandrakelinux 10.0 PowerPack: 79,90 € (8 CD, versione completa di programmi accessori)
Mandrakelinux 10.0 Discovery: 44,90 € (2+1 CD, versione entry level)
MandrakeSecurity Multi-Network Firewall: 499,90 € (Firewall Enterprise)
Corporate Server 2.1 - Standard support: 749,90 € (Enterprise Server, esistono costi aggiuntivi per diversi livelli di supporto)
MandrakeClustering Pentium (1-16 CPU): 1.990,90 € (Versione per cluster enterprise)

LINSPIRE
Linspire fornisce il servizio online Click And Run (CNR) per rendere semplice l'aggiornamento e l'installazione di nuovi programmi. Questo servizio viene erogano tramite un abbonamento che può essere mensile o annuo e permette l'accesso anche ad ulteriori software commerciali per Linux (ai relativi costi).
Linspire 4.5: $59.95
Abbonamento CNR Warehouse: $49.95 / anno - (Servizio online di aggiornamento e gestione software)

SLACKWARE GENTOO DEBIAN e molti altri
Non esistono versioni commerciali di queste distribuzioni, è comunque possibile comprarne i CD dai siti ufficiali o da terzi, pagandone i materiali, il tempo e i costi di distribuzione in puro GPL style, in ogni caso questi contengono esattamente le stesse versioni scaricabili da Internet o reperibili in varie riviste del settore.


Partizionamento di un sistema Linux

La struttura del filesystem. Fdisk e diskdruid. Policy di partizionamento.

fdisk

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-08-14 11:24:17

Tool testuale con la possibilità di operazioni avanzate per il partizionamento e la manipolazione della partition table degli hard disk.
Presenta un'interfaccia a menu con la quale è possibile creare, visualizzare, modificare le partizioni del device specificato.

fdisk [ -l  ] [ -v ] [ -s partition] [ device ]
device Specificando solo il nome di un device (es: /dev/hda ) entra nella modalità menu per modificare la partition table del device
-l Mostra la partition table degli harddisk del sistema. Per ogni device indica le partizioni, la dimensione in blocchi, il filesystem e i cilindri utilizzati


Partizionamento di un sistema Linux

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2009-02-23 02:17:06

Durante l'installazione di una distribuzione Linux viene richiesto come partizionare gli hard disk, definendo dimensioni e tipo di file system.
Non è necessario avere una partizione già predisposta prima i iniziare, la fase di definizione delle varie partizioni necessarie per Linux viene gestita dal tool di installazione, ma si deve avere dello spazio libero (hard disk libero, spazio non partizionato o una partizione esistente che si puà cancellare (e dividere nelle partizioni che servono a Linux))

Il minimo partizionamento richiesto prevede:
- una partizione generale ("/" , la root directory) in cui vengono copiati tutti i file.
- una partizione di swap (non contiente file e viene usata solo come Virtual Memory, quando si esaurisce la RAM)

E' comunque consigliabile, almeno su un server, utilizzare partizioni indipendenti per diverse directory.
La decisione su come suddividerle e quali dimensioni assegnargli dipende dalle specifiche necessità del sistema.
Considerare che un eccessivo partizionamento aumenta la possibilità di sfruttare male la capacità dell'hard disk e rischiare che alcune partizioni si riempano al 100%.
Queste sono alcune directory che ha senso tenere su partizioni indipendenti da quella dalla root ( / ).
- /boot (partizione di boot, dove risiedono kernel e file di boot. Con BIOS vecchi deve stare nei primi 1023 settori dell'hard disk. 100 Mb di spazio possono bastare)
- /var (partizione in cui vengono messi file che cambiano di dimensione, tipicamente i log. E' utile averla su partizione indipendente per evitare che un aumento dei log inattesi riempa tutto il filesystem. Farla almeno di 100 Mb)
- /home (dove risiedono i file di tutti gli utenti. Può essere piccola e praticamente inutilizzata (mail, dns server) o molto grossa e piena di documenti (web, file server). Dimensionarla a seconda dell'uso della macchina)
- /tmp dove risiedono file temporanei.

In fase di partizionamento, oltre a decidere come partizionare gli hard disk bisogna assegnare ad ogni partizione un mount point.

Per esempio se abbiamo un hard disk da 10 Gb come primary master e lo vogliamo dividere in 6 partizioni, potremo ottenere:
PARTIZIONE  MOUNT POINT
/dev/hda1   /
/dev/hda2   /boot
/dev/hda3   /var
/dev/hda4   /home
/dev/hda5   /tmp
/dev/hda6   /SWAP

Notare che la partizione di SWAP non necessita di un mount point.

Per /dev/hda si intende l'hard disk Primary Master IDE. I numeri successivi indicano le partizioni all'interno dell'hard disk.

Gli hard disk IDE hanno i seguenti nomi:
Primary Master: /dev/hda
Primary Slave: /dev/hdb
Secondary Master: /dev/hdc
Secondary Slave: /dev/hdd
Le singole partizioni di un hard disk hanno nomi tipo:
- /dev/hda1 (prima partizione del primary master)
- /dev/hdc4 (quarta partizione del secondary master)

Considerare inoltre che si possono formattare le partizioni con un file system diverso.
Possiamo per esempio avere, nell'esempio sopra indicato, tutte le partizioni in ext3 (uno dei File System più usati su Linux) e la partizione /dev/hda4 ( dove viene montala la /home ) formattata in FAT 32 (File System di Windows 98, supportato anche da Linux).
Su una directory del filesystem Unix è possibile montare anche Network File System come SMB (Reti Windows) o NFS.


Swap e partizionamento su Windows

Tipo Infobox: ETCETERA - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-08-14 20:48:25

Su sistemi Windows lo swapping viene fatto su un file dedicato ("pagefile.sys"), presente nel normale file system mentre su Unix e Linux si dedica una partizione autonoma, che viene formattata indipendentemente.
Anche su Windows FDISK è il nome del più comune strumento per partizionare gli hard disk.
La versione per Windows è diversa e meno flessibile ma prevede le stesse funzioni di base.


Strumenti per partizionare l'hard disk

Tipo Infobox: TIPS - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-12 21:01:20

Esistono vari programmi sia su Linux che su Windows per gestire le partizioni degli hard disk. Alcuni di questi si limitano a preparare le partizioni in modo da poterle formattare con il file system che verrà usato dal proprio sistema operativo, altri, dal compito più delicato ed evoluto, permettono di cambiare le dimensioni di partizioni esistenti (senza danneggiarne i dati), in modo da creare spazio per nuove partizioni.

Durante l'installazione di Linux viene richiesto come partizionare i(l) propri(o) hard disk, in modo da definire cosa formattare e dove installare il sistema operativo, se preservare le eventuali partizioni esistenti (contenenti altri OS) o ripulire completamente gli hard disk.
Va considerato che se non si intende cancellare nulla e se non esistono hard disk o partizioni liberi, l'installazione non può essere eseguita, a meno che non si scelga la strada (non sempre disponibile) di installare Linux su una partizione Windows esistente.

Linux - Gli strumenti più usati per gestire il partizionamento su Linux sono:
- Fdisk - Diffuso tool testuale, simile all'analogo su Windows, che offre opzioni avanzate per il partizionamento.
- Diskdruid - Tool grafico fornito da RedHat, semplice ed intuitivo, è una alternativa funzionale a fdisk se non si ha bisogno di funzionalità avanzate. E' accessibile solamente durante la fase di installazione di RedHat.
- Parted - Oltre alle normali operazione di creazione e visualizzazione della partition table, questo programma permette di modificare le dimensioni di partizioni esistenti, anche formattate con file system non nativi Linux. E' fondamentale per liberare spazio su un hard disk completamente partizionato.

Windows offre una vasta scelta di soluzioni commerciali e alcuni strumenti free:
- Partition Magic - E' il software, commerciale, di gestione di partizioni più conosciuto e probabilmente più evoluto. Permette di ridimensionare, senza cancellare dati, partizioni formattati con tutti i più diffusi file system.
Alternativamente, esistono analoghi prodotti commerciali come: 7tools Partition Manager, Paragon Hard Disk Manager (assai simile). Hanno il vantaggio di funzionare sotto Windows ma la loro versione demo, generalmente, NON permette la modifica delle partizioni.
- Fips - Software free che permette il ridimensionamento di partizioni esistenti. Ha funzionalità essenziali e spesso è fornito con le distribuzioni Linux per creare spazio per una installazione. Basato su DOS.
- Ranish Partition Manager - Alternativa valida a Fips. E' anch'esso OpenSource e basato su DOS, pur avendo un'interfaccia testuale a finestre.


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

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2006-03-23 12:01:19

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

Tipo Infobox: DISTRO - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2006-08-23 00:56:40

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

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-09-20 11:13:35

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-12 21:37:27

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-09-20 11:44:54

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

Tipo Infobox: DISTRO - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-08-19 16:37:21

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.


Primi passi su un sistema Linux

Una volta installato Linux possiamo iniziare ad utilizzarlo, prendendo dimestichezza con le sue componenti fondamentali.
Alcuni aspetti dell'uso di un sistema operativo (SO) possono essere tanto comuni e conosciuti da apparire scontati. Lo sono, come sempre, solo per chi li conosce.

Accesso al sistema e utenti
Su ogni SO moderno è generalmente previsto che l'utente acceda al sistema tramite login e password. Possono inoltre coesistere diversi utenti, alcuni dei quali hanno poteri speciali di amministrazione (Administrator su Windows, root su Linux e Unix).
Su Linux è possibile accedere, via via interfaccia testuale che grafica, anche d un sistema remoto.

L'interfaccia testuale: la shell
Caratteristica alla base di ogni sistema Unix è la shell, un interprete dei comandi dell'utente con interfaccia a caratteri che di fatto, per la sua flessibilità, è alla base dell'intero sistema.
Esistono diversi tipi di shell, con sintassi e funzionamento leggermente diversi, su Linux è particolarmente diffusa la bash.
Avere dimestichezza con la propria shell è indispensabile per un amministratore di sistema.

L'interfaccia grafica: X Window System
Nel mondo Unix l'interfaccia grafica è gestita con X Window, un sistema client server dove il client è la normale applicazione che usa l'utente e il server si preoccupa di gestire l'output su Video. Linux ha 2 alternative principali per X: XFree86 e Xorg.
Esistono poi diversi Windows Manager, che gestiscono il sistema di finestre e menu, e pochi desktop manager (come Gnome, KDE, XFCE) che forniscono un ambiente desktop uniforme.

Documentazione
La migliore fonte di documentazione di un sistema Linux è il sistema stesso, sia da riga di comando che da ambiente grafico è possibile accedere a moltissime informazioni contestuali e complete. Abituarsi ad usarle e conoscere dove trovarle è fondamentale.


Software
Un sistema operativo senza software è come un cnalae televisivo senza programmi. La disponibilità di software per Linux è notevole e, per quanto normalmente gran parte di quello che serve è già disponibille con la proprio distribuzione, è sempre utile sapere dove trovarlo.


Login sul sistema, utenti normali e root

Procedure di login e logout. Root e altri utenti. Acceso remoto via telnet.

Il login su un sistema Unix/Linux

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-18 22:51:50

Linux, come ogni Unix, è un sistema operativo multiutente, dove differenti utenti possono avere, contemporaneamente, accesso al sistema avendo i propri dati, documenti e impostazioni completamente separati da quelli di altri utenti oltre ad avere la possibilità di accedere alla risorse del sistema simultaneamente ed eseguire i programmi disponibili.

L'accesso ad un sistema Unix può avvenire tramite un'interfaccia grafica a finestre, paragonabile a quella di Windows e basata sull'X Window System, o una interfaccia testuale, a riga di comando, tramite un programma che ha lo scopo di interpetare i comandi digitati dall'utente: la shell

Essendo un sistema operativo orientato alle reti, si può accedere a Linux, come ad altri dialetti Unix, sia direttamente tramite console (la tastiera direttamente collegata al computer) sia da una postazione remota, via rete.

L'accesso al sistema è subordinata all'inserimento, da parte dell'utente, di una login (nome utente) e della relativa password. Questa operazione di autenticazione dell'utente è detta login.
Il login può quindi essere eseguito in ambienti diversi, grafici o testuali da locale o da remoto ma ha sempre lo stesso scopo: permettere all'utnete di accedere ed interagire con il sistema dopo averne verificate le credenziali (login e password).

Il logout è esattamente l'opposto del login: se si è in modalità testuale si chiude la shell aperta con il precedente login, se si è in un ambiente grafico, si esce da questo. In entrambi i casi dopo il logout si ha la possibilità di ripetere una operazione di login, eventualmente con un nome utente diverso.

Per eseguire il login da remoto su un sistema Unix si utilizzano generalmente programmi con telnet (nome di un protocollo e del relativo comando, ampiamente usato, sopratutto in passato) o ssh (una alternativa a telnet con le stesse funzionalità ma la possibilità di criptare i dati in transito e quindi, di questi tempi, preferito al telnet).


Riavvio e chiusura del sistema

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-18 23:00:57

Eseguire lo spegnimento o il riavvio del proprio Linux da interfaccia grafica è intuitivo quanto su Windows: nel menu delle applicazioni, di solito, in basso a sinistra, esistono le adeguate icone.
Anche con Linux, come con Windows e tutti i sistemi operativi moderni, che fanno largo e costante uso dell'hard disk per scrivere file anche temporanei, è consigliabile evitare di spegnere brutalmente il computer direttamente con l'interruttore ed è meglio seguire la procedure di spegnimento "soft" prevista dal sistema.

I comandi per spegnere il sistema, operando in modalità testuale, sono vari, a volte sono semplici alias:
shutdown -h
halt
poweroff
init 0
(passa al runlevel 0, corrisponde ad un spegnimento del sistema).

Per riavviare il sistema si possono usare i seguenti comandi:
shutdown -r
reboot
init 6
(passa al runlevel 6, reboot)
In molte distribuzioni è attivata la combinazione di tasti CTRL+ALT+CANC, associata al comando "shutdown -t3 -r now" (o analoghi) che esegue un reboot entro 3 secondi.
Per disabilitare la possibilità di fare un reboot da console (anche senza essere loggati sul sistema!) con i tre famigerati tasti, si deve editare il file /etc/inittab.


Usare telnet

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-06-17 12:52:22

Per usare telnet (da prompt DOS, shell UNIX e qualsiasi altra CLI (Command Line Interface) che presenti questo comando) basta scrivere: telnet seguito dall'indirizzo o dal nome dell'host da raggiungere.
Per esempio: telnet www.whitehouse.gov

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

La porta a cui risponde un telnet server è la 23 (TCP) e viene data per sottointesa.
E' comunque possibile effettuare un telnet ad altre porte TCP e digitare direttamente dei comandi validi per il protocollo utilizzato dal server a cui ci si è connessi.
Per esempio, un sistema rapido, disponibile ovunque e piuttosto utile, per diagnosticare velocemente il funzionamento di un server web è scrivere:
telnet www.server.net 80
GET /
(o qualsiasi altro comando HTTP)
Premendo INVIO due volte si visualizza il codice html della pagina richiesta (l'home page, in questo caso) e ci si assicura che il server web sta rispondendo e non ci sono problemi di connettività a raggiungerlo.


Login remoto: telnet, ssh, X Window

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-06-17 13:15:05

Accedere a Unix in modalità testuale direttamente da console (tramite una tastiera direttamente collegata al computer) o da remoto, via rete, è fondamentalmente la stessa cosa e permette di operare con la shell in modo analogo.

Di fatto è molto più comune accedere a dei server da remoto che tramite console, che a volte viene usato solo per interventi straordinari o guasti, quando la macchina non è interconnessa in rete.
Il metodo più comune, in passato, per accedere ad una macchina Unix era tramite telnet.
Telnet è un semplice programma di terminale oltre ad essere il nome del protocollo che viene utilizzato da questo programma.
Il suo uso primario è quello di aprire connessioni su macchine remote per permettere il login e quindi accedere alla shell come se fosse un'operazione eseguita in locale.

Con telnet i pacchetti contenenti login e password passano in chiaro nella rete, con i relativi rischi in termini di sicurezza informatica (esistono sniffer specifici per sessioni telnet, che evidenziano le password senza nemmeno la fatica di andare ad analizzare i singoli pacchetti telnet).
Un' alternativa valida e ormai molto diffusa per l'accesso ad host remoti via command-line è ssh, con il quale i dati trasferiti vengono criptati.
Il protocollo SSH (ora giunto alla versione 2, sensibilmente più affidabile e sicura della versione 1) su Linux è generalmente implementato con il pacchetto openssh, che ha sia una componente client che una server.

E' possibile usare un sistema remoto operando anche in modalità grafica. Il sistema X Window, alla base dell'interfaccia grafica di Linux, di fatto è basato su una architettura client-server che rende possibile l'esecuzione di un programma su un computer remoto e la sua visualizzazione sul proprio schermo (normalmente server e client X operano sulla stessa macchina).
Esistono inoltre tecnologie che permettono la gestione dell'ambiente grafico fra sistemi operativi diversi:
- rdesktop è un client Linux per accedere ad un Desktop Remoto Windows.
- Vnc è una tecnologia, disponibile su tutti i principali sistemi operativi, per visualizzare l'output di un sistema remoto.
- NX è un sistema di ottimizzazione di X Window che permette l'accesso a sistemi Linux anche da macchine Windows.


Utente root e operazioni da superuser

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-06-17 13:46:18

Alcuni sysadm particolarmente sensibili a problematiche di sicurezza e controllo ritengono che non si dovrebbe mai amministrare la macchina come utente root, ma utilizzare esclusivamente un utente normale e, quando è necessario, "diventare" root per eseguire funzioni da superuser.

Con il comando su si può impersonificare (sapendo la password) qualsiasi utente (di default, se non viene specificato "su nomeutente", questo comando si utilizza per diventare root).
Se si è già loggati come root è possibile impersonificare qualsiasi utente senza dover digitare la password.
E' raccomandabile non permettere l'accesso remoto, via telnet, ssh o analoghi, direttamente all'utente root.

Il comando sudo permette di accordare a semplici utenti la possibilità di eseguire comandi che solo root potrebbe lanciare. Le policy su chi può fare cosa sono definite nel suo file di configurazione /etc/sudoers.
Quando si usa sudo viene richiesta la password dell'utente stesso (non quella di root), sempre se l'utente è autorizzato ad eseguire il comando richiesto.
Con sudo -s di fatto viene aperta una shell di root, dalla quale è poi possibile operare con i diritti del superuser.

Su alcuni sistemi, la password di root può essere disattivata e ogni attività da superuser viene fatta tramite sudo.


Introduzione alla interfaccia testuale: la shell

Definizione di shell. Panoramica delle shell più diffuse. Introduzione alla bash.

La shell: cosa è, come è fatta

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2007-02-23 15:45:37

Molti termini informatici hanno, non a caso, significati che sono direttamente correlati a quelli delle rispettive parole d'uso comune.
Il "kernel" di un sistema operativo è il nucleo, la parte interna, il nocciolo, quello, in termini informatici, che si occupa di lavorare a basso livello e gestire l'hardware e le sue risorse, la "shell", al contrario, è il guscio, la conchiglia, la parte esterna, quella a contatto con il mondo esterno, l'utilizzatore di un computer.

La shell è quindi l'interfaccia (testuale) tramite la quale l'utente può operare ed interagire con il sistema.
La shell, tecnicamente, è un normale programma che interpreta ed esegue i comandi dell'utente (viene chiamata anche Command Interpreter) permettendogli di eseguire altri programmi che accedono alle risorse hardware della macchina tramite le chiamate di sistema offerte dal kernel.

Su un sistema Unix la shell è fondamentale per moltissime attività , che vanno oltre la semplice interattività  con l'utente, avendo diverse modalità  funzionali:
- USO INTERATTIVO, il sistema attende i comandi digitati dall'utente, che possono redirezionare input ed output, è quello che normalmente si utilizza dopo il login e a cui ci si riferisce quando si parla di usare una shell;
- CONFIGURAZIONE della propria sessione, con cui definire variabili e parametri che vengono utilizzati in ogni interazione dell'utente con la macchina, viene fatto negli script di inizializzazione;
- PROGRAMMAZIONE utilizzando comandi di sistema e funzionalità  della shell è possibile realizzare piccoli programmi (script shell) in grado di automatizzare operazioni e reagire ad eventi.

Esistono diverse varietà  di shell, hanno sostanzialmente la stessa funzione ma si differenziano per funzionalità  e, in parte, sintassi dei loro comandi interni. Fra le shell più diffuse segnaliamo la Bourne Shell (sh), la Korn Shell (ksh), la C Shell (csh) e la Bourne Again Shell (bash), sviluppata dal progetto GNU, rilasciata con licenza GPL e particolarmente comune su sistemi Linux.


Usare la bash: tasti comuni

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-23 15:36:29

La bash presenta una serie di funzionalità molto pratiche che è fondamentale conoscere ed utilizzare regolarmente, in quanto rendono il suo utilizzo molto più comodo e rapido.
Tutte queste funzionalità di base vanno praticate direttamente più che lette o studiate.
Si invita il lettore quindi ad aprirsi una shell e provare "sul campo" quanto segue.

TAB Il tasto TAB è fondamentale quando su usa la bash: permette l'autocompletamento di comandi o nomi di file e directory. Abituarsi a premerlo uno o due volte in rapida successione per completare automaticamente un comando che si sta digitando o visualizzare tutti i comandi possibili che iniziano con le lettere inserite prima di "TABbare".
Oltre a velocizzare l'inserimento di comandi permette di essere certi della loro sintassi o della correttezza di nomi di file e directory inseriti.
FRECCIA SU - FRECCIA GIU Altri tasti da usare spesso. Premendoli è possibile spostarsi nella history dei comandi digitati precedentemente nella shell. E' comodissimo in molte occasione e permette di risparmiare tempo e di fare velocemente "prove e riprove" di comandi dati.
FRECCIA DESTRA - FRECCIA SINISTRA Permettono di muoversi all'interno della riga di comando corrente per modificarla o inserire del testo. Utili, per esempio, quando si deve cambiare leggeremente una riga di comando inserita precedentemente (e richiamata con FRECCIA SU).
SHIFT + FRECCIA SU - SHIFT + FRECCIA GIU Permette di visualizzare l'output della shell che ormai non è più visibile nella schermata corrente. In pratica si scrolla verticalmente, di una riga alla volta, il testo visualizzato nella sessione corrente.
SHIFT + PAGINA SU - SHIFT + PAGINA GIU Ottiene lo stesso effetto più rapidamente, eseguendo lo scroll di intere pagine alla volta invece che di singole righe.


Shell su Windows?

Tipo Infobox: ETCETERA - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-08-21 22:42:09

La shell è presente in ogni Unix, ma anche su Windows si può ricostruire il propro mondo shell.

Il vecchio DOS e il più recente prompt dei comandi Windows, seppur simili come aspetto (command line interpreter testuale) e in parte come funzionalità non danno un'idea completa di cosa è possibile fare con una shell evoluta o quantomeno Bourne-like.
E' possibile sentirne l'ebbrezza con l'ottimo CYGWIN,  che è molto di più di una shell, è un vero e proprio ambiente Unix, con tanto di compilatore, disponibile sotto Windows.
Può essere molto comodo per utilizzare comandi comuni e pratici tipici di un sistema Unix direttamente da una finestra Windows.


Quali shell esistono?

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-12 22:07:26

In linea con la natura multiforme e variegata di Unix, esistono molteplici shell, ognuna delle quali presenta caratteristiche e peculiarità proprie.

sh - Bourne shell, è disponibile su qualsiasi ambiente UNIX, quindi è la più utilizzata per creare script shell compatibili e cross-platform.
csh - C shell, prende il nome dal linguaggio di programmazione, ovviamente le funzionalità di tale shell derivano in modo diretto dal C.
bash - Bourne Again Shell. Una delle ultime nate, offre le stesse capacità della C shell, con l'aggiunta di alcune funzionalità come l'history dei comandi e la TABcompletion. E' una componente del progetto GNU come, come molti altri programmi, vengono ormai usati su altri Unix, anche commerciali.
ksh - Korn shell. Largamente diffusa è compatibile con la sh sulla parte di scripting ed ha tutte le funzionalità di interazione della csh.
tcsh - E' un'evoluzione della csh, con cui mantiene piena compatibilità e introduce feature come command line editing e name completion.
rsh - Restricted Bourne shell (da non confondere con l'omonimo comando). Una shelle con funzionlità minime ed essenziali.
jsh - Bourne Shell con Job control.
dtksh - Desktop Korn Shell.
rksh - Restricted Korn Shell.


Bash'em ALL!

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-23 15:35:52

Bash acronimo di Bourne Again Shell, è la shell di gran lunga più utilizzata in ambiente Linux. E' un componente chiave del progetto GNU e rimane disponibile su ogni Unix.

Alcune sue caratteristiche (presenti anche in altre shell):
- Possibilità di editare la command line
- TAB completion dei comandi
- Possibilità di definire alias
- History infinita dei comandi inseriti
- Funzionalità di scripting, funzioni condizionali e di ciclo.
- Possibilità di definire funzioni
- Possibilità di gestire array indicizzati di dimensioni infinite
- Gestione e controllo dei job
- Espressioni aritmetiche
- Caratteri jolly (metacaratteri) nella gestione dei nomi di file
L'uso e la pratica della bash sono l'unico vero modo per conoscerla e approfondirne le molteplici caratteristiche.

Sui sistemi Linux viene lanciata automaticamente dopo il login, alternativamente basta scrivere bash (trovandosi in un'altra shell) per eseguirla.


![numero] o ![stringa]

Tipo Infobox: BOFH - Skill Level: 3- INTERMEDIATE - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2003-11-27 17:36:03

Funzionalità della bash che permette di ri-eseguire un comando precedentemente lanciato e presente nella history.
E' possibile specificare un numero, per indicare una entry nella history, o una stringa, che permette di eseguire l'ultimo comando dato che inizia con la stringa indicata.

Tecnicamente definito event designator !, si occupa di recuperare una entry nella history di Bash in base alla stringa o al numero passati come "parametro":

root@Joker:/home/homer/python# ls -l hello*
-rw-r--r--    1 homer    users          48 Jun  9 14:30 hello.py
-rw-r--r--    1 homer    users          70 Jun  9 15:33 hello2.py

root@Joker:/home/homer/python# history
    1  ls -l hello*
    2  history

root@Joker:/home/homer/python# !1
ls -l hello*
-rw-r--r--    1 homer    users          48 Jun  9 14:30 hello.py
-rw-r--r--    1 homer    users          70 Jun  9 15:33 hello2.py
Viene indicato il numero 1 (UNO) e si esegue la entry numero Uno nella history

root@Joker:/home/homer/python# !l
ls -l hello*
-rw-r--r--    1 homer    users          48 Jun  9 14:30 hello.py
-rw-r--r--    1 homer    users          70 Jun  9 15:33 hello2.py

Viene indicata la lettera l (ELLE) e si esegue l'ultimo comando presente nella history che inizia con Elle

Tutto questo è piuttosto utile per recuperare comandi complessi inseriti in precedenza, evitando di riscriverli completamente.


Introduzione all'interfaccia grafica: X Window System

Introduzione all'uso e alla comprensione delle interfacce grafiche a finestre di Linux

X Window System

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-06-15 21:58:46

E' possibile operare su un sistema Linux in due modi: tramite una shell, con interfaccia testuale a caratteri, particolarmente comoda su server, o tramite un più accessibile ambiente grafico, con un mondo di finestre e icone gestite via mouse.

Il sistema grafico di Linux viene comunemente chiamato X (X Window System) che nel tempo è diventato lo standard GUI (graphic user interface) di Unix e Linux.
A differenza di Microsoft Windows in cui l'interfaccia a finestre è parte integrante del kernel, in Unix è un normale processo e viene trattato come tale, con i vantaggi (maggiore stabilità del sistema nel momento in cui si dovesse bloccare) e gli svantaggi (prestazioni penalizzate) del caso.

L'ambiente grafico X è composto essenzialmente da questi componenti:
Server X
E' il processo che si occupa di gestire il display, ovvero si occupa di far interagire l'utente con la GUI. Esistono molteplici server X, ma su Linux sono diffusi Xorg e XFree86.
Alternative commerciali sono Accelerated-X e Metro-X.

Windows manager
Sono i software che si occupano di gestire le finestre e l'interazione con l'utente, ne esistono numerosi e possono essere alla base di sistemi desktop più complessi e completi. Fra i nomi più noti KDE (è un sistema Dekstop con un proprio Window Manager), Enlightenment, Sawfish, AfterStep, FVWM, Blackbox, Fluxbox, Metacity..

Desktop Manager
Insieme di programmi, che offrono una interfaccia unificata, coerente ed integrata. I Desktop Manager più conosciuti e utilizzati  sono Gnome e KDE, dotati di tutto il software necessario per un ambiente desktop moderno, con XFCE terzo incomodo, sicuramente più "leggero".

Client X
Sono tutti i programmi eseguiti sotto X, con cui l'utente interagisce (ad esempio un browser, un word processor ecc.).

Il fatto di avere un'architettura client-server permette di utilizzare facilmente un server X locale (che mostra l'ambiente grafico sul nostro schermo) con un client in esecuzione su una macchina remota (potrebbe essere un server di applicazioni, particolarmente dotato in termini di hardware, dove di fatto vengono eseguiti i programmi che si usano).
Un'applicazione possimile di questa struttura prevede dei terminali con poche risorse hardware (thin client), a volte senza harddisk e giusto una scheda video e di rete, che caricano il sistema operativo via network, ospitano localmente un server X ed eseguono programmi (client X) su un server centrale.

Comunemente, quando si utilizza Linux sul proprio computer, il server e i client coesistono e vengono eseguiti sulla stessa macchina, ma prima di poter lanciare i client (i programmi, in ambiente grafico, che l'utente normalmente esegue), bisogna avere il server X funzionante.


Gnome, KDE e altri ambienti Desktop

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Massimo 'maxgrante' Caselli - Ultimo Aggiornamento: 2005-06-15 21:49:17

L'interfaccia grafica su Linux può basarsi su diversi ambienti desktop (Desktop Environment o Desktop Manager), che mirano alla definizione di un interfaccia a finestre omogenea, coerente, semplice da usare ed integrata: Gnome e KDE sono i più conosciuti e generalmente usati nelle distribuzioni Linux, ma esistono alternative come XFCE e il vecchio CDE.

Gnome e KDE hanno le caratteristiche tipiche di un ambiente desktop evoluto: un file manager integrato e coerente, un layer di librerie tramite il quale è possible realizzare programmi con un look&feel comune, degli ambienti di sviluppo IDE che semplificano lo sviluppo di applicazioni native, canali omogenei di comunicazione fra programmi ecc.

Kde (K Desktop Environment)
Comprende, oltre ad un Windows Manager autonomo, un'intero ambiente desktop molto user friendly. Fornisce vari sistemi integrati per la gestione e configurazione del sistema oltre a vari programmi come una suite office completa (KOffice) e un IDE - Ambiente di sviluppo integrato (Kdevelop).
Si basa sulle librerie Qt ed utilizza un proprio metodo di comunicazione fra processi: DCOP.

Gnome (GNU Network Object Model Environment)
E' scritto e sviluppato dal Gnome Developer's project e fa parte del progetto GNU. A differenza di KDE Gnome è solo l'ambiente desktop per cui ha bisogno di un windows manager come FVWM (Fantastic Virtual Windows Manager). Anche Gnome offre dei propri sistemi integrati per la gestione della macchina. La sua architettura è completamente basata su CORBA.
Si basa sulle librerie GTK ed utilizza Corba per la comunicazione fra processi con l'implementazione OBRit.

Molte distribuzioni Linux prevedono la possibilità di installare ed utilizzare sia Gnome che KDE, è poi possibile modificarli e aggiornarli secondo le proprie necessità.
E' possibile lanciare programmi per KDE sotto Gnome e viceversa (sono tutti client X), l'interoperabilità reciproca migliora ma resta l'onere di caricare in memoria le librerie di base di entrambi e quindi appesantire sistemi non ben dimensionati.

XFCE
E' un ambiente desktop che sta crescendo molto perchè mantiene la caratteristica di essere leggero, e quindi permettere un agevole uso anche su hardware non potente.


rdesktop: Un client di Terminal Services per Unix

Tipo Infobox: ETCETERA - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-18 23:20:54

Rdesktop è un RDP client per Unix: in pratica l'anello mancante per accedere a sistemi Windows remoti dal proprio Linux tramite la funzionalità di accesso remoto e condivisione desktop chiamata Terminal Services su Windows 2000 Server e Remote Desktop su WindowsXP.
Di fatto con una comoda riga di comando rdesktop permette di aprire una sessione su un Windows 2000 Server remoto o un WindowsXP e visualizzarne il contenuto in una finestra all'interno del proprio ambiente X Window.
Terminal Services funziona molto meglio di VNC (ha protocollo più ottimizzato che supporta meglio limiti di banda) e il client per Unix / Linux permette quello che promette: la gestione e l'uso di server Windows remoti dalla propria postazione Linux.

La sintassi è semplice e si rimanda alla documentazione ufficiale per maggiori informazioni.
Per esempio:
rdesktop -P 98% -k it -u al 10.0.0.100 &
apre una sessione sul server Windows 10.0.0.100, con nome utente al, con dimensioni della finestra al 98% del proprio schermo e usando il layout di tastiera italiana.

Dalla versione 1.3, minima raccomandata, è migliorata la compatibilità con tastiere internazionali (tra cui l'italiana) e la possibilità di fare un copia e incolla dalla macchina locale Linxu alla finestra del Windows remoto.

Download e installazione sono semplicissimi:
make Nella directory scompattata, per compilare (senza particolari configurazioni).
./rdesktop nomeserver Per collegarsi al server remoto.
./rdesktop ? Per un elenco delle opzioni disponibili.


Utilizzare XWindow da remoto

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-06-17 18:29:52

XWindow è un sistema client server in cui il server si occupa della visualizzazione del display e il client è il singolo programma eseguito.
Normalmente client e server coesistono sulla stessa macchina e all'utente questa natura non appare in tutte le sue potenzialità.
E' possibile infatti eseguire programmi su macchine remote e visualizzarli sulla propria macchina.

Per farlo, in modo rapido, si possono seguire 2 vie:

Sistema normale
Consideriamo un sistema in cui la nostra macchina ha IP 10.0.0.90 e vogliamo visualizzare sul nostro schermo comandi sulla macchina 10.0.0.20.
Per farlo sulla macchina locale va impostato (con non pochi potenziali problemi di sicurezza), solitamente come root, su alcuni sistemi anche come utente normale:
xhost + Apre a tutti gli IP la possibilità di collegarsi all'X server locale o
xhost + inet:10.0.0.90 Limita l'accesso solo all'IP 10.0.0.90
Mentre sulla macchina remota, basta collegarsi in telnet e impostare come Xserver il proprio IP:
export DISPLAY=10.0.0.20:0
A questo punto qualsiasi programma che richiede l'ambiente grafico lanciato dalla shell aperta in remoto viene visualizzato sullo schermo del PC locale.

Sistema criptato tramite SSH
Se è abilitata l'opzione X11forwarding sia sul client che sul server SSH, si possono lanciare programmi remoti e visualizzarli sul Xserver locale in modo molto più semplice e sicuro.
Per farlo basta collegarsi via SSH con l'opzione -X. Per esempio:
ssh -X 10.0.0.20
A questo punto qualsiasi programma grafico lanciato sulla macchina remota viene visualizzato automaticamente sul proprio schermo, senza bisogno di ulteriori configurazioni.

Se c'e' un firewall fra client X remoto e server X locale, ricordarsi di aprire la porta 6000 TCP, utilizzata dall'X Window System


Istruzioni e documentazione su Linux

Le risorse online [siti e mailing list , Libri e riviste] - Man, info, /usr/docs

Documentazione locale su Linux

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-06-17 18:42:15

Il primo posto dove cercare documentazione su Linux è Linux stesso.
Tutte le distribuzioni danno la possibilità di installare manuali e documentazione di vario genere.
Nella maggior parte dei casi sono più che sufficienti per conoscere gran parte degli argomenti da sapere.

Ambiente Testuale
Di seguito vengono riportati alcuni comandi per richiamare manuali ed info di vario genere presenti in locale, sul sistema installato, da interfaccia testuale.
man - E' la fonte più rapida e semplice per apprendere delle informazioni riguardanti comandi, file di configurazioni, funzioni di sistema e altro. Esempio: man ps
info - Info è un lettore di ipertesti gnu. Molti programmi hanno la loro documentazione anche in questo formato.  Esempio: info grub
whatis - Cerca la keyword specificata all'interno del database whatis (contiene una breve descrizione di tutti i comandi nel sistema). Equivalente a man -f
apropos - Come whatis, ma cerca stringhe e non parole complete, di conseguenza può dare risultati più verbosi. Equivalente a man -k
/usr/share/doc /usr/doc - Le directory dove risiedono generalmente le documentazioni per programmi specifici in diversi formati (txt,html,pdf etc..).

Moltissimi programmi e comandi, inoltre, permettono di visualizzare alcune righe di HELP passando una specifica opzione. Generalmente si utilizzano queste opzioni: comando --help ; comando ? ; comando -h

Ambiente Grafico
L'help in linea nell'interfaccia a finestre e generalmente ben visibile fra le icone sul desktop o le voci dei menu nelle toolbar.
Il nome del collegamento può cambiare a seconda della distribuzione o dell'ambiente desktop, spesso, oltre alla documentazione ufficiale di Gnome o KDE, sono disponibili manuali e documentazione aggiuntiva.
In genere basta cercare un icona chiamata Help (spesso a forma di salvagente) e accedere da interfaccia grafica a tutta la documentazione sul sistema.


Risorse online su Linux

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-23 15:40:52

La rete pullula di siti di informazione, gruppi di discussione, mailing list, , forum, chat rooms sul mondo Linux.
E' nella natura stessa di questo sistema operativo lo scambio di informazioni e conoscenze.

Per chi sa sfruttarle valgono quanto il supporto tecnico (a pagamento) di un normale vendor.
Viene qui presentata una breve rassegna di alcuni siti significativi di documentazione su Linux.
Linux Documentation Project (LDP) - E' la collezione più vasta di documentazione su Linux.
Comprende FAQ, HOWTO, MiniHOWTO e i docs sui singoli programmi.
Linux Org - Un buon sito di partenza per reperire tutte le informazioni riguardanti a Linux
linux.html.it - Sezione Linux di HTML.it Docs e istruzioni in italiano.
comp.os.linux.* - E newsgroups linux.* Ottimo punto di partenza, oltre a vari web forum, per ottenere supporto interagire direttamente con altri utenti.
www.google.com - groups.google.com - Google - Sempre lui, probabilmente il migliore motore di ricerca in rete, oltretutto basato su cluster di migliaia di server Linux.
Se si incontra un problema o un errore di qualche tipo, provare a digitarlo così come è scritto: probabilmente si vedranno link a forum online, siti e luoghi dove il problema è stato già incontrato, discusso e risolto.


Risorse Offline

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2006-07-05 15:54:14

Libri su Linux o argomenti attinenti sono ormai moltissimi, sia in italiano che in inglese.
Si trovano libri generali (con tanto di distribuzione su CDROM allegata) di diverso livello di difficoltà e libri su specifici argomenti, a volte molto dettagliati.

Anche il numero di riviste su Linux, in italiano o inglese, è ragguardevole.
Spesso queste riviste contengono CDROM con le distribuzioni più recenti e sono un'ottimo sistema per testare ed installare nuove distribuzioni senza doverle scaricare dalla rete.

http://www.linuxjournal.com/ - Linux Journal - La prima e la più autorevole rivista su Linux. Disponibile anche in rete.
http://www.oltrelinux.com/ - Linux & C. - La prima rivista in italiano su Linux. Indipendente e ben fatta.
http://www.linuxfocus.org/Italiano/ - La versione italiana di LinuxFocus Magazine
http://www.linux-magazine.it/ - Sito ufficiale di Linux Magazine
http://www.linuxitaly.net/ - La versione italiana di Linux Journal, particolarmente rivolta al mondo business.
http://linux.cassino.edu/lgei/ - La versione italiana di Linux Gazette
http://www.linuxpro.it/ - Linux Pro Rivista su Linux e OpenSource di Future Media.
http://www.linuxpratico.com/ - Linux Pratico Rivista a fascicoli.


Il mondo dei LUG (Linux User Groups)

Tipo Infobox: TIPS - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-18 23:09:21

Se non ci si accontenta di libri, siti e riviste e si vuole il contatto umano per approfondire la propria conoscenza su Linux, il LUG (Linux User Group) locale può essere l'ideale.

Un LUG è una associazione di persone che hanno Linux come hobby e interesse comune.
Nei LUG si organizzano incontri, corsi, party, install fest ecc, oltre a promuovere la diffusione e l'alfabetizzazione di Linux.
In Italia esistono parecchi LUG locali e la Italian Linux Society (ILS) che, fra le altre attività, ogni anno organizzano un Linux Day in cui si propone e presenta Linux a chi ancora non lo conosce.


Siti su Linux e OpenSource in italiano

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-06-07 17:05:21

La quantità di siti in lingua italiana che trattano di OpenSource e Linux è notevole.
Viene qui presentata una rassegna di quelli più significativi.
Alcuni sono siti di news e commenti, spesso basati sulla piattaforma PHP Nuke, altri sono informativi e divulgativi, altri presentano innumerevoli risorse e informazioni tecniche interessanti.
In tutti non mancano passione e intraprendenza da parte degli autori.

ZIO BUDDHA - www.ziobudda.net - Italian Linux Portal
Uno dei primi e più conosciuti portali italiani su Linux: articoli, news, docs e info.
LINUX.HTML.IT - linux.html.it - Risorse per gli utenti Linux
Una sezione completa di docs, info, software e articoli di HTML.it
LINUX.KUHT.IT - linux.kuht.it - Portale a tutto campo su Linux
Articoli, news, documentazione, link, risorse su Linux. Ottimo.
LINUX VALLEY - www.linuxvalley.it - Portale su Linux
Informazioni, notizie, risorse, documentazioni e prodotti del mondo Linux.
WUP - www.wup.it - L'alternativa italiana a Slashdot
Fra i siti ispirati a Slashdot, WUP è uno dei primi, più completi e più seguiti: Informazioni e news sul mondo informatico che cambia.
FEELING LINUX - www.feelinglinux.com - Documentazione e approfondimenti.
Interessanti articoli sulla amministrazione e la programmazione Linux. Man Pages online.
PLUTO - www.pluto.linux.it - Il Pluto è un gruppo di persone che, unito dalla passione per il software libero, realizza progetti per favorirne lo sviluppo sul territorio italiano.
DIFF - www.diff.org - Il Vortal dei Sistemi Operativi Alternativi
Articoli, news e link su sistemi operativi e tecnologie informatiche alternative.
SPLATT - www.splatt.it - Articoli e notizie sul mondo PHP Nuke.
Un buon punto di riferimento sull'universo Nuke e sul software Splatt Forum.
FREEX.CH - www.freex.ch - News su Opensource e dintorni.
Sito Nuke con notizie, informazioni e articoli sull'opensource e il mondo IT.
ITALINUX - www.italinux.net - News su Linux.
Sito Nuke on informazioni e notizie su Linux.
LINUX TOOLS - www.linux.it/ospiti/linuxtools/ - La bussola italiana del mondo Linux.
Completo elenco ragionato di link sull'universo Linux.
LINUX A SCUOLA - www.linuxascuola.it - Info per scuole.
Informazioni sull'uso di Linux nelle scuole.
INFORMATICA E GNU/LINUX - vandali.org/DanieleMasini/infolinux.php - E-Book FDL.
Completo e interessante e-book su Hardware, Informatica e Linux.

Questo elenco è in costante aggiornamento.
Usa i commenti di questo INFOBOX per segnalare ulteriori siti.


Linux Software

Risorse e informazione su dove trovare software per Linux

Linux Software: i link essenziali

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-09-20 12:44:15

Pochi link al software per Linux. Quelli essenziali.

Il sito ufficiale del kernel Linux: http://www.kernel.org - Home Page ufficiale del kernel
Le distribuzioni più diffuse: http://www.linuxlinks.com/Distributions -  
Tutte le distribuzioni Linux: http://www.distrowatch.com/ - Distrowatch
Carne fresca. Software abbondante: http://freshmeat.net/ - Freshmeat
Due mucche e tanto software. Ben catalogato: http://linux.tucows.com/ - Tucows Linux
Officina di sviluppo di codice opensource: http://www.sourceforge.org/ - Sourceforge
Computer/Software/OS/Linux . Su dmoz. http://dmoz.org/Computers/Software/Operating_Systems/Linux/ - Dmoz
RPM repository: http://rpmfind.net - Rpmfind


Software per Server Internet

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-10-15 15:57:05

Viene qui fatta una rassegna essenziale del software che viene maggiormente utilizzato per gestire servizi comuni su un server. Va vista come indicazione sui software mainstream, quelli più diffusi e sui quali più facilmente ci si può trovare ad operare.

Quasi tutti i prodotti sotto elencati sono Open Source e disponibili su Linux come su altre piattaforme. Windows Incluso.

File sharing
Samba Windows networking. Condivisione di file e stampanti, avanzata e performante compatibilità con NetBios.  
NFS Server File sharing attraverso il protocollo NFS, richiede un kernel con tale supporto abilitato.

Web Server e Application Server
Apache Il server web utilizzato dal 60% dei siti Internet. Flessibile ed estendibile con moduli.  
Tomcat Java Application Server del progetto Apache. Interessante ma poco performante.
PHP HTML embedded scripting language. L'alternativa OpenSource ad ASP di Microsoft. Molto diffuso.
Mod Perl Modulo PERL per Apache. Fondamentale per chi sviluppa in Perl.

Mail & News Server
Sendmail SMTP server, cresciuto con la Rete. Molto utilizzato, molto flessibile.  
Postfix Alternativa SMTP a Sendmail. Facilmente configurabile. Con enfasi sulla sicurezza.
Qmail Altro SMTP server alternativo a Sendmail. Dal design recente e sicuro.
INN Server NEWS dell'ISC.

DNS & DHCPD
Bind Il server di DNS più utilizzato. Presente in tutte le distribuzioni.
Dhcpd Il server DHCP dell'Internet Software Consortium, incluso in tutte le distribuzioni disponibili sul mercato.  

DB Server & LDAP
MySQL SQL server Open Source. Molto veloce, con qualche limitazione sulle funzioni più complesse.
PostgreSQL Alternativa a Mysql, prodotto Open Source.
Openldap L'implementazione Open Source di Ldap.
Oracle ormai ben supportato e certificabile su Linux.

Altri servizi: FTP, WEB CACHE...
Wu-ftpd, proftpd, vsftpd Diversi comuni FTP server.
Squid Proxy server. Web cache engine. La soluzione OpenSource più diffusa.
VNC Virtual Netwrok Computing. Per gestire macchine remote tramite interfaccia grafica.
Lotus Domino/Notes la versione per Linux viene sviluappta di pari passo con quella Windows.


Security software

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-10-15 23:50:44

L'aspetto sicurezza è fondamentale su ogni sistema operativo utilizzato in rete.
In questa pagina è presente una rassegna indicativa di strumenti di security disponibili su Linux (e, come sempre, anche su altre piattaforme, in particolare Unix).
La gamma dei prodotti, gratuiti e commerciali, è molto più ampia ed in continua crescita.
Questa lista da una indicazione dei progetti più noti.

SNIFFER
Tcpdump Sniffer incluso nella maggior parte delle distribuzioni, comandi semplici con la possibilità di utilizzare filtri. Analizza le intestazioni dei pacchetti, non il payload.
Ethereal Packet sniffer, analyzer & decoder. Su interfaccia a finestre.
Ettercap Sniffer per ambienti switchati.

FIREWALL
Ipchains Le utility per gestire il firewalling sui kernel pre 2.4.
Iptables Evoluzione di ipchains, gestisce il modulo netfilter del kernel 2.4
Shorewall Tool per configurare e gestire in modo semplice le iptables

IDS  
Snort Network intrusion detection system, che genera alert sulla base di un database di fingerprints in costante aggiornamento.
Tripwire Host Intrusion Detection System: monitora le modifiche sui file di sistema.
Ossim Open Source Security Information Management: raccoglie e organizza le informazioni di diversi software di montoraggio e IDS

Monitoring
Nagios Sistema di monitoring e alerting dei servizi attivi in una rete, con report via web
Mrtg Non direttamente attinenete la sicurezza. Crea grafici sulla base di MIB SNMP. Molto utilizzato per visualizzare l'occupazione di banda.
Ntop Strumento di analisi del traffico di rete con ottima interfaccia web/testuale. Sviluppato dall'italiano Luca Deri.

Criptazione e VPN
mod_ssl Modulo di Apache per implementare il protocollo https.
Openssh Implementazione opensource dei protocolli criptati ssh1e ssh2.
OpenSWAN Implementazione opensource per il supporto di VPN IPSEC.
PoPtop Implementazione OpenSource del protocollo di tunneling PPTP.
Cipe Software per VPN basate su un protocollo non standard.

Network Scanners  
Nmap Port scanner veloce e flessibile.
Nessus Security scanner, basato su un ampio database di vulnerabilità in costante aggiornamento.


File e Filesystem

Capire il file system di un sistema operativo è fondamentale per conoscerlo e gestirlo ad un livello più approfondito di quella che può essere la normale utilizzo del computer, lato desktop. Nel caso di Linux, inoltre, questo aspetto è particolarmente importante quando si opera con la shell, in modalità testuale.

La logica del file system (FS) Linux è fortemente legata a quella di ogni Unix.
Quanto viene qui esposto si applica, per gran parte, a qualsiasi Unix.

Avremo modo di tornare a divagare sulla bellezza intrinseca di un sistema Unix, sulla sua elementare complessità, l'apparente caos di file e directory che, una volta carpiti i pochi segreti fondamentali, si rivela in tutta la sua esplicita profondità, lasciando all'utente una visione estesa, complessiva, totale di cosa succede sul proprio computer e di come il sistema operativo si adatta, riconosce e gestisce l'hardware.

Prima vediamo argomenti più prosaici:

FILE, DIRECTORY E GERARCHIA FILE SYSTEM
E' fondamentale capire la logica del file system Linux, il concetto di directory root ( / ), un' idea degli utilizzi e la funzione delle altre directory.
Conoscere i comandi tipici di elenco (ls), gestione file (cp, rm, mv, mkdir, rmdir) e gestione link è altresì necessario, pur non essendo indispensabile conoscerne gli innumerevoli (spesso utili) parametri.
Per approfondimenti: Gestire file, directory e link

VISUALIZZARE FILE
Sono disponibili diversi comandi per vedere il contenuto di un file.
Alcuni sono usati molto spesso (cat, less, tail), altri si rivelano utili quando si deve investigarne la natura (file, strings).
I dettagli in Leggere e visualizzare file

FORMATTAZIONE E MOUNT DI NUOVI FILE SYSTEM
Qualsiasi tipo di file system, presente su qualsiasi supporto (hard disk secondario, floppy, cdrom, condivisione di rete...) può essere "montato" all'interno di una sottodirectory della root.
Il sistemista Linux deve avere dimestichezza con le operazioni di mount, formattazione e gestione di file system e device di storage.
Approfondimenti in Gestione dei file system

ATTRIBUTI E PERMESSI
Su Unix/Linux, come su Windows NT, 2000 e XP, ogni file è posseduto da un utente del sistema e da un gruppo di utenti e può avere diversi attributi per gestire i permessi di scrittura, lettura ed esecuzione.
La logica degli "owner" e dei permessi sui file e i comandi per gestirli (chown, chgrp, chmod) sono comuni ad ogni sistema Unix e devono essere ben padroneggiati da ogni amministratore di sistema.
Moltissime problematiche di natura sistemistica di fatto sono dovute a problemi di permessi sul file system da parte degli utenti di sistema con cui sono in esecuzione le varie applicazione, per cui è fondamentale comprendere la logica dei permessi e il modo con cui modificarli.
Per saperne di più: Attributi e permessi

CERCARE FILE
Un motivo di diffcoltà ricorrente per il sistemista non esperto è capire dove stanno i file di configurazione, i programmi, i log e orientarsi nel groviglio della struttura delle directory.
Esistono comandi che permettono di trovare file o informazioni (whatis, whereis, locate, apropos) e di eseguire ricerche complesse sul file system (find).
Sono inoltre estremamente utili dei comandi "filtro", che permettono di visualizzare solo quello che ci intreressa di una serie di righe di output. Alcuni sono usati spessissimo e vanno ben compresi (grep, sort), altri risultano utili in condizioni specifiche ed è bene sapere che esistono (cut, wc, tr) e altri ancora sono estremamente flessibili, potenti e complessi (sed, awk).
Dettagli in Ricerca, confronto e filtri


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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-28 19:33:54

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-23 15:43:07

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-24 23:57:24

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-25 14:52:03

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-24 23:51:21

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-25 15:05:33

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

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-24 23:07:30

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)

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-24 20:55:36

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-25 15:11:10

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

Tipo Infobox: ETCETERA - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-24 23:25:30

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

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-24 22:25:58

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

Tipo Infobox: BOFH - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-23 15:44:30

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

Tipo Infobox: BOFH - Skill Level: 4- ADVANCED - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2004-05-23 15:45:02

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

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2004-05-23 15:43:42

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

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2004-03-06 02:01:55

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-24 23:04:40

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-27 11:50:38

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-27 11:36:22

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-27 11:46:08

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-27 11:28:06

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-27 12:53:00

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-27 17:50:07

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-23 15:45:57

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-27 17:49:06

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-27 17:54:29

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-23 15:46:23

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-27 18:01:14

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

Tipo Infobox: BOFH - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-06-18 10:00:42

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-27 18:05:36

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-28 20:22:21

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

Tipo Infobox: PATH - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-09-09 16:06:59

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-28 21:41:14

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-28 21:44:38

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/

Tipo Infobox: BOFH - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-08-21 16:42:38

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-08-13 17:59:03

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

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-28 20:53:30

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

Tipo Infobox: TIPS - Skill Level: 3- INTERMEDIATE - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2004-01-06 11:35:01

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

Tipo Infobox: ETCETERA - Skill Level: 2- JUNIOR - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2004-05-01 12:05:07

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-28 22:22:34

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-28 22:25:38

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-23 15:47:52

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-08-21 22:09:07

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

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-28 22:17:34

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

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: ivan 'kaharoth' molella - Ultimo Aggiornamento: 2002-12-18 19:24:02

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-24 11:33:10

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Massimo 'maxgrante' Caselli - Ultimo Aggiornamento: 2002-10-24 16:58:23

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 pippo@pippo.it visualizza tutte le righe che contengono pippo@pippo.it 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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-24 11:33:46

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

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: fulvio 'fulvio' montalbano - Ultimo Aggiornamento: 2002-09-07 11:48:38

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: fulvio 'fulvio' montalbano - Ultimo Aggiornamento: 2002-09-07 11:44:39

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Max 'vm' Villa - Ultimo Aggiornamento: 2004-05-23 15:51:01

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-23 15:48:37

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Max 'vm' Villa - Ultimo Aggiornamento: 2002-09-07 10:38:51

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

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: Massimo 'maxgrante' Caselli - Ultimo Aggiornamento: 2002-10-24 18:52:19

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 }'

Tipo Infobox: BOFH - Skill Level: 3- INTERMEDIATE - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2003-12-26 00:11:03

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: fulvio 'fulvio' montalbano - Ultimo Aggiornamento: 2004-05-23 15:51:48

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Max 'vm' Villa - Ultimo Aggiornamento: 2004-05-23 15:54:58

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

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-23 15:49:25

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Max 'vm' Villa - Ultimo Aggiornamento: 2002-09-07 10:36:15

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Max 'vm' Villa - Ultimo Aggiornamento: 2004-05-23 15:56:18

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

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: Max 'vm' Villa - Ultimo Aggiornamento: 2002-10-06 17:59:13

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

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: Massimo 'maxgrante' Caselli - Ultimo Aggiornamento: 2002-10-24 18:23:58

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Massimo 'maxgrante' Caselli - Ultimo Aggiornamento: 2004-05-23 15:57:00

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

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: Marco 'nxm' Naimoli - Ultimo Aggiornamento: 2003-12-08 22:59:14

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]

Tipo Infobox: BOFH - Skill Level: 3- INTERMEDIATE - Autore: Marco 'nxm' Naimoli - Ultimo Aggiornamento: 2003-12-08 23:00:41

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-08-27 05:00:03

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

Tipo Infobox: BOFH - Skill Level: 4- ADVANCED - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-23 16:00:53

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

La shell è l'interfaccia testuale Unix per definizione: l'interprete dei comandi, il compagno di tastiera, da decenni, di innumerevoli sistemisti Unix.

La shell non viene usata solo per ricevere comandi in modalità interattiva dall'utente ma anche per gestire script di varia complessità, di fatto è parte integrante del sistema operativo: tutto quello che succede dopo che viene caricato il kernel è un districato insieme di script shell, che richiamano programmi, impostano parametri, lanciano applicazioni e servizi e "costruiscono" durate il boot il sistema operativo come si presenta all'utente.
E' fondamentale comprendere:
- i principi di redirezionamento e pipe
- come fare uno script shell
- come usare variabili e cicli in uno script shell
- la logica degli script di inizializzazione della shell
- cosa è l'ambiente (environment) e le sue variabili
Per approfondimenti: Ambiente Shell e scripting

Sapere cosa è in esecuzione sul proprio sistema è un ottimo inizio per conoscerlo.
Un sistemista Linux bene o male riconosce ogni singolo processo in esecuzione sul suo sistema e di questo sa come gestirlo, quando viene eseguito e può sapere cosa sta facendo.
Conoscere la natura degli output di comandi come ps, top e vmstat equivale a capire esattamente cosa succede sul sistema, quali sono i colli di bottiglia quando è rallentato e diagnosticare eventuali problemi.
Analogamente è utile saper usare kill per gestire un processo.
Riferimenti su come visualizzare e gestire processi sono in I Processi
Informazioni sui metodi e gli strumenti per diagnosticare il funzionamento di un processo sono in Debugging dei processi


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

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-28 00:04:51

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'ask' Nasuti - Ultimo Aggiornamento: 2003-11-27 23:54:29

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

Tipo Infobox: ETCETERA - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-09-12 13:21:41

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

Tipo Infobox: TIPS - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-27 23:44:20

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' % "


Redirezionamenti e pipe

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-23 16:01:22

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-27 23:53:41

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

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'ask' Nasuti - Ultimo Aggiornamento: 2003-11-28 00:00:09

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

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Davide 'Jediblack' - Ultimo Aggiornamento: 2004-05-23 15:37:21

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

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-27 23:50:56

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

Tipo Infobox: DESCRIPTION - Skill Level: 4- ADVANCED - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2003-11-28 00:07:50

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Massimiliano 'Max_Rispetto' Grassi - Ultimo Aggiornamento: 2002-10-31 08:59:17

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Massimiliano 'Max_Rispetto' Grassi - Ultimo Aggiornamento: 2002-10-13 20:01:34

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Massimiliano 'Max_Rispetto' Grassi - Ultimo Aggiornamento: 2004-05-23 16:02:11

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

Tipo Infobox: TIPS - Skill Level: 3- INTERMEDIATE - Autore: Alfonso 'Alian' Iannotta - Ultimo Aggiornamento: 2005-06-21 15:56:18

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Massimiliano 'Max_Rispetto' Grassi - Ultimo Aggiornamento: 2002-09-21 10:54:43

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Massimiliano 'Max_Rispetto' Grassi - Ultimo Aggiornamento: 2002-10-06 18:04:14

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Massimiliano 'Max_Rispetto' Grassi - Ultimo Aggiornamento: 2002-09-28 00:41:40

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Massimiliano 'Max_Rispetto' Grassi - Ultimo Aggiornamento: 2002-09-28 00:45:59

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

Tipo Infobox: BOFH - Skill Level: 2- JUNIOR - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2005-06-21 16:01:59

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-07 16:37:07

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

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: Massimiliano 'Max_Rispetto' Grassi - Ultimo Aggiornamento: 2004-05-23 16:02:54

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

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: Massimiliano 'Max_Rispetto' Grassi - Ultimo Aggiornamento: 2002-10-15 18:20:53

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

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: Massimiliano 'Max_Rispetto' Grassi - Ultimo Aggiornamento: 2002-10-16 17:52:52

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 di un sistema Linux ha 4 fasi fondamentali:
- Il BIOS (a livello hardware)
- Il Linux Loader (Lilo e Grub sono i più diffusi)
- Il caricamento del kernel
- L'avvio di Init, il padre di tutti i processi, da cui vegnono lanciati tutti i programmi secondo la logica degli script rc.

Questo è un altro tassello fondamentale per la conoscenza del sistema e la capacità di diagnosticare eventuali problemi.
Il quadro generale è esplicitato in Il processo di boot.
Informazione sui Linux loaders, i loro file di configurazione e come si usano sono in Linux loades: Lilo e grub.
I dettagli su Init e gli script che vengono eseguiti durante il boot del sistema sono in Init e runlevels


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)

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-23 16:03:44

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

Tipo Infobox: DESCRIPTION - Skill Level: 4- ADVANCED - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-12-06 21:02:25

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2003-08-13 12:41:26

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-08 15:14:53

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-31 09:00:37

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

Tipo Infobox: PATH - Skill Level: 2- JUNIOR - Autore: Diego 'Eberk' Carobbio - Ultimo Aggiornamento: 2005-01-21 10:25:18

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

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Diego 'Eberk' Carobbio - Ultimo Aggiornamento: 2002-10-25 18:42:50

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

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-09-02 22:48:03

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

Tipo Infobox: ETCETERA - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-31 09:01:39

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-23 16:04:40

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

Tipo Infobox: PATH - Skill Level: 3- INTERMEDIATE - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2004-05-23 16:06:35

/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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-23 16:05:49

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-05 12:15:20

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

Tipo Infobox: TIPS - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-08 16:19:01

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

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2003-12-08 23:03:25

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2005-06-21 16:15:11

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.

Tipo Infobox: TIPS - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-08 15:53:31

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-05-08 14:22:08

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
La logica di gestione degli utenti su Linux, ancora una volta, è simile a quella di tutti gli Unix.
Sono sistemi operativi multi utente, dove per poter fare qualcosa (accedere al sistema) è necessario eseguire un login e fornire la relativa password.

Abbiamo già visto l'importanza dell'utente root, il dio assoluto di un sistema Unix, l'Administrator della situazione, colui che tutto può dalla / (root, intesa come directory madre) in poi.
Vediamo ora come gestire gli utenti del sistema, una attività sistemistica comune e necessaria.
Come sempre, diverse distribuzioni possono presentare diverse interfacce grafiche che permettono una configurazione degli utenti comoda e semplice.
Tutte si appoggiano a principi di fondo, comandi e file comuni, che è la parte che ci interessa evidenziare.

Approfondimenti: Gestione degli utenti

GESTIONE DEL SOFTWARE
Software diversi vengono gestiti (installati, interrogati, rimossi, aggiornati) su Linux basandosi su una logica a pacchetti, che possono contenere un programma, delle librerie, i sorgenti o, a volte, la documentazione completa di un applicativo.
Su Linux esistono diversi formati per la gestione dei pacchetti, i principali sono RPM (usati su redHat, Suse, Mandriva e derivate), DEB (usati su Debian e derivate come Knoppix, Mepis, Ubuntu) e TGZ (usati su Slackware e derivate).
Un file .rpm (o .deb o .tgz) è come se fosse il setup.exe di un programma Windows: contiene tutti i file, i dati e i programmi che vanno installati sul sistema.
Per gestire file .rpm si utilizza il comando rpm (da interfaccia testuale) o vari strumenti in ambiente grafico (tra cui il gestore dei pacchetti disponibile sotto Gnome e che viene usato anche in fase di installazione), che di fatto sono un semplice front-end del comando rpm.
Per gestire file .deb si utilizza dpkg.

Maggiori informazioni in - Installare programmi su Linux e Unix

Tutte le distribuzioni recenti utilizzano sistemi di aggiornamento online che possono essere usati anche per l'installazione di nuovi pacchetti.
Spesso forniscono un front-end grafico per rendere queste attività semplici e gestire automaticamente le dipendenze, quasi sempre il front-end grafico lavora su un sistema di gestione degli aggiornamenti e dell'integrità del database dei pacchetti disponibili.
Su Fedora su usa "yum", su Debian "apt", su Mandriva "urpmi", su RedHat si usa il comando up2date per collegarsi al servizio online RedHat Network.

Ulteriori informazioni in: Aggiornamento di un sistema Linux

BACKUP
Altra attività sistemistica tipica è il backup.
Non ci occuperemo estesamente di procedure di backup ma dobbiamo accennare ai comandi puù comuni in ambiente Unix per gestire e compattare file:
tar, gzip e anche bzip2 e zip.

Info: Backup e compressione di file

CRON E OPERAZIONI PIANIFICATE
Su ogni sistema Unix esiste la possibilità di eseguire automaticamente comandi ad intervalli di tempo specificati (è l'equivalente delle Operazioni Pianificate di Windows).
Questo meccanismo si chiama crontab.
Su molti Linux, destinati ad essere usati come desktop, al crontab viene affiancato anacrontab, che permette la schedulazione di processi previsti da crontab in un ora in cui il computer è spento.
Su un server, sempre acceso, anacrontab non è necessario.

Info su: Schedulazione dei processi

LOG DI SISTEMA
In ogni sistema Unix i log di molti programmi vengono gestiti da un processo specifico: syslog.
Ogni programma in esecuzione sul sistema può utilizzare syslog per tutte le attività di logging (alcuni programmi, come Apache o Samba, possono loggare con sistemi autonomi).
Per sapere dove vengono salvati i log, basta guardare e capire il file /etc/syslog.conf, presente praticamente in ogni sistema Unix.

Informazioni in Gestione e analisi dei log


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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2004-05-23 16:07:36

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-09-20 10:27:33

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-11-28 22:47:29

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-11-28 22:48:18

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

Tipo Infobox: PATH - Skill Level: 2- JUNIOR - Autore: Diego 'Eberk' Carobbio - Ultimo Aggiornamento: 2003-11-28 23:04:51

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-11-28 22:50:31

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

Tipo Infobox: PATH - Skill Level: 2- JUNIOR - Autore: Diego 'Eberk' Carobbio - Ultimo Aggiornamento: 2003-11-28 23:07:52

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-11-28 22:54:53

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

Tipo Infobox: PATH - Skill Level: 2- JUNIOR - Autore: Diego 'Eberk' Carobbio - Ultimo Aggiornamento: 2003-11-28 23:09:49

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

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-28 22:35:24

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-11-28 22:43:34

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2002-10-17 14:46:54

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-11-28 23:01:32

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

Tipo Infobox: PATH - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-11-28 23:10:44

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

Tipo Infobox: PATH - Skill Level: 3- INTERMEDIATE - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-11-28 23:16:22

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];

Tipo Infobox: BOFH - Skill Level: 3- INTERMEDIATE - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2004-06-13 12:53:47

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 morhpeus@192.168.0.97
homer@192.168.0.97'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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-09-27 22:16:46

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

Tipo Infobox: DISTRO - Skill Level: 3- INTERMEDIATE - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2003-04-08 15:51:16

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

Tipo Infobox: DISTRO - Skill Level: 3- INTERMEDIATE - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2004-01-21 14:01:46

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

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2009-02-05 13:30:12

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

Tipo Infobox: BOFH - Skill Level: 2- JUNIOR - Autore: Marco 'w00binda' Patti - Ultimo Aggiornamento: 2003-01-30 16:55:45

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]`

Tipo Infobox: BOFH - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'ma01417' Brezzi - Ultimo Aggiornamento: 2004-05-23 16:08:23

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

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-30 15:33:39

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

Tipo Infobox: PATH - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-02-07 12:45:29

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Diego 'Eberk' Carobbio - Ultimo Aggiornamento: 2002-10-28 11:19:08

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

Tipo Infobox: TIPS - Skill Level: 3- INTERMEDIATE - Autore: Andrea 'franz' Francesconi - Ultimo Aggiornamento: 2004-04-30 11:10:00

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" host@host.com:/'`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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Diego 'Eberk' Carobbio - Ultimo Aggiornamento: 2002-10-28 11:22:01

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

Tipo Infobox: PATH - Skill Level: 3- INTERMEDIATE - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2004-05-15 13:48:43

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

Tipo Infobox: TIPS - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2008-08-25 09:48:13

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 ced@172.16.1.35::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 ced@172.16.4.235::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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Diego 'Eberk' Carobbio - Ultimo Aggiornamento: 2002-10-03 17:02:48

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Diego 'Eberk' Carobbio - Ultimo Aggiornamento: 2002-10-03 17:04:13

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Diego 'Eberk' Carobbio - Ultimo Aggiornamento: 2002-10-03 17:07:36

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Diego 'Eberk' Carobbio - Ultimo Aggiornamento: 2002-10-03 17:09:17

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

Tipo Infobox: BOFH - Skill Level: 3- INTERMEDIATE - Autore: Diego 'Eberk' Carobbio - Ultimo Aggiornamento: 2002-10-03 17:12:13

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]::

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2004-03-06 02:09:20

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Luca 'pillolinux' Bove - Ultimo Aggiornamento: 2002-10-09 16:21:05

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

Tipo Infobox: PATH - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2002-10-24 15:39:32

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2003-11-21 16:01:27

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2003-07-13 19:04:24

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

Tipo Infobox: PATH - Skill Level: 2- JUNIOR - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2003-07-13 19:05:26

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2004-01-09 18:12:08

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-09-27 21:28:02

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

Tipo Infobox: PATH - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2002-10-24 19:50:09

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

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Diego 'Eberk' Carobbio - Ultimo Aggiornamento: 2002-10-28 12:50:19

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

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2003-06-03 21:02:51

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

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-09-25 17:58:57

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

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-02-01 10:52:22

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

Tipo Infobox: PATH - Skill Level: 3- INTERMEDIATE - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2003-06-03 20:55:34

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

Tipo Infobox: DESCRIPTION - Skill Level: 5- SENIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2009-02-23 19:51:27

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-09-29 10:47:14

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

Tipo Infobox: PATH - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2005-07-23 21:27:46

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: fargo 'fargo' - Ultimo Aggiornamento: 2002-10-16 19:36:13

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-24 13:47:12

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

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-07-10 23:23:01

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2004-05-23 16:10:35

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-16 23:13:18

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2002-10-12 20:02:55

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

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-04-04 22:44:28

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

Tipo Infobox: TIPS - Skill Level: 3- INTERMEDIATE - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2002-10-16 18:51:58

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)


ttcp - Network Benchmark Tools

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-11-16 19:49:46

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


Networking -  Tool comuni

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

nslookup

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2002-10-10 18:42:13

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

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-16 18:05:20

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2002-10-10 18:43:48

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2004-05-23 16:11:14

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2002-10-10 18:45:34

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]

Tipo Infobox: BOFH - Skill Level: 2- JUNIOR - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2006-09-20 21:59:26

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2004-05-23 16:11:34

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2004-05-23 16:12:32

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

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2002-10-10 18:30:16

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-17 12:33:51

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

Tipo Infobox: PATH - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-23 16:13:13

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

Tipo Infobox: TIPS - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-17 13:19:31

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-17 12:58:23

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-17 13:09:46

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/*

Tipo Infobox: BOFH - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-18 12:59:23

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

Tipo Infobox: PATH - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-18 13:48:33

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
}


Assegnazione di IP e nomi in una LAN


DHCP server

Protocollo, installazione, configurazione ed uso di un server DHCP (ISC)

Il protocollo DHCP

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2004-06-04 10:28:00

Il protocollo DHCP Dynamic Host Configuration Protocol fornisce un meccanismo per assegnare dinamicamente gli indirizzi IP ed i parametri di configurazione ad un host tramite TCP/IP.

Questo protocollo definito dalle RFC 1533, 1534, 1541 e 1542 è un'estensione del protocollo BOOTP. L'utilizzo del DHCP su una rete con un significativo numero di macchine ne permette una migliore e più semplice gestione, riducendo i possibili conflitti di indirizzo.
Attraverso DHCP infatti, oltre ad assegnare ad ogni macchina automaticamente un diverso indirizzo di rete e la relativa subnet mask, è possibile assegnare anche altri parametri come per esempio: l'indirizzo di broadcast, il nome del nodo e del dominio, il gateway predefinito, l'indirizzo del server di stampa, l'indirizzo del DNS ecc.
Per utilizzare questo protocollo deve essere configurata una macchina, il DHCP Server, che si fa carico di distribuire gli indirizzi e gli altri parametri di configurazione ai client che ne fanno richiesta. Il range degli indirizzi distribuibili è chiamato Scope, ed ogni configurazione è valida solo per un determinato periodo di tempo, chiamato tempo di lease, scaduto il quale il client deve richiedere nuovamente la configurazione. In sostanza il client affitta il suo indirizzo di rete per un determinato periodo di tempo.

Il processo per la configurazione di un client tramite DHCP avviene in quattro fasi:
1. Il client invia sulla rete un messaggio in broadcast (in quanto non conosce l'indirizzo del server) chiamato DHCPDISCOVER. Questo messaggio proverrà quindi da 0.0.0.0 e come destinazione avrà 255.255.255.255. Il messaggio DHCPDISCOVER contiene anche l'indirizzo MAC (univoco) della macchina che fa la richiesta.
2. Il server DHCP che riceve la richiesta invia in risposta un messaggio chiamato DHCPOFFER contenente un indirizzo selezionato dallo SCOPE e l'indirizzo MAC del client che ne ha fatto richiesta per far sì che l'offerta giunga al client corretto.
3. Il client, invia ora un messaggio DHCPREQUEST in broadcast indicando che ha accettato l'indirizzo IP offerto.  
4. Infine il server DHCP invia un messaggio DHCPACK (ACKnowledgment) che conferma al client l'assegnazione dell'indirizzo con il relativo tempo di lease ed invia anche i vari parametri opzionali.

Nel caso in cui il server è impossibilitato ad assegnare la configurazione richiesta dal client invia un messagggio di tipo DHCPNACK (Negative ACKnowledgment) il quale indica che è necessario ripetere tutti i passi per ottenere una nuova configurazione.
Esempio che è possibile trovare nei log di un DHCP server Linux:
Joker dhcpd: DHCPDISCOVER from 00:48:54:6e:b0:4d (Enigma) via eth0
La macchina Joker (DHCP Server) riceve la richiesta da Enigma (DHCP Client) con MAC Address 00:48:54:6e:b0:4d
Joker dhcpd: DHCPOFFER on 192.168.0.100 to 00:48:54:6e:b0:4d (Enigma) via eth0
Joker offre a Enigma, identificato tramite il MAC 00:48:54:6e:b0:4d, l'indirizzo 192.168.0.100
Joker dhcpd: DHCPREQUEST for 192.168.0.100 (192.168.0.2) from 00:48:54:6e:b0:4d (Enigma) via eth0
Enigma accetta e richiede l'indirizzo 192.168.0.100
Joker dhcpd: DHCPACK on 192.168.0.100 to 00:48:54:6e:b0:4d(Enigma) via eth0
Joker assegna ad Enigma l'indirizzo richiesto


Il rinnovo DHCP avviene in tre fasi:
1. Ogni volta che il client DHCP viene riavviato, se il tempo di lease non è scaduto, viene richiesta la conferma per la configurazione corrente tramite uno scambio di messaggi DHCPREQUEST e DHCPACK.
2. Quando è trascorso il 50% del tempo di lease il client DHCP invia messaggio al server DHCP per rinnovare la configurazione in uso. Se il server riceve il messaggio ed è disponibile al rinnovo invia un messaggio DHCPACK con i parametri, altrimenti il client utilizza i proprio valori fino alla scadenza del lease.
3. Quando è trascorso l'85% del tempo di lease il client DHCP invia in broadcast una richiesta DHCP per rinnovare la configurazione. Se il DHCP server che aveva precedentemente concesso la licenza riceve il messaggio, la rinnova, altrimenti viene inviato un DHCPNACK e quindi il client dovrà ripetere le quattro fasi iniziali.


dhcpd

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2004-06-04 10:30:27

L'assegnazione degli indirizzi e la configurazione dei client di rete in modo dinamico è offerta, su un sistema GNU Linux, dal server dhcpd sviluppato dall'ISC (Internet Software Consortium). Dhcpd utilizza due principali file di configurazione dhcpd.conf per la configurazione e dhcpd.leases coma database dei lease.

Il server dhcp, viene solitamente fatto partire tramite gli script di avvio del sistema, la sua sintassi è la seguente: dhcpd [opzioni] [interfacce]
  
Tra le opzioni principali abbiamo:
-p numero porta UDP: permette cambiare la porta di listening, di default è la 67;
-cf file di configurazione: permette di definire un file di configurazione alternativo a quello predefinito;
-lf file di lease: permette di definire un file alternativo a quello predefinito contenente le informazioni relative agli indirizzi IP rilasciati;  
-q: non stampa i messaggi di copyright all'avvio del servizio;  
-d: utile per il debug, visualizza i messaggi del server sullo standard error anzichè essere come di default essere loggati da syslog.  
-t: testa solamente la correttezza sintattica del file di configurazione dhcpd.conf;  
-T: testa solamente la corretteza del file di database dhcpd.leases;
Di default dhcpd si mette in in ascolto su tutte le interfacce che supportano il multicast (ovvero dove è possibile trasmettere pacchetti all’indirizzo IP 255.255.255.255), altrimenti con la relativa opzione è possibile specificare al server su quali mettersi in ascolto ignorando le altre.


/var/db/dhcpd.leases

Tipo Infobox: PATH - Skill Level: 3- INTERMEDIATE - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2004-06-04 10:31:00

E' il database in cui vengono registrati gli indirizzi affittati da dhcpd ai client. Per ogni indirizzo rilasciato in lease viene accodata una voce a questo file. La sua posizione nel sistema può variare a seconda della distribuzione Linux.

E' un file ASCII, che non deve essere editato a mano e contenente tutte le informazioni necessarie al server riguardante il rilascio, il rinnovo e le scadenze dei lease. Dhcpd.leases deve esistere, anche se vuoto prima dell'avvio del demone dhcpd. E' possibile crearlo velocemente tramite il comando touch dhcpd.leases.
Per evitare che il database di lease cresca eccessivamente, periodicamente, dhcpd.leases viene ricreato eliminando le voci scadute, mentre una copia di backup è salvata con il nome dhcpd.leases~. In caso di crash del server prima che un file dhcpd.leases valido sia stato scritto su disco è possibile ripristinare il servizio rinominando dhcpd.leases~ in dhcpd.leases.
Il file di database presenta una forma strutturata, per ogni voce è presente l'indirizzo ip rilasciato e tra parantesi
graffe le relative dichiarazioni. Un esempio di voce aggiunta al file database è il seguente:    
lease 192.168.0.80 { Ip rilasciato in affitto  
  starts 5 2003/04/11 18:37:21; Rilascio del lease (tempo GMT)  
  ends 1 2003/04/14 18:37:21; Scadenza del lease (tempo GMT)  
  binding state active;  
  next binding state free; Lo stato di binding attuale e lo stato successivo ovvero alla scadenza del lease  
  hardware ethernet 00:48:54:6f:2b:e6; Tipo (in questo caso ethernet) e MAC address dell'interfaccia che ha ricevuto l'indirizzo  
  uid "\001\000HTo+\346"; Identificativo del client  
  client-hostname "Apollo13"; Nome del client che ha ricevuto in affitto l'indirizzo  
}


/etc/dhcpd.conf

Tipo Infobox: PATH - Skill Level: 3- INTERMEDIATE - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2003-05-15 18:17:54

E' il file contenente la configurazione del server DHCP (ISC) che viene letto all'avvio del servizio. In caso si decida di apportare variazioni al funzionamento del server è necessario arrestare e riavviare dhcpd affinchè dhcpd.conf venga riletto.

Un esempio di configurazione:
#  
# Configurazione parametri Globali  
#  
ddns-update-style ad-hoc;  Opzione riguardante il metodo di aggiornamento dinamico del Domain Name System  
option subnet-mask 255.255.255.0;  Definizione della maschera di sottorete  
option broadcast-address 192.168.0.255; Definizione indirizzo di broadcast per la rete  
default-lease-time 259200; Il tempo di lease è quantificato in 3 giorni  
max-lease-time 518400; Il tempo massimo per cui il client può utilizzare l'indirizzo affittato è quantificato in 6 giorni  
option routers 192.168.0.1; Indicazione del router che fa da gateway verso Internet o altre reti  
option domain-name-servers 212.216.112.112, 212.216.172.62; Specifica i server DNS per la risoluzione degli indirizzi  
option domain-name "Zeta.net";  Definizione nome di dominio della rete  
  
# Configurazione delle Subnet  
  
subnet 192.168.0.0 netmask 255.255.255.0 { Definizine della subnet da configurare  
   range 192.168.0.3 192.168.0.50;  Definizione di un primo intervallo di indirizzi da affittare  
   range 192.168.0.100 192.168.0.150; Definizione di un secondo intervallo di indirizzi da affittare  
  
# Configurazione Gruppi Host  
  
group {  
   option routers 192.168.0.2;  
   option subnet-mask 255.255.255.0;  
   option domain-name-servers 195.130.224.18;  
   Ridefinizione di alcuni parametri globali in modo  
   specifico per il gruppo di host elencati all'interno del blocco group  
  
   host plutone { Identificazione dell'host da configurare  
   option host-name "Plutone.Zeta.net"; Assegnamento del nome Host  
   hardware ethernet 00:A0:78:8E:9E:AA; Identificazione tramite Mac Address della scheda di rete  
   fixed-address 192.168.0.51; Assegnamento di un IP fisso  
   }  
    
   host saturno {  
   option host-name "Saturno.Zeta.net";  
   hardware ethernet 00:48:54:6E:B0:4D;  
   fixed-address 192.168.0.52;  
   }  
}


Configurazione di un DHCP Server (ISC)

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2004-06-04 10:29:33

La configurazione di un DHCP Server ISC avviene attraverso un file di configurazione strutturato in maniera particolare, la cui conoscenza è fondamentale per sfruttarne a pieno le caratteristiche.

La configurazione del server si basa sul file /etc/dhcpd.conf, un file di testo, composto da istruzioni la cui sintassi è di tipo case insensitive e all'interno del quale è possibile lasciare linee vuote o inserire commenti i quali devono iniziare con il carattere #.
La struttura del file, ricorda dal punto di vista sintattico il linguaggio C, in quanto sono presenti blocchi di istruzioni, e istruzioni annidate, tra parantesi graffe. In particolare si possono individuare due categorie di istruzioni, i parametri (parameter statements) e le dichiarazioni (declaration). Mentre i parametri definiscono in che modo si deve comportare il server, le dichiarazioni vengono utilizzate per descrivere la topologia della rete.
La struttura del file è la seguente:  
parametro valore;  
parametro valore;  
...  
dichiarazione {  
   parametro valore;  
   ...  
     sotto-dichiarazione {  
        parametro valore;  
        ...  
     }  
}  

Le istruzioni in testa al file, al di fuori di ogni dichiarazione rappresentano i parametri globali. Essi sono validi in ogni sottorete utilizzata salvo una loro ridefinizione all'interno di successive direttive di dichiarazione. Le istruzioni all'interno di un blocco definito da parentesi graffe { } sono valide solamente per quel blocco in relazione all'oggetto (sottorete, host, gruppo di host ecc.) che definiscono.
Le direttive di dichiarazione sono:  
subnet ip netmask sottorete {  
 [parametro] valore;  
}
: definisce la sottorete per la quale applicare i parametri definiti;    
shared-network nomerete {  
[parametro] valore;  
   dichiarazione {  
   ...  
  }  
}
: è utilizzata per il raggruppamento della configurazione di più sottoreti, in particolare quando si definiscono più sottoreti che condividono la medesima rete fisica;  
group {  
 [parametro] valore;  
}
: permette di definire un gruppo di host che hanno parametri di configurazione comune;  
La direttiva subnet riveste un particolare importanza perchè è la minima unità di informazione da inserire nel file dhcpd.conf. Senza la specificazione di almeno una subnet con un range di indirizzi validi non è possibile avviare il server.  
Tra i parametri di configurazione più utilizzati abbiamo:
default-lease-time secondi: definisce la durata della configurazione per l'interfaccia di rete;  
max-lease-time secondi: definisce il tempo massimo per la durata della configurazione per l'interfaccia di rete;  
range indirizzo ip iniziale indirizzo ip finale: definisce il pool di indirizzi utilizzabili da rilasciare ai client;  
option subnet-mask subnetmask: definisce la maschera di sottorete;  
option broadcast-address indirizzo di broadcast: definisce l'indirizzo di broadcast;  
option routers indirizzo ip del router: definisce l'indirizzo ip del gatway predefinito;  
option domain-name-servers indirizzo dns: definisce l'indirizzo ip del/dei server DNS;  
option domain nome dominio: definisce il nome di dominio della rete
Sotto la directory /usr/doc/ dell'applicazione è possibile trovare un esempio di dhcpd.conf.


Windows XP: configurazione DHCP

Tipo Infobox: ETCETERA - Skill Level: 2- JUNIOR - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2005-06-21 16:40:33

Configurazione dinamica indirizzo di rete in ambiente Windows XP e possibili alternative.

Per fare in modo che all'avvio il sistema acquisisca tramite il protocollo DHCP l'indirizzo di rete, è necessario impostare il radio button "Ottieni automaticamente un indirizzo IP" nel tab Generale della scheda Protocollo Internet TCP/IP. Per fare questo è possibile cliccare con il tasto destro su Risorse di rete, scegliere Properietà, quindi Connessione alla rete locale (LAN) poi cliccare nuovamente con il tasto destro e scegliere ancora Proprieta'.

CONFIGURAZIONE ALTERNATIVA
E' possibile configurare Windows XP in modo da utilizzare un indirizzo IP a scelta dell'amministratore della macchina qualora il DHCP Server di rete non risulti disponibile. Anche in questo caso, è necessario aprire le proprietà di Protocollo Internet TCP/IP in cui è possibile trovare il tab Configurazione Alternativa il quale permette di impostare un indirizzo IP privato a propria scelta.

Le modifiche in oggetto devono essere effettuare con i privilegi di Administrator.


Installazione e gestione di BIND

Installazione di BIND tramite RPM e sorgenti, file installati e posizioni. Gestione del servizio.

BIND, descrizione pacchetto e sua compilazione.

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2004-06-04 10:31:51

BIND, acronimo di Berkeley Internet Domain Name, è sviluppato e mantenuto dalla ISC, Internet Software Consortium (http://www.isc.org/products/BIND/).

BIND è un pacchetto software composto principalmente da:
- Un Domain Name Service server chiamato named.
- Una libreria per la risoluzione dei nomi.
- Alcune utility di configurazione e dei tool per la gestione del servizio (rndc, named-checkconf).

Attualmente la versione più recente è la 9.2.2 (marzo 2003).
Premesso che la maggioranza delle distribuzioni Linux permette l'installazione e l'aggiornamento del pacchetto attraverso sistemi binari (rpm per RedHat, Mandrake o Suse, deb per Debian) può essere utile all'amministratore di sistema, vuoi per abilitare qualche feature in fase di compilazione o perchè la versione presenta qualche baco, scaricare il pacchetto dei sorgenti.
Questo può essere fatto tramite l'immenso network di sourceforge/freshmeat.net o direttamente dal sito ufficiale.
Una volta scaricato e scompattato il pacchetto si può procedere alla compilazione con il classico:
./configure
make
Ci sono diverse variabili settabili al momento del lancio di configure, vediamo le principali:
--with-libtool: per abilitare l'uso delle shared library.
--with-openssl: per abilitare l'uso della crittografia per l'autenticazione sicura (DNSSEC), nel caso openssl fosse installata in un path diverso da quello standard, si può specificare con:
--with-openssl=/prefix
--enable-libbind: per abilitare l'uso delle librerie libbind di BIND versione 8, visto che attualmente le librerie di BIND 9 sono ancora considerate in sviluppo, può essere interessante l'uso di quelle meno recenti ma più stabili.
--enable-threads o --disable-threads a seconda se la nostra macchina è multiprocessore o no, notare che configure dovrebbe verificare da solo questa variabile, è utile avere la possibilità di specificarla.
--prefix=/...: di default named viene installato in /usr/local con questa variabile si  può specificare un'altra directory.
--sysconfdir: permette di specificare un'altra directory dove installare il file di configurazione (named.conf) diversa da quella standard /etc.
--localstatedir permette di specificare una directory diversa dallo standard /var per run/named.pid.
NOTA BENE: se si specifica la variabile --prefix questa modifica anche i valori standard delle ultime due variabili descritte che diventeranno:
$PREFIX/etc/named.conf e $PREFIX/var/run/named.pid
Di norma quindi se si specifica la variabile --prefix va ricordato di specificare anche le altre due.
Ad ogni modo se si vuole avere un prospetto completo di tutte le opzioni del configure si usa:
./configure --help
Si procede ad installare il pacchetto con:
make install


named

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-05-16 15:18:46

Il server DNS di BIND è un demone chiamato named, il quale è principalmente gestito attraverso il suo file di configurazione ma supporta diverse opzioni direttamente dalla riga di comando.

Lanciato senza invocare alcuna opzione, named legge il suo file di configurazione, i relativi file di zona e resta in ascolto delle query.
Le sue opzioni non sono molte ma spesso vitali per aggiungere alcuni parametri di funzionamento non specificabili nel suo file di configurazione.
La sua sintassi è: named [opzioni]

Opzioni:
-c file_alternativo: Permette di indicare al named un file di configurazione diverso da /etc/named.conf. Per garantire che named rilegga correttamente il file dato dopo che ha cambiato la directory di lavoro come specificato con l'opzione directory del file di configurazione bisogna specificare il PATH assoluto per il file.
-d valore: Abilita il debug_mode. Va specificato il valore di verbosità del debug, un numero più alto indica  messaggi di debug più accurati.
-f: Fa girare il server in foreground.
-g: Fa girare il server in foreground e invia tutti i messaggi di errore allo standard error (stderr).
-n #cpus: Specifica il numero di cpu presenti sulla macchina. Questo fa creare tante threads quante che sono le cpu. Se non specificato named cerca di capire quante cpu sono presenti e attiva tanti processi quante cpu. Se non riesce crea un'unica thread per lavorare.
-p: Permette di specificare una porta diversa dalla default 53 da usare per restare in ascolto delle query.
-s: Stampa a monitor le statistiche dell'uso della memoria e poi esce. Questa opzione è intesa per l'uso da parte dei programmatori e verrà presto eliminata.
-t directory: Fa cambiare directory "root" del processo (chroot()) prima che venga letto il file di configurazione. E' intesa per l'uso associato con l'opzione -u perchè constringere un processo ad una determinata directory non ha effetto se questo gira con i permessi di root che come si sa non ha limiti all'interno del file system.
-u user_id: Cambia l'utente proprietario del processo dopo che aver eseguito quelle operazioni che richiedono i privilegi dell'utente root. Molto importante ai fini della sicurezza garantisce che in caso di compromissione del servizio non ci siano i privilegi per danneggiare ulteriormente il sistema.
-v: stampa la versione del programma e esce.


Utility rndc per la gestione di BIND

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2004-06-04 10:32:44

Il pacchetto BIND dalla versione 9.x.x contiene l'utility rndc per la gestione e controllo del servizio. Rndc comunica con il named attraverso una connessione TCP inviando comandi autenticati tramite una signature digitale.
In caso si stesse utilizzando BIND 8.x.x il suo corrispettivo tool si chiama ndc e ha poche differenze con l'attuale rndc.

Se si desidera utilizzare rndc per gestire il named bisogna innanzi tutto lavorare sul file di configurazione /etc/named.conf e su /etc/rndc.conf.
Esiste un comodo tool per creare un rndc.conf e si chiama rndc-confgen, questa utility ha diverse opzioni per le quali rimando alla sua pagina del manuale in linea Unix.
Lanciando come root il comando senza opzioni si ottiene sullo standard output (quindi facilmente ridirezionabile ad un file) una serie di direttive da aggiungere poi a mano nei rispettivi file di configurazione:
bash-2.05a# rndc-confgen
# Start of rndc.conf
key "rndc-key" {
    algorithm hmac-md5;
    secret "m7Umc6qeKl1Q0eeMjVSq0g==";
};

options {
    default-key "rndc-key";
    default-server 127.0.0.1;
    default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
#     algorithm hmac-md5;
#     secret "m7Umc6qeKl1Q0eeMjVSq0g==";
# };
#
# controls {
#     inet 127.0.0.1 port 953
#         allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf


Una volta editato i due file rndc.conf e named.conf mantenendo queste direttive così come sono avremo la possibilità di utilizzare rndc solo da locale, dall'host cioè che fornisce il servizio named.
Per utilizzare rndc da remoto sarà importante cambiare la direttiva controls in modo che rispecchi la nostra configurazione di rete e sarà necessario avere sulla macchina amministrativa un rndc.conf con la giusta chiave. Lo scambio di questo secret può avvenire in diversi modi, via email o via telefono, è importante ricordare che chiunque conosca la shared-key sarà ammesso al canale di controllo di named con ovvie ripercussioni sulla sua sicurezza, la chiave quindi va custodita con cura e non bisogna scordare che i file di configurazione devono essere leggibili da un ristretto gruppo di utenti "trusted".
La sua sintassi è la seguente:
rndc [opzioni] [comandi]

Vediamo ora le principali opzioni di rndc:
-c config_file: permette di specificare un diverso file di configurazione dallo standard /etc/rndc.conf.
-k key_file: permette di specificare un diverso key_file dallo standard /etc/rndc.key che verrà utilizzato per autenticare i comandi inviati al server in caso un rndc.conf non sia presente (per approfondimenti leggere il manuale in linea unix di rndc-confgen).
-s server: permette di specificare un server a cui inviare i comandi. Se usata questa opzione sovrascrive la direttiva default-server di rndc.conf.
-y key_id: rndc generalmente va a cercare nel file di configurazione del named l'istanza che identifica la chiave da usare per il sign delle comunicazioni. Questa opzione permette di specificare la chiave che si desidera utilizzare.
Per la gestione del server DNS rndc accetta vari comandi:
halt: Ferma immediatamente il servizio DNS.
querylog: Abilita il logging delle query che il named riceve dai suoi clienti.
refresh: Fa effettuare al named un refresh dei suoi file di zona.
reload: Simile al refresh permette di far rileggere al named i file di zona senza però fargli "pulire" la cache. In più accetta come parametro il nome del singolo file di zona evitando così di oberare il server nella lettura di file che non hanno subito cambiamenti. La sintassi così è: rndc reload file_di_zona
stats: Esegue un dump delle statistiche attuali del server nel file /var/named/named.stats.
stop: Ferma il server in maniera "pulita" perchè permette al server di salvare ogni dynamic-update o qualunque dato IXFR prima di uscire.
restart: Fa ripartire il server facendogli salvare tutti i dynamic-update e i dati IXFR e facendogli rileggere tutti i suoi file compreso il named.conf


Configurazione di BIND

Configurazione di BIND - In particolare la versione 9.x

/etc/named.conf : caching-only nameserver

Tipo Infobox: PATH - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-05-23 14:48:01

Il file di gestione principale per la configurazione di Bind può essere molto diverso a seconda del tipo di server che si intende implementare.
La sua posizione standard è nella directory /etc ma talvolta alcune distribuzioni lo collocano in /etc/bind/. Se si compila dai sorgenti si può decidere dove collocarlo con il flag --sysconfdir.

Vediamo un esempio per un server caching-only o recursive che dir si voglia, un server che non è autoritativo per domini pubblici e demanda la risoluzione dei nomi ai server dell'Internet Service Provider mantenendo una cache dei record richiesti diminuendo il traffico di rete e i tempi di query DNS.
In fondo alla configurazione sono presenti degli esempi per delle zone relative alla rete locale in cui si trova il server.

acl "local" { 192.168.0.0/24; };
Definire una acl è una cosa che facilita parecchio la gestione del file di configurazione anche se non è obbligatoria, è comoda nel caso il server si trovi in una rete complessa e si abbia da configurare gli accessi in modo fine..

key rndc-key {
    algorithm hmac-md5;
    secret "fFh4kjMNL=\spI";
};

Dichiarazione di una shared key. La stessa stringa dovrebbe trovarsi anche all'interno dell'rndc.conf per permettere la gestione sicura mediante autenticazione degli accessi. Si possono specificare più chiavi per diversi tipi d'uso o avvalersi solo di una chiave per tutte le operazioni.

controls {
    inet 127.0.0.1 port 953
        allow { 127.0.0.1; } keys { "rndc-key"; };
    inet 192.168.0.1 port 953
        allow { local; } keys { rndc-key };
};

Definizione di un canale per le comunicazioni amministrative con il server. In questo caso con inet si stabilisce la socket TCP di ascolto e la sua porta il cui valore di default è 953. Nel secondo caso il canale di controllo è settato per restare in ascolto sull'interfaccia con indirizzo 192.168.0.1. Con allow definisco invece chi è autorizzato a collegarsi al canale di controllo in questo caso da localhost e dagli host appartenenti alla acl "local" a patto che abbiano la definizione della chiave rndc-key nel rndc.conf.

options {
    directory "/var/named/";
    pid-file "/var/named/run/named.pid";
    forwarders { DNS1_ISP; DNS2_ISP; };
DNS1_ISP e DNS2_ISP vanno sostituiti con gli indirizzi IP dei server DNS a cui il nostre server rivolgerà tutte le richieste
    #forward first;
In questo caso è inserito un commento perchè forward first è il valore di default. Se invece si specifica forward only o forward-only si impedisce ogni query del nameserver a DNS diversi dai forwarders.
    listen-on { 127.0.0.1; 192.168.0.1; };
Stabilisce gli indirizzi ip delle interfacce presenti sul server in cui si deve porre in ascolto per delle richieste, in questo caso esclusivamente sulla rete locale e la loopback. Se non specificato di default ascolterà su tutte le interfacce disponibili.
    query-source address * port 53;
Con una wildcard * definisco gli indirizzi delle interfacce che named userà per rivolgere le richieste che non hanno ancora un record nella cache e definisco che utilizzi la porta 53. Questo è utile nel caso il server si trovi dietro un firewall che filtra i pacchetti UDP anche se non è valido per quanto riguarda le operazioni che implicano l'uso del TCP in cui usa sempre una porta casuale tra la 1024 e la 65535.
    allow-query { 127.0.0.1; "local"; };
    listen-on-v6 { "none"; };
    notify no;
};

Stabilisce il comportamento del server in caso di cambiamenti nei file di zona di default è yes e che nel caso di un server cache-only non serve visto che non comunica con altri nameserver fuorchè i suoi forwarders.

//zone "." in {
//    type hint;
//    file "named.root";
//};
In questo caso è commentato vista la presenza dell'opzione forwarders non è più necessario che il nameserver utilizzi i server del dominio radice per le richieste non presenti in cache. Questo è fattibile per la verità solo se si specifica forward-only perchè altrimenti se i forwarders non hanno la risposta o comunque tardano a rispondere di default named interpellerà i DNS del dominio radice.
zone "0.0.127.in-addr.arpa" {
    type master;
    file "127.0.0.db";
};
Si definisce la zona per la risoluzione inversa di "localhost". Notare che non necessita del flag IN perchè la loopback è in realtà una rete virtuale che nulla ha a che vedere con Internet.

zone "0.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.0.db";
};
Occorrenza per il file incaricato della risoluzione inversa per la rete 192.168.0.0/24

zone "local" IN {
    type master;
    file "local";
};
Va definita per indicare al nameserver che la zona local non contiene nessun record.

zone "esempio.local" IN {
    type master;
    file "esempio.local";
};

Definisce il file dei nomi di dominio per la rete esempio.local


Named.conf sintassi e direttive

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-05-14 19:17:43

La configurazione di bind, versione 9.x.x viene gestista dal file named.conf generalmente posto in /etc o in /etc/bind. Questo file che è un normale file di testo ASCII contiene direttive e commenti. Specifica inoltre i file delle zone e la loro ubicazione nel filesystem.

Per un elenco completo delle direttive utilizzabili (ne esistono realmente tante) e dei loro valori di default consultare il manuale ufficiale di BIND, generalmente posto in /usr/doc o /usr/share/doc. Le principali distribuzioni personalizzano la posizione di questi file, rivolgersi alla documentazione della propria distribuzione per la loro localizzazione.
Molti parametri possono essere lasciati al loro valore di default ma è bene specificare i più importanti anche perchè possono essere vitali ai fini della sicurezza del servizio.

Da ricordare: Ogni direttiva termina con un ";". Tra parentesi graffe si inseriscono le direttive relative ad una direttiva principale. I commenti sono gli stessi che si utilizzano in linguaggio C, "//"per aprire e chiudere o "/*" per aprire e "*/" per chiudere.
Vediamo le direttive principali e la loro sintassi:

acl: Access Control List. Questa direttiva permette di assegnare un nome arbitrario ad un determinato range di indirizzi per facilitarne poi la loro gestione in altre specifiche del named.conf.
La sua sintassi è la seguente:
acl nome-acl {
    lista_di_indirizzi
};

Da notare: La acl e il suo rispettivo range di indirizzi va definito all'interno del file prima che possa essere utilizzata in qualunque altra direttiva. In sostanza named legge il suo file di configurazione dal principio alla fine e non ha la capacità di fare l'inverso.
Alcune acl sono implementate di default:
any: Tutti gli host.
none: Nessun host.
localhost: Corrispondenza per l'host locale.
localnets: Corrispondenza per ogni host presente nella rete in cui named è in ascolto.

controls: Permette la definizione di un canale usato dal system administrator per gestire il servizio. Questi canali sono principalmente usati dall'utility rndc per inviare comandi al server.
controls {
   inet ( indirizzo_ip | * ) [ port numero_porta ] allow {  acl  }
                keys {  lista_chiavi  };
};


key: Definisce una chiave segreta per l'autenticazione mediante signature (TSIG, DNSSEC) viene detta shared perchè è condivisa dal server e delle applicazioni che ne fanno uso.  
key nome_chiave {
    algorithm stringa;
    secret stringa;
};

Il nome della chiave è arbitrario, va poi ovviamente ripetuto uguale in tutte le direttive che lo richiedono.
La direttiva algorithm in teoria potrebbe essere di tipo qualunque ma attualmente (BIND 9.2.2, marzo 2003) named supporta esclusivamente hmac-md5.
La direttiva secret specifica una stringa a 64 bit utilizzata da algorithm per il signing delle connessioni.

include: Permette di definire un file esterno da cui estrapolare ulteriori direttive.
include nome_del_file;
Può essere utile nel caso in cui si ha necessità di dare l'accesso in lettura al named.conf a un gruppo di utenti ma non si vuole che la secret key sia accessibile. Si specifica così il parametro key in un file esterno non leggibile e lo si "include" nel named.conf.

option: Sarebbe necessario redarre un how-to separato per descrivere tutte le opzioni possibili che sono numerosissime, rimando ancora alla documentazione ufficiale inclusa col pacchetto named per un'overview più dettagliata.
La sintassi è:
option {
    directory /var/named;
    listen-on { indirizzo_interfaccia; };
        ulteriori opzioni ...;
};

                  
Nel campo option si fanno rientrare numerose direttive:
directory: Specifica la directory di lavoro di named. Se non dichiarata named userà la directory da cui viene lanciato.  Di norma si indica la directory dove si trovano i file di zona. Uno standard comune è che sia /var/named ma non è obbligatorio.
pid-file: Si usa se si vuole utilizzare una directory differente dalla default /var/run per salvare il pid-file. Named quando parte avvia più di un processo, il pid-file è usato da alcune applicazioni per conoscere il numero del processo "parente" quello cioè che ha poi generato gli altri processi "figli".
port: Serve a specificare una porta udp/tcp diversa dalla standard 53. E' inteso per l'utilizzo nei test di debug visto che un server che lavora su una porta diversa dalla 53 sarà completamente impossibilitato a comunicare con il resto del Domain Name System globale.
notify: Questa opzione ha una sintassi definibile come "booleana" in quanto accetta parametri come yes o no. Serve a impedire o permettere che il server notifichi i cambiamenti dei suoi file di zona ai server presenti nel record di risorsa NS e ai server specificati con l'opzione also-notify. Può essere specificato anche come opzione per singolo file di zona. Il suo valore di default è yes.
recursion: Anch'essa di sintassi booleana, se posta come yes il server cercherà di elaborare una risposta ad una query del client anche se non presente nella sua cache. Notare che se posta come no non impedisce ai client di ottenere una risposta dalla cache del servizio, l'unica cosa sarà che non vi saranno aggiunte nella cache in seguito a query dei clients. Il suo valore se non specificato è yes. Questa opzione può difendere il named da attacchi tipo DNS-poisoning che utilizzano la funzione di recursive quering.
forwarders: Con questa opzione posso definire gli indirizzi di altri server DNS ai quali il named si appoggerà per le risposte a query di cui non ha autorità e solitamente si definiscono i DNS del proprio Internet Service Provider. Di norma quando il server non ha la risposta in cache si appoggia ai root servers a meno che non si sia specificata questa opzione, in questo caso si possono tranquillamente eliminare i riferimenti alla zona radice "." nel named.conf.
forward: Serve a specificare la policy da usare in caso una richiesta non autoritativa non sia presente nella cache e si siano specificati dei forwarders. I suoi parametri sono first e only.
allow-notify: Permette di specificare una lista di indirizzi (o anche una precedentemente definita acl) a cui è permesso notificare i cambiamenti di un file di zona. Può essere specificata come opzione di una singola direttiva di zona e in tal caso sovrascrive la direttiva globale.
allow-transfer: Permette la specifica di una lista di indirizzi (o una acl) a cui è concesso effettuare un trasferimento di zona. Può essere specificato per un singolo file di zona e in tal caso sovrascrive l'opzione globale.
allow-recursion: Specifica la lista di indirizzi o l'eventuale acl ai quali è concesso effettuare query ricorsive. Si ricordi che non permettere ad un host di avere risposte a query ricorsive non impedisce che le ottenga se presenti in cache.
listen-on: Quando viene lanciato il named si mette in ascolto su tutte le interfacce disponibili per cui se un host ha tre schede di rete e quindi tre indirizzi ascolterà su tutti e tre più la loopback. Con questa opzione si può dire a named su quali indirizzi ascoltare e su quali no. Non si può specificare il nome dell'interfaccia (es. eth0) ma si deve usare il suo indirizzo IP.

Per finire il named.conf contiene le direttive dei file di zona che altro non sono che la loro dichiarazione e l'associazione al corrispettivo file del database DNS.
La sintassi è la seguente:
zone "db.esempio" {
        type master;
        file "/var/named/db.esempio";
};

Dove zone è la dichiarazione per la zona la quale comprende l'opzione type che ne identifica il tipo, master o slave, e l'opzione file che indica dove si trova il corrispettivo file del database.
Occorre che vi sia una direttiva per ogni file di zona più la specifica per la zona radice e una per i record PTR di localhost.
Dichiarazione per la zona radice:
zone "." IN {
    type master;
    file "/var/named/root.hint";
};

Dichiarazione per localhost:
zone "0.0.127.in-addr.arpa" IN {
    type master;
    file "/var/named/127.0.0.db";
};


Come già detto la direttiva per la zona radice può essere omessa nel caso in cui si sia specificata l'opzione forwarders. Il file root.hint è il file contenente le informazioni sui server radice del sistema DNS, potrebbe essere il caso di aggiornarlo ed è recuperabile all'indirizzo ftp://ftp.rs.internic.net.


/etc/named.conf : server autoritativo

Tipo Infobox: PATH - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2004-05-21 18:42:11

Vediamo la configurazione di un server DNS autoritativo: primario (master) per la zona esempio.com e secondario (slave) per la zona extra.esempio.com.

acl "slaves" { numero_ip_slave1; numero_ip_slave2; };
Definisco una acl per i server slave del master per la zona esempio.com
key rndc-key {
    algorithm hmac-md5;
    secret "fFh4kjMNL=\spI";
};
controls {
    inet 127.0.0.1 port 953
        allow { 127.0.0.1; } keys { "rndc-key"; };
};
In questo caso il canale di controllo è posto solo sulla loopback. Resta comunque valida l'ipotesi di inserire una acl che stabilisca quali host amministrativi hanno accesso.

logging {
    channel security_info {
        file "/var/log/named-auth.log";
        severity info;
        print-category yes;
        print-severity yes;
        print-time yes;
    };
category security { security_info; };
};
Abilito il log per i messaggi della categoria security nel file /var/log/named-auth.log e faccio in modo che salvi i messaggi dalla priorità info in su stampando il tipo, la severità e l'ora.
options {
    directory "/var/named/";
    pid-file "/var/named/run/named.pid";
    query-source address * port 53;
    allow-query { any; };
    listen-on-v6 { "none"; };
    recursion no;
};
In questo caso l'opzione allow-query è settata in modo globale ma va ricordato che è preferibile inserirlo come  direttive per singolo file di zona e nel nostro caso per la zona su cui ha autorità il server, esempio.com. Specificando "recursion no" disabilito la possibilità che richieste ricorsive vengano processate dal server.
zone "." in {
    type hint;
    file "named.root";
};
zone "0.0.127.in-addr.arpa" {
    type master;
    file "127.0.0.db";
    notify no;
};
Disabilito la notifica alla zona dell'host locale
zone "1.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.1.db";
    allow-transfer { "slaves"; };
};
Specifica per la risoluzione inversa della zona esempio.com
zone "0.0.10.in-addr.arpa" IN {
    type slave;
    file "10.0.0.db";
    masters 10.0.0.54
};
Specifica per la risoluzione inversa della zona extra.esempio.com, indicando 10.0.0.54 come server DNS primario
zone "esempio.com" IN {
    type master;
    file "esempio.com.db";
    allow-transfer { "slaves"; };
};
Specifica per la zona su cui il server ha autorità e di cui solo gli host presenti nella acl "slaves" hanno il permesso di eseguire un trasferimento di zona
zone "extra.esempio.com" IN {
    type slave;
    file "extra.esempio.com.db";
    masters 10.0.0.54
};
Specifico l'indirizzo del server master per la zona extra.esempio.com


File di zona per la risoluzione da nomi a indirizzi

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-05-23 21:25:17

Vista la struttura e la sintassi del named.conf passiamo ora ad analizzare i file di zona, semplici file di testo in cui si specificano le informazioni necessarie per la risoluzione dei nomi di dominio in indirizzi numerici e viceversa. Anche in questo caso si ha una sintassi specifica e alcune convenzioni da conoscere.

Vediamo in primis la struttura di un file di zona per la risoluzione dei nomi di dominio in indirizzi numerici. Questo file si vedrà essere il più importante in quanto contiene tutti i dati e i record necessari per la configurazione del dominio, del server di posta e degli alias, per citarne alcuni. Il file in questione si chiama esempio.com.db.
Per chiarezza lascerò come esempio l'intero file dopo di che mi addentrerò nella spiegazione della sua struttura.

$ORIGIN .
$TTL 172800    ; 2 days
esempio.com        IN SOA    ns1.esempio.com. root.ns1.esempio.com. (
                2003021512 ; serial
                28800      ; refresh (8 hours)
                7200       ; retry (2 hours)
                604800     ; expire (1 week)
                86400      ; minimum (1 day)
                )
            NS    ns1.esempio.com.
$ORIGIN esempio.com.
$TTL 3600    ; 1 hour
dhcpclient        A    192.168.0.98
            TXT    "311e98e7bea987126c3037d1b1f4c7b99d"
$TTL 172800    ; 2 days
ns1            A    192.168.0.1
mac            A    192.168.0.2
linux            A    192.168.0.3
windows            A    192.168.0.4
webftp            A    192.168.0.5
mail            A    192.168.0.6

;Aliases
www.esempio.com.        CNAME    webftp.esempio.com.
ftp.esempio.com.        CNAME    webftp.esempio.com.
win.esempio.com.        CNAME    windows.esempio.com.

;Definisco il mail server per il dominio

esempio.com.        MX    10    mail.esempio.com.
esempio.com.        MX    20    mail.nostroisp.com.


$ORIGIN .
Questo flag indica un nome di dominio che viene automaticamente appeso a tutti i nomi del file di zona che non terminano con un punto finale. In questo esempio si può vedere che sono specificate due direttive $ORIGIN. La prima va a completare la direttiva "esempio.com" mentre la seconda specifica il completamento per i nomi degli host. Alcuni la considerano obsoleta ma vale la pena conoscerla e capirne il significato.
$TTL 172800    ; 2 days
Questo campo indica il default time-to-live. Come si vede si applica globalmente a tutti i record che precedono qualunque altra direttiva di TTL, che può essere indicata anche per singolo host. Il nameserver specifica questo valore in tutte le risposte per la zona o il dato record indicando per quanto tempo gli altri nameservers possono tenerlo in cache. Se si ha un file di zona che subisce poche modifiche è consigliabile specificare un valore alto anche se è sconsigliabile superare la settimana.
esempio.com        IN SOA    ns1.esempio.com. root.ns1.esempio.com.
Questa è la parte principale del file di zona e serve a indicare lo Start of Authority per la zona esempio.com. In questo caso ns1.esempio.com è il nome del server autoritativo per la zona. Se ne può specificare uno solo e non di più. A seguire abbiamo un record che può creare confusione. Indica l'indirizzo del responsabile della gestione per la zona. I nameservers non utilizzaranno mai questa risorsa che è ad uso esclusivo di chi vuole comunicare con il gestore del dominio. Non si specifica l'indirizzo comune "root@ns1..." ma si deve sostituire l'@ con il punto, questo perchè la sintassi dei file di zona vuole che il simbolo @ si usi come il flag $ORIGIN. Può essere specificato un host differente da quello autoritativo ad esempio root.mail.esempio.com.
I campi chiusi tra le parentesi sono principalmente per gli slave server.

(
                2003021512 ; serial
Indicazione del numero di serie. Importante aggiornarlo quando si eseguono modifiche al file per far sapere agli slave che si sono effettuati dei cambiamenti.
                28800      ; refresh (8 hours)
Indica agli slave della zona ogni quanto devono verificare che i file sul master sono o meno cambiati. Va prestata attenzione al valore che si da soprattutto nel caso sia basso. Si sappia che uno slave effettua una SOA query per ogni zona ad intervalli specificati nel refresh e si tratta di una operazione molto intensiva in termini di utilizzo di CPU
                7200       ; retry (2 hours)
Questo campo indica allo slave ogni quanto tempo riprovare a connettersi al master in caso un refresh non sia andato a buon fine (potrebbe essere momentaneamente down)  
                604800     ; expire (1 week)
Con expire indico allo slave dopo quanto tempo deve considerare una data zona non più valida. Deve necessariamente essere maggiore dei valori di refresh e di expire altrimenti considererebbe espirati i valori di una zona prima di averla caricata.
                86400      ; minimum (1 day)
Questo campo è un TTL. Serve ad indicare quanto tempo un risposta negativa ad una query va tenuta dal nameserver nella cache.
                )
            NS    ns1.esempio.com.
NS, nameserver, indica il nameserver o i nameservers autoritativi per una zona. In caso vi siano due o più DNS per una data zona vanno specificati qua.
$ORIGIN esempio.com.
$TTL 3600    ; 1 hour
dhcpclient        A    192.168.0.98
            TXT    "311e98e7bea987126c3037d1b1f4c7b99d"
Questo record è per un host che utilizza il DHCP. Viene inserito dal server DHCP tramite update dinamico delle zone. Il campo TXT indica una stringa identificativa per il dato host ed è per uso interno al server DHCP ma può essere utilizzata per qualunque tipo di informazione si voglia specificare. In questo caso il TTL è al minimo visto che un record per un client non dotato di un indirizzo statico è soggetto a cambiamenti frequenti.  
$TTL 172800    ; 2 days
ns1            A    192.168.0.1
mac            A    192.168.0.2
linux            A    192.168.0.3
windows            A    192.168.0.4
webftp            A    192.168.0.5
mail            A    192.168.0.6
Questa è la parte che associa i nomi delle macchine ai loro ip. Il flag A sta per Address e indica che si tratta di record per la risoluzione da nome ad indirizzo.
;Aliases
www.esempio.com.        CNAME    webftp.esempio.com.
ftp.esempio.com.        CNAME    webftp.esempio.com.
win.esempio.com.        CNAME    windows.esempio.com.
Con questi campi invece definisco gli alias per alcuni host del dominio. L'esempio dimostra che è possibile assegnare più nomi ad un host. In questo caso il server web e ftp sono la stessa macchina raggiungibile sia se la si cerca come "www.esempio.com" che  come "ftp.esempio.com".
;Definisco il mail server per il dominio
esempio.com.        MX    10    mail.esempio.com.
esempio.com.        MX    20    mail.nostroisp.com.

Con i record MX specifico quali host si occupano dell'instradamento della posta per il dominio esempio.com. Il valore numerico che segue il record MX indica la priorità. In questo caso se invio una mail ad un utente che si trova nel dominio esempio.com il mio client mail cercherà di inviare al server mail.esempio.com per primo. In caso questo fosse troppo occupato o comunque non disponibile il mio mailer si appoggerebbe a mail.nostroisp.com un server fornito dall'Internet Service Provider di esempio.com. Si possono specificare più server con lo stesso valore di priorità ed è consigliabile utilizzare valore numerici che abbiano un certo margine tra loro, questo solo per fini di comodità nell'amministrazione. Ad esempio se in questa zona si decide di implementare un nuovo mail server che poniamo sia una macchina molto potente e posta su un link molto veloce basterebbe dargli un valore di 5 o di 15 a seconda delle preferenze ma se avessimo usato valori tipo 1,2,3.. ci troveremmo obbligati a ristudiare il nostro file di zona. Se si vuole definire un server con priorità massima si può utilizzare il valore 0.

Per finire alcune note. In questo esempio si sono utilizzati valori numerici per indicare i TTL, i refresh, l'expire.. e sono posti con come unità il secondo quindi una settimana diventa 608400 secondi. Dalla versione 8 di BIND in poi si possono specificare anche con degli "argomenti" quindi 3600 secondi diventano 1h e così via si possono specificare valori di 2h35m, due ore e trentacinque minuti, 1d, un giorno, 2w, due settimane. Notare inoltre che la sintassi del file delle zone vuole che i commenti inizino con un ";". Va ricordato infine che vi sono molti record di cui non ho parlato, alcuni obsoleti altri poco usati, se si vuole averne un prospetto più chiaro fare riferimento alla documentazione ufficiale del bind.  


Configurare named per l'aggiornamento dinamico mediante DHCP

Tipo Infobox: TIPS - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-05-31 22:02:40

A meno da non acquistare dei costosi libri, la documentazione che spiega chiaramente come far si che il DHCP aggiorni i file di zona del DNS è realmente scarna e criptica.
Vediamo brevemente cosa si deve fare dal lato named per prepararlo a questo tipo di aggiornamenti.

Un server DHCP per comunicare con named e fargli aggiornare i file di zona utilizza il DNS Dynamic Update. Se si vuole approfondire l'argomento la request for comments interessata è la rfc 2136. Questo è disponibile dalla versione 8 del BIND e superiori, in precedenza non si era prevista questa funzione visto che si considerava il DNS un database per dati statici e che subivano pochi cambiamenti tranquillamente gestibili a mano dall'amministratore. Con l'ingrandirsi delle reti e l'ampiamento dell'uso di sistemi per l'assegnazione automatica degli ip si è reso necessario trovare uno strumento in grado di tenere traccia di questi cambiamenti, di inserire nuovi records e di cancellarli.
Qui vedremo quali direttive si rendono necessarie nel named.conf per implementare l'update dinamico di un server DHCP presente sulla stessa macchina.

key DHCP_UPDATER {
    algorithm HMAC-MD5;
    secret "Yj95beDnn=34fghSN";
};
Nonostante sia possibile con l'istruzione allow-update specificare un lista di indirizzi ip o una acl per controllare gli update dinamici è sconsigliato per ragioni di sicurezza e preferibile utilizzare TSIG per le autenticazioni. Pertanto si crea l'istanza per la chiave che il server DHCP userà per autenticare i suoi update. Nel dhcpd.conf si dovrà creare l'istanza per la chiave corrispondente
controls {
    inet 127.0.0.1 port 953
        allow { 127.0.0.1; } keys { "DHCP_UPDATER"; };
};
Stabilisco il canale di controllo attraverso il quale il mio server DHCP si connetterà per inviare i dati da aggiornare. In questo caso solo localhost ha la possibilità di accedervi.
options {
    directory "/var/named";
    pid-file "/var/run/named.pid";
};

zone "." in {
    type hint;
    file "named.root";
};

zone "0.0.127.in-addr.arpa" {
    type master;
    file "127.0.0.db";
};

zone "0.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.0.db";
    allow-update { key DHCP_UPDATER; };
};
Per singolo file di zona delineo la direttiva che conceda la possibilità di update solo ai possessori della chiave giusta.
zone "esempio.com" IN {
    type master;
    file "esempio.com.db";
    allow-update { key DHCP_UPDATER; };
};


Vediamo ora come named processa le richieste di update. Come immaginabile dovrebbe incrementare il numero di serie ogni volta che viene aggiunto o eliminato un record. Quando una richiesta di update arriva al server quest'ultimo dovrebbe andare ad aggiornare il relativo file di zona. Riscrivere un file di zona ogni volta che un update viene processato in casi in cui ci si trovi in un contesto di rete molto grosso e con molti update come immaginabile diventa un lavoro realmente oneroso per il server con il rischio che non sia possibile riuscire a processarli tutti. Infatti sia BIND 8 che BIND 9 quando ricevono una richiesta di update dinamico salvano questo record su un file di log che serve a tenere traccia dei nuovi record. In questo modo il nameserver ha sempre in memoria un file di zona con tutti i nuovi record ma si appresta a riscrivere i file di zona a intervalli (generalmente un'ora) prestabiliti. BIND 8 in seguito cancella questi file mentre BIND 9 li conserva perchè vengono utilizzati anche per gli incremental zone transfers. In BIND 9 questi file sono salvati con come nome il nome del file di zona e con estensione .jnl, infatti vengono chiamati journal files. Non c'è da stupirsi infatti se ci si ritrova la directory contenente i file di zona piena di questi jnl files.

Per finire vediamo in breve quello che si dovrebbe aggiungere al dhcpd.conf per il nostro esempio.
Innanzi tutto la direttiva ddns-update-style va settata utilizzando il metodo "interim". Esiste anche il metodo ad-hoc ma è deprecato e considerato obsoleto. Se si desidera approfondire l'argomento leggere il man per il dhcpd.conf.
Infine vanno date le specifiche per l'uso della chiave per l'autenticazione sicura.
La sintassi è la seguente:
key DHCP_UPDATER {
    algorithm HMAC-MD5;
    secret "Yj95beDnn=34fghSN";
};

zone esempio.com. {
    primary 127.0.0.1;
    key DHCP_UPDATER;
};

zone 0.168.192.in-addr.arpa. {
    primary 127.0.0.1;
    key DHCP_UPDATER;
};

In questo caso come si vede con l'istruzione primary definisco dove si trova il nameserver che in questo caso è localhost ma che va modificato se il dhcp e il DNS sono su due host differenti. Notare anche che nella direttiva zone si deve aggiungere il punto finale anche se in caso non presente il dhcp server dovrebbe aggiungerlo da solo.


File di zona per la risoluzione inversa, da indirizzi a nomi

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2004-05-21 18:38:45

Abbiamo visto il file di zona per il dominio esempio.com ora vediamo il suo corrispettivo file per la risoluzione inversa. Anche questa volta lascio l'intero file disponibile per poi addentrarmi nelle sue caratteristiche.

Vediamo il file 192.168.0.db:
$TTL 2D
0.168.192.in-addr.arpa.            IN    SOA    ns1.esempio.com. root.ns1.esempio.com. (
                            2003021502    ;serial
                            28800        ;refresh
                            7200        ;retry
                            604800        ;expire
                            28800 )        ;minimum
                IN    NS    ns1.esempio.com.

1                IN    PTR    ns1.esempio.com.
2                IN    PTR    mac.esempio.com.
3                IN    PTR    linux.esempio.com.
4                IN    PTR    windows.esempio.com.
5                IN    PTR    webftp.esempio.com.
6                IN    PTR    mail.esempio.com.


Innanzi tutto occorre fare una premessa. Come si può vedere e come già trattato altre volte in questo file non ci sono in realtà riferimenti numerici bensì troviamo questo strano "in-addr.arpa".
Se volessimo cercare, conoscendo un indirizzo ip, il suo corrispettivo nome DNS il nameserver sarebbe costretto a cercare nell'intero albero DNS dal suo dominio di competenza fino alla radice per poi ridiscendere al dominio a cui appartiene l'ip eseguendo una ricerca all'interno dei file delle zone singolo record per singolo record. Come si può immaginare, visto il grande numero di indirizzi numerici esistenti, visto che molti amministratori creano subnet diverse nelle loro reti delegandole poi ad altri DNS, visto che gli indirizzi ip sono di diverse classi, privati e pubblici questo lavoro sarebbe impossibile per il DNS. In più il Domain Name Space indicizza i suoi dati, incluso quelli numerici per nome. Per questo visto che è semplice trovare le informazioni quando si fornisce il nome del dominio che mantiene i dati, gli sviluppatori hanno pensato di creare un dominio a se, che tratta gli indirizzi numerici come "etichette", in-addr.arpa. In questo modo il dominio in-addr.arpa comprenderà 256 sotto-domini i quali includeranno altri 256 sotto-domini il quale includerà altri 256 sotto-domini fino all'ultimo campo numerico di un ip che fornirà il nome di dominio completo per un dato host. La sua rappresentazione così diviene invertita, 192.168.0.1 diventa 1.0.168.192.in-addr.arpa., questo perchè si segue la relazione con il dominio radice ".". In questo modo l'indirizzo ip sarà letto correttamente nel nome di dominio.
192.168.0.1 = 1.0.168.192.in-addr.arpa. = ns1.esempio.com.

Analizziamo ora il nostro file:
$TTL 2D
0.168.192.in-addr.arpa.            IN    SOA    ns1.esempio.com. root.ns1.esempio.com.
In questo caso il primo campo dopo il TTL poteva essere rappresentato con un @ facente riferimento all'origine specificata nella direttiva "zone" del named.conf e che viene appesa a tutti i nomi nel file che non terminano con un punto finale (
                            2003021502    ;serial
                            28800        ;refresh
                            7200        ;retry
                            604800        ;expire
                            28800 )        ;minimum
Questi campi hanno lo stesso significato spiegato nel file di zona "esempio.com.db".
                IN    NS    ns1.esempio.com.
Si definisce il o i DNS autoritativi per la zona
1                IN    PTR    ns1.esempio.com.
2                IN    PTR    mac.esempio.com.
3                IN    PTR    linux.esempio.com.
4                IN    PTR    windows.esempio.com.
5                IN    PTR    webftp.esempio.com.
6                IN    PTR    mail.esempio.com.
Infine si specificano i nomi numerici delle macchine e i loro relativi nomi di dominio. Il flag PTR sta per Pointer e indica che si tratta di record per la risoluzione da indirizzo a nome. In questo esempio ho lasciato il flag IN diversamente da quanto fatto nel precedente esempio questo perchè la sua presenza, in specialmodo per i record delle macchine è implicita. Sta alla preferenza dell'amministratore e di solito lo si usa perchè si ottengono dei file più completi ed esaustivi. Come si nota ho usato solo il campo dell'ip che identifica l'host tralasciando il resto che viene automaticamente appeso ad ogni record che non termina con un punto.


Uso delle views con named

Tipo Infobox: TIPS - Skill Level: 4- ADVANCED - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-05-31 22:09:35

Spesso succede che per necessità ci si trovi costretti a utilizzare il proprio nameserver sia per gestire le richieste della rete interna che le richieste provenienti da Internet.
Ci sono diversi modi di configurare il BIND per questo tipo di lavoro e uno dei più innovativi implementato dalla versione 9.1.x in su è l'uso dell'istruzione view.

Le views permettono di presentare una configurazione del nameserver per una comunità di host e una differente configurazione per un'altro gruppo di host.  La sua sintassi è la seguente:

view "internal" {
};


Il nome che si da alla view è arbitrario e è buona norma che sia descrittivo per il tipo di lavoro che andiamo ad eseguire. Non è obbligatorio che sia quotato tra virgolette ma è consigliabile visto che si potrebbero usare nomi che collidono con direttive interne al named. Per specificare quali hosts vedono cosa e quali vedono altro si utilizza l'istruzione match-clients

view "internal" {
    match-clients { 192.168.0.0/24; };
}


Volendo si può utilizzare una acl precedentemente assegnata:
acl "intranet" { 192.168.0.0/24; };
view "internal" {
    match-clients { "intranet"; };
};


All'interno dell'istruzione view si possono definire molte direttive, si possono specificare le direttive per le zone, descrivere i nameserver remoti con l'istruzione server o configurare direttive key per l'uso di TSIG.
Si possono inoltre definire all'interno dell'istruzione view praticamente quasi tutte le options ricordando che sovrascriveranno ogni opzione globale precedentemente specificata per quegli host che rientrano nella direttiva match-clients

acl "intranet" { 192.168.0.0/24; };
view "internal" {
    match-clients { "intranet"; };
    recursion yes;
};


Vediamo ora un esempio di configurazione utilizzando le views:
acl "intranet" { 192.168.0.0/24; };
Definisco un Access Control List per gli host della rete interna
options {
    directory /var/named;
    pid-file /var/run/named.pid;
};
L'opzione directory può essere inclusa nella direttiva view nel caso ad esempio si abbiano molti file di zona e si voglia mantenere in directory separate i file interni e i file esterni.
view "internal" {
    match-clients { "intranet"; };
Non specifico una opzione recursion perchè il suo valore di default è yes.
    zone "esempio.com" {
    type master;
    file "esempio.com.db";
    };
    zone "0.168.192.in-addr.arpa" {
    type master;
    file "192.168.0.db";
    };
};

view "external" {
    match-clients { any; };
    recursion no;
    zone "esempio.com" {
    type master;
    file "esempio.com.db.external";
    };
    zone "0.168.192.in-addr.arpa" {
    type master;
    file "192.168.0.db.external";
    };
};

In questo caso si può notare che si utilizzano diversi file di zona per la view internal e per la external; questo non è necessariamente obbligatorio ad esempio si possono comunque utilizzare gli stessi file e definire solo chi ha la possibilità di effettuare recursive quering.

Quando ci si appresta a scrivere file di configurazione che utilizzano le direttive view bisogna prestare attenzione ad alcune regole:
Innanzi tutto l'ordine in cui si specificano le direttive, nel nostro caso per esempio se avessimo specificato prima la direttiva "external" questa avrebbe inevitabilmente occluso la direttiva interna perchè la direttiva esterna ha come match-clients chiunque.
E' importante inoltre ricordare che anche se si specifica una sola direttiva view tutte le direttive zone vanno poi specificate al suo interno.


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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2006-03-23 11:52:41

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)

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-05-05 23:08:20

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

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-04-19 18:45:02

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

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-04-26 16:49:38

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

Tipo Infobox: COMMANDS - Skill Level: 4- ADVANCED - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-03-14 22:30:25

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

Tipo Infobox: TIPS - Skill Level: 4- ADVANCED - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2005-05-06 11:53:22

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

Tipo Infobox: COMMANDS - Skill Level: 4- ADVANCED - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-03-14 22:34:23

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

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2006-03-23 11:55:26

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Diego 'Eberk' Carobbio - Ultimo Aggiornamento: 2004-05-23 16:15:32

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Diego 'Eberk' Carobbio - Ultimo Aggiornamento: 2002-10-13 20:23:10

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

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2004-11-12 17:50:35

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

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-14 17:53:20

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

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-05-06 12:10:29

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

Tipo Infobox: TIPS - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-05-06 12:56:21

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

Tipo Infobox: TIPS - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-05-06 13:13:05

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@azienda.com.

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

Tipo Infobox: DESCRIPTION - Skill Level: 4- ADVANCED - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2002-10-13 22:54:54

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.


Usare Samba


File sharing in una rete locale

Visione d'insieme sul file sharing in LAN e le alternative possibili

Introduzione alla condivisione di file

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-06-04 09:53:35

Quando le prime reti di computer iniziarono ad affermarsi negli uffici e negli ambienti lavorativi, il principale utilizzo che se ne faceva era la condivisione dei file fra i diversi computer, permettendo agli utenti di lavorare sugli stessi documenti senza doverseli "scambiare" con mezzi molto meno efficaci (floppy disk e analoghi).

La condivisione dei file, pur essendo una delle prime applicazione pratiche in una rete locale, resta un punto chiave per l'ottimizzazione dei processi e dei flussi informativi dentro un'azienda.
Oltre a rendere più comodi e rapidi gli scambi di informazione dentro un'azienda, comporta una serie di problematiche che si legano direttamente alle funzionalità che fornisce.
La sicurezza in tutte le sue sfaccettature è la più importante:
se un file può essere accessibile via rete, si deve prevedere un meccanismo di controllo su chi può leggerlo, chi può modificarlo e chi non deve nemmeno sapere che esiste.
Se lo stesso file è usato contemporaneamente da più persone si devono evitare sovrascritture o di dati o incongruenze e, nello stesso momento, assicurarsi che tutti lavorino sulla stessa copia, e non ci siano altre copie in giro che possano avere livelli di aggiornamento incoerenti.
La riservatezza dei documenti viene gestita tipicamente vincolando l'accesso ai dati all'inserimento di una login e una password, che permettono di identificare l'utente e quali permessi ha sul file.
Il backup dei file condivisi è ovviamente fondamentale e risulta molto più comodo da gestire se tutti i file vengono condivisi su un server centrale. E' generalmente una pessima idea lasciare che i singoli utenti condividano file direttamente dalle loro macchine.
La disponibilità dei documenti è fondamentale nel momento in cui gli utilizzatori non possono più accedere agli stessi (per problemi hardware, di rete, di applicativo ecc.) e si vedono limitati nella loro possibilità di lavorare.
Tutte queste componenti vanno considerate nell'implementare una infrastruttura di file sharing in grado di rispondere alle esigenze richieste, e sono da dimensionare sulla base dei livelli di criticità  dei volumi di traffico previsti.


Linee guida per l'implementazione di un file server

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-06-08 00:04:34

La funzione di un file server è ovviamente quella di mettere a disposizione e condividere via rete file di varia natura a client eterogenei.

La modalità di condivisione può presentare una varietà di situazioni che vanno valutate:
- Protocollo di file sharing
Se ne possono usare diversi, volendo si possono anche usare contemporaneamente in modo da condividere tramite vie diverse la stessa directory locale. In linea di massima in un ambiente prevalentemente basato su client Windows la scelta d'obbligo è SMB, se i client sono Unix è più comodo NFS. Se il parco macchine è piuttosto eterogeneo (Windows, Max, Unix...) probabilmente SMB risulta la soluzione più comodamente implementabile.
Se i file vanno consultati solo in lettura, ha senso considerare l'uso di un server web, che permetta il browsing fra le directory e risulta particolarmente comodo in quanto a supporto di client eterogenei.
Se c'è una necessità di accesso anche in scrittura si può considerare WebDAV, ma solo se i client lo supportano.
- Password e gestione degli accessi
In ambienti reali l'accesso ai file richiede generalmente una login e una password e spesso è necessario gestire diverse login contemporaneamente con diversi livello di accesso ai file.
In questo senso è utile prevedere, in ambienti business, diversi gruppi, dai nomi generici relativi alle funzioni e alle categorie del caso (es: contabilità, magazzino, commerciale, direzione, produzione e via dicendo). Ad ogni gruppo è quindi possibile aggiungere i singoli membri, possibilmente identificati con nome e cognome, con password che hanno una scadenza e divisione dei file in directory basate su potenziali gruppi di accesso (gestire i diritti di accesso al livello di singoli file e non di directory può diventare piuttosto scomodo)
E' logico aspettarsi che un singolo utente possa far parte di più gruppi e che ci siano gruppi a loro volta composti da altri gruppi di utenti.
La logica con cui si possono scegliere i gruppi, i diritti di accesso in lettura o scrittura a date directory, la divisione stessa dei file in directory dipende dai contesti particolari ma va studiata sulla base delle esigenze attuali e di quelle prevedibili per il futuro.
- Struttura di rete
Un file server tipicamente deve gestire un traffico di rete superiore alla media, per cui anche la struttura del network in cui si trova deve essere adeguatamente disegnata.
La porta di rete a cui viene collegato il server dovrebbe essere la più performante possibile (100Mbit o 1Gbit), scelta su uno switch centrale, che possa essere ugualmente accessibile da parte degli hub o degli switch perimetrali. Il link dovrebbe essere full duplex e senza errori, il cavo di rete, come qualsiasi componente fisico del file server, dovrebbe essere in un modo fisicamente protetto e riparato.
- Hardware
Il sistema su cui gira un file server dovrebbe essere ragionevolmente protetto e ridondato, dal momento che questa funzione è spesso critica in una azienda. La ridondanza, che non esclude un valido meccanismo di backup, può venire fatta tipicamente a livello degli hard disk, con un RAID 1 o un RAID 5 e, in casi particolarmente critici, utilizzando un cluster.
Su un file server le componenti solitamente più sotto pressione sono gli hard disk (per questo è consigliabile valutare l'uso di hard disk SCSI) e il network (schede di rete almeno a 100Mbit). Memoria, soprattutto, e CPU vanno dimensionate rispetto alle proprie esigenze.
Di memoria, come sempre, più ce n'è e meglio è: secondo il Samba team sono necessari circa 460 Kb di memoria per ogni client che si collega ad un Samba 2.2.5 (su Windows 2000 bastano circa 330 Kb).
Se la memoria e il resto delle risorse bastano, Samba scala meglio di Windows quando molti client (più di 50) contemporaneamente accedono al server: il troughtput compessivo rimane tendenzialmente stabile senza decadere eccessivamente.
La CPU va dimensionata al carico e in certe situazioni può essere raccomandabile un sistema biprocessore rispetto ad uno, a parità di potenza di calcolo, a singola CPU:  più processori degradano meno le performance del sistema quando è sotto stress.
Tendenzialmente un file server particolarmente utilizzato non dovrebbe svolgere altre funzioni, almeno di giorno, quando si presume debba svolgere gran parte della sua attività.
I dati condivisi dovrebbero stare su uno o più hard disk separati, rispetto a quelli dove sono presenti i file di sistema. Se questo non è possibile, prevedere almeno l'uso di partizioni distinte.
- Backup
Il backup dei file condivisi da un file server è fondamentale. Il supporto su cui viene fatta la copia dovrebbe essere rimuovibile (harddisk, nastri ecc.) e regolarmente portato in località remote. Si può prevedere un server che svolga la duplice funzione di backup dei dati e di macchina di standby, da attivare in tempi rapidi (automaticamente o in modo manuale) in caso di guasti del server principale.
- Sicurezza
Un file server per natura è una macchina delicata che può contenere file e documenti riservati. E' altamente improbabile che un simile sistema debba stare su IP pubblico, per cui sia il suo IP, sia gli IP dei suoi client, dvrebbero appartenere ad una rete privata.
L'accesso a tutti i documenti che non siano di pubblico dominio dovrebbe avvenire tramite password (non è il caso di regalare fiducia incondizionata a chiunque abbai accesso fisico alla rete locale).
A livello di host security, si dovrebbero disattivare tutti i servizi inutilizzati e mantenere aggiornati almeno quelli che ascoltano su porte raggiungibili via rete. Avere un sistema su una rete interna lo rende ragionevolmente sicuro da attacchi direttamente dall'esterno, ma non da attacchi perpetrati da host locali.
Se possibile evitare anche che il file server possa accedere ad Internet, semplicemente non impostandogli un default gateway: gli aggiornamenti del software, l'uso di mail e DNS e varie altre operazioni che richiedono la rete possono appoggiarsi ad altri server interni.
- Logging
A parte i meccanismi di logging di sistema, volti ad individuare eventuali problemi hardware, software o di sicurezza, può aver senso loggare ogni accesso, quantomeno in scrittura, sui file condivisi.
Nel log dovrebbe comparire il nome dell'utente che ha modificato o scritto un file.
I log vanno, come sempre, ruotati e archiviati, per evitare che crescano a dismisura andando ad esaurire lo spazio su disco.


Scenari reali di file sharing in rete locale

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-06-04 10:26:11

Quasi ogni ufficio ormai ha una rete di computer su cui operano tecnici e impiegati vari.
Generalmente via rete vengono scambiati file e condivise stampanti, anche se ovviamente le applicazioni possono essere molteplici.

Lo scenario di una rete in cui viene fatto file sharing può presentare diverse topologie e logiche:
- Condivisioni distribuite, presente su computer client diversi
- Condivisioni distribuite su diversi file-server
- Condivisione centralizzata su un singolo server

In genere è preferibile centralizzare su uno o più file server tutti i documenti aziendali che vanno condivisi. Questo facilità le operazioni di backup, l'omogeneità e l'integrità delle informazioni, la gestione di permessi sugli accessi.
Dato per assodato che in ufficio medio, tutti i documenti dovrebbere risiedere su un server centrale, che, a partire dalla scheda di rete utilizzata, dovrebbe avere dell'hardware adeguato al suo ruolo, resta da definire il protocollo con cui condividerli.
Se si lavora in un ambiente Unix, dove Unix sono sia i server che le workstation, l'uso di NFS sembra la scelta logica.
Se, più probabilmente, si lavora su una rete per gran parte composta da client Windows, è più logico utilizzare il protocollo CIFS/SMB su cui nativamente si appoggiano le reti Windows.
In questo caso il server centrale può comunque essere una macchina Unix/Linux con Samba e dovrebbe diventare almeno un WINS server per la rete locale, aumentando decisamente la velcoità di browsing delle risorse di rete senza particolari complicazioni in termini di configurazione e setup.
Se i client sono tutti almeno Windows 2000, XP o successivi, esiste la possibilità di accedere al file server centrale via WebDAV, soluzione particolarmente interessante nei casi in cui i file condivisi debbano essere raggiungibili anche via browser (HTTP).
Se la rete è unicamente basata su Mac, AppleTalk o AFS sono la soluzione semplice ed immediata.
Se si lavora in un ambiente Novell, si può considerare Netware su un server centrale, sapendo che il supporto sui vari sistemi operativi è disponibile.
Quando invece si ha a che fare con reti miste, dove sia client che server montano sistemi operativi diversi, gli scenari si allargano e diventano meno definiti. In genere, tramite funzionalità native o programmi di terze parti, con qualsiasi sistema operativo recente si è in grado di utilizzare tutti i protocolli utilizzati, per cui ogni caso richiederebbe valutazioni specifiche.
Una raccomandazione di massima, in questi casi, è comunque la centralizzazione dei dati su un server centrale, a cui accedere via IP utilizzando uno dei protocolli citati (quello supportato nativamente dalla maggior parte dei client, in linea di massima).


Supporto di network file systems su diversi sistemi operativi

Tipo Infobox: DESCRIPTION - Skill Level: 1- NOVICE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-06-04 10:26:48

Per valutare quale soluzione di file sharing scegliere sulla propria rete locale è opportuno valutare cosa viene offerto e supportato sui sistemi operativi da desktop più comuni sul mercato.

WINDOWS
Su tutti i sistemi Microsoft, da Windows 3.11 in poi, è nativo il supporto di CIFS/SMB che è il protocollo utilizzato sulle normali Reti Windows che si possono browsare da Explorer o Gestione Risorse.
Il supporto NFS è previsto o tramite software di terze parti (in genere a pagamento) o con il Windows Services for Unix CD per Win2000 di Microsoft.
Il supporto AppleShare e Novell è nativo in Windows (i driver non vengono installati di default e su XP AppleTalk non è più supportato).
MAC
Sul mondo Apple va fatta una distinzione.
Mac OS X supporta nativamente praticamente tutto: SMB/CIFS, Novell, NFS, AppleTalk, WebDAV, su Mac OS precedenti il supporto per protocolli di rete non Apple non è sempre nativo e in alcuni casi ci si deve rivolgere a prodotti di tezri.
LINUX
Il supporto per tutti i file system di rete noti è presente anche se non sempre viene attivato sulle installazioni di default. Samba per SMB/CIFS, netaTalk per Apple Talk, un server NFS e Novell permettono a Linux di operare sia come client che come server in ambienti di rete eterogenei.
A livello pratico l'implementazione di alcuni servizi non è sempre semplicissima.
UNIX
In genere tutto il software opensource disponibile su Linux è compilabile su qualsiasi dialetto Unix, per cui vale quanto detto per Linux.


Il protocollo CIFS/SMB

Common Internet File System / Server Message Block

Fondamenti di NetBios

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2006-02-28 14:31:06

Quando si parla di NetBios, NetBEUI e SMB si rischia spesso di far confusione fra protocolli, livelli di applicazione, definizione e contesti. Non è un caso, questi sono argomenti di fatto anomali, nel mondo del networking, che si trascinano dietro due decenni di utilizzi in rete e relative implementazioni.
Cerchiamo di chiarire le cose a grandi linee, in modo da poter meglio individuare gli argomenti che ci interessano e contestualizzarli correttamente.

NetBios strettamente parlando più che un protocollo è un interfaccia di programmazione (API) fatta sviluppare da IBM nel 1983 per permettere a delle applicazioni di comunicare scambiandosi file e messaggi sui PC network del tempo, che avevano un basso numero di host e non prevedevano ancora l'uso del protocollo IP (già presente ma usato più su WAN che in LAN) per le comunicazioni di rete.
Con l'introduzione di Token Ring, IBM nel 1985 definì delle estensioni a NetBios (NetBIOS Extended User Interface NetBEUI) che permettevano di appoggiarsi ad un data-link 802.2 (Token Ring o Ethernet).
Microsoft ha iniziato ad usare NetBEUI come protocollo di rete su Windows for Workgroup (Windows 3.1) e poi su tutte le versioni successive ma, al contempo, con la diffusione di Novell IPX e di IP, si è iniziato a veicolare NetBios anche su IPX e IP, oltre che su altri protocolli.
E' quindi possibile trovare NetBios (tipicamente proposto come protocollo a livello di sessione) nella sua incarnazione originaria, come NetBIOS Frames Protocol (NBF) detto anche semplicemente NetBios o NetBEUI, che copre i livelli di network e trasporto, oppure incapsulato su IPX o TCP/IP con questi ultimi a gestire il network e transport layer e NetBios posizionato come session layer.
Il protocollo Server Message Block (SMB) e il suo derivato Common Internet File System (CIFS) agiscono a livello applicativo, direttamente su NetBEUI, NetBios su IPX o NetBios su IP (chiamato anche NBT o NetBT), CIFS, invece, nelle sue recenti versioni può anche essere trasportato direttamente dal TCP/IP, senza layer NetBios intermedio.

Caratteristiche di NetBios
L'indirizzamento di NetBios è flat, basato sul semplice nome di un host (generalmente fino a 15 caratteri) e senza elementi gerarchici (come il DNS) che di fatto lo rendono inadatto per gestire il routing fra network diversi. Il nome NetBios è lo stesso che viene utilizzato dai procotolli superiori come SMB/CIFS.  
Per impedire che due host nella stessa rete abbiamo lo stesso nome viene utilizzato il protocollo Name Management Protocol (NMP), tramite il quale, a colpi di broadcast, un host annuncia la sua presenza in rete e avverte quando un nuovo host con lo stesso nome prova ad apparire.
Nella comunicazione fra host si usano lo User Datagram Protocol (UDP, diverso dall'UDP usato su IP), unreliable e basato su datagrammi fino a 512 byte e il Session Management Protocol (SMP), bidirenzionale, reliable e basato su sessioni che vengono stabilite fra due host. Meccanismi di controllo e di monitoring vengono gestiti dal Diagnostic and Monitoring Protocol (DMP).
Attualmente la forma maggiormente utilizzata è quella di NetBios incapsulato su TCP/IP (NetBios over TCP/IP o NBT). Questo standard è definito nelle RFC 1001 e RFC 1002 dove si affrontano le problematiche relative all'associazione di un nome di host ad un indirizzo IP (broadcast o server di nomi centralizzato) e i metodi di comunicazione (a datagrammi o a sessioni).
Le porte utilizzate per questi servizi sono:
netbios-ns      137/udp                         # NETBIOS Name Service
netbios-dgm     138/udp                         # NETBIOS Datagram Service
netbios-ssn     139/tcp                         # NETBIOS Session Service

Gestione dei nomi su NetBios
I nomi di host di NetBios su TCP/IP (che coincidono con i nomi SMB) possono essere registrati (annunciati) e risolti (trovati) sul network locale sia tramite broadcast che tramite un server di nomi centralizzato (NBNS NetBios Name Server, su sistemi Windows l'implementazione di un NBNS è il WINS server) che risulta, soprattutto su reti affollate, molto più efficace.
A seconda di come un host è configurato per gestire i nomi assume un tipo di nodo diverso:
b-node - Host che usa solo broadcast per la risoluzione e la registrazione degli host name.
p-node - Host che usa un server centrale (comunicazione point-to-point) per risoluzione e registrazione
m-node - Host che usa broadcast per la registrazione e la risoluzione, inoltre se porta a termine con successo una registrazione lo notifica ad un server NBNS, che viene usato anche quando la risoluzione via broadcast non ha successo.
h-node (hybrid) - Host che usa un server NBNS per risoluzione e registrazione dei nomi e, nel caso in cui il server NBNS non sia disponibile utilizza i broadcast. Questa modalità è stata introdotta da Microsoft, non appare nelle RFC 1001 e 1002.
Il tipo di nodo, su Windows, è visibile nell'output del comando ipconfig /all dove si parla di NodeType

I nomi possono essere lunghi 15 caratteri (byte) e contenere caratteri alfanumerici standard ( a-z, A-Z, 0-9, ! @ # $ % ^ & ( ) - ' ). Il sedicesimo e ultimo byte indica il tipo di risorsa, a seconda del valore esadecimale indicato corrisponde una diversa risorsa, alcuni esempi:
00 - Normale workstation
03 - Servizio di messaggistica (WinPopup)
1B - Domain Master Browser
20 - Fileserver
NetBios inoltre prevede il concetto di gruppo (i Workgroup in ambiente Windows).

Principi di SMB
SMB è un protocollo di livello applicativo utilizzato per la condivisione di directory fra computer, la stampa via rete e lo scambio di file e messaggi. Si basa su una struttura client-server ed ha una logica di tipo request-response. Dalla sua introduzione originaria ha subito varie modifiche e varianti che modificano e aggiungono nuovi SMB (Server Message Blocks, di fatto i "comandi" utilizzabili). Su Windows 95 e NT per esempio viene utilizzata la variante NT LM 0.12, che viene supportata, fra gli altri, anche da Samba, un implementazione OpenSource del protocollo che è utilizzabile su gran parte degli Unix in circolazione.


L'implementazione Windows di SMB

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-03-25 16:09:46

Microsoft utilizza NetBios e SMB come protocolli di rete per condividere risorse su Windows fin da Windows 3.1. Rispetto alle versioni esistenti di questi protocolli ha introdotto alcune estensioni proprietarie:

- Domini Windows
- Browsing
- Server WINS

I Domini Windows
Fondamentalmente un dominio Windows è un workgroup con un server che agisce come Domain Controller con funzioni di autenticazione centralizzata per l'accesso alle risorse (file, stampanti, login sul sistema...) da parte tutti gli host che fanno parte del dominio.
Vengono usati protocolli differenti per Windows 95/98, Windows NT e Windows 2000 (dove il concetto di dominio viene ulteriormente allargato con le Active Directory).
Il Primary Domain Controller (PDC) è il server che mantiene un database di tutte le password (SAM): quando un client cerca di accedere alle risorse di un server, quest'ultimo verifica sul PDC se login e password fornite sono valide. Se questo accade al client viene permesso l'accesso alle risorse richieste e fornito un token di autenticazione con cui automaticamente riesce ad accedere ad altre risorse in rete accessibili dalla stessa login.
Il database delle password viene automaticamente copiato ad uno o più Backup Domain Controller (BDC) che possono  essere utilizzati per autenticare i clinet nel caso in cui i PDC risulti inaccessibile.

Browsing
Per rendere più rapida l'individuazione degli host e delle risorse in una rete locale, Microsoft ha introdotto il Local Master Browser un computer che ha il ruolo di mantenere la lista degli host in rete (browse list) e che fa da riferimento per tutte le richieste e gli aggiornamenti da parte delle altre macchine in rete.
Praticamente ogni macchina Windows può agire da Local Master Browser o da Backup Browser (host che riceve la browse list da un Master Browser e viene utilizzata in caso di inagibilità di quest'ultimo). Queste funzionalità vengono definite automaticamente dagli host NetBios in una rete locale tramite una procedura chiamata elezione in cui tutti gli host partecipano tramite broadcast. A seconda del sistema operativo, della versione di protocollo utilizzata, del tempo di uptime nella rete e del nome dell'host viene automaticamente deciso chi deve operare come Master Browser e questo rimane tale fino a quando resta connesso o un nuovo host con migliori credenziali si aggiunge alla rete.
Quando si clicca, in Windows, su Risorse di Rete di fatto si ottiene dal Master Browser la browse list degli host in rete (notare che questa potrebbe essere non perfettamente aggiornata, con alcuni host che risultano presenti anche se magari sono spenti o disconnessi e non hanno avuto modo di comunicarlo al Master Browser), quando si clicca sul singolo host si ottiene l'elenco delle sue risorse condivise.

Server WINS
Il Windows Internet Name Service (WINS) è l'implementazione Microsoft di un NetBios Name Server (NBNS) che ha la funzione di mantenere la lista dei nomi NetBios degli host in rete e dei relativi indirizzi IP. Ovviamente questo serve quando si usa NetBios over TCP/IP ed è una soluzione consigliabile quando si ha una rete medio grande o si devono connettere workgroup presenti su network IP differenti.
Anche in questo caso, oltre ad un Primary Wins Server possono esistere uno o pià Secondary Wins Server con funzioni di ridondanza e backup.


Installazione e gestione di Samba

Installazione di Samba tramite RPM e sorgenti, file installati e posizioni - Gestione del servizio

Installazione di Samba

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2004-06-04 10:57:16

Installazione step by step di samba attraverso i pacchetti RPM e la compilazione dei sorgenti.

TAR.GZ - COMPILAZIONE DEI SORGENTI:
- Download dei sorgenti
Si scarica il tar.gz di Samba dal sito ufficiale o uno dei suoi mirror:
root@SATURNO root]# wget ftp://it.samba.org/pub/samba/samba-latest.tar.bz2
--16:45:01--  ftp://it.samba.org/pub/samba/samba-latest.tar.bz2
           => `samba-latest.tar.bz2'
Resolving it.samba.org... done.
Connecting to it.samba.org[217.56.103.6]:21...
[...]


- Scompattazione sorgenti
[root@SATURNO root]# tar -jxvf samba-latest.tar.bz2
[..]
[root@SATURNO root]# cd  samba-2.2.8/
[root@SATURNO samba-2.2.8]# ls -l
total 102
-rw-r--r--    1 783      783         17982 May  4  1996 COPYING
Directory contenente documentazione di vario genere e in vari formati
drwxr-xr-x   10 783      783          1024 Feb  5 17:24 docs
Directory contenente esempi di file di configurazione oltre a tools o script per la gestione della configurazione di samba
drwxr-xr-x   16 783      783          1024 Mar 15 05:28 examples
-rw-r--r--    1 783      783          4551 Apr 30  2002 Manifest
Directory contenente files di configurazione e relativi script per la creazione di package per vari OS e distribuzioni di Linux
drwxr-xr-x   15 783      783          1024 May  3  2002 packaging
Directory contenente sorgenti di un semplice monitoring della shared memory
drwxr-xr-x    2 783      783          1024 May  3  2002 pcp
-rw-r--r--    1 783      783             0 Aug 21  1997 Read-Manifest-Now
-rw-r--r--    1 783      783          8412 Feb 28 16:56 README
-rw-r--r--    1 783      783          1894 Apr 14  2001 Roadmap
Directory contenente i sorgenti
drwxr-xr-x   33 783      783          1024 Mar 15 05:28 source
Directory contenente il tool swat per la configurazione di samba via web
drwxr-xr-x    5 783      783          1024 Mar 15 05:28 swat
Directory contenente, script, sorgenti e altro per eseguire alcuni test su samba
drwxr-xr-x    9 783      783          1024 Mar 15 05:28 testsuite
-rw-rw-r--    1 783      783         59481 Mar 15 05:44 WHATSNEW.txt


-Compilazione sorgenti
La compilazione dei sorgenti avviene come nella maggior parte dei casi con il lancio dello script configure per il settaggio di alcuni parametri e il comando make per la compilazione e installazione dei sorgenti.
[root@SATURNO samba-2.2.8]# cd source/
Per richiamare l'elenco delle opzioni e la relativa spiegazione, lanciare il seguente comando:
[root@SATURNO source]#./configure --help
Di seguito sono riportate le opzioni con relativa spiegazione utilizzati per la creazione dell' RPM per la distribuzione redhat.
Imposta il prefisso del path di installazione
--prefix=%{prefix} \
Imposta la directory ove il sistema scrive tutte quelle informazioni come log, pidfile etc.
--localstatedir=/var \
Imposta la directory contenente tutti i file di configurazione
--with-configdir=/etc/samba \
Specifica la directory ove viene messo smbpasswd
--with-privatedir=/etc/samba \
Specifica la directory dove risiedono i code page files
--with-codepagedir=/etc/codepages \
Abilita l'uso dei path fhs-compliant
--with-fhs \
Abilita il supporto per quota
--with-quotas \
Include il supporto per MS Dfs
--with-msdfs \
Abilita il supporto per smbmount
--with-smbmount \
Abilità il supporto per l'uso di PAM password database
--with-pam \
Include anche il modulo smbpass
--with-pam_smbpass \
Abilita il supporto del logging via syslog
--with-syslog \
Include utmp accounting
--with-utmp \
Specifica dove vengono installati i file riguradanti a swat
--with-sambabook=%{prefix}/share/swat/using_samba \
--with-swatdir=%{prefix}/share/swat \
Abilita la compilazione delle librerie dinamiche del client
--with-libsmbclient

[root@SATURNO source]# ./configure --prefix=/usr \
--localstatedir=/var \
--with-configdir=/etc/samba \
--with-privatedir=/etc/samba \
--with-codepagedir=/etc/codepages \
--with-fhs \
--with-quotas \
--with-msdfs \
--with-smbmount \
--with-pam \
--with-pam_smbpass \
--with-syslog \
--with-utmp \
--with-sambabook=/usr/share/swat/using_samba \
--with-swatdir=/usr/share/swat
[...]
checking for poptGetContext in -lpopt... yes
checking whether to use included popt... no
checking configure summary... yes
updating cache ./config.cache
creating ./config.status
creating include/stamp-h
creating Makefile
creating script/findsmb
creating include/config.h
Compilazione dei sorgenti
[root@SATURNO source]# make
Using FLAGS =  -O   -Iinclude -I./include -I./ubiqx -I./smbwrapper -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE  -DLOGFILEBASE="/var/log/samba" -DCONFIGFILE="/etc/samba/smb.conf" -DLMHOSTSFILE="/etc/samba/lmhosts"   -DSWATDIR="/usr/share/swat" -DSBINDIR="/usr/sbin" -DLOCKDIR="/var/cache/samba" -DCODEPAGEDIR="/etc/codepages" -DDRIVERFILE="/etc/samba/printers.def" -DBINDIR="/usr/bin" -DPIDDIR="/var/run/samba" -DLIBDIR="/usr/lib" -DHAVE_INCLUDES_H -DPASSWD_PROGRAM="/usr/bin/passwd" -DSMB_PASSWD_FILE="/etc/samba/smbpasswd" -DTDB_PASSWD_FILE="/etc/samba/smbpasswd.tdb"
[...]
Installazione
[root@SATURNO source]# make install
[...]


INSTALLAZIONE TRAMITE RPM
L'installazione completa di samba via rpm richiede più package scaricabili da repository come http://www.rpmfind.net oppure nel caso di Redhat ci si può appoggiare anche al suo repository di errata.
Supponiamo di aver scaricato i seguenti RPM:
Package principale contenente documentazione, manuali e binari per attivare il servizio.
samba-2.2.7-4.8.0.i386.rpm
Package contenente le utility e relativi manuali per il mounting delle share
samba-client-2.2.7-4.8.0.i386.rpm
Package contenente file di necessari sia al client che al server come l'utility smbpasswd o le code pages
samba-common-2.2.7-4.8.0.i386.rpm
Utility per la configurazione di samba via web
samba-swat-2.2.7-4.8.0.i386.rpm

Installazioe di tutti i vari rpm relativi a samba
[root@SATURNO root]# rpm -ihv samba-*.rpm
warning: samba-2.2.7-4.8.0.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing...                ########################################### [100%]
   1:samba-common           ########################################### [ 25%]
   2:samba                  ########################################### [ 50%]
   3:samba-client           ########################################### [ 75%]
   4:samba-swat             ########################################### [100%]

Visualizzazione di ciò che i vari rpm hanno installato
[root@SATURNO root]# rpm -qil samba
[...]
File di configurazione per logrotate
/etc/logrotate.d/samba
File di configurazione per PAM
/etc/pam.d/samba
Script di gestione del servizio
/etc/rc.d/init.d/smb
File contenente la correlazione unix_name e smb_name
/etc/samba/smbusers
File contenente le opzioni passate ai vari demoni
/etc/sysconfig/samba
Uility per la creazione di file unicode per samba
/usr/bin/make_unicodemap
Script relativo alla gestione del file smbpasswd
/usr/bin/mksmbpasswd.sh
Script per la gestione degli utenti samba
/usr/bin/smbadduser
/usr/bin/smbcontrol
/usr/bin/smbstatus
/usr/bin/tdbbackup
Librerie e file header
/usr/include/libsmbclient.h
/usr/lib/libsmbclient.a
/usr/lib/samba/vfs
/usr/lib/samba/vfs/recycle.so
Binari relativi ai demoni
/usr/sbin/nmbd
/usr/sbin/smbd
Documnetazione
/usr/share/doc/samba-2.2.7
/usr/share/doc/samba-2.2.7/COPYING
/usr/share/doc/samba-2.2.7/LDAP
/usr/share/doc/samba-2.2.7/LDAP/README
/usr/share/doc/samba-2.2.7/LDAP/export_smbpasswd.pl
/usr/share/doc/samba-2.2.7/LDAP/import_smbpasswd.pl
/usr/share/doc/samba-2.2.7/LDAP/ldapchpasswd
/usr/share/doc/samba-2.2.7/LDAP/ldapsync.pl
[...]
Manuali
/usr/share/man/man1/make_unicodemap.1.gz
/usr/share/man/man1/smbcontrol.1.gz
/usr/share/man/man1/smbstatus.1.gz
/usr/share/man/man5/smbpasswd.5.gz
/usr/share/man/man7/samba.7.gz
/usr/share/man/man8/nmbd.8.gz
/usr/share/man/man8/pdbedit.8.gz
/usr/share/man/man8/smbd.8.gz
Directory di appoggio
/var/cache/samba
/var/log/samba
/var/run/samba
/var/spool/samba

[root@SATURNO root]# rpm -qil samba-common
[...]
Script di gestione del demone windbind
/etc/rc.d/init.d/winbind
File di configurazione
/etc/samba
/etc/samba/lmhosts
/etc/samba/smb.conf
Librerie dinamiche
/lib/libnss_winbind.so

/lib/libnss_winbind.so.2
/lib/libnss_wins.so
/lib/libnss_wins.so.2
/lib/security/pam_winbind.so
utility e binari di vario genere per l'amministrazione del servizio e degli utenti di samba
/usr/bin/make_printerdef
/usr/bin/make_smbcodepage
/usr/bin/smbpasswd
/usr/bin/testparm
/usr/bin/testprns
/usr/bin/wbinfo
/usr/sbin/winbindd
Manuali
/usr/share/man/man1/make_smbcodepage.1.gz
/usr/share/man/man1/testparm.1.gz
/usr/share/man/man1/testprns.1.gz
/usr/share/man/man1/wbinfo.1.gz
/usr/share/man/man5/lmhosts.5.gz
/usr/share/man/man5/smb.conf.5.gz
/usr/share/man/man8/smbpasswd.8.gz
/usr/share/man/man8/winbindd.8.gz
Directory contenente i codepages
/usr/share/samba
/usr/share/samba/codepages
[...]
[root@SATURNO root]# rpm -qil samba-client
[...]
links a /usr/bin/smbmount,binario per il mounting delle share
/sbin/mount.smb
/sbin/mount.smbfs
Utility per l'interrogazione del server smb e per il mountig delle share
/usr/bin/nmblookup
/usr/bin/rpcclient
/usr/bin/smbcacls
/usr/bin/smbclient
/usr/bin/smbmnt
/usr/bin/smbmount
/usr/bin/smbprint
/usr/bin/smbspool
/usr/bin/smbtar
/usr/bin/smbumount
Manuali
/usr/share/man/man1/nmblookup.1.gz
/usr/share/man/man1/rpcclient.1.gz
/usr/share/man/man1/smbcacls.1.gz
/usr/share/man/man1/smbclient.1.gz
/usr/share/man/man1/smbtar.1.gz
/usr/share/man/man8/smbmnt.8.gz
/usr/share/man/man8/smbmount.8.gz
/usr/share/man/man8/smbspool.8.gz
/usr/share/man/man8/smbumount.8.gz


Per la gestione del servizio ci si può appoggiare allo script: /etc/init.d/smb, specificando come parametro l'azione da eseguire, esempio start, stop o restart.
Opzioni disponibili:
- start : Avvia il servizio smb
- stop : killa i processi smb
- restart : Esegue in successione stop e start
- reload : esegue il reload del file di configurazione
- status : visualizza lo status dei demoni
- condrestart : Esegue il restart del servizio  

Per richiamare le singole opzioni utilizzabili lanciare lo script senza argomenti
[root@SATURNO root]# /etc/init.d/smb   
Usage: /etc/init.d/smb {start|stop|restart|reload|status|condrestart}
Esempi di avvio, restart e stop
[root@SATURNO root]# /etc/init.d/smb start
Starting SMB services:                                     [  OK  ]
Starting NMB services:                                     [  OK  ]
[root@SATURNO root]# /etc/init.d/smb restart
Shutting down SMB services:                                [  OK  ]
Shutting down NMB services:                                [  OK  ]
Starting SMB services:                                     [  OK  ]
Starting NMB services:                                     [  OK  ]
[root@SATURNO root]# /etc/init.d/smb stop
Shutting down SMB services:                                [  OK  ]
Shutting down NMB services:                                [  OK  ]


smbd e nmbd

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-05-31 21:34:20

Un server Samba si compone di due principali demoni:
smbd per i servizi di condivisione di file e stampanti.
nmbd per il servizio di risoluzione dei nomi NetBIOS e di assistenza al browsing delle risorse.

Entrambi questi demoni si appoggiano al file smb.conf per funzionare e hanno opzioni da riga di comando specialmente per effettuare test e debug dei rispettivi servizi.
Smbd e nmbd necessitano di essere avviati insieme per poter garantire un funzionamento corretto del server Samba. E' consigliabile infatti far gestire il loro avvio da uno script di avvio e le principali distribuzioni vengono già fornite di comodi script come /etc/init.d/samba anche se la loro posizione varia tra le diverse distribuzioni.
In altri casi si può usare il super-demone di gestione dei servizi inetd o infine si possono avviare da riga di comando ma a patto di essere l'utente root.

smbd: Come detto questo demone è responsabile della gestione delle risorse condivise, siano esse dischi o stampanti, tra il server Samba e i suoi client. Fornisce i servizi di condivisione dei file e delle stampanti, di browsing ai client di una o più sotto-reti e di gestione di tutti i messaggi di notifica che client e server si scambiano. Infine si occupa di autenticare gli utenti e di controllare le risorse condivise.
Smbd rilegge il suo file di configurazione automaticamente ogni minuto. Si può forzare il server a rileggere il suo file di configurazione con un SIGHUP. Ricaricare il file comunque non influirà sui client già connessi i quali dovranno sconnettersi e riconnetersi perchè le modifiche abbiano effetto.
Il modo esatto di lanciarlo e con l'opzione -D che lo porta ad avviarsi come demone. Questa è anche l'opzione di default.
Le sue opzioni a parte quella appena descritta sono finalizzate al debug e sono principalmente ad uso degli sviluppatori. Con -h si può avere la lista di queste, per approfondirle fare riferimento alla pagina di man.

nmbd: Questo demone è in realtà un semplice name server che imita le funzionalità di un WINS o di un NetBIOS name server. Ascolta e cattura le richieste per il name server e risponde con le informazioni in suo possesso. Si occupa inoltre di mantenere una lista per il browse delle risorse di rete e partecipa alla scelta del browsing. Se attivo il server WINS nmbd tiene il database dei nomi e degli indirizzi in un file chiamato wins.dat. Un demone nmbd può anche rispondere alle richieste del protocollo di browsing delle Risorse di Rete di Windows. Il browsing è una serie di protocolli di annuncio, annuncio di servizi o di directory condivise che fornisce una directory dinamica che contiene i server e i dischi e le stampanti presenti nella rete NetBIOS. Se nmbd è il master browser locale  mantiene i databases di browsing nel file browse.dat.
Anch'esso se lanciato con l'opzione -D si comporta come un demone andando in background e ascoltando sulla sua porta. Il resto delle opzioni anche in questo caso serve principalmente per effettuare test particolari e verifiche per gli sviluppatori. Con l'opzione -h se ne può avere un brief veloce.


smbpasswd

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-04-04 21:27:21

Utility per il cambio della password di Samba.

smbpasswd [opzioni] [utente] [password]
-L Permette di specificare le opzioni che solo l'utente root può utilizzare anche come utenti normali. Utilizzato per test o cambiamenti del file smbpasswd in locale.
-r  remote hostname Opzione che permette di specificare l'host remoto su cui cambiare la password per samba. Se si omette il valore di defaul è localhost
-t Forza il cambiamento della password di un trusted machine account. Account creato per "registrare" la macchina nel dominio gestito dal smb server
-U username[%pass] Opzione che permette di specificare, l'utente a cui verrà modificata  la password. Opzione utilizzabile solo se affiancata all'opzione -r
-a Opzione per aggiungere nuovi utenti nel file smbpasswd. L'utente che si vuole inserire deve già esistere come utente del sistema con la relativa entry nel file /etc/passwd
-s Abilita il silent mode e si aspetta di leggere la nuova e vecchia password dallo standard input
-S Permette di visualizzare il domain SID
-d Opzione per disabilitare l'utente dal file smbpasswd in locale
-e Opzione per abilitare l'utente dal file smbpasswd locale
-m Opzione per specificare l'account è un account relativo ad un host
-n Permette di settare la password a NULL
-x Opzione che permette di cancellare l'utente dal file smbpasswd locale
-j Domain Opzione utilizzata per registrare il server smb in un dominio NT

Nel caso in cui non venga specificato l'utente il comando interpreterà utilizzerà l'utente stesso che ha lanciato il comando per eseguire le operazioni.

Esempio:
Cambio della password dell'utente neo sul server smb trinity
[neo@dido neo]$ smbpasswd -r trinity -U neo
Old SMB password:
New SMB password:
Retype new SMB password:
Password changed for user neo


smbstatus

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-04-04 21:24:55

Comando utile per debugging e gestione del servizio di smb, poichè permette di visualizzare a video un report sullo status delle connessioni.

smbstatus [opzioni] [-s configuration file] [-u username]
-s Specifica il  file di configurazione
-u Visualizza solo le informazioni sull'utente specificato
-b Visualizza un report minimo
-d Visualizza un reposrt verboso
-p Visualizza la lista dei processi smb

Visualizzazione dello status delle connessioni smb
[root@trinity root]# smbstatus  
Samba version 2.2.7
Service      uid      gid      pid     machine
----------------------------------------------
nas      root     root     13039   castro   (10.0.1.170) Fri Apr  4 10:26:33 2003
simone  simone    simone 12811   fox      (10.0.1.163) Fri Apr  4 09:38:55 2003
fulvio   fulvio fulvio 12808   yakumoscio (10.0.1.6) Fri Apr  4 09:37:55 2003
massimo   massimo massimo 12803   blasco   (10.0.1.18) Fri Apr  4 09:35:28 2003
IPC$         mas mas 12924   data  (10.0.0.37) Fri Apr  4 09:48:48 2003
archive      root     root     13039   backup   (10.0.1.70) Fri Apr  4 10:27:06 2003
aler        aler    aler    13266   jam     (10.0.1.154) Fri Apr  4 11:05:53 2003
No locked files

Visualizzazione dei processi smb
[root@trinity root]# smbstatus -p
Samba version 2.2.7
Service      uid      gid      pid     machine
----------------------------------------------
13388
13039
[...]


testparm

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-05-31 21:25:07

La suite Samba risulta essere veramente ricca di tools e script per la configurazione gestione e uso dei suoi servizi, uno di questi è molto utile per verificare prima di lanciare il demone che tutto sia a posto all'interno del file di configurazione.

testparm esegue un controllo sul file di configurazione specificato che per default, se si è installato dai sorgenti è dir_samba/lib/smb.conf, dopo di che se è tutto ok stampa a monitor "Loaded services file OK." più qualche informazione ulteriore e dopo aver premuto [enter] mostra tutti i settaggi e come sono configurati.
La sua sintassi:
testparm [opzioni] path_file_conf [hostname indirizzo_IP]
Per l'ultimo campo quando si specifica l'hostname va sempre specificato anche l'indirizzo IP e in questo modo si effettua una verifica dei parametri host allow e host deny nel smb.conf per verificare che il dato host abbia accesso al server Samba.
Le opzioni sono:
-h: Per avere in output un brief delle opzioni e della sintassi.
-L nome_server: Per modificare il valore della macro %L nel valore nome_server.
-s: Fa in modo che non faccia premere all'utente il tasto [enter] per avere il dump dei settaggi.  


smbcontrol

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2004-06-04 11:06:42

Utility che permette di gestire (inviare comandi / messaggi ) ai demoni di smbd, nmbd e winbindd.

smbcontrol  [ -d  ]  [ -s  ]  -i
oppure
smbcontrol  [ -d  ]  [ -s  ] destination message-type [ parameter ]
-d Specifica il livello di debug (Accetta valori interi da 0 a 10)
-s Specifica il file di configurazione
-i Abilita l'interctive mode,
destination Per destination si intende a quale processo dovrà essere inviato il messaggio, è possibile specificare sia l'ID oppure sia il nome: nmbd o smbd.
La differenza fra i due target nmbd e smbd oltre al nome del processo consiste nel fatto che il messaggio con destinazione nmbd viene mandato in modalità broadcast a tutti i processi nmbd attivi in quel momento mentre per smbd verrà inviato un singolo messaggio al processo con l'ID specificato nel pid file (smbd.pid)
message-type Specifici che tipo di messaggio viene inviato. Ecco alcuni esempi:
- close-share: Termina tutte le sessioni correnti dei client connessi alla share, come argomento si aspetta il nome della share.
- debug: Setta il debug level
- force-election: Forza l'elezione del master browser, unico target possibile è nmbd
- ping: Invia dei ping ai processi evidenziati, stessa modalità dei pacchetti ICMP.
Come parametro si aspetta il numero di ping da inviare di conseguenza i PONG dei singoli processi.    
- profile: Invia un messagio ad un processo smbd per modificare i parametri del profile. I parametri possono essere settati ad on/off per attivarli o disattivarli oppure flush e count per azzerare o attivare i vari counter.
parameter Parametri richiesti dal messaggio inviato, Es il livello di debugging o il numero di ping da inviare ad un certo processo.

Esempi:
Invio di ping ai processi nmbd
[root@trinity root]# smbcontrol smbd ping 1
PONG from PID 585
PONG from PID 30423
PONG from PID 29124
PONG from PID 29220
PONG from PID 29414
PONG from PID 29139
PONG from PID 29151
Abilitazione dell'interactive mode
[root@trinity root]# smbcontrol  -i
visualizzazione dell'help
smbcontrol> ?
<destination> <message-type> <parameters>
         <destination> is one of "nmbd", "smbd" or a process ID
        <message-type> is one of: debug, force-election, ping, profile, profilelevel, debuglevel, printer-notify, close-share


smbmnt, smbmount e smbwrapper

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2004-06-04 11:07:47

Se una volta configurato il server Samba si desidera accedere alle risorse condivise come se fossero parte del filesystem Unix e non come se si accedesse ad una risorsa esterna, ad esempio usando smbclient, si dovrà "montare" la risorsa così come si montano le diverse partizioni del disco.

In questo modo sarà possibile eseguire operazioni sui file condivisi da una macchina Windows ad esempio come se si trattasse di file unix e quindi usando tutti i fantastici e versatilissimi comandi unix, grep, sort, df, du, ls, etc... etc.
Per far questo si utilizzano alcune utility fornite con il pacchetto Samba.
Smbmount, ristretta esclusivamente ai sistemi Linux è equivalente a usare il comando mount -t smbfs. Per utilizzarla è necessario aver compilato i sorgenti assicurandosi che nel configure si sia abilitata l'opzione --with-smbmount e bisogna accertarsi che il kernel abbia abilitato il supporto per il filesystem smb/cifs.
Smbmount è un demone e quindi una volta lanciato anche se si è smontata la risorsa continuerà ad essere attivo tra i processi listabili con un ps o con top. Per eseguire le operazioni si avvale del comando smbmnt.
Vediamo la sintassi e le opzioni possibili.
smbmount servizio punto_di_mount  [ -o opzioni ]
Le opzioni si specificano separate con una virgola e con il modello chiave=valore, le più importanti sono:
username=arg: Permette di specificare un utente con il quale accedere alla risorsa. Se non specificato verrà utilizzato l'utente dato dalle variabili di ambiente. Supporta anche l'uso di sintassi come user%password o user/workgroup o anche user/workgroup%password.
password=arg: Permette di specificare una password. Se non definita si userà la variabile di ambiente PASSWD e se non trova nessuna password che vada bene, a meno che non si sia definita l'opzione guest, ci restituirà un prompt per digitarla.  
credentials=nome_del_file: Permette di definire un file esterno per la specifica dell'utente e della password. La sintassi del file sarà:
username = valore
password = valore

In questo modo si può evitare di avere queste specifiche in file condivisi da altri utenti nel sistema come /etc/fstab.
netbiosname=arg: Permette di specificare un nome netbios per la sorgente. Se non specificato viene usato il nome dell'host locale.
uid=arg: Permette di specificare un utente che sarà proprietario per tutti i file presenti nella risorsa, si può specificare usando l'id numerico per l'utente o il suo nome.
gid=arg: Permette di specificare il gruppo propietario per tutti i file della risorsa montata. Si può definire per id o per nome.
port=arg: Specifica una porta diversa dalla standard 139 per comunicare con la risorsa remota.
fmask=arg: Definisce i permessi dei file della risorsa montata. Se non specificato si usa la umask corrente.
dmask=arg: Come sopra ma per le directory.
debug=arg: Permette la specifica per il debug delle operazioni che si effettuano. Un valore consigliato può essere 4, se si specifica un valore troppo alto si rischia di avere troppi messaggi che impediscono poi la visualizzazione dei dati interessanti.
ip=arg: Setta l'ip o il nome dell'host remoto a cui ci si vuole connettere.
workgroup=arg: Permette di specificare il workgroup a cui si riferisce la risorsa condivisa da montare.
guest: Non richiede una password.
rw: Monta la risorsa in read and write mode.
ro: Monta la risorsa in read-only mode
Una volta montata la risorsa la si può smontare con l'equivalente di umount, smbumount. Per la verità si è pensato a questo eseguibile per dare ai normali utenti più versatilità sulle risorse montate. Infatti questo comando è setuid ed è immaginabile che mettere setuid umount sia una cosa da pazzi. Root potrà comunque smontare le risorse con umount.
Non ha opzioni e la sua sintassi è:
smbumount punto_di_mount
I comandi appena descritti valgono per l'uso su sistemi Linux ma se si sta usando Solaris? O HP-UX?
Per questo è stato studiato un'altro metodo che, purtroppo ancora imperfetto e in via di sviluppo, permette di effettuare operazioni sui file di risorse condivise senza avere un supporto smbfs. Si abilita il suo uso in fase di compilazione dei sorgenti con l'opzione, da passare al configure, --with-smbwrapper e si utilizza per le operazioni l'eseguibile smbsh.
Smbsh quando lanciato fornisce un albero di directory sotto /smb. Le sotto directory di /smb corrispondono ai server e le loro sottodirectory agli share su disco e di stampa. Crea di fatto una subshell e i comandi impartiti dal suo prompt interagiscono con i file come se si trattassero di file locali al sistema unix della macchina.
Ha varie opzioni:
-d: Setta il livello di debug dell'applicazione e quindi anche di log, i suoi valori vanno da 0 a 10. Il livello 0 registra solo i messaggi più importanti, l'uno è normale e da 3 in su è inteso solo per il debug visto il forte carico di lavoro a cui sottopone Samba.
-l file: Imposta il nome del file di log da usare.
-P prefisso: Imposta una divesa directory da /smb su cui montare il filesystem SMB.
-R ordine: Imposta l'ordine di risoluzione dei nameservers. Accetta i quattro paramentri lmhosts, host, wins e bcast in qualsiasi ordine.
-U utente: Supporta il modo username%password
-W workgroup: Imposta il workgroup NetBIOS al quale il client si connette.


smbclient

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2004-06-04 11:08:27

Ci sono diversi modi di accedere a risorse condivise con SMB e uno di questi è usare smbclient. Il suo uso non si discosta molto dall'usare un normale client ftp fuorchè il fatto che utilizza un diverso protocollo.

Questo comando è considerato tra i più usati della suite Samba. Non solo è una comoda utility per trasferire files da e verso risorse Samba ma ne permette anche l'archiviazione, è utile per il testing del server e per controllare quali servizi sono attivi.
La sua sintassi è:
smbclient //server/risorsa [-opzioni]
Le opzioni di smbclient sono molte, consultare la pagina man del comando per averne un prospetto completo, vediamo qui alcune delle più importanti.
-s config_file: Permette di specificare un file di configurazione di Samba da usare.
-M NetBIOS_name: Questa opzione permette di inviare un messaggio WinPopUp ad una macchina della rete. Una volta stabilita la connessione si digita il messaggio terminandolo con un ctrl+D. Non c'è modo di sapere se il messaggio è arrivato a destinazione o meno e il limite dato dal protocollo è che non si superino i 1600 bytes. Può essere utile il suo uso associato a cat, ad esempio cat messaggio.txt | smbclient -M PIPPO
-n NetBIOS_name: Con questo comando posso scegliere un nome NetBIOS a mio piacimento. Se non specificato Samba usa il nome del'host locale con lettere maiuscole.
-h: Stampa a monitor un brief delle principali opzioni.
-I: Permette di specificare l'indirizzo ip di una risorsa condivisa a cui si vuole accedere. In questo modo si forza il client a non cercare assolutamente di risolvere il nome della risorsa e di connettersi alla macchina specificata.
-U username[%password]: Con questa opzione mi è possibile specificare un utente e eventualmente una password da usare per accedere a una data risorsa.
-A nome_del_file: Questa opzione può essere utilizzata al posto di quella appena vista e permette di specificare un file da cui attingere lo USER e la PASSWD. E' stata studiata principalmente per l'uso negli script. Si può specificare anche il nome del dominio. La sintassi è:
username = valore
password = valore
domain = valore

-L: Questa opzione è utile in fase di testing e permette di listare tutte le risorse condivise di un dato host.
-W WORKGROUP: Questa opzione può essere necessaria per collegarsi ad alcuni server e permette di specificare un diverso WORKGROUP (dominio) da quello specificato nel smb.conf per la connessione in oggetto.
-T opzioni_di_tar: Questa opzione permette di lavorare sui file di una risorsa per scopi di backup e di restore. Ha numerose sotto-opzioni, fare riferimento alle pagine man di smbclient per un prospetto completo. Vediamo un esempio di sintassi:
smbclient //server/nome_risorsa -Tsotto-opzioni
Le sotto-opzioni sono quasi complementari a quelle che usa il comando tar originale.
c: Crea un nuovo archivio tar. Va seguito poi il nome dell'archivio.
x: Estrae i file da un archivio.
N: Sta per "newer than". Permette di archiviare solo i file più nuovi di un file che si specifica.

Quando si lancia senza paramentri smbclient si comporta come un client ftp da riga di comando e ci presenta un prompt così:
smb:\
In modalità interattiva si possono eseguire numerose operazioni, vediamone alcune:
?: Questo comando stampa un lista informativa dei comandi e ne descrive brevemente il significato. Si può farlo seguire da il nome di un comando e stamperà una descrizione della sua funzione. Si può usare anche help.
!: Apre una shell sulla macchina locale. Si può farlo seguire dal comando che si vuole eseguire.
cancel id_stampa: Permette di cancellare un job di stampa dalla coda sulla stampante. Va specificato il numero di job che si intende eliminare.
cd directory: Permette di cambiare directory. Se usato senza specificare il path si comporta come pwd mostrando la directory corrente.
del stringa: Cancella dal server tutti i file della directory corrente che hanno una corrispondenza della stringa.
dir stringa: Una lista di file contenenti la data stringa presenti nella directory di lavoro viene recuperata e mostrata.
exit: Termina la connessione con il server e esce.
get file_remoto nome_file_locale: Recupera un file definito e lo salva in locale con il nome specificato.
lcd directory: Cambia la directory locale. Anche qui se non specificata la directory stampa il path della directory locale corrente.  
ls stringa: uguale a dir.
mget stringa: Permette di scaricare più di un singolo file o directory.
md o mkdir nome_directory: Crea una directory all'interno di quella attuale.
mput stringa: Permette di mandare in upload più file o directory che hanno in comune la stringa specificata
print nome_file_stampa: Stampa attraverso una stampante condivisa il file specificato.
put nome_file_locale nome_file_remoto: Esegue l'upload di un file locale e se specificato lo rinomina nel nome dato.
queue: Mostra la lista dei file in attesa di stampa.
rm stringa: Rimuove tutti i file che hanno corrispondenza con la stringa data.
rmdir nome_directory:rimuove la directory specificata.
tar: Oltre all'uso dell'opzione -T in modo interattivo si usa questo comando. Supporta le stesse opzioni di -T.


nmblookup

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-05-31 21:29:06

nmblookup è un'utility che permette la risoluzione dei nomi NetBIOS in indirizzi IP.

Il comando permette di effettuare richieste  di nomi NetBIOS per la loro risoluzione in indirizzi IP usando NetBIOS over TCP/IP.
Le sue opzioni gli permettono di effettuare query dirette ad una particolare area broadcast o ad una macchina specifica. Tutte le richieste vengono inoltrate usando UDP.
Un po come nslookup è utile per recuperare informazioni su una rete NetBIOS dai semplici indirizzi a informazioni particolari come __MSBROWSE__ usate dai servizi dei nomi di Windows per fornire servizi di directory.
La sua sintassi è:
nmblookup [-opzioni] nome

Supporta varie opzioni che ne regolano il comportamento:
-A: Interpreta un nome come un indirizzo IP e segue una richiesta node-status su quell'indrizzo.
-B indirizzo_broadcast: Invia le richieste ad un particolare indirizzo broadcast. Il suo default è di utilizzare il valore di broadcast dell'interfaccia di rete primaria oppure come definito dal parametro interfaces del smb.conf.
-h: Stampa a monitor un breve brief dei comandi.
-M: Effettua la ricerca del master browser locale. Viene eseguita una richiesta broadcast delle macchine che rispondono al nome speciale __MSBROWSE__ e poi chiede le informazioni a quella macchina al posto di effettuare un richiesta broadcast per la macchina cercata.
-R: Abilita le richieste ricorsive. Si usa per effettuare richieste ad un WINS server.
-S: Una volta ricavato l'indirizzo IP del nome richiesto effettua una richiesta node-status restituendo tutti i tipi di risorsa che la macchina ha e il loro valore numerico.
-s: Permette di specificare il file di configurazione smb.conf da utilizzare.
-U indirizzo_unicast: Effettua un richiesta unicast all'indirizzo specificato, si usa insieme all'opzione -R per fare richieste a server WINS sulla rete locale.

Vediamo l'otput di un node-status:
bash-2.05a$ nmblookup -A 192.168.0.1
Looking up status of 192.168.0.1
        SMBSRV             <00> -         B
        SMBSRV             <03> -         B
        SMBSRV             <20> -         B
        WORKGROUP       <00> - B
        WORKGROUP       <1e> - B
        __MSBROWSE__    <01> - B
    


smbtar

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2004-01-21 12:27:41

Abbiamo visto che anche con smbclient si possono gestire i back-up di risorse condivise ma nella suite Samba esiste un comando prettamente dedicato a questo lavoro, smbtar.

In realtà smbtar è uno shell script che gira sopra smbclient e permette di eseguire back-ups e restores usando opzioni più comprensibili. Le sue funzionalità sono simili a quelle del comando unix tar.
Supporta svariate opzioni, vediamone alcune delle principali, consiglio comunque di dare sempre un'occhiata alla relativa pagina di man per un prospetto completo.

-d directory: Passa alla directory specificata prima di eseguire il backup o il restore dei file.
-N nomefile: Esegue il backup solo dei file più recenti dell'ultima modifica al file specificato. Utile per i backup incrementali (vedi man).
-p password: Indica la password da utilizzare per accedere alla risorsa condivisa.
-r: Esegue il restore della risorsa condivisa dal file .tar specificato.
-s nomeserver: Indica il nome della macchina che serve la risorsa condivisa interessata.
-t nastro: Può essere una device, un'unità nastro o un file. Se non definito il default è la variabile di ambiente $TAPE e se non esiste il file tar.out.
-u utente: Indica l'utente con il quale si desidera connettersi alla risorsa condivisa. Si può specificare anche la password nella forma nomeutente%password.
-x risorsacondivisa: Permette di specificare il nome della risorsa condivisa a cui si desidera accedere. Di default usa backup che è un nome comune per risorse dedicate al backup e al restore.

Vediamo un esempio dell'uso del comando:
smbtar -s nomepc -x nomeshare -u nomeutente -p password -t backup.tar


Documentazione e tool di configurazione di Samba

Manuali, libri, documentazione online, risorse e tool grafici di configurazione su Samba

La documentazione di Samba

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-04 01:11:21

Se si ci si è appena avvicinati all'argomento e si desidera imparare a configurare un server Samba si avrà quasi certamente l'imbarazzo della scelta.
La documentazione non manca, a partire dal pacchetto dei sorgenti per arrivare a innumerevoli siti italiani e stranieri, passando per varie mailing-list.

Risorse locali
Innanzi tutto se si è scaricato il pacchetto contenente i sorgenti una volta scompattato si troveranno al suo interno alcune directory molto interessanti:
docs e examples
Dentro docs troveremo tutta la documentazione necessaria, in html e in txt, molti howtos, le faq e un comodo pdf che raggruppa molti howtos: il Samba-HOWTO-Collection.pdf.
Di solito tutto questo materiale, se la propria distribuzione ha provveduto ad installare Samba si trova nella directory di sistema dedicata alla documentazione che generalmente si trova a partire dalla directory /usr e se si è compilato dai sorgenti si troveranno questi file dove specificato dal configure.
Come visto parlando dell'utility swat si può accedere a parecchia di questa documentazione nella sua pagina menu HOME.

Samba.org
Non dovesse bastare il primo posto dove cercare è dal sito di samba, www.samba.org.
Quando si accede alla pagina iniziale si trova una lista di mirror sparsi per il mondo. Attualmente ne esiste uno in Italia ma è per il download dei pacchetti, consiglio di usare un mirror vicino a noi per la visualizzazione del sito, tipo quello in Austria, di modo da non oberare di lavoro il server principale e anche per avere velocità di caricamento maggiori dovute alla vicinanza.
Molti how-to si trovano solo in questo sito, a volte perchè molto recenti, per questo consiglio vivamente a chiunque voglia cimentarsi seriamente con Samba di far diventare questo sito temporaneamente la sua homepage iniziale. Oltre alla documentazione sul sito si trovano tutte le mailing-lists ufficiali con le modalità di iscrizione e consultabili on-line.

Risorse online
A questo punto questo potrebbe essere sufficiente ma se si desidera approfondire basta andare su Google linux (www.google.com/linux) e cercare la parola chiave "samba" per trovare innumerevoli risorse. Anche se si cerca tra le pagine in italiano aggiungendo documentazione alle parole chiave si è proiettati in una spirale enorme di risorse.

Vediamo alcuni dei siti più interessanti per documentazione in italiano:
Esiste un libro, tradotto in italiano, che si chiama "Usare Samba" e comprabile in qualunque buona libreria convenzionata con la o'Reilly ma anche disponibile gratuitamente on-line all'url http://www.hopslibri.it/samba/root.html
Si tratta però della traduzione della prima edizione, tenerlo a mente perchè parecchie cose potrebbero e sono cambiate, resta comunque molto importante per comprendere meglio certi concetti che in lingua originale sono un po oscuri.

Un how-to che dà dei buoni spunti su cui lavorare si trova su
http://www.valtellinux.it/howto/samba/SMB-HOWTO.html
Un'altro how-to, tral'altro inserito nel mitico progetto "Appunti di informatica libera", è disponibile all'indirizzo
http://scuola.linux.it/docs/samba/samba.html

Un articolo che nello specifico tratta dell'implementazione di un samba server come Domain Controller in una rete windows:
http://mercury.chem.pitt.edu/~sasha/LinuxFocus/Italiano/March2002/article177.shtml

Per finire segnalo un simpatico sito che con un po di ironia offre alcune discussioni su problemi riscontrabili nella configurazione di vari servizi tra cui anche Samba raggiungibile su http://www.campana.vi.it/ottavio/linux/4pinguiniinpadella/4pinguiniinpadella.html

Mi sono fermato nella mia ricerca alla terza pagina di google ed ho omesso alcuni siti perchè trattavano argomenti basandosi su vecchie versioni di Samba o perchè fin troppo specifici. Come riscontrerete anche voi con un po di pazienza e delle ricerche mirate si possono trovare spunti e consigli utilissimi, raccomando di verificare sempre che il sito o l'how-to o il manuale trovati siano attuali prima di perdere i capelli chiedendosi perchè la tale opzione non funziona.


Swat, utility di configurazione di Samba

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-03 21:08:32

Quando ci si appresta a configurare approfonditamente un samba server ci si scontra inevitabilmente con la grande quantita di opzioni globali e di share. Averne un prospetto completo a mente è un'impresa titanica e a questo scopo ci si può avvalere di un comodo strumento di configurazione, swat.

Swat, Samba Web Administation Tool, viene comunemente installato con il pacchetto Samba e se si utilizza una distribuzione che installa la suite non necessita di ulteriori modifiche, a parte forse scommentarne la voce relativa nel file /etc/inetd.conf a seconda della distribuzione.
In effetti si tratta di un servizio che viene generalmente invocato da inetd e fornisce un'interfaccia web utile per creare e modificare il file smb.conf e per studiarne le opzioni.
E' buona norma comunque se si vuole utilizzarlo controllare prima di tutto due file:
- /etc/services e verificare che sia presente ed eventualmente aggiungere la voce:
swat    901/tcp
Definizione non ufficiale e che in alcune reti potrebbe entrare in conflitto con altri servizi
- /etc/inetd.conf e verificare o aggiungere la riga:
swat   stream   tcp   nowait.400   root   /percorso/eseguibile/swat   swat
Dove il percorso al file può variare a seconda della distribuzione usata o dove si è deciso di installare Samba

Una volta eseguite queste semplici operazioni si può aprire il nostro web browser preferito e digitare: http://localhost:901/
Ci apparirà una finestra che ci chiede di inserire nome utente e password e dovremo usare l'utente root e la sua relativa password di sistema.
A questo punto si ha accesso ad una serie di menu che in poco tempo ci permetterà di creare un file di configurazione per Samba. La cosa che trovo più utile e importante è che per ogni opzione settabile si ha un link ad un help che ne descrive il significato, i valori di default e così via. Non solo, prima l'ho descritto come tool anche per studiare, infatti sotto il menu HOME si ha la possibilità di accedere comodamente a un grande quantità di documentazione, pagine man e vari how-to, permettendo così di iniziare la nostra configurazione con un comodo appoggio per imparare.
Va ricordato che nonostante sia possibile collegarsi anche da macchine remote, swat non ha di default la possibilità di usare password crittografate con di conseguenza il rischio che qualcuno sulla rete possa sniffare i pacchetti e leggere in chiaro la password dell'utente root sul samba server. Esiste la possibilità di criptare le password anche se swat non lo supporta nativamente. Si può trovare un breve how-to introduttivo su www.samba.org chiamato swat_ssl.html.
Un'altro grande difetto di swat è il fatto che utilizzato su un file esistente ne modificherà anche il layout. Tutti i commenti eventualmente aggiunti e le opzioni include e copy verranno cancellati.
Questo ne fa a mio avviso un ottimo punto di partenza per il principiante, permettendo di creare un primo file di configurazione e in seguito editarlo finemente con un editor di testi.


Metodi alternativi per configurare e usare Samba

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-06 00:28:28

Oltre all'ufficiale strumento di gestione swat compreso nella suite Samba in rete si possono trovare altri validi tool per configurare e lavorare con Samba.
Basta una semplice ricerca su freshmeat per accorgersi del grande numero di applicazioni disponibile.

Vediamo alcune valide alternative tra i tanti progetti presenti.

Utility di configurazione
Se si utilizza Webmin per amministrare il server ci si può avvalere di un suo modulo, solitamente installato di default ma scaricabile e installabile anche dopo in caso ad esempio si fosse in precedenza scelto di eliminarlo perchè inutilizzato.
Questo modulo permette di creare o editare il file smb.conf, aggiungere shares e opzioni. Esiste anche un'altro modulo che non fa parte però di quelli standard di Webmin e che permette di editare i netlogon files, si chiama smblogin e si può reperire su freshmeat.
Smbconftool di cui ne parla bene anche lo stesso sito di Samba, è scritto in java e ha la peculiarità di non cancellare i commenti come invece fa swat. Si possono avere maggiori informazioni alla pagina http://www.eatonweb.com/samba/
I due principali Desktop Enviorment, KDE e Gnome, hanno entrambi la possibilità di usare delle applicazioni per configurare il server Samba.
Per Gnome esiste un progetto che però al momento il sito non è raggiungibile e si chiama Gnosamba.
Per KDE invece esiste un plugin per il Control Center che permette di abilitare un'interfaccia in cui poter settare praticamente quasi tutte le opzioni di configurazione e di creare, distruggere, modificare gli shares. Il suo nome è  KSambaPlugin ed è disponibile su freshmeat.
Ci sono altri strumenti per la configurazione di Samba, scritti in linguaggi differenti e a volte nati per configurare server Unix e poi allargati alla gestione del smb.conf.

Utility per lavorare
Esistono svariati progetti per utilizzare gli strumenti della suite Samba quali smbclient o smbmount. Spesso si tratta di semplici frontend che utilizzano i comandi di Samba altre volte sono applicazioni più complesse.
xSMBrowser è una comoda GUI che permette di usare smbclient da un'interfaccia grafica. In se può essere paragonato a client ftp come gftp o kbear e infatti la somiglianza è grande, ci presenta una finestra con il filesystem locale e una con il filesystem remoto. Permette tutte le operazioni che si possono fare con smbclient.
Un'altro comodo frontend è Jags o Jagsmm acronimo per "Just another gnome samba-client" usa le librerie gtk e fornisce un'interfaccia al comando smbmount permettendoci di esplorare la rete e di montare le risorse disponibili.
A jags si appoggia una comoda utility trovabile su freshmeat, SambaSentinell che è una GUI in gtk per il comando smbstatus, permette di controllare lo stato dei samba server e delle relative connessioni ai loro share, mostrando l'utente connesso, il suo ip, i file che ha usato e addirittura di "uccidere" un processo in atto. In realtà questo strumento non richiede espressamente la presenza di jags ma se si vuole abilitarne la funzione di montaggio delle risorse condivise si deve averlo installato e funzionante.
LinNeighborhood è un'altra semplice GUI a smbmount e permette di effettuare il browse delle risorse condivise e di montare quelle di interesse.
I due principali desktop enviorment, KDE e gnome, sono dotati entrambi di applicazioni per esplorare networks Samba e per montare gli share.
Per gnome esiste Gnomba progetto a quanto pare rimasto offline per un certo periodo e ora ripreso. Il programma si può scaricare alla pagina http://gnomba.sourceforge.net/. Permette di scansire la rete alla ricerca di risorse condivise, offre un'interfaccia per la navigazione delle stesse e infine permette di montare localmente gli share.
Per KDE si trovano vari progetti tra cui komba2 che avvalendosi di praticamente quasi tutti gli strumenti di samba (smbmount, smbstatus, nmblookup, testparm) permette di navigare tra le risorse condivise e accedere agli share montandoli in locale.


Configurazione di Samba

File di configurazione e settaggio dei parametri base e avanzati.

Introduzione alla configurazione di Samba: smb.conf

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-03-25 17:14:42

La configurazione di Samba (i demoni smbd e nmbd) viene gestita dal file smb.conf, un normale file di testo ASCII con queste caratteristiche di massima:

- I parametri di configurazione vengono forniti nella forma opzione = valore
- Il file viene diviso in più sezioni che definiscono una share (condivisione), oltre alla sezione generale [global]. Ogni sezione si indica fra parentesi quadre: [printers]
- Le righe di commento sono precedute da asterisco (#) o punto e virgola (;)
- Righe di configurazione possono estendersi su più righe di smb.conf utilizzando una backslash (\) a fine riga
- Le opzioni e i valori sono case insensitive, ma se si indica un path nel file system questo è case sensitive
- Per separare una serie di valori possono essere usati sia virgole (,) che spazi vuoti ( )
- Possono essere utilizzate delle variabili, precedute dal simbolo percento (%) all'interno dei valori (es: path = /home/%u)
- Si può includere a smb.conf un altro file di configurazione con l'opzione include (es: include = /etc/samba/smb.conf.%a)

Le opzioni di configurazione possono essere di 2 tipi fondamentali:
- global, appaiono solo nella sezione [global] e definiscono i comportamente generali del server Samba
- share, appaiono all'interno di specifiche share e definiscono il comportamento riguardo alla specifica share. Se appaiono in [global] definiscono i comportamenti di default.

Qualsiasi opzione deve essere inclusa una una sezione. Esistono le seguenti sezioni speciali:
[global] Sempre presente, di solito ad inizio file, definisce le opzioni di default valide per tutte le condivisioni (possono essere sovrascritte da opzioni contrarie presenti nelle specifiche sezioni) e i parametri generali di configurazione del server.
[printers] E' una sezione speciale utilizzata per condividere l'accesso via rete a delle stampanti
[homes] E' una sezione speciale che coincide con la home directory di un utente autenticato. Di fatto è una condivisione generica con il nome dell'utente che accede a Samba.

Oltre a queste sezioni speciali ne possono esistere un numero arbitrario di altre, il nome di ogni sezione coincide con il nome della relativa condivisione, così come appare al client SMB.


Configurare Samba: Opzioni generali

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-05-07 12:50:04

La sezione [global] è praticamente presente in ogni smb.conf.
Qui si definiscono le configurazioni generali riguardanti il server Samba e i suoi comportamenti di default.
Vediamo nel dettaglio alcune opzioni:

CONFIGURAZIONI BASE NETBIOS

Netbios name
Definisce il nome NetBios della macchina, così come viene visualizzato in rete. Di default coincide con il nome DNS per la parte relativa all'host (es: pippo.dominio.it prende di default il nome PIPPO). Es:
netbios name = PLUTONE

Server string
E' il commento che si può leggere visualizzando i dettagli su un host in rete. non è indispensabile ma può essere utile per indicare le funzioni o le caratteristiche della macchina. E' possibile usare variabili, per esempio:
server string = File Server - Samba %v (%h)

Workgroup
Definisce il workgroup di cui fa parte il server Samba. Di default il valore è "WORKGROUP", definito in fase di compilazione, ma può essere cambiato. Es:
workgroup = INTRANET

Netbios aliases
Questa opzione permette di assegnare più nomi NetBios allo stesso server oltre a quello definito con netbios name, in modo da farlo comparire fra le Risorse di rete di Windows come macchine diverse, su cui è necessario eseguire login autonomi, anche se di fatto restano lo stesso server. Questa funzionalità può essere utile. per esempio, per raggruppare su un singolo server diversi server SMB che prima risiedevano su macchine diverse senza modificare alcun parametro sui client. Es:
netbios aliases = vendite marketing amministrazione

GESTIONE DEL NETWORKING

Hosts allow - Hosts deny
Queste opzioni definiscono l'accesso al server. Hanno la stessa logica dei file /etc/hosts.allow e hosts.deny, possono essere presenti sia nella [global] che definiti per singola share. Come argomento si aspettano l'IP di una network o di un host (considerando che la rete 192.168.0.0/24, per esempio, si indica 192.168.0.) oppure un singolo hostname (pippo.dominio.com) o un nome di dominio o sottodominio (.dominio.com).
Sono accettati anche gli argomenti speciali ALL (tutti gli IP) e EXCEPT, seguito da indirizzi o nomi di host.
Samba segue una logica ben precisa per gestire gli accessi con queste opzioni:
- Se non sono definite, viene permesso l'accesso da ogni IP
- Se sono definite nella [global] queste si applicano ANCHE per le singole share (anche se si sono specificate a livello di share)
- Se esiste solo hosts allow viene permesso quanto specificato come argomento e vengono esclusi tutti gli altrti IP
- Se esiste solo hosts.deny sarà permesso l'accesso a tutti gli IP tranne a quelli specificati come argomento
- Se esistono sia hosts allow che hosts.deny vengono esclusi TUTTI gli IP tranne quelli che sono presenti in hosts.allow E non sono presenti in hosts.deny.
Nell'esempio che segue viene dato accesso a 192.168.0.10 e a tutti gli host della rete 10.0.0.0/24 tranne 10.0.0.15:
hosts allow = 10.0.0. 192.168.0.10
hosts deny = 10.0.0.15

Questo esempio corrisponde a:
hosts allow = 192.168.0.10 10.0.0. EXCEPT 10.0.0.15

Se invece si vuole permettere l'accesso solo alla rete 192.168.0.0/16 si può scrivere semplicemente:
hosts allow 192.168.
che coincide con:
hosts deny = ALL EXCEPT 192.168.

Interfaces - Bind Interfaces only
interfaces definisce su quale interfacce di rete dell'host locale Samba si metterà in ascolto. Di default Samba utilizza l'interfaccia di rete principale, ma se si vuole che resti in ascolto su altre interfacce o si vuole essere certi che Samba scelga l'interfaccia voluta, queste vanno specificate tramite il loro indirizzo IP:
interfaces = 10.0.0.3/24 192.168.0.4/255.255.255.0
Il comando bind interfaces only può avere valore yes o no (default). Se viene abilitato Samba ignorerà ogni pacchetto, anche di broadcast, che origina da rete diverse da quelle specificate con interfaces. Notare che se si abilita, è necessario includere esplicitamente il localhost (127.0.0.1) nell'elenco delle interfacce su cui Samba deve stare in listening.
bind interfaces only = yes  

GESTIONE DEL LOGGING

Log file
Specifica su quale file Samba va a scrivere i suoi log. L'argomento può contenere delle variabili, per cui è possibile avere diversi file di log per ogni utente, per tipo di client ecc. Per creare un log diverso per ogni client NetBios, per esempio, si può scrivere:
log file = /var/log/samba.log.%m

Log level
Specifica il livello di logging da usare, va da 0 (minimo) a 10 (estremamente verboso). Il valore di default è 1, su un server normale dovrebbe essere di 1 o 2, se si deve fare un po' di troubleshooting usare il livello 3, valori superiori servono soprattutto a chi sviluppa su Samba e rallentano notevolmente le operazioni:
log level = 2

Max Log Size
Definisce la dimensione massima in Kilobyte dei file di log. Quando viene raggiunto il limite, il file di log viene rinominato aggiungendo il suffisso .old (vengono eliminati eventuali file .old esistenti creati precedentemente) e si riparte con un file di log vuoto. Il valore di defalt è 5000 Kb, il valore suggerito dipende fondamentalmente dallo spazio su disco disponibile, evitare di impostare un valore troppo alto che rischia di occupare tutto lo spazio (considerando anche il file .old):
max log size = 2000

Debug Timestamp
Con questa opzione è possibile specifcare se inserire data e ora per ogni riga di log generata. Coincide con l'opzione timestamp logs. Il valore di default è yes per cui nei log sono indicate data e ora in cui avvengono gli eventi. Per non specificare il timestamp scrivere:
debug timestamp = no

Syslog e syslog only
Queste opzioni regolano la possibilità di usare il demone syslog, invece o parallelamente al logging diretto.
Per poter usare il syslog è necessario compilare Samba con configure --with-syslog e configurare /etc/syslog.conf per gestire la facility daemon. Ad esempio con una riga tipo:
daemon.* /var/log/daemon.log
Il valore specificato (da 0 a 10, default 1) indica quali messaggi di log inviare a syslog e, in riferimento agli argomenti dell'opzione log level, cosa loggare direttamente sui file di log interni. Ad esempio:
log level = 3
syslog = 2

Con queste opzioni i log di livello 0 e 1 (inferiori a 2) vengono mandati a syslog, quelli di livello 2 e 3 (compresi tra syslog e log level) vengono scritti sul file di log interno.
Per loggare solo su syslog si deve attivare l'opzione syslog only:
syslog only = yes

GESTIONE DEL BROWSING

Local master - Domain master
Queste opzioni servono per spingere Samba a cercare di diventare rispettivamente Local Master Browser (il server che mantiene la browse list per una rete IP) e Domain Master Browser (il server che mantiene la browse list per un intero workgroup, anche esteso su più reti IP, nel qual caso raccoglie e coordina lo scambio di browse list dai Local Master Browser remoti). Di default Samba ha attivata l'opzione Local Master (con cui semplicemente gli viene detto di partecipare alle elezioni, senza la certezza di vincerle) e non ha attivata l'opzione Domain Master (è bene che il Domain Master Browser sia la stessa macchina che fa eventualmente da Primary Domain Controller, sia esso un Samba o un Windows server). Le impostazioni di default sono quindi:
local master = yes
domain master = no


Preferred Master - OS Level
Con queste opzioni si gestisce il comportamento di Samba nelle elezioni e la sua possibilità di vincerle.
La prima impone a Samba di chiamare un'elezione ogni volta che entra in rete e gli imposta una probabilità leggermente superiore di vincerle rispetto ad altre macchine con lo stesso livello. E' bene impostarla a yes quando si configura Samba come Domain Master Browser o Local Master Browser:
preferred master = yes
domain master = yes

E' comunque raccomandabile non avere troppe macchine in rete (Windows o Samba) che cercano di partecipare alle elezioni per evitare inutili e ripetuti broadcast e possibili incongrenze sulla browse list di riferimento.
L'opzione OS Master, invece setta esplicitamente il livello con cui Samba si presenta alle elezioni. Può avere valore da 0 a 255, più è alto e maggiore la possibilità di diventare Master Browser. Un valore di 34 basta per far vincere tutte le elezioni con server Windows ad eccezione di un PDC. Il valore di default è 20. Il seguente esempio dovrebbe bastare per vincere ogni elezione (ovviamente ad eccezione di altri server Samba con un OS level superiore):
os level = 65.

Announce As - Announce version
Queste opzioni definiscono come Samba si presenta in rete. Announce as può avere come valori Win95, NT o WfW il default è:
announce as = NT
Announce version specifica la versione di Samba. Attualmente si presenta di default come:
announce version = 4.9
Generalmente non serve cambiare queste impostazioni di default.

remote browse sync - remote announce
Queste opzioni permettono di sincronizzare la browse list di un server Samba quando esistono diversi local master su reti diverse.
La prima permette di richiedere la sincronizzazione della brose list dai server delle reti remote specificate:
remote browse list = 10.0.0.255 192.168.0.255
Con la seconda opzione si può esplicitamente annunciare il server locale, con un workgroup arbitrario, ai server sulla rete remota specificata:
remote announce = 192.168.0.255/WROKGROUP
In entrambi i casi si possono indirzare direttamente gli IP dei server remoti o gli indirizzi di broadcast della loro rete (in questo caso il "directed broadcast" deve poter essere consentito sulla rete remota, di default i router Cisco non lo permettono).

GESTIONE DELLE PASSWORD
E' importante configurare la logica con cui Samba gestisce l'autenticazione e come eventualmente sincronizza le sue password con quelle di sistema. I dati relativi agli utenti sono mantenuti nel file smbpasswd, che a sua volta si può modificare con l'omonimo comando shell.
Sulla gestione delle password esistono varie opzioni di configurazione.

encrypt passwords
Di default ha valore NO, non prevedendo l'invio in chiaro delle password via rete. Sui Windows recenti, comunque, (tutti esclusi NT4 pre SP3 e Windows 95) le password vengono inviate criptate. Per cui o si modifica il registro (esiste .reg adatto nel tar.gz ufficiale) sui Windows o, meglio, si abilita la criptazione delle password:
encrypt passwords = yes.

password level
Di default samba esegue il matching delle password in lowercase (con caratteri minuscoli), compresa la prima lettera.
Password level permette di specificare, come nel caso di username level, quante lettere al massimo si possono rendere maiuscole per i tentativi di connettersi ad una smb share.
password level = 2

null password
Abilita o Disabilita la possibilità di utilizzare password (cryptate e non cryptate) pari a null.
Il valore di default è NO.
password level = yes

smb passwd file
Specifica il path del file contenente le password cryptate.
Il valore di default è : /usr/local/samba/private/smbpasswd
smb passwd file = /etc/samba/smbpasswd

CONFIGURAZIONE DEI DOMINI
SAMBA permette di usufruire dei domini di windows in varie modalità:

- PDC, samba può  essere configurato come primary domain controller per i client windows/unix.
- BDC, (backup domain controller) features non del tutto funzionante per le versioni correnti (2.x), occorre aspettare la versione 3.x per avere il supporto completo.
- Host, facente parte di un dominio esistente.

Di seguito sonon riportate alcune opzioni utili per configurare il logon dei client nel dominio:

domain logons
Permette di loggarsi nel dominio tramite samba configurato come PDC server.
domain logons = yes

logon script
Specifica lo script che verrà lanciato sui client una volta loggati nel dominio.
logon script = logon.bat

logon home
Specifica l'home dell'utente, per i comandi DOS NET.
logon home = \\server\home\%U

logon path
Identifica la locazione dei roaming file.
logon path = \\server\profile\%U

RISOLUZIONE DEI NOMI CON SAMBA
E' possibile utilizzare una o più delle seguenti modalità di risoluzione dei nomi:

- Broadcasting
- LMHOST file
- Unix /etc/host o NIS
- WINS (Windows Internet Name Service), samba ha la facoltà di appoggiarsi ad un WINS server esterno oppure configurare lo stesso SAMBA per fungere da WINS server.

name resolve order
Opzione che permette di specificare con quali metodi e il rispettivo ordine da utilizzare per la risoluzione dei nomi.
name resolve order = wins hosts bcast

wins server
Permette di appoggiarsi ad un wins esterno specificando semplicemente l'IP, sarà SAMBA stesso a ridirigere le singole richieste al server specificato.
wins server = 10.0.0.100

wins proxy
Abilita il forwarding di tutte le richieste di risoluzione dei nomi anche ad WINS che sono esterni alla subnet del SAMBA server.
wins proxy = yes

wins support
Abilita il WINS server di SAMBA.
wins support = yes

dns proxy
Permette di appoggiarsi al DNS configurato sul server SAMBA (/etc/resolv.conf) per la risoluzione dei nomi fallita tramite WINS.
dns proxy = yes


Configurare Samba: Opzioni delle singole share

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-05-16 15:25:24

Le opzioni inserite nella sezione [share] fanno riferimento alla configurazione da applicare alla singola risorsa condivisa o alle share di sistema come [netlogon] o [printer] per abilitare/disabilitare alcune funzioni di samba stesso.

CONFIGURAZIONI BASE PER LE SINGOLE SHARE
Le seguenti opzioni sono le tipiche opzioni utilizzate in tutti i tipi di share e ne definiscono i caratteri generali come per esempio il nome della risorsa che si condivide.

[nome share]
Il nome delle singole share è settato con la seguente entry [nome share] nel file di configurazione dopo le opzioni relative alla sezione [global].
[docs]

path
Sinonimo di directory, indica il path locale della risorsa da condividere tramite Samba.
Nel caso in cui la share si riferisce ad una stampate identifica la directory che avrà la funzione da spool per la stampante stessa.
path = /home/docs

comment
E' possibile affiancare un commento al nome delle share, che verrà visualizzato lato client. Utile per descrivere il contenuto della risorsa.
comment= Documenti comuni

GESTIONE ACCESSI
La gestione degli accessi alle risorse può avvenire in vari modi a seconda del tipo di configurazione adottata nelle global options.

valid users - invalid user
La prima opzione viene utilizzata per specificare gruppi o utenti che possono accedere alla risorsa, la seconda invece per negarne definitivamente l'accesso.
valid users = pippo pluto joe

admin user
Determina quali utenti che accedono alla risorsa possono eseguire operazioni da utente root.
admin user = joe

guest ok
Abilita l'accesso alla risorsa all'utente guest.
guest ok = yes

guest account
Unix account utilizzato come guest access. L'account di default è nobody.
guest account = webmaster

guest only
Di default settata a no, limita l'accesso alla risorsa all'utente guest.
guest only = no

writable (write ok) -read only
Opzioni utilizzabili sia nella sezione global che share permette di abilitare o disabilitare gli attributi di scrittura.
I valori di default permettono la sola lettura (read only = yes e writable = no).
read only = no
writable = yes
  

browsable
Nega o permette la visualizzazione nella lista delle risorse del server samba. Di default è settata a yes.
browsable = yes

read - write list
Opzioni che permettono di eseguire un override della configurazione base di una share per la lista degli utenti specificati.
Rispettivamente,  read list permette l'accesso con i soli diritti di lettura ad una share scrivibile mentre write list specifica quali utenti possono accedere, anche con i permessi di scrittura, ad una risorsa configurata per acconsetire gli accessi in sola lettura.
write list = webmasters developers

max connections
Specifica il numero massimo di connessioni ad una share. Settata di default a 0, permette connessioni illimitate alle risorse.
max connections = 10

SYSTEM SHARE
Samba prevede delle share con un nome specifico per abilitare alcune features o lo sharing di risorse particolari come stampanti.

netlogon
Share indispensabile nel caso in cui samba server faccia da PDC, permette il logon dei client nel dominio. Questa share deve avere le seguenti caratteristiche:
- Il nome non è modificabile, [netlogon]
- Non è possibile visualizzarla e scriverci.
- Non è possibile accederci come utente guest.
[netlogon]
Comment = share to domain logon
path = /samba/logon
public = no
writabl e = no
browsable = no


profile
E' possibile specificare tramite la share [profile] la risorsa che dovrà fungere da repository per tutti i roaming profile. Questa share non deve essere visualizzata nelle risorse dispobilli del server ma deve essere possibile scriverci.
[profile]
comment = Profili Utenti
path = /samba/profile
create mode = 0600
directory mode = 0700
writable = yes
browsable = no


homes
Share che visualizza in modo automatico la home dell'utente, senza dover mettere le relative entry nel file smb.conf per i singoli utenti. Tale share che prende il nome dell'utente è visibile e scrivibile solo dall'utente con cui si è eseguito il login sul server.
[homes]
comment = Home Directories
valid users = %S
read only = No
create mask = 0664
directory mask = 0775
browseable = No


Opzione "veto files" in smb.conf

Tipo Infobox: TIPS - Skill Level: 3- INTERMEDIATE - Autore: Roberto 'rpennol' Pennolino - Ultimo Aggiornamento: 2004-06-02 15:46:11

Esiste la possibilità di vietare il salvataggio di files con una determinata estensione in una cartella condivisa tramite SAMBA.

Occorre semplicemente aggiungere nella sezione [global] del file smb.conf (/etc/samba/smb.conf) il seguente parametro:
veto files = /*.mp3/ /*.wav/ /*.mpeg/ /*.avi/
In questo caso non è permesso il salvataggio di files con estensione: mp3, wav, mpeg ed avi.


smbcacls

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: Giorgio 'neo' Colombo - Ultimo Aggiornamento: 2003-05-31 21:47:24

Client per il managment delle ACL delle share SMB in un server NT.

smbcacls //server1/share1 filename [options]

Opzioni Comuni:
-U Opzione per specificare l'utente utilizzato per conettersi al servizio remoto
-A [acls] Aggiunge una ACL all'access list specificata
-D [acls] Elimina le ACL specificate in linea di comando
-n Visualizza le ACL in formato numerico

Formato ACL:
Le ACL sono formate da singole o più entry separate dalla virgola o più semplicemente ogni entry deve corrispondere ad una nuova linea. Esempio:
Specifica il numero della revisione della ACL lato NT server
REVISION:<revision number>
Owner e Group specificano owner e group sid dell'oggetto
OWNER:<sid or name>

GROUP:<sid or name>
ACL
ACL:<sid or name>:<type>/<flags>/<mask>


SMB troubleshooting

Utilizzo dei log, del debug e di altri strumenti di diagnosi.

Strumenti per diagnosticare problemi con Samba

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-01-19 13:34:11

Il mondo delle reti CIFS presenta insidie di varia natura, il protocollo è a suo modo contorto e le implementazioni di diversi produttori possono dar luogo a problematiche diverse.
Per diagnosticare problemi con Samba esistono vari strumenti a disposizione degli utenti:
- I log di Samba stesso
- I vari tool Samba presenti nel pacchetto ufficiale
- Genericamente, i vari strumenti di sistema disponibili su Unix e Windows per diagnosticare problemi di rete e servizi.

I LOG DI SAMBA
Sono tipicamente fra le prime cose da guardare. Nel file di configurazione è possibile definire vari parametri tra cui:
log file = %m.log - Il nome e la logica con cui vengono salvati i log (possono essere divisi per utente, macchina ecc);
debug level = 2 - La verbosità dei log stessi, con valori che vanno da 0 (nessun logging) a 10 (maggimo debugging). Un valore di debug di 3 o superiore è già fin troppo verboso e va usato solo per diagnosi, in quanto tende a rallentare il sistema.
E' possibile modificare il livello di logging inviando al processo smbd i segnali SIGUSR1 per incrementarlo di uno e SIGUSR2 per diminuirlo di uno.

UTILITY SAMBA
Varie sono le utility di Samba per diagnosticare problemi.
testparm serve per verificare la correttezza della sintassi del file di configurazione e per verificare se un dato host può collegarsi alla macchina Samba locale (sulla base delle access list di smb.conf, altri impedimenti dovuti a iptables o altro non sono contemplati): testparm hostname 10.0.0.150, per esempio, elenca per tutte le condivisioni del proprio sistema, se l'host 10.0.0.150 ha diritto di accesso.
smbclient è comodo per enumerare le condivisioni di un server e capire come e cosa esporta. smbclient -L 10.0.0.150 enumera tutte le condivisioni di 10.0.0.150. Viene chiesta una password, dare invio per fare un accesso anonimo o specificare -U utente (e poi relativa password) per accedere con specifiche credenziali.
nmblookup si usa per ottenere i nomi NetBIOS e i relativi IP degli Host in rete, tramite broadcast o query diretta, nmblookup -d 3 '*', per esempio, individua, nella propria rete (dominio di broadcast), gli host che rispondono ad una query nmb.

UTILITY UNIX
La diagnosi di problemi con Samba coinvolge anche problematiche di rete: server e client devono poter comunicare via IP e avere accesso alle porte netbios-ns 137/udp, netbios-dgm 138/udp, netbios-ssn 139/tcp e microsoft-ds 445/tcp (usata da CIFS, se non è raggiungibile si usa la 139) non ci devono quindi essere firewall o altri impedimenti che impediscano lo scambio di dati.
La diagnosi inoltre coinvolge l'effettiva esistenza di un server in ascolto sulla porta 139 o 445 e l'eventuale sniffing dei pacchetti in transito. Comandi utili per queste attività sono:
ping Comando tipico per testare la connettività di rete IP fra due host, in ogni caso da affiancare a un test diretto tipo telnet 10.0.0.150 139 per verificare se alla porta 139 del server indicato risponde qualcosa.
Su un server Samba, per verificare che il servizio sia partito e sia in ascolto e disponibile in rete, digitare netstat -natp e cercare righe tipo tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      4608/smbd che indicano che il processo smbd è in ascolto (LISTEN) sulla porta 139 su tutti gli indirizzi (0.0.0.0, basterebbe anche l'indirizzo dell'interfaccie di rete).
Verificare inoltre che non si siano firewall esterni o interni che impediscano l'accesso alla prota 139 tcp (con iptables -L -n si visualizzano le regole di firewalling sul proprio Linux).
Se il client può accedere via rete al server e su questo è in esecuzione il processo che gestisce SMB, eventuali problemi possono essere dovuti al protocollo SMB/CIFS stesso (autenticazione, ecc), per cui possono essere utilizzati i comandi Samba sopra indicati o si può provare a diagnosticare cosa accade sniffando direttamente i pacchetti con strumenti come tcpdump (analizza solo le intestazioni dei pacchetti) o ethereal (visualizza e analizza tutto il contenuto di un pacchetto).
A livello applicativo, sul server Samba, può servire utilizzare strumenti come ps -adef per verificare che i processi smbd e nmbd siano in esecuzione, strace -p #PID per analizzare a basso livello le chiamate di sistema del processo di cui si è indicato il PID, lsof per visualizzare i file aperti dai processi in esecuzione.


Stampa e condivisione stampanti

La stampa su Linux e la condivisione delle stampanti in rete.

La stampa con Linux

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-14 15:20:05

Prima di affrontare i diversi sistemi di stampa esistenti per Linux occorre comprendere il funzionamento dell'interazione tra il sistema operativo e la stampante.

Con Linux si comunica con le stampanti attraverso le code di stampa (print queue).
I dati da stampare vengono memorizzati temporaneamente nella coda da dove lo spooler si occuperà di inoltrarli alla stampante. Spesso i dati da stampare non si trovano nel formato giusto per poter essere inviati direttamente alla stampante e di solito devono prima essere convertiti in un formato comprensibile di modo che possano essere emessi correttamente.
I filtri della stampante si occupano proprio di questo lavoro di traduzione dei dati in un linguaggio comprensibile alla stampante e che permetta di stamparli mantenendo le loro forma originale.
Vediamo alcuni esempi di linguaggi di stampanti standard.
Testo in ASCII: La maggior parte di stampanti è in grado di emettere direttamente testi ASCII.
Postscript: E' il linguaggio standard di Unix/Linux e permette di stampare direttamente su stampanti Postscript. Queste stampanti sono molto costose a causa della complessità di questo linguaggio che costringe ad una laboriosa elaborazione dei dati per giungere al risultato finale. In più a causa di un mero problema di licenze i costi aumentano e vanno tenuti presente in caso si meditasse l'acquisto di una di queste potenti stampanti.
Ghostscript : In realtà non è un linguaggio bensì si tratta di un software che mantiene un database di driver per stampanti e si occupa di tradurre i dati in un linguaggio adatto alla stampante in uso.

Il processo di stampa avviene in questo modo:
1. L'utente o l'applicazione genera un incarico di stampa.
2. I dati vengono memorizzati temporaneamente nella coda di stampa da cui lo spooler li inoltra al filtro della stampante.
3. Il filtro della stampante determina il tipo di dati da stampare. Se i dati non sono Postscript vengono convertiti nel linguaggio standard, ad esempio se si tratta di dati ASCII con il programma a2ps vengono convertiti in dati Postscript. Se la stampante è Postscript i dati vengono elaborati e stampati. Nel caso in cui la stampante non sia Postscript, nella maggioranza dei casi quindi, il programma Ghostscript utilizzando il driver adatto al modello di stampante genera i dati specifici della stampante e li invia in stampa.
4. Una volta che l'incarico di stampa e stato correttamente inviato lo spooler si occupa di cancellare i dati dalla coda di stampa.    


I diversi sistemi di spooling

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-14 15:31:15

Esistono diversi sistemi di stampa per Linux, oltre al  classico lpd o anche detto BSD system, si trovano parecchi progetti diversi che offrono sistemi di stampa. La scelta può essere dettata dalla distribuzione che si sta utilizzando ma nessuno impedisce di installare il proprio. Ovviamente occorre sceglierne uno visto che non si possono utilizzare due sistemi diversi contemporaneamente.

LPD
L'originale e ormai classico BSD Unix Line Printer Daemon, è stato lo standard Unix per anni.
E' praticamente disponibile su ogni versione di Unix e nonostante sia ormai superato è un valido sistema di stampa di base. Con stampanti moderne occorre un ulteriore lavoro di configurazione con l'ausilio di script per i filtri e programmi front-end.
LPD è anche il nome dato al protocollo di stampa descritto nella rfc 1179. Questo protocollo è di fatto lo standard per la comunicazione con networks di stampa.
Se si medita di utilizzare LPD è comunque consigliabile l'uso di LPRng che offre una più evoluta forma di configurazione e supporta la cifratura delle connessioni, praticamente ogni versione di Unix abbastanza recente dovrebbe utilizzarlo ma ognuno aggiunge e modifica per cui è veramente difficile stabilire quale versione di lpd si stia utilizzando.
Riferirsi alla documentazione del sistema operativo Unix installato per approfondimenti.
Esistono diversi sistemi front-end per usare lpd e vista la complessità dell'argomento è più semplice usarne uno per configurare le stampanti. Tra questi xpdq per la sua semplicità  è consigliato da Grent Taylor il curatore del Printig-HOWTO ma le principali distribuzioni generalmente forniscono una propria interfaccia per la configurazione.

PDQ
L'autore di questo software ironizza con il significato di questo nome e lo definisce "Print don't Queue". In effetti questo sistema di stampa rivoluziona il concetto di stampa  in stile BSD facendo effettuare il lavoro di elaborazione dati alla workstation. In un contesto di rete con un print server a cui si collegano le workstation evita di sovraccaricare di lavoro il server portandolo ad un miglioramento delle prestazioni ed evitando la perdita di processi di stampa. Infatti questo sistema fa effettuare tutto il lavoro di filtraggio all'utente che genera il lavoro. Questo può avere dei difetti in caso di elaborazioni complesse rallentando la macchina su cui si sta lavorando, inoltre con l'uso di particolari driver per stampanti ad alta risoluzione ghostscript deve effettuare tutto il lavoro di traduzione prima che il processo possa essere inviato e si rischia di attendere diversi minuti prima che la stampa inizi.
Nel pacchetto è compreso xpdq un comodo front-end che permette di configurare e aggiungere le stampanti. Maggiori informazioni sul sito del progetto http://pdq.sourceforge.net/.

LPRng
In molti unix recenti si userà questo software che in se migliora e perfeziona il classico lpd aggiungendo features come l'assenza di eseguibili SUID e il supporto di autenticazioni con PGP e Kerberos infatti potrebbe essere considerato un lpd con un occhio in più alla sicurezza.
Inoltre rende la configurazione di network anche molto grossi ( tante workstation, diverse stampanti) più semplice e mantenibile.
Sul sito ufficiale http://www.lprng.com/ si può trovare tutta la documentazione relativa al pacchetto.

PPR
Questo sistema di spooling è dedicato a sistemi di stampa Postscript ma ha la capacità di utilizzare anche ghostscript per l'uso con stampanti.
Maggiori informazioni si possono trovare sul sito http://ppr.sourceforge.net/

CUPS
E' un sistema di stampa che si pone come standard sostitutivo di LPD anche dal punto di vista del protocollo utilizzato, per il quale Cups utilizza una implementazione di IPP (Internet Printing Protocoll) un protocollo simile ad http.
Fornito di interfacce di amministrazione sia web che gui e anche di un'interfaccia a riga di comando è considerato un potente sistema di stampa. Supporta la stampa remota attraverso Samba. Puntando il browser all'indirizzo locale localhost:631 si accede all'interfaccia che permette di aggiungere stampanti, configurarle, controllare i processi in corso e quelli compiuti. Inoltre si può visitare il sito ufficiale all'indirizzo http://www.cups.org/, una sorgente riccha di documentazione e informazioni sui driver.


Le stampanti supportate e eventuali problemi

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-14 15:27:41

Non tutte le stampanti possono essere utilizzate con Linux. Come capire se la propria stampante va bene e dove trovare la relativa documentazione.

Se la propria stampante è una stampante Postscript non si necessita di driver speciali. Nella maggioranza dei casi però si dovrà scoprire se per la propria stampante esiste il driver Postscript che sia in grado di generare dati in un linguaggio comprensibile dal modello che si possiede.

Per capire se la stampante che si possiede è supportata vi sono diverse risorse online dove andare a cercare e ovviamente all'interno della directory dedicata alla documentazione che varia e si può trovare generalmente a partire dalla directory /usr.
Esiste inoltre un how-to chiamato Printing-HOWTO che se non installato con la distribuzione in uso può essere recuperato a partire dall'indirizzo www.tldp.org, il quale raccoglie realmente quasi tutto quello che occorre sapere per affrontare l'argomento e i riferimenti ad ulteriore documentazione più specifica.

Sul sito www.linuxprinting.org si trova oltre a molta documentazione sull'argomento, il database delle stampanti supportate con i riferimenti ai relativi driver.
Una volta trovati i riferimenti per la stampante occorre capire se il pacchetto Ghostscript installato comprenda anche il driver che serve con il comando gs -h che ci restituirà una lista dei driver disponibili.
Le ultime versioni di ghostscript comprendono ormai il supporto per quasi tutte la ultime stampanti uscite e si possono trovare ulteriori riferimenti sul sito www.cs.wisc.edu/~ghost/ a meno che non si abbia acquistato un modello che lavora con driver proprietari dipendenti dalla piattaforma (generalmente Microsoft).
Queste stampanti si chiamano GDI; GDI è un'interfaccia di sviluppo concepita da Microsoft per la rappresentazione grafica. Il problema non è rappresentato dall'interfaccia di sviluppo ma dal fatto che queste stampanti sono indirizzabili solo attraverso un linguaggio di stampante proprietario.
Alcune di queste oltre alla modalità GDI supportano, previa configurazione, anche un linguaggio standard. Di solito la modalità viene stabilita al momento dell'installazione, sicchè se si è utilizzato un'altro sistema operativo e si è abilitata la modalità GDI occorre, utilizzando il primo sistema operativo usato, riportarla alla modalità standard. Per alcune di queste stampanti è possibile che esista anche un driver per Linux, fare riferimento alla documentazione acclusa alla stampante e visitare il sito del produttore.


/etc/printcap

Tipo Infobox: PATH - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-14 15:36:17

Il file centrale di un sistema di stampa LDP, BSD da cui si definiscono le stampanti, le diverse code a loro assegnate e i filtri da utilizzare. Come tanti file di configurazione si tratta di un file di testo soggetto a particolari regole di sintassi.

In questo esempio si definisce una stampante predefinita chiamata lp o HP Deskjet950 connessa al computer via usb che ha assegnata una coda di stampa nella directory /var/spool/lpd/lp. I backslash servono a dichiarare una continuazione di riga e non sono obbligatori se si usa un sistema di stampa LPRng ma alcuni wizard di configurazione li usano probabilmente per maggiore portabilità.

# Stampante predefinita
lp | HP Deskjet950:\
    :lp=/dev/usb/lp0:\
    :sd=/var/spool/lpd/lp:\
    :sh:\
    :mx#0:\
        :if=/percorso/del/filtro:
    :lf=/var/spool/lpd/lp/log:\
    :af=/var/spool/lpd/lp/acct:\


I record sono specifiche per una stampante e defiscono il comportamento della coda.
In questo esempio
lp la device configurata e connessa alla stampante
sh specifica se stampare un foglio separatore tra i differenti processi di stampa e in questo caso è impostato in modo da non stampare nessun foglio.
mx limita la grandezza massima dei file da stampare. Nell'esempio è impostato a zero, nessun limite.
sd specifica il percorso alla cartella utilizzata per la coda di stampa.
if input filter, definisce il filtro usato per la conversione dati.
Per gli ultimi due, il file di log della direttiva lf e il file di registrazione informazioni sui processi di stampa della direttiva af devono prima essere creati perchè il sistema di stampa possa scriverli.

Per aggiungere una  coda di stampa remota si utilizzano i record rm e rp.

# Stampante condivisa in rete da un printserver
printserver:\
        :sd=/var/spool/lpd/printserver:\
    :sh:\
        :mx#0:\
    :if=/percorso/del/filtro:
        :rm=printserver.esempio.com:\
        :rp=lp:\

        
I quali rispettivamente indicano il server remoto su cui è disponibile la coda di stampa e il nome della coda remota da utilizzare. In questo caso si usa una coda remota in stile BSD.
Da notare inoltre che usando lp come nome della stampante si definisce il nome standard della stampante predefinita modificabile attraverso la variabile di ambiente $PRINTER.


Configurare Cups per stampare con il protocollo SMB/CIFS

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-23 21:54:11

Per poter usare Cups in una rete windows, permettendo la stampa remota ai client Microsoft oppure usando una stampante condivisa da uno di essi, occorre utilizzare Samba che dalla versione 2.0.6 supporta l'interazione con questo potente sistema di stampa. Dalla versione 2.2 di Samba in poi si ha anche la possibilità di esportare i driver necessari per la stampa con Windows.

Gli accorgimenti da prendere per poter far stampare della macchine windows sulla rete usando una stampante linux configurata con cups non sono molti e riguardando in special modo la configurazione del server Samba.
Innanziutto occorrerà aggiungere alla opzioni globali i seguenti parametri
[Global]
printing = cups
printcap name = cups


A questo punto non dovrebbe essere necessaria alcuna altra configurazione per poter stampare attraverso cups anche se di norma sarà necessario definire anche la sezione [printers] che permette a Samba di caricare come risorse condivise tutte le stampanti definite nel sistema di stampa e di configurarne alcuni parametri specifici.
[printers]
        comment = All Printers
        path = /var/tmp
        printable = Yes
        create mask = 0600
        browseable = No


Volendo si può inoltre esportare i driver necessari ai client Windows e a tale scopo viene in aiuto un comodo comando cupsaddsmb che permette di esportare i drivers cups.
Una volta scaricati i driver e copiati nella directory drivers all'interno della directory radice che di norma si trova in /usr/share/cups e facendo attenzione perchè i nomi siano in maiuscolo si configura smb.conf aggiungendo lo share [print$] nel modo che segue
[print$]
        comment = Printer Drivers
        path = /var/lib/samba/drivers
        write list = root
        create mask = 0664
        directory mask = 0775


A questo punto configurate le share [printers] e [print$] si può usare il comando cupsaddsmb per esportare i drivers.
Un comando di questo tipo aggiunge i driver a tutte le code di stampa per l'utente root
#cupsaddsmb -U root -a

L'opzione -a serve a specificare tutte le code configurate nel sistema cups.
Questo comando permette anche di aggiungere coda per coda in modo di permettere una configurazione fine della stampa remota per i client windows.

Se invece si desidera raggiungere una stampante condivisa da una macchina Windows usando cups si possono usare due metodi:
Il primo usa l'implementazione del protocollo lpd e il TCP/IP Printing Service di Windows mentre il secondo usa il protocollo SMB/CIFS.
All'interno di /usr/lib/cups/backend/ la directory in cui si trovano quei programmi che permettono a Cups di interagire con le device, dovrebbe trovarsi un link simbolico chiamato smb che punta al comando smbspool, se non è così è necessario crearlo.
Infine con il comando lpadmin o con l'interfaccia web di amministrazione si creeranno le definizioni delle diverse code e stampanti che usano come device URI delle stringhe nella forma
smb://server/nome_risorsa
smb://workgroup/server/nome_risorsa
smb://user:pass@server/nome_risorsa


lpadmin

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-23 22:14:56

Oltre alla utile e pratica interfaccia web la suite Cups integra al suo interno vari comandi per la sua gestione e configurazione. Il comando lpadmin permette di configurare le stampanti e le classi con le rispettive code ed è utile conoscerlo in casi in cui si sia impossibilitati ad usare un browser.  

Questo comando è molto utile se si deve abilitare la stampante predefinita, se si deve modificare code o stampanti, per aggiungere o eliminare classi e stampanti. La sua sintassi è

lpadmin [ opzioni ] destinazione/opzioni_stampante
Dove per destinazione si intende una stampante o una classe e le opzioni_stampante vengono specificate  come vedremo dopo la chiave -o.
Le opzioni e le variabili settabili non sono moltissime:
-E: Questa opzione può avere due significati diversi a seconda se utilizzata come opzione prima di ogni altra o di norma in fondo alla riga di comando. Nel primo caso implica l'uso di una connessione criptata con il server. Occorre aver configurato il server per l'uso di OpenSSL. Di norma se usata così necessita dell'opzione -h nome_server. Nel secondo caso abilita o disabilita la stampante, ha un significato equivalente ai comandi enable e disable.
-h nome_server: Permette di specificare il server a cui inviare i comandi.
-c classe: Aggiunge la stampante dichiarata alla classe.
-i interfaccia: Si usa per specificare un file di interfaccia in sile System V, generalmente uno script, non può essere utilizzato con l'opzione -P file_PPD
-m modello: Specifica un file System V o PPD situato nella directory dei modelli generalmente /usr/share/cups/model.
-o opzione: Questa chiave è molto importante e raggruppa sotto di se numerose sotto-opzioni per definire particolari specifiche per la coda.
-o nome=valore: Permette di settare una opzione per un file PPD o una stampante.
-o job-k-limit=valore: Specifica il limite di grandezza in Kilobyte su una base per singolo utente.
-o job-page-limit=valore: Specifica il limite massimo di pagine stampabili in un singolo processo di stampa su una base per singolo utente. Le stampe su fronte-retro sono contate come due pagine.
-o job-quota-period=valore: Specifica il periodo di accesso su una base per singolo utente. Il valore va specificato in secondi.
-r classe: Rimuove la stampante dichiarata dalla classe. Se si sta eliminando l'ultima stampante di una classe quest'ultima verrà eliminata.
-u allow/deny:utente,utente: [ -u deny:all; -u allow:none ] Specifica i permessi degli utenti su una specifica stampante.
-v device-URI: Specifica il percorso per la device usata da una determinata stampante.
-D info: Permette di specificare una descrizione della stampante.
-L locazione: Setta una locazione per la stampante specificata.
-P file_PPD: Specifica un file Postscript Printer Description da usare con la stampante.
-d destinazione: Setta come default la destinazione per la stampante o la classe dichiarata.
-x destinazione: Elimina la destinazione per la stampante o la classe dichiarata.


Il sistema di stampa CUPS

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-14 15:24:06

Cups è a tutti gli effetti il sistema di stampa proposto come autorevole sostituto dei metodo di stampa BSD.
Rivoluziona l'intero concetto di stampa, gestendo i filtri in proprio e infatti incorpora molti di questi programmi al suo interno ad esempio una versione specifica di ghostscript.    

Il sistema cups utilizza un protocollo derivato da http chiamato IPP (Internet Printing Protocoll, rfc 2568) e incorpora un server http che gli permette di mantenere un'interfaccia amministrativa via web in ascolto sulla porta 631. Per determinare il comportamento di questa interfaccia e in generale del sistema di stampa si lavora sul file di configurazione  cupsd.conf che solitamente si trova dentro /etc/cups. Questo file ha una sintassi ispirata al file di configurazione di Apache. In questo file si specificano il nome della macchina, il linguaggio di default, i parametri di accesso e la directory radice del sistema, tutti i parametri specifici della applicazione, file di log e comportamenti particolari in caso di eventi differenti.
Cups inoltre gestisce le informazioni necessarie all'elaborazione dati per la specifica stampante usata tramite dei file contenenti istruzioni di tipo MIME, chiamati file PPD e generalmente posti in /usr/share/cups/model/.
Con cups si è in grado di configurare stampanti locali e inoltre permette di aggiungere stampanti remote sia che utilizzino il protocollo IPP che LPD. Supporta inoltre la stampa via SMB in un network Samba.

Con il comando lpadmin si possono aggiungere od eliminare stampanti logiche, inoltre una volta definite si possono abilitare o disabilitare e si possono definire le policy per i processi di stampa. In questo modo si ha la possibilità di amministrare i comportamenti di una determinata stampante. Se si disabilita una stampante questa continuerà ad accettare comunque i processi di stampa inserendoli nella sua coda e senza stamparli mentre se si è definito che deve rifiutare i processi di stampa non verrà accodata nessuna stampa.
Si possono stabilire inoltre delle classi che riuniscono sotto di se diverse stampanti, permettendo così una gestione anche di gruppo. Se un utente invierà un processo alla classe sarà cups a stabilire a quale stampante va inviato. Le classi accettano gli stessi parametri enable e disable, accept e refuse in modo da permettere una gestione complessiva per gruppi di stampanti logiche. Va tenuto conto tuttavia che le stampanti logiche non subiscono le direttive riferite ad una classe sicchè si può disabilitare una classe ma far elaborare processi di stampa ad una stampante del gruppo.
Le informazioni sulle stampanti e sulle classi vengono memorizzate rispettivamente su i file /etc/cups/printers.conf e su /etc/cups/classes.conf, due file che volendo sono editabili a mano ma che generalmente si gestiscono sempre attraverso i comandi di amministrazione tra cui lpadmin.

Per lavorare con cups si utilizzano i comandi standard del sistema BSD, lp o lpr. Per definire code di stampa remote si utilizza una sintassi del genere nome-coda@host-remoto.
Per compatibilità con programmi che potrebbero richiederne la presenza, cups permette di aggiornare il file printcap e nel caso si desiderasse mantenere intatto questo file per il suo uso con sistemi BSD esiste una direttiva di configurazione che permette di specificarne uno alternativo, anche perchè comunque al suo interno si troveranno le specifiche per le stampanti ma i record classici di specifica delle stesse non sono necessari.

Questo versatile e potente sistema di stampa permette di gestire anche delle direttive per i client.
Il file principale per questo è /etc/cups/client.conf ma si possono definire direttive per singolo utente in un file chiamato .cupsrc posizionato all'interno della home directory delllo stesso. Un uso classico di questi file che generalmente sono vuoti può essere quello di specificare un percorso di una stampante predefinita per un utente diversa dalla stampante predefinita sulla workstation.


La stampa remota in stile BSD usando SMB/CIFS

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-23 21:56:29

Aggiungere una stampante in stile BSD in una rete Samba necessita di poche semplici configurazioni. Una volta configurato il sistema di stampa e accertato che tutto funzioni correttamente occorre per lo più lavorare sul file smb.conf.

In questo caso innanzi tutto si dovrà aggiungere alle opzioni [global] del server samba le seguenti direttive:

printing = bsd
printcap name = /etc/printcap


Con queste righe si specifica che si tratta di un sistema di stampa stile BSD e che il percorso del file di definizione delle stampanti è /etc/printcap.
In seguito si dovranno definire lo share [printers] per le stampanti:

[printers]
        comment = All Printers
    security = server
        path = /var/spool/lpd/lp
        printable = Yes
        create mask = 0600
        browseable = No


e quello per la stampante specifica:

[deskjet]
      security = server
      path = /var/spool/lpd/lp
      printer name = lp
      writable = yes
      guest ok = yes
      printable = yes
      print command = lpr -r -h -P %p %s


In questo modo si definisce il comportamento del samba server e con l'opzione print command si dichiara il programma di stampa e i parametri che ne regolano il risultato. In questo esempio si stabilisce inoltre che le autenticazioni sono gestite sulla rete SMB/CIFS da un server preposto ma questo non è obbligatorio.

Assicurandosi che il percorso specificato per la stampante corrisponda a quello inserito nel file printcap con una configurazione di questo tipo si può cominciare a stampare.
Essendo comunque un sistema complesso e ricco di variabili, tra cui ad esempio l'enorme numero di diversi modelli di stampanti in circolazione, è consigliabile fare riferimento alla documentazione ufficiale per configurazioni particolari.


lpoptions

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-23 22:16:41

Questo comando permette di visualizzare e modificare i settaggi per le opzioni e i valori di default da riga di comando.

La sua sintassi è complessa può variare a seconda del lavoro che si sta compiendo e può essere riassunta così
lpoptions [opzioni]

Un esempio:
lpoptions -h nome_server -d destinazione/istanza -o opzione=valore .... -o opzione=valore

Se lanciato senza argomenti mostra le opzioni settate per la coda di stampa di default. Le opzioni sono:
-E: Abilita l'uso di connessioni criptate per comunicare con il server. Occorre aver abilitato il supporto OpenSSL per il server.
-d destinazione/istanza: Specifica la stampante predefinita per la destinazione dichiarata. Se si utilizza un'istanza che, per chiarire, può essere paragonabile alla definizione di una coda si setta l'istanza come predefinita. Questa opzione sovrascrive la definizione della stampante di default per l'utente corrente.
-h nome_server: Definisce il server cups con cui interagire.
-l: Lista tutte le opzioni specifiche di stampa e indica con un simbolo asterisco * quelle correntemente usate.
-o opzione=valore: Permette la specifica delle varie opzioni. Con il chiave -l si possono ricavare le opzioni e i loro valori possibili.
-p destinazione/istanza: Definisce la stampante o un'istanza a cui applicare le opzioni che si specificheranno. Se l'istanza non esiste ne viene creata una con il nome usato.
-r opzione: Rimuove l'opzione specificata.
-x destinazione/istanza: Rimuove tutte le opzioni per la destinazione o la coda definita.

Questo comando si appoggia su due distinti file di sistema. Uno, il principale, viene modificato quando l'utente root utilizza il comando e per installazioni di default si trova in /etc/cups/ e si chiama lpoptions. Le definizioni in questo file coinvolgono tutte le destinazioni/istanze per tutti gli utenti. Per i settaggi del singolo utente queste informazioni sono salvate in un file all'interno della home dell'utente e si chiama .lpoptions    


lpstat

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-23 22:20:46

Questo comando della suite Cups permette di monitorare i processi di stampa e visualizzare informazioni sulle stampanti e le code presenti nel server.

Nonostante la presenza della comoda interfaccia web per controllare i processi e lo stato delle stampanti cups include lpstat una  comoda utility da riga di comando.
La sua sintassi:
lpstat -opzioni

Se usato senza alcuna opzione lpstat stampa a monitor tutti i jobs accodati per l'utente che lo ha lanciato. Le sue opzioni sono uguali per alcuni casi a quelle usate in lpadmin e lpoptions.

-E: Forza l'uso di connessioni cifrate con il server.
-h nome_server: Specifica il server con cui si vuole interagire.
-a stampante/i: Mostra lo stato di una o più stampanti restituendo informazioni sull'accettazione dei processi. Se usato senza specificare la stampante mostra tutte le stampanti e le istanze/code configurate e che accettano i jobs.
-c classe/i: Mostra le classi e le stampanti comprese nella loro dichiarazione. Se usato senza argomenti mostra tutte le classi presenti nel sistema e se non fosse presente neanche una classe non restituisce nessun output.
-d: Mostra la destinazione di default.
-l: Mostra una lista delle stampanti, delle classi e dei jobs attivi.
-o destinazione/i: Mostra le code di stampa per la o le destinazioni specificate. Se si omette la destinazione mostra tutti i jobs in coda.
-p stampante/i: Mostra le stampanti e se accettano o meno i processi di stampa. Se usato senza specificare una o più stampanti mostra queste informazioni per tutte le stampanti.
-r: Permette di verificare se il server CUPS sia attivo o no.
-R: Mostra l'ordine dei jobs nella coda di stampa.
-s: Mostra un sommario dello stato delle stampanti includendo la destinazione di default, le classi e le stampanti membro per ciascuna classe e tutte le stampanti associandole alla loro device-URI. E' equivalente ad usare insieme le opzioni -d, -c e -v.
-t: Mostra un elenco completo di informazioni di stato per tutte le stampanti e le classi definite, è equivalente ad usare insieme le opzioni -r, -d, -c, -a, -p, -v e -o.
-u utente/i: Permette di verificare i processi di stampa attivi per l'utente specificato. Se usato omettendo l'utente si ottiene una lista dei jobs associati all'utente corrente.
-W numero_job: Permette la verifica  dello stato dei jobs in esecuzione e di quelli eseguiti.


Introduzione a LPR (Line Printer Protocol)

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'ask' Nasuti - Ultimo Aggiornamento: 2003-03-26 23:07:01

LPR (Line Printer Protocol) è il protocollo utilizzato per la comunicazione di stampa tra client e server, basato sul TCP. La porta sui cui va in ascolto è di default la 515, risponde a richieste provenienti dalle porte sorgenti da 721 a 731.  

[pippo@SATURNO root]$ cat /etc/services | grep printer
printer         515/tcp         spooler         # line printer spooler
printer         515/udp         spooler         # line printer spooler


Nei sistemi Unix standard vi sono una serie di programmi che interagiscono con il processo di stampa:
- lpr ha il compito di gestire la coda di stampa
- lpq visualizza la coda di stampa
- lprm rimuove file dalla coda di stampa
- lpc programma di controllo della stampa e stampanti

LPRng di Patrick Powell è un altro software di stampa che migliora alcune funzionalità di sicurezza e portabilità rispetto a lpr.
LPRng può essere integrato con Samba, permette autenticazioni di stampa sicure supportando i principali software di crittografia.


/etc/cups/cupsd.conf

Tipo Infobox: PATH - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2004-01-21 12:35:14

Il file di configurazione principale del sistema di stampa cups. Gestisce principalmente il comportamento del demone che fornisce i servizi di stampa e di amministrazione attraverso la sua interfaccia web. Permette di definire se occorre l'uso di cifratura delle comunicazioni, definire gli accessi alle risorse del server e se il server debba o meno notificare con messaggi broadcast la sua presenza e le code disponibili sulla rete.

Generalmente a installazione compiuta si ha un esempio di questo file con tutte le opzioni e i loro valori di default all'interno della directory di cups in /etc o dove specificato in fase di compilazione. Le direttive all'interno del cupsd.conf sono davvero molte e se i commenti del file non bastassero la sua documentazione è ampia. In se la sua struttura è uguale a quella di Apache così come la sua sintassi.
I valori di default a parte qualche configurazione fine possono andare benissimo specie in network non troppo grossi e con un traffico di rete medio.

Un file strutturato in questo modo potrebbe andare benissimo per un server in una piccola rete locale:
#cat /etc/cups/cupsd.conf
LogLevel info
Port 631
Browsing Off
BrowseAddress 192.168.0.255

< Location />
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From 127.0.0.2
Allow From 192.168.0.*
</Location>
In questo caso definisco l'accesso alla radice del sistema cups. Permetto così ai client remoti di stampare attraverso questo server, la location /printers che non è definita perchè "eredita" i settaggi della location radice /. Per questa direttiva non è specificata alcuna autenticazione degli accessi

< Location /admin >
AuthType Basic
AuthClass System
Queste direttive permettono di specificare l'autenticazione per la location /admin basata su una verifica degli utenti nel sistema, appartenenti al gruppo di sistema modificabile con la direttiva Systemgroup. Si specificano sempre racchise in un'istanza < Location>
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
</Location>


Reti miste Windows - Linux

Casi e situazioni comuni con rete miste Windows-Linux - WINS - PDC.

Livelli di interoperabilità fra Samba e reti Windows

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2006-03-26 18:57:04

Le possibilità di interoperabilità fra client e server Windows e Samba in una rete locale per la condivisione dei file sono varie e si possono raggruppare in due scenari di riferimento:
- Windows server con client misti (Windows, Linux/Unix, MacOS).
- Linux/Unix Samba server con client misti.

E' possibile configurare Samba per:
- Operare come Primary Domain Controller (PDC di un dominio NT, ma non Domain Controller di una Active Directory) di una rete mista, gestendo anche i profili di macchine Windows e il login sul dominio. Una simile opzione permette ad una macchina Linux con Samba di eseguire le stesse funzioni di un PDC di dominio NT.
- Operare come normale File Server per client misti. I metodi di autenticazione possono essere vari e a seconda del metodo utilizzato possono essere necessari diversi interventi sul server e sui client.
- Operare come Domain Member con le funzionaità di file server accessibili sulla base delle login e password del dominio. Samba può essere parte sia di un dominio NT (Samba 2 o superiori) che di una Active Directory (Samba 3 o superiori)

- Operare come WINS server (o essere configurato per utilizzare un altro WINS server). In questo caso la configurazione è semplice, rapida ed efficace, non presentando particolari problemi di compatibilità e interoperabilità.
- Operare come Master Browser in una rete mista.

Samba NON permette invece di gestire una macchina come Backup Domain Controller di un PDC Windows, non può essere un Backup Browser e non può essere un Secondary Wins Server.

Sul lato client, invece, non ci sono particolari problemi ad usare Samba per connettersi a server Windows o Linux: la condivisione di rete remota viene normalmente montata sul file system locale e ci si può normalmente accedere con i permessi concessi.


Samba come Primary Domain Controller (PDC)

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-04-29 11:43:32

Samba può svolgere le attività di PDC, Primary Domain Controller, in una rete di client Windows (o mista).
Le funzionalità supportate sono:
- Login sul dominio (domain logon) per client Windows NT/2000/XP.
- Sicurezza a livello utente per client Windows 9x/ME (questi client non hanno il concetto di dominio, ma supportano il login su un dominio)
- Roaming profiles, per avere utenti che possono loggarsi su client diversi mantenendo il proprio ambiente.
- Browse list e master browser
- Policy di sistema in stile NT4
- Possibilità di ottenere la lista degli utenti/gruppi presenti sul PDC Samba
- Gestione Active Directory (introdotta, parzialmente, dalla versione 3.x)

Le funzionalità ancora non supportate sono:
- Possibilità di fare da Domain Controller in un dominio ADS (Active Directory)
- Utilizzo come BDC (Backup Domain Controller) in un dominio NT4 con PDC Windows.

Per configurare Samba come PDC di un dominio Windows è necessario:
1- Installare Samba su un server Linux/Unix (tramite sorgenti o RPM)
2- Configurare smb.conf
3- Creare directory per i roaming profile e i domain logons
4- Aggiungere le login e le password per gli utenti e le macchine del dominio
5- Configurare i client Windows per unirsi al dominio.

Le istruzioni che seguono si applicano sia alla versione 2 che alla 3, tranne per la parte relativa alla direttiva add machine script.

1- Installazione di Samba
L'installazione per un PDC non richiede particolari accorgimenti rispetto ad una normale installazione di Samba, tramite rpm o tar.gz.

2- Configurazione di smb.conf
Vediamo un esempio del file di configurazione di un Samba PDC. Varie impostazioni sono comuni a qualsiasi installazione Samba, alcune sono specifiche per un PDC (domain master = yes , security = user , encrypt passwords = yes), altre sono necessarie se si vuole supportare l'esecuzione sul client di uno script al login (logon script e condivisione [netlogon] ) o l'uso dei roaming profiles (logon path , condivisione [profiles]).
Valutare attentamente quest'ultima opzione: ha la comodità di separare l'uso di una singola macchina fisica da un singolo utente (tutti gli utenti possono usare tutte le macchine), ma comporta ad ogni login il caricamento o la sincronizzazione di tutti i "Documents and Settings" Windows fra il client e il server, con un potenziale carico sul network non indifferente e maggiori attese da parte dell'utente.
Fatto il login l'utente agirà sui file della macchina locale, che poi vengono a loro volta sincronizzati con quelli sul server al momento del logout.

[global] ; Settaggi generali (validi su ogni configurazione Samba)
    workgroup = intranet E' il nome del Dominio e/o del Workgroup
    netbios name = serverone E' il nome del server Samba
    server string = Samba PDC - Versione %v La descrizione del server
    socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=8192 SO_RCVBUF=8192 Settings TCP consigliabili di default

    ; Settaggi per un PDC e un master browser
    os level = 64 Imposta il valore con cui partecipare alle elezioni per il Master Browser
    preferred master = yes Forza una elezione quando si avvia e vi partecipa con maggiori possibilità di successo
    local master = yes Fa partecipare Samba alle elezioni per il Local Master Browser
    domain master = yes La riga che indica a Samba di operare com PDC

    ; Gestione utenti e sicurezza
    security = user Impone di autenticare gli utenti localmente. E' necessario su un PDC Samba
    encrypt passwords = yes Cripta login e password in fase di autenticazione: obbligatorio su un PDC e necessario per interagire senza problemi con client Windows NT o successivi
    domain logons = yes Permette ai client Windows di loggarsi sul dominio autenticandosi con il server Samba
    hosts allow = 127.0.0.1 192.168.0.0/255.255.255.0 Permette l'accesso solo dal localhost e dalla rete 192.168.0.0/24
    add machine script = /usr/sbin/useradd -d /dev/null -g machines -s /bin/false -M %u (Solo su Samba 3) Aggiunge automaticamente al sistema l'account di una nuova macchina che entra nel dominio

    ; Gestione logging
    log file = /var/log/samba/log.%m Definisce la posizione dei log e indica di creare log diversi on i nomi delle rispettive macchine client
    log level = 2 Imposta a 2 il livello di logging, visualizzando tutti i file letti e scritti
    max log size = 50 Imposta a 50 Kb la dimensione massima dei file di log

    ; User profiles, home directory e netlogon (a queste configurazioni in [global] vanno SEMPRE aggiunte le definizioni rispettivamente di [homes] , [profiles] e [netlogon] riportate più sotto
    logon home = \\%L\%U\.profile Definisce la posizione del file .profile (per client Win9x/ME) in \\nomeserver\nomeutente
    logon path = \\%L\profiles\%U Definisce la posizione della directory profiles (per client WinNT/2k/XP) in \\nomeserver\profiles\nomeutente
    logon drive = H: Crea l'unità di rete H: al login su client Windows
    logon script = netlogon.bat Specifica quale script eseguire sul client ad ogni login. Lo script viene cercato nella directory definita nella condivisione [netlogon]

[homes] Share speciale, che definisce la posizione delle home directory
    comment = Home Directory per ogni User Descrizione della condivisione
    browseable = no E' bene non rendere pubblicamente visibile le home dei singoli utenti
    writeable = yes Ogni utente deve poter scrivere nella sua home
    
[profiles] Share speciale dove vengono scritti i file di profilo per i gli utenti roaming. Ad ogni login e logout il suo contenuto viene sincronizzato con la cartella dei documenti sul computer locale (C:/Documenti/NomeUtente.dominio)
    path = /home/profiles La directory locale sul server Samba dove sono salvati i profili. Qui vengono, automaticamente, create delle sottodirectroy con i nomi degli utenti
    writeable = yes I profili sono sincronizzati con il client al login e al logout e devono essere scrivibili
    browseable = no Come per le home, anche i profili non devono essere visibili agli altri utenti
    create mask = 0600 La maschera con cui vengono creati i file: Pieni permessi all'owner, nessun permesso per gli altri utenti
    directory mask = 0700 La maschera con cui vengono create le directory: per l'owner devono essere anche eseguibili (sfogliabili)

[netlogon] Condivisione speciale che contiene gli script che vengono eseguiti sui client Windows al login sul dominio. Devono essere eseguibili su Windows e possono essere utilizzati per varie operazione di amministrazione centralizzata (backup di dati locali, aggiornamento programmi o antivirus, mappatura di nuove condivisioni di rete ecc.)
    path = /home/netlogon La directory sul server in cui sono contenuti, in sottodirectory con nome uguale al login dell'utente, gli script definiti con la direttiva "logon script"
    read only = yes Questi script devono essere accessbili solo in lettura...
    write list = @admin ... tranne agli utenti del gruppo (@) admin
    browseable = no Questa è una condivisione di servizio che è inutile mostrare agli altri utenti


3- Creazione delle directory supplementari
E' importante creare directory per i profile e i netlogon definiti in smb.conf con nomi e permessi corretti.
Sulla base della configurazione di esempio sopra riportata vanno eseguite le seguenti operazioni sul server Samba (come root):
[root@sambaserver root]# groupadd admin Si crea il gruppo admin, composto da utenti che possono editare gli script di logon. Considerare che questi script  sono particolarmente importanti, in termini di sicurezza, visto che vengono eseguiti sui client Window
[root@sambaserver root]# mkdir -m 0775 /home/netlogon Crea la directory /home/netlogon, leggibile ed eseguibile da utti gli utenti e modificabile solo da owner e ownergroup
[root@sambaserver root]# chown root.admin /home/netlogon Si imposta root come owner della directory e admin come gruppo (con permessi di scrittura)
[root@sambaserver root]# mkdir /home/profiles Si crea una directory per i profili (uguale a quella definita in smb.conf)
[root@sambaserver root]# chmod 1757 /home/profiles Si imposta lo sticky bit e si rende questa directory scrivibile da root e le sue sottodirectory gestibili dai rispettivi utenti, senza possibilità di modificare quelle degli altri


4- Aggiungere login e password
Gestire gli utenti di un dominio con Samba non è una procedura immediata e vanno considerati alcuni aspetti fondamentali:
- Samba utilizza come file delle password /etc/samba/smbpasswd (di default) che presenta una riga per ogni utente (sia di un dominio che di un server con normale autenticazione). In questo file è prevista una riga (con login , password criptata e altri dati) per ogni utente.
- Per ogni utente presente sul file smbpasswd DEVE essere presente un rispettivo utente sul normale file degli utenti Unix /etc/passwd. Questo perchè Samba agisce sul sistema locale come un normale processo Unix e, anche se viene eseguito come root, accede al filesystem con i permessi degli utenti secondo quanto configurato.
- Quando Samba agisce come PDC, oltre a creare una login (sia in /etc/samba/smbpasswd che in /etc/passwd) per ogni utente, si deve creare una login speciale per ogni macchina del dominio. Questa login, definita trust account o computer account ha il nome NetBios del computer seguito dal segno dollaro ($). Al primo login da parte del trust account viene generata una sorta di password che viene utilizzata per autenticare le comunicazioni fra il PDC e il client e assicurarsi che non ci siano altre macchine che possano unirsi al dominio con lo stesso nome NetBios.
- La gestione delle login (sia per gli utenti che per i computer, sia su smbpasswd che su passwd) può essere fatta in maniera manuale, con i comandi sotto riportati, o in maniera automatica, tramite l'uso della direttiva add user script
- Windows9x/ME anche se possono eseguire un login su un dominio, NON sono strutturati per essere dei client a pieno titolo di un dominio in quanto non ne rispettano le logiche di sicurezza e trust.
Per aggiungere un computer account al dominio manualmente seguire la seguente procedura:
[root@sambaserver root]# groupadd machines Crea un gruppo per tutte i computer account
[root@sambaserver root]#  useradd -g machines -d /dev/null -s /bin/false nomeNetBios$ Aggiunge al sistema una login, membro del gruppo machines, senza home directory, senza shell, con nome uguale al nome NetBios della macchina seguito dal segno $. Notare che questo account serve a Samba per agire sul sistema, ma è bene che non possa essere utilizzato per una normale login.
[root@sambaserver root]# passwd -l nomeNetBios$ Viene messo un lock sulla password, in modo da lasciarla nulla e non renderla modificabile se non da root
[root@sambaserver root]# smbpasswd -a -m nomeNetBios Si crea un nuovo computer account per /etc/samba/smbpasswd e si imposta la relativa password. L'opzione -a permette di crearlo, se non esiste, l'opzione -m indica che si tratta di un machine account, il nome NetBios della macchina da aggiungere NON va seguito da $, in questo caso, in quando questo carattere viene aggiunto automaticamente. Non è necessario ricordare la password inserita in quanto viene gestita direttamente fra PDC e client del dominio


Se si vuole evitare di aggiungere a mano un nuovo account per ogni macchina del dominio, si può provare ad aggiungere, come sopra indicato, la seguente riga a smb.conf (valida solo per Samba 3):
add machine script = /usr/sbin/useradd -d /dev/null -g machines -s /bin/false -M %u
Verificare il path e la sintassi del comando useradd e assicurarsi di avere il gruppo machines già creato (groupadd machines).

Per aggiungere a mano le login degli utenti (non delle macchine) del dominio:
[root@sambaserver root]# useradd pippo Aggiunge l'utente al /etc/passwd di sistema
[root@sambaserver root]# passwd pippo Gli imposta la password. Se l'utente non deve accedere al sistema Unix, impostagli una shell nulla in /etc/passwd
[root@sambaserver root]# smbpasswd -a pippo Aggiunge l'utente pippo a /etc/samba/smbpasswd e gli imposta la password

NOTA: Quando si configura un client Windows NT/2k/XP per farlo diventare parte di un dominio, viene richiesta una password di amministratore. In questa situazione si deve usare la login di root con la relativa password, per cui è necessario aggiungere l'utente root anche al smbpasswd:
[root@sambaserver root]# smbpasswd -a root
Notare che se per caso si cambia la password di root con passwd e non la si aggiorna anche con smbpasswd, la password che fa testo è la seconda, quella presente in /etc/samba/smbpasswd.

Per questo ed altri motivi, una volta creato un utente è buona cosa fare in modo che la sua password sul sistema Unix sia allineata con quella usata da Samba via rete. Per fare in modo che una password cambiata tramite Samba si rispecchi anche sul /etc/passwd locale si devono aggiungere a smb.conf simili righe di configurazione:
    unix password sync = yes Imposta la sincronizzazione delle password fra Samba e il sistema Unix locale
    passwd program = /usr/bin/passwd %u La riga di comando per cambiare la password Unix. %u è la login dell'utente
    passwd chat = *New*UNIX*password* %n\n *Retype*new*UNIX*password* %n\n *Enter* new*UNIX*password* %n\n *Retype*new*UNIX*password* %n\n *passwd: *all* authentication*tokens*updated*successfully*
La procedura di matching per gestire le richieste in output di passwd. Assicurarsi che sul proprio sistema siano utilizzate le stesse parole
Purtroppo questa procedura non funziona al contrario: se si cambia con passwd una password Unix, si dovrà cambiarla a mano con smbpasswd per tenere sincronizzata la password Unix con la password Samba.

5- Configurazione dei client
La configurazione di un sistema Windows per unirsi ad un dominio, varia a seconda della versione:
Windows 95/98/ME:
- Verificare che sia installato il "Client per Reti Microsoft" fra le proprietà di rete
- Assicurarsi che il Client per Reti Microsoft sia selezionato come protocollo di rete primario (Pannello di Controllo -> Rete -> Logon di rete primario).
- Andare su Pannello di Controllo -> Rete -> Client per reti Microsoft -> Proprietà -> Logon su Dominio NT.
- Se si è configurata su smb.conf l'opzione "add user script", selezionare il checkbox Crea un Computer Account, altrimenti creare a mano sul server Samba un utente con il nome della macchina Windows.
- Inserire il nome del proprio dominio e cliccare OK.

Windows NT:
- Andare su Pannello di Controllo -> Rete -> Identificazione Rete -> Proprietà
- Selezionare Dominio e inserire il nome del prorio dominio
- Selezionare Crea un Computer Account
- Alla richiesta della password di un amministratore inserire la login e la password di root, ricordarsi che l'utente root deve essere aggiunto a smbpasswd.
- Dovrebbe comparire un messaggio che ci da il benvenuto sul dominio.

Windows 2000:
Le procedure sono uguali a quelle per Windows NT tranne che i settaggi di rete sono trovati sotto Pannello di Controllo -> Sistema -> Identificazione Rete (oppure, sul Desktop, cliccare col tasto destro del mouse sull'icona Risorse del Computer, selezionare Proprietà, cliccare sulla tab Identificazione Rete e sul tasto Proprietà).

Windows XP:
La procedura con Windows XP è più complessa (lamentele a Microsoft che usa cambiare le specifiche e le implementazioni dei suoi protocolli anche per rendere più complicata l'interoperabilità con soluzioni alternative).
Notare che solo XP Professional Edition può essere usato per far parte di un dominio, Windows XP Home Edition non può far parte di un dominio (Samba o Windows based).
- Aprire l'editor delle policy di Sicurezza Locale (Start->Pannello di controllo->Strumenti di Aministrazione->Criteri di protezione locali->Criteri locali->opzioni di protezione)
- Disabilitare la voce "Domain member: Digitally encrypt or sign secure channel (always)" (Membro di dominio: aggiunta crittografia of irma digitale ai dati del canale protetto (sempre) )
- Disabilitare la voce "Domain member: Disable machine account password changes" (Controller di dominio: rifiuta cambio password account computer)
- Disabilitare la voce "Domain member: Require strong (Windows 2000 or later) session key" (Membro di dominio: richiesta chiave di sessione avanzata (Windows 2000 o versioni successive) )
- Scaricare da Samba.org (http://de.samba.org/samba/ftp/docs/Registry/WinXP_SignOrSeal.reg) la patch per il registro WinXP_SignOrSeal. Per applicarla cliccare due volte sul file .reg e rispondere Si alle domande
- A questo punto ci si può unire al dominio come su Windows NT/2000: Tasto destro su Risorse del Computer, selezionare Proprietà, Nome del Computer e tasto Modifica uppure cliccare su Identificazione di Rete ed eseguire il Wizard.

Linux/Unix:
Anche dei sistemi Linux, ovviamente, possono unirsi ad un dominio con un PDC Samba e se sono dei file server, si può configurare Samba per permettere l'autenticazione tramite il dominio.
Su smb.conf ci devono essere le seguenti righe:
[global]
        workgroup =
        netbios name =
        security = DOMAIN
        encrypt passwords = Yes
        password server =
        preferred master = False
        domain master = False

Ovviamente sul PDC Samba deve essere creato un computer account per il nostro Samba locale (con il nome specificato in netbios name) e, anche in questo caso, il computer locale deve preventivamente unirsi al dominio, con una procedura che è paragonabile a quelle viste sopra per client Windows. Sul Linux/Unix locale basta scrivere:
smbpasswd -j -r -U root
Bisogna fornire la password di root del PDC Samba (ricordarsi che è la password salvata in smbpasswd e non in passwd/shadow, nel caso fossero diverse).


Samba security

Breve rassegna della security history, problematiche attuali

Samba Remote Buffer Overflow

Tipo Infobox: TIPS - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-05-21 21:33:58

Nell'Aprile 2003 è stata resa pubblica una seria vulnerabilità in Samba che, sfruttando un buffer overflow nella funzione call_trans2open di trans2.c, permette di eseguire comandi arbitrari su un server remoto con i permessi con cui gira il processo Samba: root.
Praticamente il tipo di security bug più temibile e pericoloso.

Questa vulnerabilità (codice CVE: CAN-2003-0201) segue di poche settimane un altro problema nella gestione di pacchetti SMB/CIFS frammentati (CVE: CAN-2003-0085), un problema dovuto alla non corretta gestione del cambio delle password criptate (CVE: CAN-2002-1318) e un problema nella gestione di file reg (CVE: CAN-2003-0086).
Queste vulnerabilità sono effettivamente gravi e vengono solo parzialmente mitigate dal fatto che è improbabile che esistano server Samba direttamente accessibili da Internet.
Sono affette dal Remote Buffer Overflow della CAN-2003-0201 tutte le versioni precedenti la 2.2.8a (che rispetto alla 2.2.8 ha solo la correzione dell'errore) e la 2.0.10a. Non ne sono affette le versioni del branch 3.x. Anche il progetto parallelo Samba-TNG è vulnerabile fino alla versione 0.3.2 esclusa.

Sono già in circolazione degli exploit in grado di sfruttare questa vulnerabilità, per cui è assolutamente necessario aggiornare il proprio Samba server ad una versione patchata o installare ex-novo una versione corretta.

I casi citati sono indicativo di quanto sia importante avere sistemi aggiornati e, possibilmente, server Samba non direttamente accessibili in Internet.


Storia delle vulnerabilità di Samba

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-06-05 19:10:18

A titolo esemplificativo elenchiamo una lista di vulnerabilità di Samba nel corso degli anni.
L'elenco è stato ottenuto da Security Focus, in alcuni casi si applica a strumenti di gerstione (SWAT), in altri, in particolare gli ultimi elencati, si applica a versioni di Samba recenti, che vanno assolutamente patchate.

  2003-05-16:  Samba Multiple Unspecified Remote Buffer Overflow Vulnerabilities
  2003-05-16:  Samba 'call_trans2open' Remote Buffer Overflow Vulnerability
  2003-05-16:  Samba SMB/CIFS Packet Assembling Buffer Overflow Vulnerability
  2003-05-14:  Samba REG File Writing Race Condition Vulnerability
  2003-05-02:  Samba Server Encrypted Password Buffer Overrun Vulnerability
  2002-09-18:  Samba Improperly Terminated Struct Buffer Overflow Vulnerability
  2001-11-03:  Samba Remote Arbitrary File Creation Vulnerability
  2001-06-28:  Samba Insecure TMP file Symbolic Link Vulnerability
  2000-11-01:  SAMBA SWAT Symlink Vulnerability
  2000-11-01:  SAMBA SWAT Logging Failure Vulnerability
  2000-11-01:  SAMBA SWAT Logfile Permissions Vulnerability
  2000-09-11:  NT Authentication PAM Modules Buffer Overflow Vulnerability
  1999-07-21:  Samba Pre-2.0.5 Vulnerabilities
  1999-06-01:  SAMBA Long Password Buffer Overflow Vulnerability


Mail server in una rete locale


Il protocollo SMTP

Simple Mail Transfer Protocol: sintassi base

Protocollo SMTP Overview

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2004-06-04 11:50:33

Simple Mail Transfer Protocol (SMTP) è il protocollo utilizzato per trasmettere messaggi di posta elettronica tra due host.

SMTP utilizza il protocollo di trasporto TCP, ed in particolare un SMTP server rimane costantemente in ascolto sulla porta 25. Il server SMTP si occupa poi di trasferire i messaggi nelle caselle di posta (mailbox) dei destinatari, oppure qualora non fosse il diretto responsabile di queste, inoltrarli (operazione di relay) al server che provvederà a farlo. La sintassi dei comandi è case-insensitive, ed è composta da istruzioni seguite da uno o più parametri terminate da un CRLF (Invio).

Il protocollo è descritto nella RFC 821, ma lavora in stretta collaborazione con altri standard come la RFC 822 che descrive la sintassi degli headers della mail, la RFC 1049 che definisce le strutture dati per interpretare correttamente il contenuto delle mail e la RFC 974 che si occupa del routing delle mail tramite DNS.

Lo standard definito dalla RFC 821, aveva diversi limiti riguardanti per esempio la dimensioni dei messaggi oppure la trasmissione di mail non in inglese o diverse dal semplice plain text. Per ovviare a questa restrizione è stato necessario estendere il protocollo tramite la RFC 1425 riguardante le SMTP Service Extensions.

I principali comandi SMTP:
HELO: Identifica il client SMTP al server SMTP;
EHLO: E' possibile usare anche questo comando per identificarsi, se il server supporta le SMTP Service Extensions riponderà in modo positivo altrimenti con un errore di tipo 500 (Syntax Error);
MAIL FROM: <indirizzo mittente>: Indicata la mailbox del mittente del messaggio;
RCPT TO: <indirizzo destinatario> : Indica la mailbox del desinatario (Recipient). E' possibile specificare attraverso molteplici RCPT TO diversi destinatari;
DATA: Indica al server che quanto digitato successivamente saranno i dati del messaggio di posta;
RSET: Annulla i comandi (Reset) precedentemente inviati nella sessione SMTP corrente;
VRFY <stringa>: Chiede al server se la stringa di testo immessa rappresenta un
nome utente presente ed in tal caso visualizza l'intero indirizzo;
HELP: Visualizza i comandi disponibili sul server;
NOOP: Non esegue nessuna operazione restituisce solo un messaggio 250 (Ok) se il server risponde;
QUIT: Termina la sessione SMTP corrente;

Una sessione SMTP attraversa almeno sei fasi:
1. Il client SMTP contatta il server sulla porta TCP 25. Se questo è in ascolto e la connessione è accettata risponde con un messaggio 220 (Ready);
2. Il client chiede di stabilire la sessione SMTP inviando il comando HELO seguito dal FQDN (Fully Qualified Domani Name). Se il server accetta rispondo con un messaggio 250 (Ok);
3. Il client indica il proprio indirizzo tramite il comando MAIL FROM: <indirizzo mittente>. Il server risponde con 250 (Ok) per ogni destinatario accettato;
4. Successivamente il client indica al server i destinatari del messaggio tramite RCPT TO: <indirizzo destinatario> ed il server risponde per ogni destinatario accettato un codice 250 (Ok);
5. Il client comunica al server l'intenzione di scrivere il corpo del messaggio con DATA. Il server risponde con un codice 354 e indica come marcare il termine del messaggio. I campi come Date, Subject, To, Cc, From vanno inseriti tra i dati della mail;
6. Completato il messaggio da scrivere tramite . il server memorizza la mail. A questo punto è possibile, scrivere un nuovo messaggio oppure inviare il comando QUIT, dopo il quale il server invia i messaggi e risponde con un codice 221 (Closing) e la connessione TCP viene terminata;

Esempio di una sessione SMTP da linea di comando:
homer@Joker:~$ telnet smtp.springmail.it 25
Trying 195.130.225.171...
Connected to smtp.springmail.it.
Escape character is '^]'.
220 mail.springmail.it ESMTP Service (6.5.032) ready
Tramite il programma telnet viene contattato il server SMTP sulla pora TCP 25
E' possibile notare dal messaggio ESMTP Service che il server supporta le SMTP Service Extensions

HELO
250 mail.springmail.it Missing required domain name in HELO, defaulted to your IP address [62.10.125.229]
Il client si identifica tramite il comando helo (non iniviando un nome di dominio, viene utilizzato l'indirizzo IP)
L'autenticazione avviene con HELO anziché EHLO e quindi il client non usufruisce delle SMTP Service Extensions qui supportate

HELP
214-Valid SMTP commands:
214-  HELO, EHLO, NOOP, RSET, QUIT, STARTTLS
214-  MAIL, RCPT, DATA, VRFY, EXPN, HELP, ETRN
214-For more info, use HELP <valid SMTP command>
214 end of help
HELP QUIT
214-Syntax: QUIT
214-Purpose: request closing of the connection
214 end of help
Il client richiede una lista dei comandi disponibili tramite help e successivamente un aiuto per il comando QUIT
MAIL FROM:<homer@springmail.it>
250 MAIL FROM:<homer@springmail.it> OK
RCPT TO:<arnaldo.z@email.it>
250 RCPT TO:<arnaldo.z@email.it> OK
DATA
Inizia l'inserimento del corpo della mail
354 Start mail input; end with <CRLF>.<CRLF>
From:Homer
To:Arnaldo
Subject:Il protocollo SMTP

Ciao,
questa mail serve per illustrare
il protocollo SMTP
---
Arnaldo aka [Homer]
.

250  Mail accepted
Il comando "." punto termina l'inserimento del messaggio; Il server SMTP lo accetta
QUIT
221 mail.springmail.it QUIT
Connection closed by foreign host.
La connessione TCP termina e si ritorna al prompt
homer@Joker:~$


Il client di posta elettronica (Kmail, Outlook o Eudora) si occupa solitamente di comunicare con il server al posto nostro in base alla propria configurazione.


Installazione e gestione di Sendmail

Installazione di Sendmail tramite RPM e sorgenti, file installati e posizioni. Gestione del servizio

Installazione di Sendmail

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-06-02 12:43:02

Generalmente su gran parte delle distribuzioni Linux, Sendmail viene installato di default e in molti casi viene eseguito all'avvio per restare in ascolto sulla porta 25 del localhost.
In questo modo viene usato per inviare la posta locale, ma non rimande in ascolto su un indirizzo pubblico.
Il pacchetto con cui viene fornito è sendmail ma in molti casi, se si vuole usare Sendmail su un server di posta SMTP che deve ricevere posta via rete, è necessario installare anche il pacchetto sendmail-cf che contiene le macro M4 necessarie per processare il file /etc/mail/sendmail.mc (avente un formato semplice e comodo da modificare) e generare il file di configurazione /etc/mail/sendmail.cf (con una sintassi piuttosto complessa ed intricata.

Installazione da RPM
La procedura è la solita. Ecco un esempio su Fedora 2:
rpm -i sendmail-8.12.11-4.6.i386.rpm
Fra i file installati si segnalano:
/etc/mail/ La directory dove sono inseriti tutti i file di configurazione
/etc/mail/access Il file che definiscea chi Sendmail permette il relay e a quali host vengono rifiutati
/etc/mail/local-host-names L'elenco dei domini per cui Sendmail riceve posta
/etc/mail/sendmail.cf Il file di configurazione
/etc/mail/sendmail.mc Il file M4 "human readable" con cui viene generato sendmail.cf
/etc/rc.d/init.d/sendmail Lo script di avvio e gestione del servizio Sendmail
/etc/sysconfig/sendmail Parametri e impostazioni che definiscono con quali argomenti viene lanciato Sendmail
/usr/sbin/sendmail.sendmail Il programma sendmail vero e proprio, per permettere la coesistenza con altri MTA (Postfix) il comando /usr/sbin/sendmail è un link che punta al file /etc/alternatives/mta che a sua volta è un link al programma vero e proprio
/var/log/mail/statistics File di statistiche sui movimenti di posta
/var/spool/mqueue La directory che contiene i messaggi di posta in coda


Installazione da sorgenti
Compilare Sendmail dai sorgenti è particolarmente semplice. Basta scaricare dal sito ufficiale i sorgenti:
[al@localhost al]$ wget ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.12.11.tar.gz
Scompattarli:
[al@localhost al]$ tar -zxvf sendmail.8.12.11.tar.gz
Lanciare lo script Build che provvede a compilare i sorgenti (di fatto è un make):
[al@localhost al]$ cd sendmail-8.12.11 ; ./Build
Copiare i file nelle directory di installazione (bisogna avere i privilegi di root):
[al@localhost sendmail-8.12.11]$ su ; ./Build install


Opzioni e comandi di invocazione di Sendmail

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-06-02 12:03:57

Sendmail può essere lanciato in diversi modi per eseguire operazioni diverse.
Alcune opzioni possibili corrispondono a comandi con nomi diversi, che di fatto eseguono Sendmail con modalità specifiche.
A titolo di reference vengono elencate le principali opzioni con cui Sendmail può essere lanciato.

hoststat (sendmail -bh)
Stampa statistiche sullo stato persistente dell'host, con informazioni sulle mail che ha gestito. Questo è possibile solo se è attivata l'opzione HostStatusDirectory:
sendmail.cf: O HostStatusDirectory=/path/to/dir
sendmail.mc: define(`confHOST_STATUS_DIRECTORY',`/path/to/dir')
Con hoststat -v vengono visuliazzate le righe di info per esteso.

purgestat (sendmail -bH)
Ripulisce (rimuove) tutte le statistiche sullo stato persistente dell'host, presenti nella directory definita con l'opzione HostStatusDirectory.
Questo secondo il manuale, di fatto, almeno sul Sendmail di RedHat 9, con attivata la suddetta opzione, questo comando non sembra avere alcun effetto.

mailq (sendmail -bp)
Visualizza l'elenco delle mail in coda. La directory in cui sono salvate è definita con l'opzione QueueDirectory:
sendmail.cf: O QueueDirectory=/path/to/dir
sendmail.mc: define(`confQUEUE_DIR',`/path/to/dir')
Di default è /var/spool/mqueue

newaliases (sendmail -bi)
Ricostruisce il database degli alias generando il file /etc/aliases.db (di solito, se si usa il database db di default) rendnedo attive le modifiche fatte su /etc/aliases.
Considerare che gli script di startup (/etc/init.d/sendmail start) previsti in molte distribuzioni automaticamente prima di lanciare il demone Sendmail eseguono un newaliases.

smtpd (sendmail -bd)
Lancia Sendmail in daemon mode, lasciando il processo in ascoltro sulla porta 25 (di default) e restituendo la shell. E' la modalità tipicamente utilizzata su un server SMTP che riceve posta.

sendmail -bm (default)
Invocato con questa opzione di default Sendmail invia il messaggio che gli arriva in standard input ai destinatari specificati come argomento della command line.

sendmail -bs
Questa è la modalità con cui lanciare Sendmail tramite (X)inetd: viene invocato in foreground, accetta i messaggi in stdin, consegna il messaggio e si chiude. In server di posta che lo utilizzano in questo modo (e non come demone sempre attivo) è opportuno processare periodicamente la coda dei messaggi in uscita (crontabbando un sendmail -q)

sendmail -bt
Entra in modalità di test, con cui è possibile verificare come funzionano le regole di instradamento della posta. Si presenta una shell in cui è possibile premere ? per visualizzare un elenco dei comandi possibili.
Utile per troubleshooting e debugging avanzati.

sendmail -C /path/to/sendmail.cf
Utilizza un file di configurazione alternativo rispetto al solito /etc/sendmail.cf o /etc/mail/sendmail.cf. Utile per test sulle configurazioni.

sendmail -q
Processa la coda di mail in uscita. Comodo se si non si vogliono aspettare i tempi preimpostati e si vuole immediatamente processare la posta in coda. Può essere lanciato anche mentre un'altra istanza di Sendmail è in esecuzione in daemon mode.

sendmail -q30m
Esegue Sendmail in background e processa la coda di posta ogni 30 minuti. Può essere utile su sistemi che si colelgano in dialup ad Internet per evitare di alzare una connessione ogni volta che c'è un messaggio in uscita.

sendmail -qR@dominio.com
Processa tutta la posta in coda che ha come destinatari degli indirizzi che terminano con @dominio.com

sendmail -d (sendmail -d0-99.1)
Esegue Sendmail in debugging mode, utile per ottenere una grande quantità di informazioni su come è stato compilato e come gestisce e processa le sue macro. Esistono numerose modalità di debugging, definibili con una coppia di numeri separati da un punto che definisce la categoria di debugging e il livello di verbosità.
Se non si specifica nulla Sendmail di default visualizza il debugging per tutte le categorie (0-99) con livello 1.
Notare che in modalità di debug Sendmail funziona normalmente, per cui è possibile scrivere l'indirizzo del destinatario e il corpo del testo (da concludere con un punto "." e un INVIO) e vedere come Sendmail processa il messaggio
Alcune interessanti parametri (il secondo valore, che indica il livello di debug, può arrivare a 127, ma si consiglia di non superare il valore 99, anche se spesso gli output sono uguali anche a differenza di livello):
sendmail -d0.20 - Visualizza informazioni sulla versione, le opzioni compilate, il nome locale e le regole di delivery
sendmail -d8.20 - Visualizza informazioni sulle procedure di DNS lookup per il record MX del dominio destinatario.
sendmail -d10.20 - Visualizza informazioni sul destinatario del messaggio
sendmail -d11.20 - Traccia informazioni sulla consegna del messaggio
sendmail -d21.2 - Traccia le macro per il rewriting degli indirizzi
sendmail -d27.9 - Traccia le operazioni di aliasing
sendmail -d31.2 - Traccia il processing degli header della mail
sendmail -d41.50 - Informazioni sulla coda dei messaggi
sendmail -d48.2 - Traccia le chiamate ai rule sets check_
sendmail -d0-99.3 - Visualizza informazioni di debug su ogni categoria, con livello di verbosità 3


Configurazione di Sendmail

File di configurazione e settaggio dei parametri di Sendmail

Introduzione alla configurazione di Sendmail

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-06-03 20:37:03

Sendmail nel mondo Unix è noto per avere il file di configurazione più complesso che sia mai stato concepito da uno sviluppatore umano.
Geek humour in rete si spreca sulle caratteristiche di questo file e in genere su Sendmail stesso, un mostro sacro della posta elettronica che non nasconde le sue antichità, nel bene e soprattutto nel male.

Il file di configurazione è /etc/sendmail.cf, a volte si trova in /etc/mail/sendmail.cf o in altre posizioni.
Questo file ha una struttura che appare estremamente complessa perchè ha una sintassi molto ridotta ai minimi termini: i comandi sono tutti di una singola lettera e si aspettano argomenti che spesso sono di 2 sole lettere.
A vederlo sembra uno scherzo di natura informatica, un insieme di caratteri senza senso, ma una volta conosciuta la sua logica, in parte le nebbie si dipanano.

Dalla versione 8 in poi, Sendmail può essere configurato anche tramite un file chiamato sendmail.mc che contiene comandi molto più semplici da intuire ma che va di fatto convertito, tramite un preprocessore di macro m4, nel file sendmail.cf vero e proprio.

Questa distinzione va ben compresa: il file di configurazione di Sendmail rimane sempre sendmail.cf, ma invece che editarlo direttamente, è possibile generarlo da un file sendmail.mc che ha una sintassi e una logica più semplice e che richiede di essere "precompilato" sulla base di regole e macro che generalmente vengono fornite su un pacchetto a parte nelle varie distribuzioni Linux (sendmail-cf.*.rpm).
Ogni volta che si modifica sendmail.mc va quindi rigenerato il relativo sendmail.cf:
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf. Nel corso della sua storia e nelle sue incarnazioni su diversi Unix flavour, Sendmail ha disseminato file di configurazione in posti diversi, con le ultime versioni si è cercato di fare pulizia e uniformare la situazione. Segue un elenco, tratto dalla documentazione ufficiale dove si vede come sono cambiate le posizioni e i nomi di alcuni file comunemente usati in Sendmail:
Vecchia posizione                Nuova posizione
/etc/bitdomain                   /etc/mail/bitdomain
/etc/domaintable                 /etc/mail/domaintable
/etc/genericstable               /etc/mail/genericstable
/etc/uudomain                    /etc/mail/uudomain
/etc/virtusertable               /etc/mail/virtusertable
/etc/userdb                      /etc/mail/userdb
/etc/aliases (oppure: /etc/sendmail/aliases ; /etc/ucbmail/aliases ; /usr/adm/sendmail/aliases ; /usr/lib/aliases ; /usr/lib/mail/aliases ; /usr/ucblib/aliases)
                                 /etc/mail/aliases
/etc/sendmail.cw (oppure: /etc/mail/sendmail.cw ; /etc/sendmail/sendmail.cw)
                                 /etc/mail/local-host-names
/etc/sendmail.ct                 /etc/mail/trusted-users
/etc/sendmail.oE                 /etc/mail/error-header
/etc/sendmail.hf (oppure: /etc/mail/sendmail.hf ; /usr/ucblib/sendmail.hf ; /etc/ucbmail/sendmail.hf ; /usr/lib/sendmail.hf ; /usr/share/lib/sendmail.hf ; /usr/share/misc/sendmail.hf ; /share/misc/sendmail.hf)
                                 /etc/mail/helpfile
/etc/service.switch              /etc/mail/service.switch
/etc/sendmail.st (oppure /etc/mail/sendmail.st ; /etc/mailer/sendmail.st ; /etc/sendmail/sendmail.st ; /usr/lib/sendmail.st ; /usr/ucblib/sendmail.st)
                                 /etc/mail/statistics


Configurare Sendmail con sendmail.mc

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-10-03 08:58:23

La configurazione di Sendmail tramite il file sendmail.mc risulta particolarmente comoda e semplice anche se bisogna sempre ricordarsi di processare questo file con il preprocessore di macro m4 per ottenere il file sendmail.cf effettivamente usato dal programma.
Per farlo basta una riga tipo:
m4 sendmail.mc > sendmail.cf
Le macro che permettono di convertire un file sendmail.mc nel file sendmail.cf sono generalmente distribuite indipendentemente dal pacchetto di Sendmail per permettere una gestione più agevole degli aggiornamenti.
Su Linux tipicamente sono presenti nel pacchetto sendmail-cf.*.rpm

Le caratteristiche sintattiche di base di un file .mc:
- Le macro sono definite con una riga tipo: define(macro,valore)
- Si possono utilizzare degli apici (il primo è inverso, il secondo dritto) per impedire che il preprocessori interpreti i contenuti di un argomento: define(`macro',`valore')
- Il preprocessore m4 analizza il testo in input come un flusso di caratteri, per evitare che venga interpretata una riga si usano i caratteri dnl (Delete through New Line) che possono essere usati sia come i # per commentare una riga:
dnl define(`macro',`valore') (la riga di configurazione non viene considerata)
sia a termine riga per evitare che venga generato uno spazio vuoto nel file di configurazione:
define(`macro',`valore')dnl (la riga di configurazione viene considerata e viene ignorato tutto quello che è scritto dopo dnl fino a fine riga).
Ricordarsi che gli argomenti delle macro sono generalmente messi fra apici (prima inverso: ` e poi dritto: ').

Per costruire un file di configurazione m4 minimo sono necessarie le seguenti direttive:

OSTYPE() - OBBLIGATORIO. Esempio: OSTYPE(`linux')
Definisce il sistema operativo su cui gira Sendmail. Un elenco dei SO supportati può essere visibile in /usr/share/sendmail-cf/ostype o nella analoga directory in cui sono contenuti le macro di configurazione di sendmail.

MAILER() - OBBLIGATORIO. Esempio: MAILER(`smtp')
Definisce l'egente di consegna di posta utilizzato. Sendmail supporta non solo il protocolli SMTP, ma anche metodi più antichi (tipo UUCP) o diversi. In genere su un server di posta normale è definito MAILER(`smtp') per la gestione della posta in rete, e  MAILER(`procmail') o MAILER(`local') per il delivery della posta locale.

DOMAIN() - RACCOMANDATO. Esempio: DOMAIN(`generic')
Imposta una macro specifica per il dominio indicato. Il generic si riferisce ad una configurazione standard, buona per molti usi.

FEATURE() - RACCOMANDATO. Esempio: FEATURE(`use_cw_file')
Molte funzionalità utili di Sendmail sono configurabili con specifiche features, che vanno dichiarate nel file .mc.
Fra queste segnaliamo:

FEATURE(`always_add_domain') - Aggiunge sempre il nome di dominio agli indirizzi presenti negli header dei messaggi, anche se si riferiscono ad utenti locali, per cui non si è esplicitato un dominio.

FEATURE(`domaintable') - Attiva il supporto di un file domaintable in cui sono indicati (a sinistra in ogni riga) nomi di dominio la cui posta la si vuole far convergere nel proprio dominio locale (a destra in ogni riga). Questa feature può avere come ulteriore argomento un path alternativo e un alternativo tipo di DB di gestione del file (di default si utilizza un hash db standard): FEATURE(`domaintable',`hash -o /etc/mail/domaintable.db').
Una simile riga su sendmail.mc produrrà su sendmail.cf la seguente configurazione:
Kdomaintable hash -o /etc/mail/domaintable.db
R$* < @ $+ > $*                 $: $1 < @ $(domaintable $2 $) > $3


FEATURE(`genericstable') - Attiva il supporto del file genericstable in cui è possibile specificare come cambiare l'indirizzo del mittente (a sinistra) con un indirizzo alternativo (a destra).
Ha una logica simile a domaintable: il file di configurazione è un normale testo ASCII che viene convertito in un .db che di fatto è quello utilizzato da Sendmail. Anche in questo caso è possibile indicare path del file e database utilizzato: FEATURE(`genericstable',`hash -o /etc/mail/genericstable.db')

FEATURE(`local_procmail') - Utilizza procmail per il delivery della mail locale.

FEATURE(`mailertable') - Permette di utilizzare un file mailertable per gestire metodi e rotte di delivery della posta custom. In /etc/mail/mailertable (default sui Sendmail recenti), che funziona come gli altri file da convertire in .db, va scritto, in ogni riga: dominio a cui è destinata la posta (es: dominio.com) - metodo di delivery e dominio o indirizzo email di destinazione (es: smtp:ognimail@altrodominio.it).


POP-before-SMTP con Sendmail

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2003-09-03 12:55:09

Esistono diversi modi per supportare la tecnica POP-before-SMTP su Sendmail, che permette di usare un server SMTP remoto, che normalmente non permette il relay, dopo che ci si è autenticati via pop3 o imap sul server stesso.

Fra i vari approcci al problema tipicamente il più utilizzato è quello di usare un programma, generalmente eseguito come demone, che controlla i log di posta, identifica i tentitivi di login pop3 o Imap eseguiti con successo e scrive in un database gli indirizzi IP dei client remoti, questo database viene poi controllato da Sendmail (opportunamente configurato) per aprire il relay agli indirizzi ivi contenuti.

Abbiamo trovato particolarmente rapido ed efficace il tool log2db per convertire in un db Berkeley (db 1, 2, 3, 4) le entry di un file di log e la macro popauth fornita direttamente dal sito di Sendmail.
Ecco la procedura utilizzata:

Installare e configurare log2db
Normale procedura, verificare su http://www.bestbits.at/log2db/ se esistono versioni più recenti:
[al@giraffa al]$ wget http://www.bestbits.at/log2db/log2db-0.5.7.tar.gz
[...]
[al@giraffa al]$ tar -zxvf log2db-0.5.7.tar.gz
[...]
[al@giraffa al]$ cd log2db-0.5.7
[al@giraffa log2db-0.5.7]$ ./configure
[...]
[al@giraffa log2db-0.5.7]$ make
gcc -o log2db.o -g -O2 -Wall  -DVERSION=\"0.5.7\" -Iinclude  -c log2db.c
gcc -o regsubst.o -g -O2 -Wall  -DVERSION=\"0.5.7\" -Iinclude  -c regsubst.c
gcc -o log2db log2db.o regsubst.o   -ldb
[al@giraffa log2db-0.5.7]$ su
Password:
[root@giraffa log2db-0.5.7]# make install
/usr/bin/install -c -m 755 --strip log2db /usr/local/sbin
/usr/bin/install -c -m 755 log2db-wrapper /usr/local/sbin


A questo punto editare /usr/local/sbin/log2db-wrapper (uno script shell che invoca il comando log2db e gli passa gli argomenti corretti) per adattarlo al proprio sistema, in particolare verificare la posizione del log del server pop3/imap (su Linux di solito /var/log/maillog e commentare/scommentare le regole di pattern matching relative al proprio server di posta (di default si adatta a Qpopper). Correggere eventualmente il path del file log2db: nella versione utilizzata (0.5.7) è /usr/sbin/log2db ma il comando viene installato in /usr/loacl/sbin/log2db.
Dopo le configurazioni del caso si può lanciare il wrapper in background e aggiungerlo ad uno script di startup: /usr/local/sbin/log2db-wrapper &

Configurare Sendmail
Seconda parte del lavoro è la configurazione di Sendmail. Anche in questo caso le vie possono essere varie, ma la migliore e la più semplice è quella che passa per sendmail.mc. Aggiungere a questo file le righe:
define(`POP_B4_SMTP_TAG', `')
HACK(`popauth')

e scaricare la macro m4 popauth da http://www.sendmail.org/~ca/email/rules/popauth.m4 (evitare copia e incolla, per non rischiare di avere problemi con tab e spazi vari). Questa macro va copiata nella sottodirectory hack all'interno dei file necessari per la configurazione di Sendmail. Su RedHat questi stanno in /usr/share/sendmail-cf/ e sono forniti dal pacchetto sendmail-cf, su altri *nix possono stare altrove, ma in ogni caso se m4 non trova il file lo comunica in stderr:
[root@giraffa log2db-0.5.7]# m4 /etc/mail/sendmail.mc > /dev/null
/etc/mail/sendmail.mc:145: m4: Cannot open /usr/share/sendmail-cf/hack/popauth.m4: No such file or directory

Ecco quindi la procedura usata su una RedHat9 (dopo aver modificato /etc/mail/sendmail.mc), ovviamente sarebbe sempre opportuno eseguire una copia dei file modificati:
[root@giraffa log2db-0.5.7]# wget http://www.sendmail.org/~ca/email/rules/popauth.m4
[...]
[root@giraffa log2db-0.5.7]# mv popauth.m4 /usr/share/sendmail-cf/hack/
[root@giraffa log2db-0.5.7]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
[root@giraffa log2db-0.5.7]# /etc/init.d/sendmail stop
[root@giraffa log2db-0.5.7]# /etc/init.d/sendmail stop
[root@giraffa log2db-0.5.7]# /etc/init.d/sendmail start


A questo punto Sendmail è pronto per appoggiarsi ad db /etc/mail/popauth.db per aprire il relay agli indirizzi li presenti. Questo database viene costantemente aggiornato da log2db (eseguito tramite il wrapper e lasciato in background) e può essere monitorato con il comando log2db --db=/etc/mail/popauth.db --dump.
Esiste la possibilità di aggiungere a mano dei indirizzi IP: (es: log2db --db=/etc/mail/popauth.db --add 192.168.0.1), di rimuoverli  ecc.

Per verificare se tutto funziona, tenere sotto controllo il log di posta e provare ad inviare posta da un IP remoto, che normalmente non viene relayato dopo aver eseguito un login pop3 sullo stesso server.


Postfix

Installazione, configurazione, gestione

Introduzione a Postfix

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-30 20:52:16

Postfix nasce con l'intento di sostituire Sendmail come server di posta. E' stato concepito quindi con un occhio di riguardo alla compatibilità con questo sistema di modo da facilitarne la migrazione.
Inoltre è studiato con molta attenzione nei riguardi della sicurezza tanto da venire considerato da molti il più sicuro mailer in circolazione.

Questo sistema di posta anzichè essere costituito da un unico grosso programma che effettua la maggior parte delle azioni è suddiviso in diversi programmi che svolgono una azione specifica e un programma principale che si occupa di chiamare il programma giusto quando necessario e di gestire le varie azioni. Solo il programma master necessita di privilegi elevati e va infatti lanciato da root, gli altri invece possono girare con privilegi molto bassi, ad esempio usando un utente creato appositamente, inoltre possono essere eseguiti in un ambiente "gabbia" chroot.
In questo modo si ha un isolamento dei singoli processi con un maggior controllo sulle singole azioni eseguite dal server. Inoltre è pensato per resistere a condizioni di lavoro con carichi di traffico elevati e utilizza particolari routines per evitare che un eventuale crash possa compromettere il comportamento dell'intera macchina. Oltre a non avere nessun programma SUID, Postfix non "crede" al contenuto delle code e in se non conosce il contenuto dei file in coda. I programmi che si occupano di un passaggio dell'elaborazione dati effettuano i controlli degli stessi allo scopo di indirizzarli verso il programma o la coda giusta.
Ogni programma che compone questo complesso sistema agisce in modo autonomo senza avere processi "figli" e in questo modo si cerca di evitare relazioni tra i processi che potrebbero condizionare il comportamento dei child in caso il processo "genitore" sia compromesso.
I dati che vengono ricevuti dalla rete vengono opportunamente filtrati e subiscono controlli diversi dai singoli programmi che si occupano della loro elaborazione, inoltre si evita di salvare tali dati sul disco ma vengono processati in primis dal programma e susseguentemente passati al programma successivo.

Postfix si avvale principalmente  di quattro importanti code:
maildrop, incoming, active, deferred
La posta viene innanzitutto depositata in maildrop da dove dopo alcune elaborazioni passa alla coda incoming, questa coda è per la posta che è appena arrivata e che non è ancora stata elaborata dal manager delle code. La coda active invece è una piccola zona in cui la posta al suo interno è aperta dal manager ed è in attesa di essere instradata. Quella posta che non può, per vari motivi, essere instradata viene mandata alla coda deferred.
Il gestore delle code mantiene in memoria solo i dati presenti nella coda active in questo modo si evita che il processo si intasi in caso di una grossa mole di traffico.
Oltre a queste code Postfix mantiene due spazi "parcheggio" una si chiama hold e contiene tutti quei messaggi che sono congelati nella coda e per i quali non viene attuato nessun tentativo di smistamento. L'unico modo di rilasciare questi messaggi è con il comando postsuper. Il secondo parcheggio invece si chiama corrupt e al suo interno vengono salvati quei file che non sono riconosciuti validi, e vengono lasciati lì per permettere all'amministratore di controllarli.


postfix

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2004-06-04 11:59:07

La suite di Postfix si compone di numerosi demoni e di una decina di comandi che servono a regolare specifiche operazioni. Il principale e più importante è il comando postfix che serve a controllare il programma stesso. Con esso si avvia o si ferma il demone master del sistema di posta, si verifica lo stato o si ricarica la configurazione.

La sua sintassi è semplice e senza troppe opzioni, ma ha vari sotto-comandi.
postfix [-Dv] [-c directory_file_conf] comando_interno
-D: Usata solo con il sotto-comando start permette di lanciare i demoni di postfix sotto il controllo delle direttive di debug specificate nel main.cf.
-v: Anche questa opzione è orientata al debug del software, si possono specificare più volte per avere ancora più informazioni.
-c: Permette di specificare una directory alternativa a quella di default in cui il comando andrà a cercare i file di configurazione. Utile nel caso si stiano eseguendo più server di posta sulla stessa macchina.

I comandi interni regolano diverse operazioni
start: Avvia il sistema di posta. Effettua anche un controllo della configurazione come se si usasse il comando check.
stop: Ferma il sistema di stampa regolarmente. I processi in corso hanno modo di terminare quanto prima ma completando le loro operazioni.
abort: Ferma il sistema di stampa forzatamente. I processi in corso sono costretti a fermarsi immediatamente.
check: Verifica la configurazione del sistema di posta e mostra degli alert per errori nei permessi dei file o delle directory.
flush: Forza l'inoltro di ogni messaggio in attesa di essere inviato. Utile nel caso si usi una connessione verso Internet di tipo PPP o ISDN che non è sempre attiva.
reload: Permette di ricaricare i file di configurazione senza fermare il sistema di posta.

Questo comando va utilizzato esclusivamente dall'utente root.


Installazione di Postfix, file principali

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-30 20:57:39

La maggior parte delle principali distribuzioni Linux comprende i pacchetti rpm di Postfix nel CD di installazione. Alcune come Suse lo hanno ormai sostituito a Sendmail nell'installazione di default. In certi casi comunque potrebbe essere necessario installare dai sorgenti.    

Sul sito di Postfix, http://www.postfix.org, si trovano le indicazioni per scaricare i sorgenti dell'applicazione. Si noterà che, fedelmente al proposito di sostituire il diffusissimo Sendmail, è ormai disponibile il supporto per la compilazione su quasi tutte le versioni unix esistenti a patto di seguire in certi casi pochi accorgimenti.
Una volta scaricato e scompattato il pacchetto, cambiata la directory di lavoro in quella dei sorgenti appena creata, si può procedere con l'installazione.
All'interno dei sorgenti, tra i diversi file, si troveranno oltre alla documentazione ufficiale alcuni file utili per cominciare il processo di installazione. In caso si stia utilizzando un SO come Solaris che ha notevoli differenze da Linux, pur restando uno unix, nel file INSTALL si troveranno consigli utili per la compilazione su questa piattaforma e su altre che impongono diversi parametri.
Se si compila su un sistema che usa le GCC, vedi Linux, con il comando
make
si dà inizio al processo di compilazione. I parametri definibili in questa fase sono per lo più inerenti alla modifica della posizione di default dei file di configurazione o dei programmi che compongono Postfix.

Eseguita questa fase si procede nell'installazione. Si dovrà creare un utente dedicato che non necessita ne di una home directory ne di una shell con il comando
adduser postfix -s /bin/false -d /dev/null
e settare un record nel file delle password con il comando
passwd -l postfix
Dopo di che sarà necessario creare due gruppi, postfix e postdrop usando il comando groupadd.
Queste operazioni sono necessarie per il successo dell'installazione.

Si procede con il comando
make install
per concludere l'installazione. Questo comando nel caso di Postfix è interattivo, permettendo di specificare parametri diversi da quelli di default, ponendo semplici domande e mostrando inoltre quali sono i valori standard.

Una volta installato tutto senza particolari modifiche ai valori standard si troveranno all'interno della directory /etc/postfix tutti i file di configurazione e le tabelle.
Il file più importante è il main.cf dove si specificano quasi tutti i parametri di configurazione, ma anche master.cf, che regola il comportamento del programma master che si occupa di gestire gli altri programmi che compongono postfix e i parametri con cui questi programmi vengono eseguiti. Un'altro file di grande importanza e che generalmente viene editato prima di procedere con l'avvio del server è il file /etc/aliases che a volte può trovarsi dentro la directory /etc/postfix/. Ricordarsi che ogni volta che questo file viene modificato occorre lanciare il comando newaliases perchè le modifiche abbiano effetto.
La directory radice dove si troveranno tutte le code si trova in /var/spool/postfix/.
La documentazione verrà salvata in /usr/share/doc o in /usr/doc ma può cambiare a seconda della distribuzione usata.

La suite di postfix si compone di numerose applicazioni. Alla fine dell'installazione, se eseguita con i valori standard si troveranno tutti i demoni all'interno della directory /usr/libexec/postfix/.
%ls -al /usr/libexec/postfix
drwxr-xr-x    2 root     root          536 2003-05-31 22:24 .
drwxr-xr-x  100 root     root        35976 2003-06-17 15:20 ..
-rwxr-xr-x    1 root     root       159994 2003-03-17 16:35 bounce
-rwxr-xr-x    1 root     root       192637 2003-03-17 16:35 cleanup
-rwxr-xr-x    1 root     root       147535 2003-03-17 16:35 error
-rwxr-xr-x    1 root     root       146107 2003-03-17 16:35 flush
-rwxr-xr-x    1 root     root       185928 2003-03-17 16:35 lmtp
-rwxr-xr-x    1 root     root       206273 2003-03-17 16:35 local
-rwxr-xr-x    1 root     root       102287 2003-03-17 16:35 master
-rwxr-xr-x    1 root     root       180167 2003-03-17 16:35 nqmgr
-rwxr-xr-x    1 root     root       145316 2003-03-17 16:35 pickup
-rwxr-xr-x    1 root     root       165959 2003-03-17 16:35 pipe
-rwxr-xr-x    1 root     root       130586 2003-03-17 16:35 proxymap
-rwxr-xr-x    1 root     root       174767 2003-03-17 16:35 qmgr
-rwxr-xr-x    1 root     root       158236 2003-03-17 16:35 qmqpd
-rwxr-xr-x    1 root     root       146374 2003-03-17 16:35 showq
-rwxr-xr-x    1 root     root       227117 2003-03-17 16:35 smtp
-rwxr-xr-x    1 root     root       257641 2003-03-17 16:35 smtpd
-rwxr-xr-x    1 root     root       139319 2003-03-17 16:35 spawn
-rwxr-xr-x    1 root     root       164847 2003-03-17 16:35 tlsmgr
-rwxr-xr-x    1 root     root       150312 2003-03-17 16:35 trivial-rewrite
-rwxr-xr-x    1 root     root       162184 2003-03-17 16:35 virtual


Le utility di gestione del servizio invece saranno all'interno della directory /usr/sbin/
%ls -al /usr/sbin/post*
-rwxr-xr-x    1 root     root       132952 2003-03-17 16:35 /usr/sbin/postalias
-rwxr-xr-x    1 root     root        27185 2003-03-17 16:35 /usr/sbin/postcat
-rwxr-xr-x    1 root     root       145688 2003-03-17 16:35 /usr/sbin/postconf
-rwxr-sr-x    1 root     postdrop    95451 2003-03-17 16:35 /usr/sbin/postdrop
-rwxr-xr-x    1 root     root        69141 2003-03-17 16:35 /usr/sbin/postfix
-rwxr-xr-x    1 root     root        75112 2003-03-17 16:35 /usr/sbin/postkick
-rwxr-xr-x    1 root     root        71534 2003-03-17 16:35 /usr/sbin/postlock
-rwxr-xr-x    1 root     root        68576 2003-03-17 16:35 /usr/sbin/postlog
-rwxr-xr-x    1 root     root       125326 2003-03-17 16:35 /usr/sbin/postmap
-rwxr-sr-x    1 root     postdrop    85781 2003-03-17 16:35 /usr/sbin/postqueue
-rwxr-xr-x    1 root     root        84165 2003-03-17 16:35 /usr/sbin/postsuper


postconf

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-30 21:18:47

Il comando postconf è una utility a riga di comando che permette diverse operazioni su un file di configurazione di Postfix. Con postconf si possono consultare i parametri presenti al momento nel sistema di posta, si può editare il file specificato, si possono verificare i valori di default per una particolare direttiva.

postconf [-dhmlnv] [-c directory_file_conf] [parametro ...]
postconf [-ev] [-c directory_file_conf] [parametro=valore ...]


La maggior parte delle opzioni riguardano principalmente il controllo dei valori configurati e di quelli standard.
-c directory_file_conf: Permette di specificare la directory che contiene i file di configurazione su cui si desidera agire.
-d: Mostra i valori di default per tutti i parametri.
-h: Mostra esclusivamente i valori e non il nome dei parametri configurati.
-m: Mostra una lista delle tipologie di tabelle supportate.
-l: Mostra una lista di metodi per il lock delle mailbox.
-n: Mostra tutti i valori che non sono default nel file specificato.
-e: Questa è l'opzione più importante perchè è necessaria per editare un particolare parametro del file di configurazione.

Per avere un quadro quanto più complessivo delle numerose opzioni di Postfix occorre fare riferimento a diverse fonti. Con l'ausilio dei commenti del main.cf standard, della lettura dei file di esempio e grazie a questa utility è possibile ottimizzare al meglio il proprio MTA (Mail Transfer Agent) e adattarlo a diverse architetture di accesso dati. Una grande utilità di questo comando è che se lanciato senza opzioni mostra tutti i valori della configurazione attuale in modo da avere una idea complessiva di tutti i parametri presenti nei file di esempio.


Configurare Postfix, file principali e parametri

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-30 21:02:29

Postfix principalmente si controlla attraverso due importanti file, "main.cf" e "master.cf".
Rispettivamente regolano il comportamento generale dell'applicazione e la configurazione del master daemon che gestisce il comportamento di tutti i demoni che compongono questo sistema di posta.
Di norma il master.cf può essere lasciato intatto a meno che non si stia lavorando su configurazioni più complesse come ad esempio intergrare Postfix con Cyrus.

Il main.cf è il file più importante. Attraverso questo file è possibile configurare Postfix come un semplice relay server per una piccola rete casalinga fino ad arrivare a configurazioni di alto livello per sistemi "enterprise".
Il file si presenta molto ben commentato e spesso i valori di default vanno benissimo, ma rimane un file complesso e molto grosso, i diversi parametri sono molti, più di 250 stando a quanto scritto nelle primissime righe di commento. Per questo generalmente Postfix dispone di un nutrito set di file di esempio e molto utili se si desidera conoscere molti parametri di default che non sono presenti nel main.cf a installazione completata. Ci si può inoltre aiutare usando il comando postconf.
Le direttive vengono separate tra di loro e riunite in categorie (Queue and process ownership, Internet host and domain name, Sending mail...) facilitando in questo modo la comprensione del significato dei singoli parametri.
Di norma per avere un sistema di posta funzionante non occorre che modificare poche variabili.
- Quale dominio usare per la posta in uscita.
- Quale invece di cui ricevere la posta.
- Quali client hanno modo di inviare la posta attraverso il server.

La direttiva
myorigin = valore
permette di specificare il dominio da usare per la posta inviata attraverso questo server. Il valore di default è la variabile $myhostname ma a meno che non si utilizzi il server per una piccola rete locale sarà opportuno modificarlo con $mydomain.
myorigin = $mydomain

mydestination = valore
specifica per quali domini il sistema di posta deve instradare localmente i messaggi anzichè inviarli ad un altro server. Generalmente si compone di una lista di nomi, si possono specificare anche file o tabelle, di norma occorrerà aggiungere $mydomain ai valori di default in modo che il server sia il mail server del dominio.
mydestination = $myhostname localhost.$mydomain $mydomain
Dove i primi due valori sono quelli di default.

mynetworks = valore
Questa variabile volendo permette di impostare host per host le macchine che possono usare il server per l'inoltro dei messaggi. Di default si usa la direttiva complementare mynetworks_style.
mynetworks_style = [class] [subnet] [host]
subnet è il valore di default e indica che Postfix inoltrerà la posta per tutti i client nella sottorete locale.
class Postfix considererà validi tutti i client provenienti dal network di classe A, B o C a cui è collegato.
host l'inoltro sarà abilitato esclusivamente per la macchina locale.

myhostname = valore
Questo parametro permette di specificare una importante direttiva usata da altri parametri del file di configurazione con la variabile $myhostname. Il nome dell'host va specificato nella forma FQDN (Fully Qualified Domain Name). Di default Postfix usa il nome dell'host locale ma se questo non fosse un nome di dominio completo o fosse in ascolto su un'interfaccia virtuale si deve specificare il nome di dominio completo per il server.
myhostname = mail.esempio.com
myhostname = mail.virtualesempio.com

mydomain = valore
Permette di specificare il dominio a cui appartiene il server. Di norma è usato il valore di $myhostname togliendo la prima parte del nome a meno che non si riduca ad un dominio di primo livello.
mydomain = esempio.com

Configurati questi parametri si dovrebbe cominciare ad avere un server di posta utilizzabile.
Nel caso in cui la macchina che si sta usando possiede più di un indirizzo su un'interfaccia di rete o più interfaccie verrà utile specificare inoltre

inet_interfaces = valore
Di default in ascolto su tutti gli indirizzi (all) con questa direttiva si possono specificare le interfaccie virtuali.
inet_interfaces = virtual.esempio.com
Perchè la modifica di questa variabile sia effettiva non basta effettuare un reload ma si deve fermare e riavviare il sistema di posta.


Postfix: configurazioni anti-spam e abusi

Tipo Infobox: DESCRIPTION - Skill Level: 4- ADVANCED - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-06-30 21:06:44

Una volta configurato il server con i parametri per l'invio, la ricezione e l'inoltro della posta si può prendere in considerazione l'ottimizzazione del servizio e un maggiore controllo delle sue funzioni.

Esistono molte possibilità per definire il comportamento di Postfix e in special modo per controllarne gli accessi, sia da un punto di vista di consumo delle risorse sia dal controllo di cosa può passare e cosa invece no per evitare, ad esempio, l'invio massivo attraverso il server di UCE (Unsolicited Commercial Email) o comunemente SPAM. Per controllare l'invio di SPAM di default l'SMTP-server di Postfix accetta esclusivamente la posta per il network o il dominio locale e per i domini ospiti del server, in modo che dagli estranei non si accetti alcuna connessione. Esistono diversi modi per assumere maggior controllo su questa problematica usando liste di accesso in stile Sendmail o RBL (Real Time Blackhole List) e per un approfondimento si può fare riferimento alla documentazione ufficiale disponibile sul sito di Postfix, www.postfix.org, o nella directory di sistema dedicata alla documentazione dei pacchetti installati.
E' importante inoltre controllare le quantità di posta processabile, ad esempio per limitare il numero di processi contemporanei anche se si dispone di un limite massimo di 1000 client.

default_process_limit = valore
permette di controllare il numero di processi in uscita e in entrata. Di default è settato a 100 ma nel caso di una piccola rete casalinga andrebbe benissimo un valore di 10 mentre per un mail server principale di un provider andrebbe meglio un valore di 1000 o 10000.

Per controllare che il server non sia usato per un attacco tipo DoS o per spam si usano alcune variabili che ai loro valori di default dovrebbero andare benissimo.
initial_destination_concurrency = valore (default:2)
che controlla quanti messaggi sono inizialmente inviati verso la stessa destinazione prima di attuare un invio multiplo.
local_destination_concurrency_limit = valore (default:2)
che controlla quanti messaggi sono inviati contemporaneamente allo stesso recipiente locale.
default_destination_concurrency_limit = valore (default:20)
che impone il limite di messaggi inviabili contemporaneamente alla stessa destinazione.

Ulteriori parametri permettono quanto meno di limitare l'uso del server da parte di client sbadati o maliziosi, rallentando di fatto le loro connessioni fino a chiuderle senza troppi imbarazzi. Il server incrementa un conteggio per sessione degli errori dovuti a richieste da parte dei client non riconosciute valide o sconosciute e di tutte le richieste che in qualche modo violano le regole UCE. Questo conteggio si azzera quando un messaggio viene inviato correttamente. Se il conteggio aumenta il server limita i danni rallentando il client.
Le variabili che controllano queste funzioni sono:
smtpd_error_sleep_time = valore (va bene il valore di default:1)
che in sostanza cerca di evitare gli errori di un client quando il conteggio è ancora basso ponendo un tempo limite in cui il server resta in pausa mentre comunica l'errore al client.
smtpd_soft_error_limit = valore
di default 10 stabilisce che quando il numero di errori per sessione supera il valore impostato il server attende il valore del conteggio in secondi prima di rispondere ad un'altra richiesta del client.
smtpd_hard_error_limit = valore
di default 20 e stabilisce che al superare nel conteggio del valore impostato il server SMTP taglia la connessione.


Controllo sulle connessioni con Postfix

Tipo Infobox: DESCRIPTION - Skill Level: 2- JUNIOR - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-07-15 20:55:17

Di default Postfix accetta esclusivamente connessioni dal network locale e dai domini che ospita ma in situazioni di rete complesse può essere necessario assumere un maggiore controllo sulle connessioni al server.

Per questo vengono incontro numerosi parametri del file main.cf con cui è possibile effettuare diversi controlli sul traffico di posta del server.
Attraverso il main.cf si può:

Stabilire il comportamento del server al momento della connessione del client.
Si lavora a livello del protocollo SMTP andando a modificare il comportamento del server.
Ad esempio costringendo il server ad accettare connessioni strettamente aderenti allo standard stabilito nella rfc 821 o modificandone il comportamento in concomitanza con alcuni comandi SMTP.
I parametri per queste operazioni riguardano comandi interni al protocollo SMTP, è consigliabile leggere le RFC sull'argomento e fare riferimento alla documentazione ufficiale del pacchetto.
Un parametro tra questi che può essere importante è
smtpd_helo_restrictions = valori
che permette di definire diverse regole di comportamento del server in relazione a quali host possono inviare un comando HELO, l'inizio di norma di qualunque connessione SMTP. Questo parametro è equivalente e viceversa ad altri utilizzabili nel main.cf, come restringere i nomi dei client o i loro indirizzi IP con il parametro
smtpd_client_restrictions = valori
oppure agire sul campo sender
smtpd_sender_restrictions = valori
o sul comportamento del relay della posta
smtpd_recipient_restrictions = valori

Effettuare controlli sugli header di un messaggio e sul corpo dei messaggi.
Stabilendo delle regole di filtraggio delle intestazioni di un messaggio contenenti informazioni sul tipo di programma client e sulle macchine attraverso cui il messaggio è passato dando la possibilità in questo modo di implementare delle liste nere di server da cui non accettare mai la posta e filtrando i contenuti di un messaggio stabilendo delle liste di termini non permessi. Per i parametri e il metodo da usare per implementare questo tipo di controlli fare riferimento alla documentazione ufficiale di Postfix

Restringere l'inoltro della posta per quanto riguarda l'utente specificato nel campo "sender".
In questo modo si può stabilire che il server non accetti posta da client che non specificano un nome di dominio FDQN oppure accettare l'inoltro solo da utenti definiti.
Il parametro che si occupa di questa operazione è
smtpd_sender_restrictions = valori
La sua sintassi, simile nei parametri complementari visti in precedenza, permette di restringere l'uso del server di posta agendo sul campo sender. Opzioni possibili per questo sono
reject_unknown_sender_domain
reject_non_fqdn_sender
oppure un file database con le specifiche per i sender autorizzati con l'utilizzo di una sintassi particolare tipo_file:percorso_file
hash = /etc/postfix/access

Agire sui recipient di inoltro della posta.
Stabilendo regole sulla funzione di relay del server e agendo in sostanza sugli indirizzi concessi nel campo SMTP RCPT TO di modo da limitare o dare accesso per il relay della posta a client non appartenenti alla sotto-rete del server. Questo metodo è consigliato quando si utilizzano controlli di accesso tipo pop-before-smtp che permette l'uso del relay solo a client che si sono autenticati via pop precedentemente.
Il parametro principale è
smtpd_recipient_restrictions = valori
le cui opzioni impongono che sia presente sempre una voce tipo reject, defer, defer_if_permit o reject_unauth_destination altrimenti il server rifiuterà comunque la ricezione di posta.
Per esempio quindi si userà
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
Questo parametro è utilizzabile anche specificando un'opzione di controllo sui client
check_client_access = tipo_file:percorso_file

Le combinazioni di parametri e opzioni possono rendere una configurazione molto complessa e le possibilità offerte sono innumerevoli, è consigliabile prima di approfondire con la configurazione accertarsi di aver compreso come funziona il protocollo SMTP visitando il sito delle request for comments http://www.rfc-editor.org e cercando le rfc 821 e 2821.


Amavisd-new e Postfix, controllo sui virus

Tipo Infobox: TIPS - Skill Level: 4- ADVANCED - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-08-04 20:12:05

Amavisd è un demone scritto in Perl che permette di chiamare programmi esterni in grado di scomprimere, decodificare e classificare il contenuto dei messaggi e degli allegati di posta.
Accetta le mail dall'MTA usato, chiama moduli Perl esterni e programmi che controllano il messaggio di posta e infine li riinoltra all'MTA per la consegna, il rifiuto o la quarantena del messaggio.

Per usare amavisd-new bisogna assicurarsi che si stia utilizzando una versione di Postfix abbastanza recente e che supporti il parametro content_filter = valore

Innanzi tutto occorre creare un utente e un gruppo per usare questo demone.
Di norma si usa amavis come utente e sweep come gruppo. Per motivi di sicurezza non usare assolutamente utenti di sistema come nobody o altri relativi al sistema di posta come maildrop.
Il file una volta scompattato non occorre di compilazioni, all'interno del pacchetto si trovano l'eseguibile amavisd e il suo file di configurazione amavis.conf più uno script di init da inserire nella directory relativa ai file di init del sistema. Questi file vanno copiati nelle loro giuste directory prestando attenzione ai permessi e agli utenti che ne hanno la proprietà. Come home directory per l'utente si può definire /var/amavis/ o /var/lib/amavis/

#cp ./amavisd /usr/sbin/
#chown root /usr/sbin/amavisd
#chmod 755 /usr/sbin/amavisd


e di conseguenza il file di configurazione
#cp ./amavisd.conf /etc/
#chown root /etc/amavisd.conf
#chmod 644 /etc/amavisd.conf


Può essere utile creare una directory che serva da destinazione per i messaggi in quarantena.
#mkdir /var/quarantena
chown amavis.amavis /var/quarantena/
chmod 750 /var/quarantena/


A questo punto sarà necessario editare il file di configurazione amavisd.conf e di conseguenza anche i file di configurazione di Postfix.
Nel amavisd.conf sarà importante fare attenzione ad alcuni parametri in particolare anche se è consigliabile leggerlo tutto perchè le opzioni possibili sono numerose.
Innanzi tutto si settano i parametri $daemon_user e $daemon_group specificando l'utente e il gruppo scelto per far girare il demone. In questo modo al momento del lancio, come root, di amavisd, automaticamente parte come se lanciato dall'utente specificato.
Le opzioni
$HOME
per definire la home directory dell'utente amavis.
$TEMPBASE
dove si definisce la directory in cui vengono temporaneamente posti i messaggi in elaborazione.
$QUARANTINEDIR
la directory di quarantena in cui i messaggi sospetti o certamente infetti vengono riposti per un eventuale controllo e pulizia.

E' possibile anche non creare nessuna directory di quarantena e fare in modo che tutta la mail destinata a questa "coda" sia inviata ad un account di posta preposto per questo.
Si crea una voce relativa nel file /etc/aliases o a seconda dell'installazione /etc/postfix/aliases
infected = /var/spool/mail/infected
e a seconda che si desideri o meno un mailbox-style aggiungere uno slash finale. Lanciare il comando newaliases o postalias /etc/postfix/aliases per aggiornare il database.
Infine specificare nel file amavisd.conf la direttiva
$virus_quarantine_to = 'infected@';
in modo da inviare tutta la posta in quarantena all'indirizzo infected.

Sarà necessario poi prestare attenzione agli altri parametri presenti nella 'Section I', $mydomain e @local_domains_acl = valore, e per finire agire sui valori di specifica del software antivirus usato nella 'Section VII'. A questo punto amavisd può essere lanciato e se dovessero mancare alcuni prerequisiti, come qualche modulo Perl, uscirà con un errore mostrando una lista di cosa è venuto a mancare.
Configurato amavisd sarà necessario lavorare sui file di configurazione di Postfix main.cf e master.cf.
Nel master.cf dovranno essere aggiunte le seguenti voci
smtp-amavis unix -    -    y/n    -    2  smtp
    -o smtp_data_done_timeout=1200
    -o disable_dns_lookups=yes

127.0.0.1:10025 inet n    -    y/n    -    -  smtpd
    -o content_filter=


Dove y/n corrispondono al campo "chroot" e serve ad indicare se si è o meno in un ambiente di lavoro chroot.
Infine con il comando
#postconf -e 'content_filter = smtp-amavis:[127.0.0.1]:10024'
si modifica il main.cf e si fa in modo che Postfix inizi a inviare tutta la posta che riceve ad amavisd.
Effettuare un relaod della configurazione con il comando
#postfix reload
Controllare i file di log di Postfix e di amavisd per verificare che tutto funzioni. Volendo all'interno della directory del pacchetto Amavis è presente una sotto-directory test-messages contenente alcuni file utili per testare il funzionamento del nuovo sistema di filtraggio della posta.


/etc/postfix/aliases

Tipo Infobox: PATH - Skill Level: 2- JUNIOR - Autore: Arnaldo 'homer' Zitti - Ultimo Aggiornamento: 2008-02-18 23:49:39

E' il file di configurazione attraverso il quale specificare gli alias di posta del mailserver Postifx.

E' un file di testo, può contenere linee vuote e di commento (le quali iniziano con il carattere #). Può risiedere in /etc/posftix/ oppure in /etc/. Ogni entry deve essere nel formato nome:valore. Impostando webmaster:homer sul sistema Joker.net, si indica a Postfix di reindirizzare le mail dirette all'utente webmaster@joker.net all'utente homer@joker.net.

La parte nome di ogni linea di configurazione è intesa come locale, di conseguenza non è neccessario aggiungere il nome di dominio.  
Per quanto riguarda la parte valore, essa può essere può contenere diversi tipi di destinazione:  
- address: Un indirizzo email compatibile alla RFC 822;  
- file/name: La mail viene accodata al file specificato. E' possibile utilizzare normali file, ma anche file speciali come  /dev/null;  
- | comando: Le mail possono essere inviate tramite pipe ad un comando;  
- :include:/file/name: La mail viene inviata agli indirizzi elencati nel file specificato;

Esempio di configurazione:  
# Basic system aliases -- these MUST be present  
#  
MAILER-DAEMON:  postmaster  
postmaster:     root  
root:            homer  

# Alias generali  
bin:            root  
daemon:         root  
named:          root  
nobody:         root  
uucp:           root  
www:            root  
ftp-bugs:       root  
postfix:        root  

# Alias locali  
arnaldo:        homer  
webmaster:      homer  
Reindirizzamento di tipo address: le mail dirette ad hannibal vengono inviate ad alberto:  
hannibal:       alberto  
Reindirizzamento file/name: Le mail inviate a bart verrano accodate nel file bartmail   
bart:    /home/bart/bartmail  
La mail inviata a programmatori verrà inviata a tutti gli indirizzi presenti all'interno del file programmers-list.txt:
programmatori:   :include:/list/programmers-list.txt  


Una volta aggiunti i nuovi alias, al fine di rendere effettive le modifiche, è necessario lanciare il comando newaliases, il quale si occuperà di aggiornare il database degli alias.


postsuper

Tipo Infobox: COMMANDS - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-07-15 21:07:11

Questo comando è inteso per la gestione e la manutenzione dei processi nelle code di Postfix. L'uso di questo comando è inteso per il superutente, l'amministratore del sistema mentre l'utente semplice per agire sui file di una coda Postfix può usare postqueue.

La sua sintassi
postsuper [-psv] [-c directory_file_conf] [-d][-h][-H][-r] [id_coda] [directory_coda]

Di default postsuper effettua le operazioni su tutte le directory di coda di Postfix, quindi incoming, active e deferred le principali code per i file di mail, e sulle directory con i log files, bounce, defer, e flush.

Le sue opzioni
-c directory_file_conf: Specifica la directory dove si trova il main.cf per l'istanza di Postfix su cui si desidera lavorare.
-d id_coda: Questa opzione elimina un messaggio che ha l'id specificato dalla code (di default: hold, incoming, active e deferred). Se si usa come id il simbolo "-" il programma legge gli id dallo standard input. Questo rende possibile usare postsuper all'interno di script.
Per rimuovere tutti i messaggi si usa il suffisso ALL che va specificato in maiuscolo per motivi di sicurezza. Se si definisce una coda in particolare verranno cancellati tutti i messaggi per quella coda:
postsuper -d ALL deferred
eliminerà tutti i file di posta presenti nella coda deferred.

Occorre notare che l'id di un file in coda viene riutilizzato dal sistema di posta. Questo comporta il rischio di eliminare il messaggio errato. Per esempio, il queue manager cancella il messaggio indicato da postsuper perchè ha finito il suo ciclo all'interno del sistema. Arriva posta nuova e ad un messaggio viene dato l'id che postsuper ha richiesto di rimuovere. Il messaggio nuovo viene eliminato al posto di quello giusto.
Occorre quindi prestare attenzione se si desidera eliminare dei messaggi mentre il sistema di posta è attivo.

-h id_coda: Questa opzione sposta il messaggio definito dalla coda o dalle code (di default, incoming, active e deferred) alla coda hold di modo che nessuna operazione di inoltro venga effettuata prima del suo rilascio da parte del postmaster.  Anche con questa opzione se al posto di un id di messaggio si utilizza il simbolo "-" il programma legge gli id dall'input di tastiera. Anche questa opzione supporta la chiave ALL che va utilizzata in maiscolo per forzare l'attenzione su questa delicata operazione.
-H id_coda: Con questa opzione si esegue il rilascio della posta messa "on hold", trattenuta nella coda hold. La posta rilasciata viene messa all'interno della coda deferred Anche per questa funzione valgono le chiavi ALL e "-"
-p: Pulisce i vecchi file temporanei che vengono creati in caso di un crash del sistema o del software di posta.
-r id_coda: Rielabora nuovamente il messaggio specificato dall'inizio come fosse appena arrivato. Il messaggio viene preso dalla coda o dalle code (di default: hold, incoming, active e deferred). Per riimpostare file multipli è consigliato usare l'opzione più volte. Anche questo parametro supporta le chiavi "-" e ALL. Un messaggio riinserito in coda viene spostato nella coda maildrop da dove viene copiato dal pickup daemon in un nuovo file. Questo viene rielaborato, subendo nuovamente le operazioni di address rewriting e sostituzione. Questa operazione è utile quando si sono modificate alcune regole o la mappatura virtuale. Va ricordato che gli id delle code sono riutilizzati e quindi c'è una minima possibilità di effettuare questa operazione su un file sbagliato ma senza particolari conseguenze (non viene eliminato) e solo se il sistema di posta è attivo.
-s: Questa operazione è importante e andrebbe eseguita sempre prima che Postfix venga lanciato. Effettua un controllo strutturale dei file e ripara gli errori.
In sostanza rinomina i file il cui nome non è associato all'inode giusto. Questo è utile in caso si stia recuperando la posta di un'altra macchina o da un backup. Infine sposta i file che non si trovano al posto giusto e rimuove le sotto directory che non sono più necessarie.
-v: Abilita i messaggi per propositi di debug e testing. L'uso multiplo di questa opzione abilita maggiori informazioni.


postqueue

Tipo Infobox: COMMANDS - Skill Level: 2- JUNIOR - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2003-07-15 21:06:26

Mentre postsuper effettua operazioni di carattere amministrativo sui file delle code in Postfix, all'utente finale viene fornito uno strumento per agire sui propri file di posta. In se implementa operazioni che tradizionalmente sono disponibili con il comando sendmail di Postfix. Questo comando è ideato per essere set-group ID (SGID) di modo che possa comunicare con i processi appartenenti ai demoni interni al sistema di posta.

La sua sintassi
postqueue [-c directory_file_conf] [-f][-p] [-s sito] [-v]

Le opzioni sono poche
-c directory_file_conf: Specifica la directory dove si trova il file di configurazione. A dimostrazione dell'attenzione prestata alla sicurezza per evitare che un utente smaliziato sia in grado di usare il set-group ID per i propri discutibili motivi, non si può in realtà specificare una directory arbitraria. Una directory arbitraria e concessa solo se se elencata nel file main.cf con il parametro alternate_config_directories oppure se il comando è lanciato dall'super-utente root.
-f: Pulisce la coda. In sostanza tenta l'inoltro di tutta la posta in coda.
-p: Produce una lista dei file nelle code. Usa uno stile alla "sendmail".
Per ogni file in coda mostra l'ID, la misura del messaggio, l'orario di arrivo, chi lo ha inviato e i recapiti a cui va inoltrato. Se la posta in questione non è stata inoltrata per qualche motivo mostra la ragione di questo fallimento. L'ID di un messaggio a volte viene mostrato seguito da un carattere speciale.
Se si trova un asterisco "*" il messaggio si trova nella coda active e sta per essere inoltrato.
Se invece è presente un simbolo "!" il messaggio si trova nella coda holde non sarà inoltrato finchè l'amministratore non lo rilascierà.
-s sito: Con questa opzione si stabilisce l'inoltro di tutta la posta in coda per il dominio specificato. Di norma sono ammessi tutti i domini per cui Postfix è abilitato come relay-server o quelli presenti nel parametro di configurazione fast_flush_domains.
-v: Opzione per avere maggiori informazioni sullo stato dei processi messi in atto dal comando. Se usato più volte abilita ulteriori informazioni. Da intendersi per l'uso in casi di debugging.


Postfix + ClamAV + Spamassassin

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Massimo 'maxgrante' Caselli - Ultimo Aggiornamento: 2005-01-05 16:16:54

Una richiesta sempre più frequente quando si installa e configura un mail server linux è la possibilità che quest'ultimo processi le email in arrivo per filtrare i virus, e le email di spam.
Tutto ciò è facilmente applicabile utilizzando i seguenti applicativi:
- Postfix (MTA)
- ClamAV (Engine Antivirus)
- Clamsmtpd (per gestire il passaggio della posta da Postfix a ClamAV)
- Procmail (per gestire il delivery della posta e filtrarla con Spamassassin)
- Spamassassin

Supponiamo di avere già installato Postfix e Spamassassin (tipicamente presenti come pacchetti in molte distribuzioni).
Gli altri due programmi (ClamAV e Clamsmtpd) sono invece, generalmente, da scaricare e da compilare a mano.
La versione ultima di ClamAV al momento in cui si scrive questo infobox è la 0.80 che potete trovare qui:
Clamav
Per quando riguarda invece Clamsmtpd l'ultima è la 1.2 disponibile qui:
Clamsmtpd

Dopo aver scaricato i due pacchetti spostiamo in /usr/local/src e scompattiamoli.
Per l'installazione e compilazione vi rimando a questo infobox. La configurazione la vedremo invece insieme.

CONFIGURAZIONE CLAMD
Di seguito vediamo cosa cambiare in /etc/clamd.conf per quello che vogliamo andare a fare:
LocalSocket /tmp/clamd Commentare la seguente linea perchè andremo a far ascoltare il demone clamd sulla socket TCP 3310, per farlo scommentare la seguente riga:
TCPSocket 3310
Il resto della configurazione di default va benissimo così com'è.

FRESHCLAM
Freshclam è il sistema utilizzato da ClamAV per aggiornare il proprio database. Il default di /etc/freshclam.conf va bene in quanto sarà in modalità demone che provvede ad aggiornare il sistema AV ogni 2 ore.

INSTALLAZIONE E CONFIGURAZIONE CLAMSMTPD
Questo fantastico software ci permette di impostare e gestire i vari passaggi che devono avvenire tra Postfix e ClamAV per i processi di filtering delle email che arrivano all'MTA.
Prima di tutto dobbiamo compilare il programma, per farlo spostiamoci in clamsmtpd-1.2 sotto /usr/local/src.
La compilazione avviene in modo standard ./configure; make; make install;
Al termine del tutto bisogna però spostare in /etc il file di conf che è presente nei sorgenti: cp clamsmtpd-1.2/doc/clamsmtpd.conf /etc/.
Fatto questo vediamo come configurarlo secondo le nostre esigenze:
Rispetto alla configurazione di default bisogna apportare i seguenti cambiamenti:
OutAddress: 127.0.0.1:10026 Output address
ClamAddress: 127.0.0.1:3310 Parametro che imposta dove ascolta Clamd

Avviare il demone clamsmtpd con il seguente comando:
/usr/local/sbin/clamsmtpd -f /etc/clamsmtpd.conf

IMPOSTARE POSTFIX PER UTILIZZARE I DUE SOFTWARE INSTALLATI
A questo punto basta dire a Postfix che le email che arrivano devono essere passate a clamsmtpd che provvederà a passarle a clamav e se CLEAN le rigirerà a Postfix per lo smistamento o, come nel nostro caso, per i controlli di antispam.
Per farlo basta aggiungere a /etc/postfix/main.cf le seguenti righe:
content_filter = filter:127.0.0.1:10025
receive_override_options = no_address_mappings

Ed in fondo a /etc/postfix/master.cf:
# SMTP filter (used by content_filter)
filter   unix  -       -       n       -       16      smtp
        -o smtp_send_xforward_command=yes
# For injecting mail back into postfix from the filter
127.0.0.1:10026 inet  n -       n       -       16      smtpd
        -o content_filter=
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtpd_helo_restrictions=
        -o smtpd_client_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks_style=host
        -o smtpd_authorized_xforward_hosts=127.0.0.0/8


UTILIZZO DI SPAMASSASSIN
Dato per scontato che spamassassin sia installato, il modo più semplice per utilizzarlo è di gestire il tutto tramite procmail, per quanto questa soluzione non sia l'ideale per grossi volumi di posta.
In pratica bisogna configurare Postfix per gestire il local delivery delle email tramite procmail. Per fare ciò basta scommentare la seguente linea di /etc/postfix/main.cf:
mailbox_command = /usr/bin/procmail
IMPORTANTE: prima di riavviare il servizio di postfix bisogna configurare /etc/procmailrc con cui configuriamo a livello globale sulla configurazione di procmail.
Editare /etc/procmailrc come segue:
DROPPRIVS=yes
LOGFILE=/var/log/procmail.log
VERBOSE=yes

:0fw
* < 256000
## | spamc -f
| /usr/bin/spamassassin

:0:/tmp/spam.lock
*^X-Spam-Flag: YES
/var/spool/mail/spam


Spieghiamo ora brevemente le parti importanti di procmailrc:
- LOGFILE specifichiamo il file dove procmail logga le attività che svolge.
- * < 256000 Specifichiamo a procmail di chiamare spamassassin SOLO per le email più piccole di 256K, in caso contrario si rischia di appesantire il processo di parsing delle email stesse
- | /usr/bin/spamassassin Specifica di usare il binario di spamassassin (non uso il spamd perchè ho avuto problemi di mailbox bloccate quando muore il demone)
- *^X-Spam-Flag: YES - /var/spool/mail/spam
Se trova il flag nell'header dell'email (inserito da spamassassin per le email ritenute spam) sposta la mail in una mailbox chiamata appunto "spam"

Per concludere tenete presente che in caso di traffico mail notevole è necessaria una macchina ben carrozzata.


Guida rapida: Mailscanner + Postfix su Fedora

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2005-04-28 15:09:13

In questa breve guida si affronta l'installazione di Mailscanner integrato con Postfix su Fedora/RedHat. Quanto qui indicato si può applicare senza sostanziali differenze anche su altre distribuzioni.

Rimozione di Sendmail e installazione Postfix :
yum install postfix
rpm -e sendmail


La configurazione di Postfix va fatta secondo le proprie necessità. Semplificando al massimo, verificare e modificare i seguenti parametri in /etc/postfix/main.cf:
myhostname, mydomain, inet_interface, mydestination, mynetworks.

Installazione di Mailscanner. Rigorosamente consigliato è l'uso dell'ottimo installer per sistemi basati su RPM dal sito ufficiale (prendere l'ultima versione stable):
wget
http://www.sng.ecs.soton.ac.uk/mailscanner/files/4/rpm/MailScanner-4.39.6-1.rpm.tar.gz


L'installazione richiede compilatore e strumenti per creare rpm, se non sono già installati procedere con yum:
yum install rpm-build
yum install gcc


Procedere con l'installazione. La fase di compilazione può durare qualche minuti, in quando l'installer ricrea ed installa i pacchetti RPM per il propri sistema dai rispettivi sorgenti:
tar -zxvf MailScanner-4.39.6-1.rpm.tar.gz
cd MailScanner-4.39.6-1
./install.sh


L'integrazione con Postfix è semplice, aggiungere alla fine di /etc/postfix/main.cf la riga:
header_checks = regexp:/etc/postfix/header_checks
e creare il file /etc/postfix/header_checks  con questo contenuto:
/^Received:/ HOLD

La configurazione di MailScanner prevede numerose opzioni che possono essere adattate alle proprie esigenze. Le modifiche fondamentali su /etc/MailScanner/Mailscanner.conf sono:
Run As User = postfix
Run As Group = postfix
Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
MTA = postfix


Assicurarsi che l'utente postfix con cui gira Postfix e lo steso Mailscanner abbia permesso di lettura e scrittura sulle directory usate per le code di Mailscanner:
chown -R postfix /var/spool/MailScanner

A questo punto si può provare a riavviare i servizi Mailscanner e Postfix e guardare gli header delle mail in entrata e in uscita: se esistono header aggiunti da Mailscanner, facilmente riconoscibili, il filtro e attivo e la sua configurazione dipende da come si vuole integrare con sistemi antivirus e antispam. Considerare che porvvede lo script di avvio di MailScanner ad avviare Posftix:
/etc/init.d/postfix stop
/etc/init.d/MailScanner restart


Quando tutto funziona secondo le ns esigenze possiamo configurare l'avvio dei servizi al boot:
chkconfig --level 345 postfix off
chkconfig --level 345 MailScanner on


Per integrare Mailscanner con l'antispam Spamassassin aggiungere/modificare le seguenti righe in /etc/MailScanner/Mailscanner.conf:
Use SpamAssassin = yes
SpamAssassin User State Dir = /var/spool/MailScanner/spamassassin

Ricordarsi di creare questa directory con i giusti permessi:
mkdir /var/spool/MailScanner/spamassassin
chown postfix.postfix /var/spool/MailScanner/spamassassin


Per integrarlo con l'antivirus ClamAV editare MailScanner.conf con:
Virus Scanners = clamav
Monitors for ClamAV Updates = /var/lib/clamav/*.cvd


Usare Postfix con connessioni dial-up (non permanenti)

Tipo Infobox: TIPS - Skill Level: 3- INTERMEDIATE - Autore: Fabrizio 'bluviolin' Tarizzo - Ultimo Aggiornamento: 2003-07-16 14:54:07

Come ottimizzare Postfix su workstation con connessione ad Internet non permanente.

La configurazione di Postfix generalmente utilizzata su macchine con una connessione non permanente ad Internet (ad esempio una workstation casalinga) prevede l'uso della direttiva defer_transports=smtp, che consente di mantenere in coda la posta inviata evitando l'avvio automatico di connessioni PPP indesiderate.
La posta in giacenza verrà effettivamente inviata alla successiva connessione, tramite un postfix flush nello script /etc/ppp/ip-up.
Ciò è scomodo, in quanto costringe l'utente ad eseguire manualmente il flush se desidera inviare un messaggio mentre la connessione è già attiva.

Una configurazione più funzionale istruisce Postfix a mantenere la posta in coda mentre la workstation non è connessa ad Internet e a spedirla immediatamente quando la connessione è attiva.
Ciò è possibile grazie al comando postconf, aggiungendo le seguenti istruzioni in /etc/ppp/ip-up o, meglio, in /etc/ppp/ip-up.local (ricordo che per ragioni di sicurezza questi script vengono eseguiti in un environment protetto, le variabili di ambiente non sono disponibili ed è pertanto obbligatorio specificare il path per esteso di ciascun comando):

# Istruisce Postfix per inviare subito la posta
/usr/sbin/postconf -e "defer_transports="
/usr/sbin/postfix reload
# Invia la posta in coda
/usr/sbin/sendmail -q >dev/null 2>/dev/null &


In /etc/ppp/ip-down.local rimettiamo le cose a posto:
/usr/sbin/postconf -e "defer_transports=smtp"
/usr/sbin/postfix reload


Disabilitare l'uso di VRFY in Postifx

Tipo Infobox: TIPS - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'ask' Nasuti - Ultimo Aggiornamento: 2004-11-12 17:44:53

Il protocollo SMTP offre una serie di comandi utili per visualizzare informazioni inerenti il server di posta. Questi comandi però possono esser sfruttati per scopi non del tutto etici.

Per evitare ciò è consigliabile disabilitare alcuni comandi tra cui il VRFY che permette la verifica di inidirizzi email sul server. Ad Esempio:
telnet pippo.com 25
220 pippo.com ESMTP Postfix
vrfy pippo
252 pippo


Nel file di configurazione di Postfix ( main.cf ) inserire la seguente dichiarazione:
# disabilita il comando VRFY
disable_vrfy_command = yes

Per attivare la modifica alla configurazione di postfix è necessario ricaricare il servizio ( /etc/init.d/postfix reload )

telnet pippo.com 25
220 pippo.com ESMTP Postfix
vrfy pippo
502 VRFY command is disabled


Il comando VRFY sul server pippo.com è disabilitato.


pop-before-smtp con Postfix

Tipo Infobox: TIPS - Skill Level: 3- INTERMEDIATE - Autore: lorenzo 'lorenz' urbinati - Ultimo Aggiornamento: 2004-06-04 11:53:19

Postfix è integrabile con diversi sistemi di autenticazione, di controllo dei virus, di applicativi webmail e può raggiungere livelli molto elevati di complessità strutturale. Molti strumenti e metodi utilizzati con Sendmail sono disponibili anche con Postfix.
Sul sito ufficiale del pacchetto alla pagina http://www.postfix.org/addon.html sono disponibili diversi riferimenti a utility, patch e documentazione per implementare diverse funzioni.

Attualmente Postfix è integrabile con molti dei principali sistemi di posta pop3/imap come Cyrus IMAP, Qpopper, Courier-imap, con vari software antivirus, con sistemi di controllo delle autenticazioni before-smtp come DRAC, whoson o pop-before-smtp o con sistemi anti-UCE come SpamAssassin. Alcune di queste funzioni implicano la ricompilazione del pacchetto, altre necessitano di particolari accorgimenti, come spesso succede nel mondo Linux ci sono molti modi di ottenere lo stesso effetto ed è difficile stabilire quale sia il migliore.

Un metodo di autenticazione molto usato è pop-before-smtp.
Per far questo si può utilizzare DRAC Dinamic Relay Authorization Control, un demone che si occupa di scrivere un database di indirizzi autenticati attraverso pop3/imap ma implica alcuni fattori poco favorevoli quali l'uso di Remote Procedure Call e quindi la necessità di avere portmap attivo e il fatto di dover ricompilare i demoni usati per pop3/imap, si può usare whoson una patch per Postfix che quindi implica la sua ricompilazione oppure usare pop-before-smtp un demone scritto in Perl.
L'ultima è probabilmente la soluzione più funzionale e pratica, non implica ricompilazioni particolari ed è portabile su molte piattaforme differenti, unico neo che potrebbe far preferire DRAC a questo metodo è che non opera da remoto implica per ciò che i file necessari siano presenti sulla macchina del server di posta.

Il pacchetto, disponibile su sourceforge si può trovare in formato rpm o in formato tar.gz, una volta appurato che siano presenti i modili Perl necessari per far funzionare pop-before-smtp installabili attraverso un Bash script all'interno della directory contrib dei sorgenti scaricati, chiamato getfromcpan che li scarica, ne crea il pacchetto rpm e se lanciato come root li installa o per i puristi con il comando Perl per accedere all'immenso archivio dei moduli di Perl:
#perl -MCPAN -e 'install Time::HiRes'
#perl -CPAN -e 'install File::Tail'
#perl -MCPAN -e 'install Date::Parse'
#perl -MCPAN -e 'install Net::Netmask'


A questo punto premesso di avere un'installazione funzionante di un sistema di posta, in questo caso poniamo un server pop3 e Postfix, sarà necessario lavorare principalmente sulla configurazione di pop-before-smtp e sul main.cf di Postfix.
Il file di configurazione principale pop-before-smtp-conf.pl è molto ben commentato ed è consigliabile leggerlo tutto per chiarire appieno il funzionamento e le possibili configurazioni, di norma si dovrà fare attenzione ad alcuni parametri:
# Set the log file we will watch for pop3d/imapd records.
Con questo commento inizia la sezione che specifica il log file del server pop3d/imapd. Notare che è presente del codice che tenta di effettuare questa operazione automaticamente.
if (!-f $file_tail{'name'}) {
    foreach (qw( /var/log/mail/info /var/log/mail.log
         /var/log/messages /var/adm/messages )) {
    if (-f $_) {
        $file_tail{'name'} = $_;
        last;
    }
    }
}


Mentre sarà importante fare attenzione alle definizioni della variabile $pat per determinare le azioni da eseguire sui file di log, di cui il default è
# For UW ipop3d/imapd and their secure versions. This is the DEFAULT.
$pat = '^(... .. ..:..:..) \S+ (?:ipop3s?d|imaps?d)\[\d+\]: ' .
    '(?:Login|Authenticated|Auth) user=\S+ ' .
    'host=(?:\S+ )?\[(\d+\.\d+\.\d+\.\d+)\]';


Sarà necessario identificare il server pop3d/imapd usato e scommentare le righe di codice che lo riguardano.
A questo punto se è tutto a posto si potrà lanciare il comando o usando
#/usr/sbin/pop-before-smtp
o a seconda della distribuzione lo script di init
/etc/init.d/pop-before-smtp start
Di default dovrebbe creare il file pop-before-smtp.db nella directory /etc/postfix/ e sarà necessario configurare il main.cf di conseguenza agendo sul parametro di restrizione dei recipienti
smtpd_recipient_restrictions = permit_mynetworks,reject_non_fqdn_recipient,
        check_client_access hash:/etc/postfix/pop-before-smtp,
        check_relay_domains

In questo modo quando un client si autenticherà via pop da qualunque indirizzo ip, poniamo dei dipendenti che viaggiano spesso e si collegano con il modem, il demone pop-before-smtp aggiornerà il file database contenente le informazioni sul client di modo che Postfix ne conceda l'inoltro (relay) della posta. I metodi possibili per gestire l'autenticazione per limitare il relay di Postfix sono molte, questo è forse uno dei metodi più semplici e pratici ma consigliabile fare riferimento alla documentazione presente in Internet per questo argomento che spesso contiene informazioni molto utili per la comprensione delle architetture implementabili con Postfix.


Soluzioni Antivirus

Rassegna delle soluzioni antivirus server based

Usare ClamAV: Antivirus per Linux

Tipo Infobox: DESCRIPTION - Skill Level: 3- INTERMEDIATE - Autore: Alessandro 'al' Franceschi - Ultimo Aggiornamento: 2004-05-19 18:08:54

ClamAV è uno dei più interessanti progetti OpenSource per lo scanning di virus.
Rilasciato sotto GPL, è Posix compliant e quindi disponibile per varie piattaforme *nix (Linux, *BSD, Solaris, MacOs X, lo stesso CygWin... ) e, rispetto ad altri progetti simili, ha il fondamentale pregio di mantenere un database in costante aggiornamento.
La versione analizzata, 0.70, identifica più di 20000 virus, è in grado di scompattare file compressi e di analizzare documenti di Office per Macro virus. NON corregge i file infetti, ma, nella sua applicazione più comune (antivirus correlato ad un sistema di posta) questa mancanza è assolutamente ininfluente.

INSTALLAZIONE
E' possibile scaricare sorgenti e binari precompilati per diverse distribuzioni dal sito ufficiale www.clamav.net.
Per compilare ClamAv è necessario avere i seguenti pacchetti: zlib, zlib-devel, oltre ovviamente alla suite gcc. Sono inoltre consigliati bzip2, bzip2-devel, gmp.

Per usarlo è necessario avere un utente non privilegiato con cui farlo eseguire:
groupadd clamav
useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav


Si può quindi procedere alla scompattazione del tar.gz scaricato:
tar -zxvf clamav-x.yz.tar.gz
cd clamav-x.yz

E alla compilazione (qui viene specificato di mettere il file di configuazione sotto /etc ):
./configure --sysconfdir=/etc
make
su -c "make install"

Binari e librerie vengono copiati in /usr/local, il file di configurazione, vista l'opzione --sysconfdir sopra specificata, diventa /etc/clamd.conf.
Una volta eseguita l'installazione è possibile testate l'engine su dei file d'esempio forniti con il tar.gz:
clamscan -r -l scan.txt clamav-x.yz

CONFIGURAZIONE
Il file di configurazione /etc/clamav.conf (o /usr/local/etc/clamav.conf se si sono compilati direttamente i sorgenti senza aver impostato specifici parametri) contiene le varie voci che determinano il funzionamento di ClamAV. I parametri impostati di default sono generalmente adeguati e non è necessario modificarli per poter iniziare ad usarlo, bisogna solo provvedere a commentare la riga Example (il che, quantomeno, obbliga l'utente a dare un'occhiata al file di configurazione ed avere barlumi di consapevolezza sulla sua logica).
Si segnalano comunque impostazioni quali:
LogFile /tmp/clamd.log, LogFileMaxSize 2M, LogVerbose, LogSyslog determinano posizione, dimensioni, verbosità ed eventuale utilizzo di Syslog per il file di log.
DatabaseDirectory /var/lib/clamav la directory in cui viene scritto il database con le signature dei virus riconosciuti
TCPSocket 3310, TCPAddr 127.0.0.1 la porta e l'indirizzo a cui si mette in ascolto clamd (di default si binda ad ogni indirizzo disponibile)
MaxConnectionQueueLength 15, MaxThreads 5 il numero massimo di connessioni contemporanee e di thread su clamd (aumentare su sistemi con grossi carichi)
StreamMaxLength 10M
VirusEvent /usr/local/bin/send_sms 123456789 "VIRUS ALERT: %f: %v" quale comando eseguire nel caso venga intercettato un virus
User clamav L'utente con cui viene eseguivo clam. Di default "clamav", va creato in fase di installazione e deve avere permessi di lettura e scrittura sui log e il database dei virus.
ScanOLE2, ScanMail, ScanArchive definiscono se eseguire scan su file Microsoft Office, su caselle postale e su file compressi. Notare che lo scan di mailbox è disabilitato di default.
ArchiveMaxFileSize 10M, ArchiveMaxFiles 1000 [...] parametri vari che determinano dimensioni degli archivi su cui eseguire gli scan.

CONFIGURAZIONE AUTO AGGIORNAMENTO: FRESHCLAM
Freshclam è lo strumento migliore per tenere aggiornato il database di virus su cui lavora l'engine di ClamAV.
Può essere eseguito via command line e schedulato per un aggiornamento automatico, oppure essere lanciato come demone in costante esecuzione. Il suo file di configurazione è /etc/freshclam.conf dove vengono definite informazioni quali:
DatabaseDirectory /var/lib/clamav - La directory dove Clam trova il database dei virus, deve essere uguale a quanto definito in clamav.conf
UpdateLogFile /var/log/clamav/freshclam.log - Il file dove vengono loggate le operazioni di freshclam, deve appartenere all'utente clamav e può avere permessi 0600
NotifyClamd /etc/clamav.conf - Notifica clamd (va indicato il path corretto del suo file di conf) ogni volta che vengono aggiunti virus al database, in modo da riavviarlo per ricaricare il database aggiornato.
DatabaseMirror database.clamav.net L'indirizzo da cui scaricare gli aggiornamenti. Il valore preimpostato è l'ideale perchè punta ad un pool, gestito con un round-robin DNS, di mirror ufficiali
Esistono altre opzioni che permettono di usare un proxy http, di eseguire comandi custom ad ogni aggiornamento o errore, di gestire la frequenza degli aggiornamenti (in modalità demone) o il numero di tentativi, ecc.
Per eseguire freshclam in daemon mode basta lanciare:
/usr/local/bin/freshclam -d
per lanciare una esecuzione schedulata, aggiungere a /etc/crontab una riga tipo:
N * * * *    /usr/local/bin/freshclam --quiet
dove N è un numero da 00 a 59 che indica il minuto in cui eseguire l'aggiornamento (ogni ora).

USARE CLAMAV
Clamav, in se, si "limita" ad analizzare il contenuto di un file o di un flusso di dati e ad individuare eventuali virus sulla base del database di firme che viene tenuto aggiornato con freshclam.
La sua natura aperta, comunque, gli permette di essere integrato ed interagire con altri programmi per poter essere utilizzato come antivirus su un server di posta o un file server o per eseguire un check direttamente su dei file specificati.
La modalità di funzionamento è duplice: esiste la possibilità di utilizzare l'engine tramite il comando clamscan oppure di usufruire del demone clamd.

clamscan se lanciato senza argomenti fornisce alcune informazioni e statistiche sul numero di virus riconosciuti,   se viene seguito dal nome di una directory del file sistem, esegue un check di tutti i file ivi contenuti. Fra le opzioni e gli utilizzi più utili:
clamscan -r /home Esegue lo scan ricursivo (-r) di tutto il contentuto della directory /home
clamscan -r /home -l /var/log/antivirus.log Salva il report dello scan di /home sul file antivirus.log (a video, in standard error, vengono visualizzati tutti i file contollati
clamscan -r /home -i Stampa a video solo i nomi dei file infetti (oltre al report finale) e quindi risulta decisamente meno verboso.

Il demone clamd può stare in ascolto su una socket Unix (opzione di default: LocalSocket /tmp/clamd nel file di conf) o, in alternativa, su una porta TCP (opzione TCPSocket 3310).
Per eseguirlo basta lanciare il comando clamd. Se si vuole usare un file di configurazione diverso da quello di default si puà usare l'argomento --config-file, se si vuole abilitare il debug mode usare --debug
Il demone si presta ad integrarsi ed essere usato come filtro da parte di vari programmi esterni ed ha, comunque, un suo  client chiamato clamdscan che ha sostanzialmente le stesse opzioni di clamscan.
Se si ha clamd in esecuzione basta digitare clamdscan /home, per esempio, per eseguire il controllo dei file in /home.
Notare che quando si usa clamdscan, si accede ai file da controllare tramite clamd per cui l'utente con cui il demone gira (di default clamav) deve averne almeno accesso in lettura.

MODALITA' D'USO
Essendo ClamAV fondamentalmente un filtro, che riceve un file in input e lo rilascia in output dopo aver verificato se contiene virus, i suoi ambiti di utilizzo sono svariati e si integrano con software e soluzioni diversi.

Sendmail Milter
Sendmail ha la possibilità con il supporto milter, di integrarsi con dei filtri che analizzano la mail mentre sta per essere ricevuta (e quindi prima del delivery completo).
Se si compila ClamAv con l'opzione (sono necessarie le librerie di development libmilter):
./configure --enable-milter
dopo la compilazione ci si ritroverà il file /usr/local/sbin/clamav-milter (se si installa ClamAV tramite un pacchetto, il supporto milter con file clama-milter dovrebbero essere già presenti).
VA quindi configurato sendmail per usare il m