Linux Tips
I suggerimenti sono stati presi da riviste di informatica, da newsletters o da siti web
perciò ogni diritto rimane al legittimo proprietario.

 

http://www.openskills.info/view/search-engine.php?textsearch=&cerca=tutte&IDboxtype=all&LANGUAGE=ita&submit=Cerca+su+OpenSkills

Internet: introduzione alla Rete delle Reti Introduzione a file e directory in Unix/Linux Introduione a Grub
Introduzione a LILO Introduzione a Linuxconf Introduzione a Logical Volum Manager (LVM)
Introduzione a Postfix Introduzione a SUDO (superuserdo) - eseguire i comandi come altro utente Introduzione a VI (Visual Editor)
Introduzione a Webmin Introduzione al protocollo HTTP Introduzione al World Wide Web
Introduzione all'uso in sicurezza di Internet Introduzione alla configurazione di Apache Introduzione alla configurazione di Samba - smb.conf
Introduzione alla configurazione di Sendmail Kill (comando per mandare un segnale ad un processo) L'implementazione Windows di SMB
La documentazione di Samba La stampa con Linux La struttura delle directory su Linux/Unix
La struttura delle directory su Solaris Las (visualizza l'elenco degli ultimi accessi al sistema) Lastlog(ultimo login)
Ldd (List Dynamic Dependencies) Le fasi del boot di Linux (su un sistema x386 Intel-like) Le memoria di massa
Le meraviglie del /proc filesystem Le periferiche di I/O Le stampanti supportate ed eventuali problemi
Limite della partizione di boot nei primi 1024 cilindri dell'HD Linee guida per l'implementazione di un file server Links essenziali sulla security
Linux nella PMI: Vantaggi e Svantaggi Linux Network Address Translation (NAT) Linux Software: i links essenziali
Livelli di interoperabilità fra Samba e reti Windows    

Internet: introduzione alla Rete delle Reti
Cavi che percorrono incredibili distanze cablando il pianeta, un'infinità di computer interconnessi tra loro, il più grande contenitore di informazioni di ogni tipo, una miriade di possibilità di comunicazione: Internet. 
CENNI STORICI 
Internet trova le sue radici in un progetto miltare risalente agli inizi della guerra fredda, intorno al 1962. Gli Stati Uniti formarono l'ARPA (Advanced Research Projects Agency) con lo scopo di gestire studi tecnologici per uso militare. L'obbiettivo degli USA era quello di creare un metodo che permettesse, anche in seguito ad un attacco nucleare, di mantenere la possibilità di comunicare con con le forze armate.
Il risultato degli studi in questo senso, fu la creazione di una rete a commutazione di pacchetto, in cui i dati trasmessi, suddivisi in piccole unità (datagrammi) indipendenti tra loro, potessero giungere a destinazione tramite differenti percorsi. La rete, doveva implementare un metodo, qualora non fosse possibile utilizzare un determinato percorso, che consettisse di trovarne uno alternativo per far giungere le informazioni a destinazione. 
Questo network prese inizalmente il nome di ARPAnet, ed i primi collegamenti furono realizzati tra Università. Il protocollo in uso in quel tempo era NCP (Network Control Protocol). Nel 1972, ARPAnet comprendeva 32 nodi, i collegamenti erao a 50Kbps. Alcuni programmi per lo scambio di comunicazioni tra utenti (tipicamente tra professori universitari) cominciavano a diffondersi. Poco dopo l'ARPA veniva ribattezzata DARPA (Defence Advanced Research Projects Agentcy). 
Nel 1973, iniziò lo sviluppo della suite di protocolli TCP/IP con il fine di interconnetere differenti tipi di reti.
L'utilizzo crescente per scopi pubblici di ArpaNET portò nel 1983, alla sudddivisione in ARPAnet e MILNET (Military Network) per evidente diversità di scopi. Conseguentemente alla crescita di ARPAnet fu necessario sviluppare un nuovo metodo per permettere la comuncazione tra i vari nodi. Nacque il DNS (Domanin Name Space) il quale permetteva un metodo automatico per indicare ai dati in transito l'indirizzo del destinario. In precedenza ogni host doveva possedere un file contentente tutti i nomi dei possibili host destinatari.
La NSF (National Science Foundation) posando le nuove linee T1 (a 1,544 Mbps) mise le basi per un ulteriore sviluppo di ARPAnet la quale prese il nome di NSFNET. Venne migliorato il protocollO TCP/IP e di pari passo ed introdotto NNTP (Network News Transfer Protocol). L'utenza in crescita, richiedeva ancora un incremento di banda. ANS (Advanced Network System) fu incaricata di posare nuove linee per la dorsale Internet di tipo T3 (a 45 Mbps).
Durante il corso dell'aggiornamento alle nuove linee il dipartimento della difesa abbandona definitivamente ARPAnet. Viene in seguito fondata InterNIC come organo di controllo dei servizi Internet e si fa strada la nuova tecnologia di dorsale ATM (Asynchronous Transfer Mode) con velicità di 145 Mbps. Nel 1996 NFS privatizza la dorsale e dà l'incarico ad alcune società di fornire l'accesso ad Internet.
Attualmente diversi provider indipendenti si occupano di gestire la maggior parte del traffico. L'evoluzione di software e protocolli così come l'incremento degli utenti è ancora costante. Tra le tappe future, visto lo scarseggiare di indirizzi di rete, l'adozione della nuova suite di protocolli IPv6 in sostituzione di IPv4.
UTILIZZARE INTERNET
Grazie allo sviluppo di Internet, il periodo attuale è stato definito era delle comunicazione globale. Comunicazione che puo' avvenire in tempo reale e non, per lavoro o per diletto e in diverse forme. Grazie alla Rete è possibile trovare, pubblicare e scambiare informazioni relative ai più disparati argomenti in svariati modi:
World Wide Web: è per molti sinonimo di Internet, in quanto rappresenta il servizio più conosciuto. La maggior parte dei contenuti sulla Rete, viene offerta mediante questo tipo di media, le cui pagine danno forma a molteplici tipologie di siti: Portali tecnico-informatici, di medicina, per la ricerca di lavoro, servizi di Home Banking, Virtual Shop, o Weblog sono solamente alcuni dei possibili contenuti. Il web è la più grande ragnatela globale di informazioni, organizzata in ipertesti, i quali possono essere collegati tra loro. La ricerca delle informazioni, avviene solitamente tramite i cosiddetti motori di ricerca (Google, Altavista ecc) i quali offrono una guida nell'enorme quantità di dati disponibili.
Posta Elettronica: tra le applicazioni più diffuse vi è senz'altro l'E-Mail, usata ogni giorno da milioni di persone per lavoro, o semplicemente come mezzo di comunicazione in luogo delle tradizionali lettere cartacee. Grazie alla posta elettronica è possibile infatti inviare e ricevere quasi istantaneamente messaggi contenenti testi, immagini suoni o allegati di varia natura quali fogli elettronici, disegni Cad, programmi ed altro.
Mailing List: si basano sull'utilizzo della posta elettronica. Iscrivendosi ad una mailing list di proprio interesse (ne esistono su svariati argomenti) si ricevono periodicamente email contenenti informazioni riguardanti l'argomento desiderato.
Newsgroup: una sorta di bacheca elettronica sulla quale postare e leggere messaggi inerenti ad argomenti di interesse comune. Tramite un newsgroup client è possbile sottoscrivere l'iscrizione al gruppo di proprio interesse e leggere o scrivere messaggi discutendo con gli altri partecipanti. I newsgroup, anche chiamati gruppi di discussione, sono disponibili collegandosi ad un news server e sono organizzati in modo gerarchico. Alcuni esempi di newsgroup sono it.lavoro.informatica in cui si discute di informatica (.informatica), in relazione ai rapporti di lavoro (.lavoro) ed in italiano (.it).
Transferimento di file: il quale permette di scaricare programmi, immagini, file musicali in MP3, Video MPEG da appositi server o siti in rete, oppure trasferire su server in Internet i propri file per esempio al fine di costruire un sito web.
Chat e Instant Messaging: Le chat nate grazie allo sviluppo del protocollo IRC nel 1985, permettono di comunicare in tempo reale, collegandosi ad un IRC server. Su un IRC Server gli utenti posson formare dei canali e riunirsi. L'evoluzione dei software di chat possono essere rappresentate da quelli Instant Messaging, in quali permettono di identificare l'utente in modo univoco e di recapitare i messaggi anche qualora il destinatario non fosse in quel momento collegato.
Stream Audio Video: La diffusione crescente della banda larga, permette un utilizzo più multimediale della rete, quindi non solamente testo e immagini statiche ma anche video ed audio come per esempio la possibilità di effettuare videoconferenze oppure seguire programmi televisivi scelti dall'utente (Tv on demand) e utilizzare il telefono.
Internet è comunque un mondo in continuo movimento, sia per quanto riguarda i contenuti, che i media tramite i quali vi si accede.

Introduzione a file e directory Unix
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). 

Introduzione a Grub
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. 

Introduzione a LILO
LILO è il Linux loader più diffuso, permette il boot sia di Linux che di altri sistemi operativi.
Generalmente l'installazione di Linux provvede a creare ed installare LILO sulla macchina (se si è scelto di installare il loader direttamente sull'hard disk e non su floppy) ma in caso di kernel upgrade o aggiunta di un nuovo sistema operativo sulla macchina è necessario modificare le 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. 

Introduzione a Linuxconf 
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. 

Introduzione a Logical Volume Manager (LVM)
Un Logical Volume Manager permette ad un sistema operativo di utilizzare dei dispositivi logici virtuali per l'accesso al disco che mascherano la natura dei dispositivi fisici (hard disk) su cui risiedono i dati.
In pratica è possibile utilizzare un device virtuale di cui possono fare parte diversi hard disk fisici, anche di natura, velocità e dimensioni diverse.
I vantaggi di un simile approccio alla gestione del file systems sono maggiore scalabilità, alta disponibilità del servizio, ridondanza e in alcuni casi migliori prestazioni.
L'implementazione LVM su Linux (dalla version 2.4 è presente nel thread ufficiale del kernel) è stata sviluppata dalla software house Sistina e mette a disposizioni features quali:
- Possibilità di modificare i volumi logici online, senza interruzione del servizio (utile, ad esempio, per ampliare una partizione virtuale);
- Gestione di molteplici gruppi di volumi logici;
- Funzionalità di mirroring, striping o concatening;
- Possibilità di eseguire snapshot in tempo reale senza smontare la partizione (fondamentale per operazioni di backup);
- Strumenti di gestione in command line semplici da usare;
- Supporto per software di High availability. 
I vantaggi di usare un sistema LVM esistono sia su sistemi piccoli che grandi:
- su sistemi di piccole dimensioni (workstation o server con pochi hard disk) LVM permette di gestire più agilmente lo spazio su disco: ridimensionare una partizione fisica troppo piena di dati è problematico e pericoloso, mentre è semplice ed immediato cambiare le dimensioni di un volume logico.
- su sistemi di grandi dimensioni, con numerosi dischi fissi da gestire, è possibile ottimizzare meglio lo storage, modificarne le dimensioni o sostituire dischi guasti senza interrompere il servizio.
Le componenti basilari di LVM sono:
- Volume Group (VG) I gruppi di volume, sono il livello di astrazione più alta, contengono volumi fisici e logici.
- Physical Volume (PV) Di fatto sono i singoli hard disk o le loro partizioni, ogni HD o partizione è un PV (ma anche un /dev/md0 lo può essere, in quanto si presenta come device autonomo e singolo) 
- Logical Volume (LV) Si presenta come un device a blocchi standard, è paragonabile ad una partizione di un hard disk ed è quello che viene referenziato come mount device per una data directory e che va formattato con il filesystem che si desidera.
- Physical Extent (PE) Ogni volume fisico viene diviso in blocchi di dati di dimensione fisse, chiamati "physical extent". Questi sono associati (1 a 1) con i:
- Logical Extent (LE) I blocchi di dati, della stessa dimensione, con cui è diviso un volume logico. Diversi volumi logici possono avere LE di dimensioni diverse, ma sempre uguali all'interno dello stesso volume.
In termini pratici, per mettere in piedi un sistema basato su LVM: 
- Si creano dei volumi fisici, definendoli sulla base di hard disk o partizioni esistenti con il comando pvcreate
- Si crea un volume group, con due o più volumi fisici, con il comando vgcreate. Se in tempi successivi si devono aggiungere nuovi volumi fisici al gruppo si può usare il comando vgextend
- In un volume group esistente si possono creare i volumi logici veri e propri, con il comando lvcreate
- Il volume logico creato si presenta come un device a blocchi con nome tipo /dev/nome_vg/nome_lv, che può essere normalmente formattato con il filesystem che si desidera (ext2, ext3, reiserfs...) e montato nella directory che si desidera (/home, /var ...) come una normale partizione.
In un Volume Group possono esistere svariati Logical Volume che possono essere facilmente ridimensionati, rimossi, creati, rinominati. Facendo un paragone con un normale hard disk e la logica con cui viene usato su un sistema Unix, i LV è come se fossero delle partizioni "flessibili" di un disco fisso (il VG) a "capienza variabile", in quanto composto da un numero modificabile di dischi fisici.
La mappatura fra Psysical Extent e Logical Extend, le unità di storage minime, può essere impostata in due diversi modi:
- Linear. I LE di un LV vengono mappati sequenzialmente ai PE di uno o più PV. In pratica un volume logico composto da due volumi fisici, avrà, ad esempio, i LE da 1 a 100 che coincidono con i PE da 1 a 100 (sempre di uguali dimensioni) sul primo volume fisico e i LE da 101 a 200 che coincidono con i PE da 1 a 100 sul secondo volume fisico.
- Striped. Analogamente ad un Raid 1, i LE verranno mappati alternativamente su PE di diversi volumi fisici. In questo modo le performance potrebbero migliorare (in particolare se si usano volumi fisici su bus diversi) ma una volta impostati inizialmente, con questo metodo non è più possibile aggiungere volumi fisici ad un volume logico.
Molte distribuzioni presentano LVM come un modulo del kernel: lvm-mod (Per caricarlo, nel caso non avvenga automaticamente: modprobe lvm.mod) e provvedono all'avvio, nel caso in cui sia configurato un volume group, ad eseguire gli script di setup:
vgscan Esegue uno scan di tutti i dischi in cerca di volume groups e crea i database con le impostazioni di base per tutti gli altri comandi lvm: /etc/lvmtab e directroy /etc/lvmtab.d/
vgchange -ay Attiva i volume group conosciuti dal sistema.
Allo shutdown del sistema è opportuno dare il comando (già previsto nelle distribuzioni che supportano nativamente LVM):
vgchange -an Disattiva i volume group conosciuti dal sistema.
Per diagnosticare cosa succede è utile la directory /proc/lvm/ con i suoi contenuti che a loro volta forniscono dati simili a quelli che si possono ottenere con comandi come lvdisplay, vgdisplay e pvdisplay. 

Introduzione a Postfix
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. 

Introduzione a sudo
Sudo (superuser do) è un utility che permette di eseguire comandi con i permessi di un altro utente, tipicamente utilizzato per eseguire comandi che solamente root potrebbe lanciare. 
sudo è un ottima soluzione per gestire e controllare gli accessi e le azioni degli utenti, sia perchè permette di eseguire comandi che tipicamente un utente normale non potrebbe sia perchè offre la possibilità di loggare nei minimi dettagli qualsiasi azione. 
Inoltre se si aggiunge il vantaggio di non dover utilizzare l'account di root per le normali operazioni di amministrazione come ad esempio riavvio di un servizio, assicura un certo vantaggio in ambito sicurezza oltre che limitare in modo ulteriore la conoscenza della password di root.
Le principali feature di questa utility sono:
- Limitare o permettere la possibilità di eseguire un certo comando ad un gruppo o ad un singolo utente 
- Logging, per ogni comando eseguito.
- Ticketing system, ovvero è possibile configurare sudo in modo tale che ogni volta che viene invocato, l'utente possa inserire una sola volta la password anche in caso di una sequenza di comandi. Ovviamente dopo un certo timeout configurabile verrà richiesta nuovamente la password.
- La struttura del file di configurazione permette una configurazione centralizzata, un file di configurazione valido per più host.
Installazione
Il download dei sorgenti è possibile dall'home page ufficiale: http://www.sudo.ws/dist/, mentre per il download dei rpm è possibile appoggiarsi a http://www.rpmfind.net
[root@SATURNO root]# wget http://www.sudo.ws/dist/sudo-1.6.7p3.tar.gz
--14:53:03-- http://www.sudo.ws/dist/sudo-1.6.7p3.tar.gz
=> `sudo-1.6.7p3.tar.gz'
[...]
[root@SATURNO root]# tar zxvf sudo-1.6.7p3.tar.gz 
sudo-1.6.7p3/
sudo-1.6.7p3/alloc.c
sudo-1.6.7p3/alloca.c
sudo-1.6.7p3/check.c
sudo-1.6.7p3/def_data.c
sudo-1.6.7p3/defaults.c
[...]
Nel caso in cui si vogliano utilizzare le impostazioni di default occorre semplicemente lanciare lo script configure seguito da make e make install, per personalizzare l'installazione occorre specificare le singole opzioni con lo script configure, ecco alcuni esempi di interessanti opzioni:
--disable-root-sudo Non permette a root di eseguire sudo
--disable-path-info Printa a video 'command not allowed' al posto di 'command not found'
--without-passwd Disabilita l'utenticazione tramite passwd o shadow
--with-insults Insulta l'utente che sbaglia la password
Esempio di compilazione:
Lancio dello script configure per la creazione del Makefile
[root@SATURNO sudo-1.6.7p3]# ./configure --prefix=/usr --with-pam --with-insults --with-all-insults
[...]
checking for log file location... /var/log/sudo.log
checking for timestamp file location... /var/run/sudo
configure: creating ./config.status
config.status: creating Makefile
config.status: creating sudo.man
config.status: creating visudo.man
config.status: creating sudoers.man
config.status: creating config.h
config.status: creating pathnames.h
configure: You will need to customize sample.pam and install it as /etc/pam.d/sudo
Creazione del file di configurazione per PAM, il file di esempio all'interno dei sorgenti (sample.pam) è utilizzabile solo in due due casi, quello attivo di default (non commentato) permette di autenticare l'utente tramite /etc/passwd , il secondo non attivo (commentato) prevede l'uso di un Master domain controller per l'autenticazione utente
[root@SATURNO sudo-1.6.7p3]# cp sample.pam /etc/pam.d/sudo
[root@SATURNO sudo-1.6.7p3]# cat /etc/pam.d/sudo 
#%PAM-1.0
[...]
#auth required /lib/security/pam_smb_auth.so
auth required /lib/security/pam_pwdb.so shadow nullok
Compilazione e installazione
[root@SATURNO sudo-1.6.7p3]# make
gcc -c -I. -I. -O2 -D_PATH_SUDOERS=\"/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440 check.c
gcc -c -I. -I. -O2 -D_PATH_SUDOERS=\"/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440 env.c
[...]
[root@SATURNO sudo-1.6.7p3]# make install
/bin/sh ./mkinstalldirs /usr/bin \
/usr/sbin /etc \
/usr/man/man8 /usr/man/man5
mkdir /usr/man
[...]
Configurazione
Il file di configurazione di sudo è /etc/sudoers modificabile tramite l'utility visudo, che risulta essere un editor con gli stessi comandi di vi con il plus del check della sintassi del file.
La sintassi del file di configurazione prevede due parti:
- aliases (opzioni e variabili di base):
Creazione di gruppi di utenti
User_Alias ADMINS = neo, led
User_Alias OPERATORS = pippo, nobody
Creazione di gruppi di comandi
Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown, /usr/bin/halt, /usr/bin/reboot
Creazione di gruppi di host
Host_Alias SERVERS = ns, www, mail
Host_Alias WORKSTATION = saturno, dido, trinity
- user specifications (opzioni e variabili specifici dell'utente, chi ,cosa e come può eseguire):
L'utente root può eseguire qualunque comando, in qualunque host come se fosse qualunque utente
root ALL = (ALL) ALL
Tutti gli utenti appartenenti al gruppo ADMINS possono lanciare qualsiasi comando senza inserire una password
ADMINS ALL = NOPASSWD: ALL
Tutti gli utenti appartenenti al gruppo OPERATOR possono lanciare i comandi relativi al gruppo SHUTDOWN
OPERATORS WORKSTAION = SHUTDOWN
Ulteriori esempi si possono trovare all'interno dei sorgenti sample.sudoers o al seguente indirizzo: http://www.courtesan.com/sudo/man/sudoers.html#examples. 

Introduzione a VI (visual editor)
VI (visual editor) è il più importante e diffuso programma di editing dei file nell'ambiente UNIX e LINUX, in quanto possiede delle funzionalità che se utilizzate a fondo ne fanno uno strumento incredibilmente potente. 
Per procedere all'editazione di un file basta digitare il comando "vi" seguito, o dal nome di un file già esistente nel caso in cui lo si voglia modificare, oppure dal nome di un nuovo file nel caso lo si voglia creare.
Nel momento in cui si procede all'editazione di un testo nell'ultima riga vengono sempre visualizzate le informazioni sul file aperto, come il numero di righe e di caratteri, il resto dell'area è destinata all'immissione dei comandi.
Se le righe non sono sufficienti a coprire tutta la porzione dello schermo a disposizione ne resteranno di vuote contrassegnate dalla tipica "~". 
Questo editor possiede 3 diverse modalità di funzionamento in cui si svolgono azioni differenti: 
Modalità d'inserimento o di input
Questo tipo di modalità fa riferimento alle azioni che consentono di modificare e aggiungere del testo. Una volta editato un file si accede a questa modalità con vari comandi, tra cui il tasto "i" che inserisce i caratteri prima del punto in cui è posizionato il cursore o "a" che invece inserisce i caratteri dopo il punto in cui è posizionato il cursore.
Modalità di comando visiva 
La modalità di comando visiva permette di utilizzare una serie particolare di comandi ed è quella attivata di default. All'interno di questa modalità i comandi inseriti si riferiscono alla riga su cui è posizionato il cursore. Per passare alla modalità visuale da quella di inserimento, è sufficiente premere il tasto Esc. 
Modalità di comando due punti
La terza e ultima modalità è quella che consente di utilizzare i comandi del salvataggio o dell'uscita dal programma. Per utilizzare questa modalità ed i conseguenti comandi premere ":" seguiti dal comando. In questo caso il cursore viene posizionato sull'ultima riga. 

Introduzione a Webmin
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 al protocollo HTTP
Il protocollo HTTP (Hyper Text Transfer Protocol) viene usato da tutti i client e server web e gestisce il modo con cui questi si scambiano pagine HTML o altri file.
Il client web (cioè un browser come Microsoft Internet Explorer, Netscape Navigator, Opera ecc.) utilizza l'HTTP per richiedere file al server web. In primo luogo vengono richieste pagine HTML, che dopo essere state ricevute, vengono processate dal browser che provvede a fare richiesta di eventuali nuovi file richiamati nel codice HTML (immagini, fogli di stile css, script esterni ecc.) e a visualizzare il tutto sul monitor dell'utente.
Ogni richiesta http consta di:
- Metodo (GET, HEAD, PUT ...)
- URI (Uniform Resource Identifier) Il path o indirizzo completo della risorsa richiesta.
- Versione del protocollo (HTTP/1.0 o HTTP/1.1)
Un esempio tipico di una richiesta HTTP è:
GET / HTTP/1.0
Alla richiesta possono seguire degli HTTP headers come Accept-Language, Date, Expires e vari altri (possono essere arbitrariamente definiti fra broswer e server).
Esistono attualmente 3 specifiche del protocollo HTTP:
HTTP/0.9 - Di fatto non è più utilizzato da nessuna parte
HTTP/1.0 - Ancora abbastanza utilizzato e supportato da ogni browser e web server
HTTP/1.1 - Introduce nuovi metodi (OPTIONS, TRACE, DELETE, PUT, CONNECT) e la gestione di Virtual Host. E' supportato da tutti i browser e server non troppo vecchi ed è utilizzato nella maggior parte dei casi. 

Introduzione al World Wide Web
Il www, acronimo di World Wide Web è il risultato dell'interconnessione fisica e logica fra un vasto numero di computer in rete. 
Ogni computer su Internet viene definito host, ha un proprio indirizzo IP e può indifferentemente svolgere funzioni da client o server per una moltitudine di protocolli, a seconda del software installato ed utilizzato.
Nella sua forma base, un Server Web è un computer generalmente online 24 ore su 24, ha un indirizzo IP fisso a cui è associato un nome tipo www.dominio.com e, tramite un software dedicato (Apache, IIS, Zeus...) non fa altro che fornire file ai client (i browser come Netscape Navigator, Microsoft Internet Explorer, Opera...) che li richiedono.
Questi file sono tipicamente immagini (di solito in formato GIF e JPEG) e pagine HTML, che normali file ASCII contenenti il testo di un linguaggio di programmazione ipertestuale che permette di formattare testo, grafica e link all'interno di schermate visualizzabili dal browser.
Il protocollo che gestisce il trasferimento di questi file fra client e server web è l'HTTP Hyper text Transfer Protocol.
Di fatto mentre si naviga non si fa altro che trasferire file via rete, tramite il protocollo HTTP, dall'hard disk del server web al nostro computer, dove il browser interpreta le pagine HTML ricevute e le visualizza, richiedendo di volta in volta le immagini e gli altri file necessari per completare la visualizzazione delle pagine.
Cliccando su un link, l'utente richiede un diverso file html sul server su cui sta navigando o su un altro server che fisicamente potrebbe essere distante migliaia di chilometri dal primo.
Il gran numero di server web, che contiene una enorme quantità di pagine html che a loro volta includono innumerevoli link ipertestuali che collegano altre pagine, costituiscono l'ossatura di questa ragnatela globale che collega logicamente pagine e server fisicamente dislocati in ogni parte del globo.
Dal momento che sia il protocollo HTTP che il linguaggio di programmazione HTML sono definiti come standard, con regole ben precise, è normale e comune avere client e server web che "girano" anche su Sistemi Operativi diversi.
In pratica non c'è nessun problema a navigare con il proprio Windows 98 su un sito che risiede su un sistema Linux o Windows 2000 e viceversa. 

Introduzione all'uso in sicurezza di Internet
Da alcuni anni l'utilizzo di Internet è andato progressivamente estendendosi: sempre più persone lo utilizzano sia in ufficio che a casa, e, a volte, la loro conoscenza sull'uso dei computer, di Internet stessa e dei relativi rischi è piuttosto limitata. 
L'automazione intrinseca nei sistemi informatici, la costante scoperta di bug e problemi di sicurezza nel software, la loro esposizione alla rete globale, utilizzata da individui di ogni tipo e con le più disparate intenzioni, aumentano considerevolmente i rischi correlati all'uso di un computer.
Non esiste la certezza matematica di riuscire ad evitare eventuali l'azione di virus o gli attacchi di malintenzionati provenienti da reti locali e/o dal mondo Internet; esistono però delle semplici regole alle quali attenersi per rendere questi attacchi meno efficaci e soprattutto potenzialmente meno dannosi.
Dal momento in cui si accede alla rete, è utile sapere che la nostra macchina è attaccabile da qualsiasi agente esterno, che può operare tramite diverse vie: il browser con cui si naviga, il programma di posta con cui si ricevono mail, la semplice presenza in rete del proprio computer con le sue porte aperte, tramite le quali intrusori o worm possono comprometterne l'integrità.
Il pensiero “Chi mai potrebbe essere interessato ad introdursi nel mio PC?”, non ritenendo di possedere materiale o informazioni più o meno utili ad altri utenti, non considera il fatto che molte insidie informatiche sono dovute ad agenti automatici (virus, worm) o semiautomatici (scan su larga scala), dagli effetti non prevedibili.
Consapevolezza ed Educazione, per citare due termini usati spessissimo in questo ambiente, racchiudono perfettamente le modalità per ovviare a numerose problematiche relative al nomrale utilizzo di un computer in rete: essere consapevoli che al momento in cui si mette piede in Internet, si ottiene un indirizzo IP e si diventa parte di esso con tutti i pro e contro, ma soprattutto essere educati a sviluppare una propria capacità di giudizio nel valutare tutto ciò che si incontra e che si decide di usare.
Minacce e precauzione minime
VIRUS - Un normale antivirus, costantemente e automaticamente aggiornato, protegge in modo sensibile la minaccia data dai Virus. A questo vanno affiancate alcune precauzioni minime da parte degll'utente: non aprire allegati, a meno che si sia ragionevolemtne certi del loro contenuto; impostare al massimo livello di sicurezza le funzionalità di visualizzazione di mail HTML da parte del proprio client di posta; imparare a riconoscere l'aspetto e il modo con cui si presentano molti virus; non fidarsi mai e non seguire le istruzioni scritte nei messaggi di posta (aprire un allegato, seguire un link per verificare delle informazioni ecc.)
WORM, SCAN, ATTACCHI DI CRACKER - Sia Worm che scan su larga scala riescono a sfruttare o individuare delle vulerabilità solo a determinate condizioni: le porte del computer bersaglio devono poter essere raggiungibili e devono essere gestite da programmi vulnerabili. In questo senso il costante aggiornamento del proprio sistema (il "Windows Update" di Windows o l'analogo su altri sistemi operativi) e la protezione a livello di rete del proprio computer sono indispensabili.
Questa protezione è possibile a diversi livelli: tramite un personal firewall installato sul computer stesso; tramite un firewall esterno (per esempio il proprio default gateway) che oltre a filtrare e limitare la possibilità di accesso al nostro computer, può essere configurato per fare natting, permettendo ai PC interni di accedere ad Internet avendo un IP dedicato alle reti locali (tipo 10.x.x.x, 192.168.x.x e 172.16-32.x.x); tramite un proxy che limita la possibilità di accedere ad Internet solo a determinate applicazioni (tipicamente il browser).
SITI WEB OSTILI - Per quanto sembri improbabile, la stessa attività di navigare su Internet può comportare rischi e problemi di vario genere: le vulnerabilità sui browser (bug che comportano buchi di sicurezza, sfruttabili da pagine web maligne) sono sempre più comuni e vanno corrette tenendo aggiornato il programma che si usa per navigare ed evitando siti dai contenuti sospetti; molti siti presentano dei cosiddetti dialer, che se scaricati ed installati modificano i parametri di accesso ad Internet (via modem), sostituendo la connessione al proprio provider con quella a costosi numeri a pagamento; il software che si decide di scaricare da Internet va equiparato a quello che si può ricevere negli allegati di una mail: potrebbe contenere virus o trojan che si installano sul proprio PC e ne permettono l'utilizzo da una qualsiasi postazione remota. 

Introduzione alla configurazione di Apache
Tutta la configurazione di Apache può essere fatta operando con un editor di testi sul file httpd.conf che di trova in /usr/local/apache/conf/ oppure in /etc/httpd/conf/ o dove è stato specificato in fase di compilazione (provare un locate httpd.conf per trovarlo).
Alternativamente o in parallelo alla modifica manuale del file di configurazione si possono usare diversi strumenti di configurazione grafici, sia dedicati come Comanche o Apache Configuration di RedHat, che parte di più ampi strumenti grafici di configurazione del sistema come Linuxconf o Webmin. 
Ogni riga nel file di configurazione di Apache può contenere o un # per indicare che segue un commento che non viene processato o una direttiva con cui definire le varie configurazioni.
Alcune direttive (Limit, LimitExcpet, Directory, DirectoryMatch, Files, FilesMatch, Location, LocationMatch, VirtualHost) definiscono un container, individuano cioè una directory, un dato tipo di file o, genericamente, un insieme di file per i quali si possono definire specifiche direttive.
Per esempio, per indicare che l'accesso a tutti i file nella directory /home/www/private è possibile solo da certi indirizzi si scrive:
<Directory /home/www/private> # Direttiva container Directory, con la quale si definisce una directory e tutto quello che vi è contenuto
order deny,allow # All'interno della directory definita si limita l'accesso secondo l'ordine indicato
deny from all # Viene negato l'accesso a tutti gli indirizzo
allow from 10.0.0 # Viene permesso l'accesso agli indirizzi della rete 10.0.0.0/24
</Directory> # Il container Directory viene chiuso, le direttive che seguono non si applicano più a questa directory
Le direttive si dividono in diverse categorie, a seconda di dove possono essere usate nel file di configurazione:
- Server-Level - Possono essere usate solo nella parte della configurazione che riguarda l'intero server, quindi non all'interno di container.
- Globali e locali - Possono essere usare sia a livello dell'intero server, definendo i comportamenti di default, che valgono per tutti i documenti, che all'interno di container, per gestire casi specifici e sostituire quanto definito al server-level.
- Solo locali - Possono essere usate solo all'interno di un container, in quanto non avrebbero senso nella configurazione generale. 
Per impostare una configurazione di base servono alcune informazioni, che l'amministratore deve fornire:
- Nome del server (può essere il nome effettivo della macchina o un nome arbitrario), si definisce con la direttiva ServerName
- La porta a cui mettere in listening il web server. Per il protocollo http la porta di default è l'80, ma volendo se ne può definire una alternativa. Si può inoltre definire a quale IP locale appoggiarsi (nel caso si stia usando una macchina con più IP). La direttiva raccomandata è Listen. Nella versione 1.3 di Apache vengono usate anche le direttive BindAddress e Port che però sono deprecate.
- L'utente e il gruppo con cui gira il processo httpd. E' meglio che siano utenti comuni non privilegiati (di solito "nobody" o "apache"). Per definirli si usano le direttive User e Group
- La directory che contiene i file HTML che fanno parte del sito che si vuole rendere pubblico con Apache. Si definisce con la direttiva DocumentRoot. Notare che questa è diversa dalla direttiva ServerRoot che definisce la directory di base di Apache, partendo dalla quale il programma cerca file di configurazione, log ecc.
- Se si usa un Apache con supporto dei moduli è probabile che solo il modulo di core mod_so sia effettivamente incluso nel binario httpd, per cui per poter funzionare Apache richiede il caricamento, tramite file di configurazione, degli altri moduli. Con Apache 2.0 basta la direttiva LoadModule, con Apache 1.3 ci vuole ANCHE la direttiva AddModule.
- Non è obbligatorio ma è prassi comune indicare l'indirizzo e-mail dell'amministratore del sistema, che può venir visualizzato in pagine di errore o altri casi. Lo si imposta con la direttiva ServerAdmin.
Un esempio di un file di configurazione minimale, senza caricamento di moduli, è quindi:
ServerName pippo
Listen 80
User apache
Group apache
DocumentRoot /home/httpd/html 

Introduzione alla configurazione di Samba: smb.conf
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. 

Introduzione alla configurazione di Sendmail
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

kill 
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 signale

L'implementazione Windows di SMB
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.

La documentazione di Samba
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.

La stampa con Linux
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.

La struttura delle directory su Linux (Unix)
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.

La struttura delle directory su Solaris
La struttura dell'albero delle directory su sistemi Sun Solaris è simile a quella di tutti gli Unix ma presenta alcune singolarità che val la pena analizzare. / La directory principale al cui interno è presente tutto il file system.
/bin/ E' un symlink a /usr/bin dove risiedono comandi standard ddestinati ad essere usati da tutti gli utenti
/dev/ Contiene i device files del sistema. Sono tutti symlink a file in /devices/. Fra questi si segnalano le seguenti directory:
/dev/dsk Block disk device, quali hard disk IDE o SWCSI
/dev/pts Pseudo Terminali (usati , per esempio, in sessioni telnet)
/etc/ File di configurazione dell'host. Si segnalano le seguenti subdirectory:
/etc/acct Configurazioni sull'accounting
/etc/cron.d Informazioni sulla configurazione del cron
/etc/default Informazioni di default per il sistema e alcuni programmi
/etc/inet File di configurazione per servizi di network
/etc/init.d Gli script di start e stop dei singoli servizi. Invocati da rc nei vari runlevel.
/etc/opt File di configurazione per pacchetti opzionali
/etc/skel Script e file di configurazione di default per i nuovi utenti
/export Directory di default per file system comunemente condivisi via rete
/home Directory che di default contiene le home degli utenti
/kernel Il kernel e i moduli platform independent
/opt Directory di default dove vengono installati pacchetti opzionali
/sbin Comandi essenziali usati per system recovery o durante il boot
/tmp Directory per file temporanei. Viene mountata sul swpa file system e perde il suo contenuto al reboot
/usr Acronimo di Unix System Resources. Directory molto vasta con varie sottodirectory, fra cui:
/usr/bin Posizione standard per i comandi di sistema
/usr/include Header files per programmi in C
/usr/java Contiene programmi e librerie per l'ambiente Java
/usr/lib Librerie e binari
/usr/openwin Contiene i programmi che fanno parte di OpenWindows
/var Contiene file variabili come log, spool ecc.

Last
Visualizza l'elenco degli ultimi accessi al sistema, elencando nome utente, data, console utilizzata, IP e durata della sessione. Ottiene queste le informazioni da /var/log/wtmp. Una versione leggermente diversa è lastb che visualizza le login di accesso al sistema fallite (ha bisogno del file /var/log/btmp, se esiste).
last [-R] [-righe] [-adx] [ -f file ] [nome_utente] [tty]
-righe, -n righe Specifica quante righe mostrare (es: -n 10)
-f file Specifica un file alternativo a /var/log/wmtp dove trovare le informazioni relative ai login.
nome_utente Visualizza solo le informazioni di login dell'utente specificato.
tty Visualizza solo le informazioni di login del terminale specificato (es: pts/0 )

Lastlog

Formatta e visualizza informazioni relative all'ultimo login di tutti gli utenti del sistema. Ottiene le proprie informazioni dal file /var/log/lastlog.
lastlog [-u login] [-t giorni]
-u login Visualizza l'ultimo login solo dell'utente specificato
-t giorni Visualizza i last login effettuati negli ultimi giorni indicati (es: -t 2)

ldd  
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.

Le fasi del boot di Linux (su un sistema x386 Intel-like)
Il processo di boot di una macchina Linux su sistemi x86 Intel compatibili comporta diverse fasi. Conoscerle e saperle interpretare è fondamentale per il troubleshooting di problemi di avvio. Il boot di un sistema Linux 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.

Le memorie di massa
Sono dette memorie di massa tutti i supporti su cui si possono immagazzinare e salvare dati come floppy, CD, Hard Disc ecc...
Lo spazio di immagazzinamento viene espresso in Byte e multipli:
il KiloByte (KB) pari a 1024 Byte (circa 1000 Byte)
il MegaByte (MB) pari a 1.048.576 Byte (circa un milione di Byte)
il GigaByte (GB) pari a 1.073.741.824 Byte (circa un miliardo di Byte)
e sta cominciando ad affacciarsi all'uso anche:
il TeraByte (TB) pari a 1.099.511.627.776 Byte (circa mille miliardi di Byte).
Ogni multiplo vale 1024 volte il precedente.
Le memorie di massa si dividono in 4 grandi categorie:
Dischi magnetici
Sono supporti la cui superficie viene magnetizzata per memorizzare i dati. Si possono scrivere, cancellare e riscrivere i dati. Basta però un forte campo magnetico per cancellare o danneggiare i dati.
Sono dischi magnetici i FLOPPY, gli HARD DISC, gli ZIP.
Dischi Ottici
Dischi la cui superficie viene "bruciata" per memorizzare i dati. Esistono dischi riscrivibili che permettono la cancellazione per un numero limitato di volte (la superficie si danneggia ad ogni "incisione"). Sono dischi ottici i CD-Rom e i DVD.
Dischi Magneto-ottici
Simili ai dischi magnetici ma richiedono, per la scrittura, un forte riscaldamento della superficie da parte di un laser. Questo evitava la cancellazione dei dati in caso di contatto con una forza magnetica. Messi in commercio alla fine degli anni 80 sono stati soppiantati dai CD-Rom
Nastri Magnetici
Usati per lo più da amministratori di sistemi che richiedono un salvataggio di copie di sicurezza di dati (backup). Essendo la scritura (e lettura) dei dati molto lenta si è soliti lanciare la copia di notte. Il supporto tipico è il DAT (Digital Audio Tape), così chiamato perché il suo utilizzo originale era per la registrazione musicale.

Le meraviglie del /proc filesystem
Il /proc filesystem è uno dei concetti di Unix più potenti e affascinanti.
In questa directory, che i programmi trattano e vedono come una qualsiasi directory, sono contenuti file e directory che danno in tempo reale informazioni sul sistema.
Di fatto questi file non sono scritti su nessun supporto di memorizzazione e sono espressione diretta del kernel.
Le informazioni che possono trovarsi in /proc sono molte, interessanti e a volte incomprensibili. Di fatto alcuni comuni comandi shell non fanno altro che visualizzare in modo "human readable" info presenti in determinati file in /proc.
Vediamo alcune delle sue parti più interessanti (e accessibili per noi comuni mortali):
/proc/#PID/... - Visualizza per ogni processo in memoria (identificato dal suo PID) molte informazioni utili.
/proc/cpuinfo - Informazioni sulla CPU
/proc/ide/.../ - Informazioni sui dispositivi IDE
/proc/interrupts - Gli IRQ del sistema
/proc/iomem - La memoria I/O
/proc/kcore - Il dump completo della memoria
/proc/modules - I moduli del kernel
/proc/partitions - TUTTE le partizioni degli HD
/proc/pci - I dispositivi PCI
/proc/self - Link simbolico al PID del processo stesso con cui si accede a /proc/self :-!
/proc/version - La versione del kernel
/proc/net/arp - La arp table
/proc/net/dev - I byte trasferiti sui device di rete
/proc/sys/net/ipv4/ - Directory fondamentale con molte informazioni sullo stack tcp/ip. Su alcuni file è possibile cambiare valore per modificare il comportamento del kernel. Per esempio: echo 1 > /proc/sys/net/ipv4/ip_forward abilita il forwarding dei pacchetti sulla macchina (necessario se opera come firewall o gateway di una rete).

Le periferiche di I/O
Le periferiche di I/O (input/output) sono tutti gli strumenti che permettono di scambiare le informazioni tra il computer e il mondo esterno.
La maggior parte dei dispositivi di I/O sono esterni e si collegano alle porte I/O. Ne esistono alcuni interni (es. i modem interni).
Tastiera:
collegata generalmente alla porta PS2. Alcune tastiere nuove possono essere collegate alla porta USB
Mouse:
furono introdotti coi primi sistemi operativi con interfaccia grafica. Come per la tastiera si collegano alla porta PS2 o USB. Lo spostamento del mouse controlla un puntatore sullo schermo mentre i tasti inviano comndi. I mouse per Macintosh hanno un solo tasto mentre quelli per PC 2. Il tasto sinistro per inviare i comandi e il destro per far comparire un meno con delle opzioni. Alcuni mouse posseggono una rotellina per facilitare lo scorrimento (scrolling) delle pagine
Trackball:
variante del mouse. Ne sfrutta lo stesso meccanismo della biglia che gira solo che, in questo caso, è posizionata sul alto superiore e viene girata dalle dita. E' utile se non si ha a disposizione lo spazio per muovere il mouse ma è meno preciso e più faticoso.
Tavoletta grafica:
usata per i disegni tecnici o grafici. Usa una speciale stilo su un piano sensibile. Molto più precia del mouse ma meno pratica per un uso normale.
Monitor:
l'interfaccia principale tra utente e computer. La maggior parte dei monitor sono a tubo catodico (come i televisori) ma ne esistono anche di piatti a cristalli liquidi. Alcuni sono anche sensibili al tocco per evitare l'uso di mouse o trackball.
Si collegano alla porta sulla scheda video.
Stampanti:
ve ne sono di tre categorie principali
- ad aghi: ormai vecchie ed obsolete. Come le macchine da scrivere usano un sistema di aghi che battono su un nastro inchiostrato. Molto lente, imprecise e rumorose
- a getto d'inchiostro: più veloci e precise delle stampanti ad aghi. Spruzzano un sottilissimo getto d'inchiostro sul foglio. Sono generalmente a colori. Sono le stampanti economiche più comuni per uso domestico.
- laser: le più veloci, silenziose e precise. Usano una tecnologia simile a quella delle fotocopiatrici. Sono generalmente in bianco e nero ma ne esistono anche a colori (molto costose)
Esistono poi altri tipi di stampanti professionali (per es. i Plotter, usati per il disegno tecnico su grandi formati)
Generalmente la stampante si collega alla porta parallela ma le ultime usano la porta USB.
Casse:
in genere sono di piccole dimensioni. In ogni dovrebbero essere proporzionate alla potenza/qualità della scheda audio.
Modem:
Servono per trasmettere e ricevere dati attraverso la linea telefonica. In pratica per il collegamento a internet. Possono essere sia interni che esterni (quelli interni possono causare problemi di incompatibilità hardware).
La velocità di trasmissione dei dati si misura in Kbit al secondo (Kbps).
Esistono 4 tipi di modem a seconda della linea telefonica:
- standard (analogico): modem tradizionali. Passano dati a una velocità massima di 56Kbps. Funzionano su una linea telefonica normale e, in pratica, ogni volta che si collegano effettuano una telefonata.
- ISDN: raggiungono i 128Kbps e utilizzano una linea telefonica digitale che permette di collegarsi e, contemporaneamente, avere una linea telefonica libera.
- ADSL: la cosiddetta banda larga. Raggiunge i 640Kbps ma necessita di un collegamento particolare. Costituisce un collegamento permanente 24 su 24 alla rete senza interferire con il telefono.
- GSM: usati coi telefoni cellulari. Non esistendo uno standard ogni casa produttrice ne fa di propri.

Le stampanti supportate e eventuali problemi
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.orgn 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.

Limite della partizione di boot nei primi 1024 cilindri dell'HD
Per evitare complicazioni che possono rendere impossibile l'avvio di Linux su sistemi con un BIOS non recente (che non supporta le funzioni "Extended INT13"), è consigliabile installare sia il bootloader (LILO) che il kernel in una partizione che è completamente inclusa nei primi 1023 cilindri dell'hard disk di boot. Si consiglia quindi di tenere la directory dove è presente il kernel (di solito, /boot) in una partizione dedicata, di almeno 10 Mb. Questo requirement può diventare un problema su macchine con doppio sistema operativo, dove, tipicamente, la partizione dedicata a Windows è particolarmente grossa e copre i primi 1024 cilindri dell'hard disk di boot.

Linee guida per l'implementazione di un file server
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. 

Link essenziali sulla security
In rete si trova una miriade di siti che trattano a diversi livelli di sicurezza informatica.
Si elencano qui i siti più significativi e utili.
http://www.infosyssec.net
InfoSysSec Security Portal. Ricco portale sulla sicurezza. Ben organizzato e completo, contiene link, info e news su ogni aspetto della sicurezza: advisories, patch dei vendor, news, statistiche sugli attacchi correnti, virus, ricerche in rete. E' l'home page ideale di un professionista della security.
http://www.securityfocus.com/
Security Focus (ora aquisita da Symantec) e la sua storica mailing list Bugtraq sono un punto di riferimento per chi si occupa di sicurezza informatica. Interessante per gli Advisory, i tool, i Vulnerability Archivi e molte altre risorse.
http://www.sans.org/
Sans Institute è importante per il training e la certificazione sulla sicurezza informatica. Oltre ad un dettagliato programma di corsi fornisce numerose informazioni e risorse: statistiche sule vulnerabilità più sfruttate e gli errori più comuni, template predefiniti di policy aziendali per vari aspetti della sicurezza e altro.
http://isc.incidents.org/
Internet Storm Center (Incidents.org) è un interessante sito dove si possono visualizzare statistiche in tempo reale sugli attacchi correnti più comuni, su quali IP sorgenti e destinazione sono utilizzati ecc.
Comodo anche per verificare se qualcuno sta usando un nostro IP per eseguire attacchi in rete (evidente sintomo di compromissione del proprio sistema).
http://www.packetstormsecurity.org
PacketStorm è uno dei punti di riferimento più noti per l'underground digitale. Contiene news e informazioni oltre ad un completo ed aggiornato elenco di exploit e hacking tools direttamente scaricabili.
http://www.linuxsecurity.com
Linux Security è uno dei più completi siti fra quelli espressamente dedicati alla sicurezza su Linux. Fra le altre informazioni riporta i Security Advisory delle principali distribuzioni.

Linux nella PMI: Vantaggi e Svantaggi
Analizziamo come Linux si presta ad essere utilizzato in piccole e medie aziende la cui attività non è necessariamente collegata all'informatica.
In questi contesti tipicamente esistono vari computer desktop, basati su Windows, che vengono utilizzati dal personale locale, uno o più server interni (per la condivisione di file e stampanti, per una eventuale Intranet con gestionale accessibile via Web ecc.) e, in certi casi, uno o più server pubblici (posta elettronica, sito web ecc.).
Il personale tecnico che gestisce i sistemi può essere una figura interna "riadattata" per l'occasione, in quanto più competente di altri nell'uso dei computer o qualcuno con competenze specifiche e approfondite.
In molti casi ci si avvale del supporto di fornitori esterni per soluzioni informatiche, assistenza e consulenza.
VANTAGGI
- Il costo delle licenze. Inutile sottolinearlo, tutti i principi di libertà di utilizzo e le precisazioni sulla natura della GPL, di fatto impallidiscono di fronte alla prospettiva che Linux è gratis. Si possono installare tutte le versioni che si vogliono tutte le volte che si vuole, almeno per quanto riguarda i prodotti standard per le distribuzioni più comuni.
- Il costo del software, per quanto questo rientri parzialmente sul punto precedente, va sottolineato che di Linux non è gratis soltanto il sistema operativo strettamente parlando, ma anche tutti gli applicativi più diffusi: strumenti di Office Automation, grafica, web design, tool si sviluppo, uso di Internet ecc. 
- Il costo dell'hardware necessario per supportare il sistema operativo è generalmente più limitato, in particolare per server o router/firewall basati su Linux. Su sistemi Desktop, invece, le esigenze sono paragonabili a quelle di Windows.
- L'aggiornamento è gratuito, non si è costretti ad aggiornare ogni pochi anni il parco macchine o a sottoscrivere un contratto di abbonamento per il software.
La compatibilità verso il passato sui formati dei file è maggiormente garantita dal rispetto di standard aperti.
- Il sistema è più stabile e longevo. E' difficile vedere Linux bloccarsi completamente, sia su un server che su un client. Se questo succede spesso il motivo va ricercato in qualche malfunzionamento dell'hardware (memoria, riscaldamento processore ecc.). E' inoltre meno soggetto ad una progressiva "degradazione" dell'integrità generale, con il passare del tempo e l'utilizzo. Un sistema Windows, a suo modo, invecchia con l'uso e tende a diventare gradualmente più pesante ed instabile (voci di registro orfane, programmi poco utili caricati all'avvio ecc.).
- L'amministrazione remota e la gestione del parco macchine è facilitata dalla possibilità di gestire l'installato via console remota, di aggiornarlo automaticamente senza disservizi e downtime, di redistribuire in modo piuttosto semplice su un parco macchine vasto anche software custom.
- La sicurezza è migliorata, soprattutto sul lato desktop, dove virus e worm non costituiscono, quantomeno per il momento, un pericolo reale.
- Si utilizzano standard aperti non proprietari, non si è vincolati ad un singolo fornitore e alle sue politiche di lock in per trattenere clienti e incrementare il fatturato per cliente. Questo vale sia per il prodotto che per i servizi accessori e l'assistenza.
- La migrazione è trasparente sul lato server, richiedendo solo l'intervento su sistemi centralizzati e basandosi su software Open Source che ormai garantisce grande interoperabilità con il mondo Windows (in questo Samba è un elemento chiave).
- E' possibile preservare l'investimento fatto sul software Windows esistente con strumenti quali Rdesktop (Terminal Service Client per Linux) e Wine (una implementazione OpenSource delle API di Windows che di fatto permette di eseguire molti programmi di Windows sotto Linux, a velocità simili (non si tratta di una emulazione software), mantentendo compatibilità molto buona, suppur non assoluta).
- Non si rischiamo multe per l'uso di software copiato (o clonato). Non c'è l'incubo, a volte creato con pubblicità aggressive e in parte fuorvianti, di incorrere in gravi sanzioni per aver installato più o meno consapevolmente una copia di troppo di Windows o di un qualsiasi programma (magari solo per prova o per momentanee necessità contingenti) o perchè un dipendente ha autonomamente installato software non originale.
Precisazioni
Alcune dei vantaggi riportati sono di fatto possibili e forniscono le loro migliori prospettive in installazioni e migrazioni fatte allo stato dell'arte. In particolare la migrazione sul lato client va considerata con molta attenzione e per essere il più possibile indolore:
- Il sistema informatico (gestionali vari) dovrebbe essere basato su web, mainframe o comunque su sistemi centralizzati in modo tale che non ci debbano essere applicativi custom da migrare o emulare ma soltanto un interfaccia utente basata su software dalle funzionalità note (browser, client di posta, terminale ecc.);
- Il parco macchine è meglio che sia simile, in termini di hardware e uguale in termini di distribuzione e versione utilizzata;
- Va assolutamente previsto un sistema centralizzato di aggiornamento del software automatico, amministrazione e gestione remota, delivery di software aggiuntivo (su Linux questo è possibile senza costi per prodotti particolari e con sforzi tecnici relativamente limitati);
- E' possibile, in certi casi auspicabile e necessario, mantenere ambienti ibridi. In particolare il lato server è la prima parte da considerare per una migrazione in quanto può risultare trasparente agli utenti, mentre il lato client va gestito con attenzione e adeguata preparazione.
SVANTAGGI
- Per quanto siano stati grandi i progressi e sia stata comunque raggiunta una certa maturità, sul desktop Linux è ancora indietro rispetto a Windows in quanto a facilità d'uso, supporto di periferiche, integrazione degli strumenti comuni e accessibilità da parte di personale non esperto.
- Una migrazione sul desktop può essere difficile e problematica, sia per la resistenza degli utenti, sia per le obiettive difficoltà a cui può andare incontro personale inesperto, senza opportuna e comunque costosa formazione, sia per le difficoltà potenziali di scambio documenti con partner commerciali (gestire documenti .doc sotto Linux è possibile, ma la compatibilità non è completa). E' un costo iniziale che va preventivato e risulta attenuato da una adeguata preparazione e dalla buona predisposizione degli utenti.
- Il parco software è più limitato, per quanto la varietà di applicazioni Open Source e anche commerciali sia notevole, Linux, su alcuni settori in particolare, manca della completezza di alcuni programmi disponibili su Windows: in particolare nelle aree del Publishing (nulla di paragonabile a Xpress o Illustrator), della grafica (Gimp è un ottimo prodotto, ma non vale un Photoshop), del web design (Dreamweaver è ancora inarrivabile) e della musica professionale. Gli strumenti Office di base (Editor di testi, foglio di calcolo ecc.) alternativi a MS Office (OpenOffice, Star Office, KOffice... ) sono comunque ottimi e sicuramente all'altezza per tutte le funzioni comuni e di fatto maggiormente utilizzate.
Il vero problema emerge quando si deve lavorare su formati proprietari Microsoft, per i quali la compatibilità è buona ma non ancora ottimale e si possono avere problemi nella conversione dei documenti.
- Maggiori costi di supporto e assistenza sul desktop da parte di consulenti e fornitori esterni sono inoltre prevedibili, almeno in una fase iniziale o in assenza di forti competenze interne su Linux. Questo fattore è destinato a scendere con il tempo e l'aumentare degli skill interni (eventualmente tramite corsi di formazione, che comunque costituiscono un costo).
- La minaccia SCO. Francamente non sarebbe il caso di considerare la guerra che SCO sta facendo a Linux come una seria minaccia o svantaggio per chi lo utilizza. Chiunque abbia seguito le vicende ed abbia un po' di conoscenze tecniche sull'argomento si rende conto che SCO sta facendo un inaccettabile "terrorismo propagandistico" che di fatto può danneggiare l'adozione di Linux su larga scala.
Non vogliamo affrontare qui i dettagli della questione, possiamo soltanto dire che se SCO rivelasse quali sono le parti di codice di cui rivendica la proprietà intellettuale e che sarebbero state impropriamente inserite nel kernel Linux, entro poche settimane queste sarebbero completamente rimosse e sostituite.
Questo è certo, migliaia di sviluppatori aspettano solo di sapere cosa nel kernel ci sarebbe di copiato, valutare se su questo codice SCO effettivamente può rivendicare dei diritti e poi mettersi a programmare forsennatamente per correggere l'anomalia (ancora tutta da dimostrare).
Ma SCO di fatto non vuole questo, e quindi accusa senza dimostrare, rivendica senza provare e purtroppo qualcuno ci crede e qualcuno, che in Linux vede il peggior nemico, sponsorizza.
Il problema non è di sostanza ma di apparenza e in alcune società si aspetta a valutare Linux come alternativa a Windows  perchè non si sa ancora come potrà essere il futuro di Linux.

Linux Network Address Translation
NAT ovvero Network Address Tranlation permette di manipolare un pacchetto IP modificando l'indirizzo IP sorgente o di destinazione.
Ovviamente il dispositivo che esegue il NAT quando riceve il pacchetto di ritorno esegue l'operazione inversa, sulla base di una tabella di natting che si tiene in memoria.
Il Nat viene utilizzato in varie occasioni, dove si ha la necessità ad esempio di redirezionare il traffico su un unico IP, oppure forwardare il traffico con una certa porta di destinazione ad un'altro host oppure su un'altra porta.
Su Linux si usa definire il natting con due modalità specifiche:
SNAT: Source NAT, cioè l'alterazione dell'IP sorgente del primo pacchetto che apre la connessione. Avviene sempre dopo che il pacchetto ha subito il routing (post-routing).
Un esempio di SNAT è il masquerading, con cui tutti gli IP sorgenti di una rete locale vengono convertiti in un unico IP sorgente (del dispositivo che fa masquerading) con cui i pacchetti vengono mandati in rete.
DNAT: Destination NAT, cioè l'alterazione dell'IP di destinazione del primo pacchetto.
A differenza del SNAT il DNAT  avviene sempre prima che il pacchetto subisca il routing (pre-routing).
Una forma di DNAT è il port-forwarding e trasparent proxy.
Per quanto riguarda iptables, le catene (chain) da considerare per i vari tipi di NAT sono:
PREROUTING (DNAT, per i pacchetti in arrivo).
Esiste inoltre un "caso speciale"  chiamato redirection. E' un DNAT effettuato esclusivamente sull'interfaccia di ingresso del pacchetto. Ovvero si può eseguire un redirect di tuti i pacchetti provenienti su eth0 con destination port 80 e redirezionarli sempre su eth0 ma sulla porta 12345.
OUTPUT (DNAT, per i pacchetti generati della macchina locale)
POSTROUTING (SNAT, per i pacchetti in uscita)
Esempi di NAT:
Port forwarding
iptables -A PREROUTING -t nat -p tcp -d 10.0.0.150 --dport 8080  -j DNAT --to 172.16.1.128:80
Ovvero tutti i pacchetti che hanno destinazione 10.0.0.150 sulla porta 8080vengono riderizionati al'ip 172.16.1.128 alla porta 80.
Source Natting
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 10.0.0.1
Tutti i pacchetti che escono dall'interfaccia eth0, subiscono una variazione dell'ip sorgente in 10.0.0.1
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 10.0.0.1-10.0.0.254
Come sopra, con la differenza che l'ip sorgente può essere alterato sia in 10.0.0.1 o 10.0.0.154
Masquerading
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Tutto ciò che passa in uscita dal proprio modem viene mascherato con l'ip pubblico assegnato dal proprio ISP.
Destination Natting
iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth1 -j DNAT --to 10.0.0.1:8080
Tutti i pacchetti TCP, arrivati dall'interfaccia eth1 con destinazione porta 80 vengono "dirottati" all'ip 10.0.0.1 alla porta 8080.

Linux Software: i link essenziali 
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

Livelli di interoperabilità fra Samba e reti Windows
Le possibilità di interoperabilità fra client e server Windows, e Samba in una rete locale per la condivisione dei file sono varie.
Nell'utilizzo di SMB/CIFS le possibilità sono varie:
- Windows File server con client misti Windows, Linux/Unix, MacOS
- Linux/Unix Samba File server con client misti.
E' possibile configurare Samba per:
- Operare come Primary Domain Controller di una rete mista, gestendo anche i profili di macchine Windows e il login sul dominio. Seppur non di semplicissima configurazione, una simile opzione permette ad una macchina Linux con Samba di eseguire le stesse di un PDC di dominio NT. Il supporto delle Active Directory, invece, non è completo ed è presente solo da Samba 3.0. In un simile scenario, a parte la configurazione del server Linux è necessario operare sulle macchine Windows e, in alcuni casi, intervenire sul registro. La procedura, seppur macchinosa, non è complessa e va fatta una volta soltanto.
- 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 normale File Server per client misti. I metodi di autenticazione possono essere vari e a seconda del metodo possono essere necessarie diversi interventi sul server e sui client: ci si può appoggiare ad un PDC esterno (Windows o Linux), ad un database di login locale, può essere rimossa ogni forma di autenticazione o, come sopra specificato, ci si può appoggiare ad un PDC locale.
- 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.