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

Lpstat (monitorare i processi di stampa) Ls (visualizza il contenuto di una directory) Metodi alternativi per configurare e usare Samba
Mkdir (creare una directory) mkfs (creare un file system - formatta - sulla partizione specificata) more (visualizza i file una pagina alla volta)
mount  mount -o loop/path/file.iso/mnt/mountpoint mv (sposta o rinomina un file o una directory)
MySQL: Backup e Restore MySQL dump MySQL_close()
MySQL_connect() Nel mare delle distribuzioni Linux Netstat (pemette di verificare le connessioni, route, statistiche di rete)
Netstat-rn (visualizzazione delle route configurate sul sistema) Netstat-s (Visualizzazione delle statistiche riguardante la network) Network troubleshooting - Introduzione
Nslookup (comando per lanciare una query dns per la risoluzione di ip) Ottimizzazione della configurazione di Apache Partizionamenti di un sistema Linux
Passwd (settare, modificare la password di un utente) php.ini Processi "daemon"
RAID performance su Linux RAID riferimenti teorici Ripristinare Windows dopo un errore con LILO o altri Linux Loader
Risorse online su Apache in Italiano rm (cancella file o directory) rmdir (rimuore una directory)
rpm -qa (visualizza l'elenco completo degli rpm installati) Salvare i dati (con VI) Samba come Primary Domanin Controller (PDC) - Autenticazione di utenti MS-Windows con Samba
Singolo Web Server per carichi bassi    

Lpstat
Questo comando della suite Cups permette di monitorare i processi di stampa e visualizzare informazioni sulle stampanti e le code presenti nel server.
Nonostante la presenza della comoda interfaccia web per controllare i processi e lo stato delle stampanti cups include lpstat una comoda utility da riga di comando.
La sua sintassi:
lpstat -opzioni
Se usato senza alcuna opzione lpstat stampa a monitor tutti i jobs accodati per l'utente che lo ha lanciato. Le sue opzioni sono uguali per alcuni casi a quelle usate in lpadmin e lpoptions.
-E: Forza l'uso di connessioni cifrate con il server.
-h nome_server: Specifica il server con cui si vuole interagire.
-a stampante/i: Mostra lo stato di una o più stampanti restituendo informazioni sull'accettazione dei processi. Se usato senza specificare la stampante mostra tutte le stampanti e le istanze/code configurate e che accettano i jobs.
-c classe/i: Mostra le classi e le stampanti comprese nella loro dichiarazione. Se usato senza argomenti mostra tutte le classi presenti nel sistema e se non fosse presente neanche una classe non restituisce nessun output.
-d: Mostra la destinazione di default.
-l: Mostra una lista delle stampanti, delle classi e dei jobs attivi.
-o destinazione/i: Mostra le code di stampa per la o le destinazioni specificate. Se si omette la destinazione mostra tutti i jobs in coda.
-p stampante/i: Mostra le stampanti e se accettano o meno i processi di stampa. Se usato senza specificare una o più stampanti mostra queste informazioni per tutte le stampanti.
-r: Permette di verificare se il server CUPS sia attivo o no.
-R: Mostra l'ordine dei jobs nella coda di stampa.
-s: Mostra un sommario dello stato delle stampanti includendo la destinazione di default, le classi e le stampanti membro per ciascuna classe e tutte le stampanti associandole alla loro device-URI. E' equivalente ad usare insieme le opzioni -d, -c e -v.
-t: Mostra un elenco completo di informazioni di stato per tutte le stampanti e le classi definite, è equivalente ad usare insieme le opzioni -r, -d, -c, -a, -p, -v e -o.
-u utente/i: Permette di verificare i processi di stampa attivi per l'utente specificato. Se usato omettendo l'utente si ottiene una lista dei jobs associati all'utente corrente.
-W numero_job: Permette la verifica dello stato dei jobs in esecuzione e di quelli eseguiti.

ls
Visualizza il contenuto di una directory. Corrisponde al "dir" di Windows.
Comando comune in tutti gli Unix, a volte con opzioni diverse.
Se non viene specificata alcuna directory, indica i file nella directory corrente.
ls [opzioni] [file]
-a Visualizza tutti i file, anche quelli nascosti (che iniziano con un punto: .)
-l (--format=long) Visualizza informazioni aggiuntive quali data di modifica, permessi, owner e group
-i (--inode) Visualizza anche l'inode dei file
-f Non esegue alcun ordinamento di file e li visualizza nell'ordine con cui sono stati memorizzati (di default ls fa un elenco in ordine alfabetico)
-t (--sort=time) Ordina l'elenco dei file secondo la data di modifica
-u (--time=access) Ordina l'elenco dei file secondo la data di ultimo accesso
-S (--tsort=size) Ordina l'elenco dei file secondo la dimensione
-r (--reverse) Ordina in senso inverso l'output dei file (da usare con -t, -u, -S ecc.)
-X (----sort=extension) Ordina i file per estensione
-R (--recursive) Elenca ricorsivamente tutte le sottodirectory e i file ivi contenuti, rispetto alla directory specificata (o corrente)
-I pattern (--ignore pattern) Non visualizza i file che matchano il pattern specificato
Esempi
ls -lS /var/spool/mail Esegue un listing esteso dei file contenuti in /var/spool/mail ordinandoli secondo dimensioni dal più grande al più piccolo.
ls -ltr /var/log Elenca i file contenuti nella directory /var/log secondo data di modifica inversa: dal più vecchio al più recente.
ls -a ~ Elenca tutti i file (anche quelli nascosti, preceduti da un .) presenti nella propria home directory.

Metodi alternativi per configurare e usare Samba
Oltre all'ufficiale strumento di gestione swat compreso nella suite Samba in rete si possono trovare altri validi tool per configurare e lavorare con Samba.
Basta una semplice ricerca su freshmeat per accorgersi del grande numero di applicazioni disponibile.
Vediamo alcune valide alternative tra i tanti progetti presenti.
Utility di configurazione
Se si utilizza Webmin per amministrare il server ci si può avvalere di un suo modulo, solitamente installato di default ma scaricabile e installabile anche dopo in caso ad esempio si fosse in precedenza scelto di eliminarlo perchè inutilizzato.
Questo modulo permette di creare o editare il file smb.conf, aggiungere shares e opzioni. Esiste anche un'altro modulo che non fa parte però di quelli standard di Webmin e che permette di editare i netlogon files, si chiama smblogin e si può reperire su freshmeat.
Smbconftool di cui ne parla bene anche lo stesso sito di Samba, è scritto in java e ha la peculiarità di non cancellare i commenti come invece fa swat. Si possono avere maggiori informazioni alla pagina http://www.eatonweb.com/samba/
I due principali Desktop Enviorment, KDE e Gnome, hanno entrambi la possibilità di usare delle applicazioni per configurare il server Samba.
Per Gnome esiste un progetto che però al momento il sito non è raggiungibile e si chiama Gnosamba.
Per KDE invece esiste un plugin per il Control Center che permette di abilitare un'interfaccia in cui poter settare praticamente quasi tutte le opzioni di configurazione e di creare, distruggere, modificare gli shares. Il suo nome è KSambaPlugin ed è disponibile su freshmeat.
Ci sono altri strumenti per la configurazione di Samba, scritti in linguaggi differenti e a volte nati per configurare server Unix e poi allargati alla gestione del smb.conf.
Utility per lavorare
Esistono svariati progetti per utilizzare gli strumenti della suite Samba quali smbclient o smbmount. Spesso si tratta di semplici frontend che utilizzano i comandi di Samba altre volte sono applicazioni più complesse.
xSMBrowser è una comoda GUI che permette di usare smbclient da un'interfaccia grafica. In se può essere paragonato a client ftp come gftp o kbear e infatti la somiglianza è grande, ci presenta una finestra con il filesystem locale e una con il filesystem remoto. Permette tutte le operazioni che si possono fare con smbclient.
Un'altro comodo frontend è Jags o Jagsmm acronimo per "Just another gnome samba-client" usa le librerie gtk e fornisce un'interfaccia al comando smbmount permettendoci di esplorare la rete e di montare le risorse disponibili.
A jags si appoggia una comoda utility trovabile su freshmeat, SambaSentinell che è una GUI in gtk per il comando smbstatus, permette di controllare lo stato dei samba server e delle relative connessioni ai loro share, mostrando l'utente connesso, il suo ip, i file che ha usato e addirittura di "uccidere" un processo in atto. In realtà questo strumento non richiede espressamente la presenza di jags ma se si vuole abilitarne la funzione di montaggio delle risorse condivise si deve averlo installato e funzionante.
LinNeighborhood è un'altra semplice GUI a smbmount e permette di effettuare il browse delle risorse condivise e di montare quelle di interesse.
I due principali desktop enviorment, KDE e gnome, sono dotati entrambi di applicazioni per esplorare networks Samba e per montare gli share.
Per gnome esiste Gnomba progetto a quanto pare rimasto offline per un certo periodo e ora ripreso. Il programma si può scaricare alla pagina http://gnomba.sourceforge.net/ . Permette di scansire la rete alla ricerca di risorse condivise, offre un'interfaccia per la navigazione delle stesse e infine permette di montare localmente gli share.
Per KDE si trovano vari progetti tra cui komba2 che avvalendosi di praticamente quasi tutti gli strumenti di samba (smbmount, smbstatus, nmblookup, testparm) permette di navigare tra le risorse condivise e accedere agli share montandoli in locale.

mkdir
Crea una o più directory. E' necessario avere permessi di scrittura nella directory in cui si vogliono creare nuove sotto directory. Comune in tutti gli Unix.
mkdir [opzioni] directory
-m ### (--mode ###) Specifica i permessi della directiry creata (di default sono 777).
-p (--parent) Crea le directory padre intermedie, nel caso non esistano. (es: mkdir -p /usr/local/test/my/dire crea la directory dire e anche le directory my, test, local, usr nel caso non esistano)
Esempi
mkdir -p temp/test/prova/nuova Crea tutte le directory e sottodirectory indicate (anche se non esistono) rispetto alla posizione corrente. Senza l'opzione -p la directory "nuova" si poteva creare se esistevano già tutte le precedenti.
mkdir /tmp/nuova Crea la directory "nuova" all'interno di /tmp.

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

more
Visualizza i file specificati una pagina alla volta.
E' comune in tutti gli Unix, ma in molti OS basati su utility GNU viene spesso sostituito o affiancato dall'analogo e più flessibile "less".
Con "SPAZIO" si scrolla l'output di una pagina, con "q" si torna alla shell.
more [opzioni] [file]
-r Visualizza caratteri speciali e di controllo
+ #numero Inizia a visualizzare dalla riga numero specificato
-num #numero Imposta le dimensioni dello schermo a #numero righe
-p Ripulisce ogni volta le pagine e non le scrolla. E' utile, con terminali che presentano problemi di visualizzazione, per rendere più leggibile l'output.
Una volta eseguito more si entra in modalità visualizzazione, in cui è possibile dare diversi comandi:
SPAZIO Visualizza la schermata di testo successiva
INVIO Visualizza la riga di testo successiva
q Esce da more e torna alla shell
/pattern Cerca il pattern indicato all'interno del testo
n Cerca l'occorrenza successiva dell'ultimo pattern cercato
!comando invoca la shell ed esegue il comando scritto
:n Salta al file successivo (quando si visualizzano più file
:p Salta al file precedente

mount
Permette di inserire un file system presente in un dato device nella struttura di directory principale del sistema, a partire dalla directory indicata.
Questa operazione viene definita "montare" e di fatto rende visibile al sistema il contenuto di dispositivi quali CD-ROM, floppy ma anche hard disk o file system di rete.
Il comando mount senza opzioni visualizza l'elenco dei file system attualmente montati nel sistema.
Nel file di configurazione /etc/fstab sono elencati i parametri di mounting dei vari dispositivi del sistema predefiniti: per montare le voci presenti in questo file basta specificare come parametro di mount la directory o il device.
Nel file /etc/mtab vengono visualizzati i file system attualmente montati sul sistema.
mount [opzioni] [device] [directory]
-a Esegue il mount di tutti i file system elencati in /etc/fstab
-o opzione Specifica le opzioni con cui montare il file system. Sono varie, incidono su diversi aspetti e possono essere specifiche per determinati tipi di file system: async, auto, defaults, dev, exec, noauto, nodev, noexec, nosuid, nouser, remount, ro, rw, suid, sync, user, check, conv, debug, errors.
-r Esegue il mount del file system in sola lettura
-w Esegue il mount del file system in lettura/scrittura (opzione di default)
-t tipo_fs Specifica il tipo di file system da montare. Valori possibili: minix, ext, ext2, ext3, xiafs, hpfs, msdos, umsdos, vfat, proc, nfs, iso9660, smbfs, ncpfs, affs, ufs, romfs, sysv, xenix, coherent, reiserfs, jfs...
Esempi (bisogna aver creato precedentemente una directory: mkdir /mnt/pendrive o floppy o cdrom ecc)
mount -t vfat /dev/fd0 /mnt/floppy     Monta un floppy formattato sotto Windows sulla directory /mnt/floppy
mount -t iso9660 /dev/hdc /mnt/cdrom     Mount un CD presente nel lettore IDE Secondary master sulla directory /mnt/cdrom
mount -t nfs 192.168.0.10:/home/rpm /mnt/remote     Monta sulla directory /mnt/remote la condivisione NFS /home/rpm del server 192.168.0.10 (il serviazio portmap deve essere attivo sul client)
mount -t vfat /dev/sda1 /mnt/pendrive     Monta una pen drive usb

mount -o loop /path/file.iso /mnt/mountpoint/
Con questo semplice comando è possibile visualizzare il contenuto di un file .iso (l'immagine di un CDROM da masterizzare) montandolo come un loop device su una directory del proprio file system.
Il kernel deve avere il supporto per i loop device (CONFIG_BLK_DEV_LOOP=y) e, ovviamente, per il filesystem iso9660 usato su CDROM di dati (CONFIG_ISO9660_FS=y).
Anche se generalmente non necessario potrebbe servire specificare il filesytem type utilizzato (-t iso9960) e, volendo, abilitare il verbose mode (-vv). Nell'esempio che segue si è montato il file iso sulla directory /mnt/floppy, che ovviamente può essere diversa ed avere un nome più appropriato:
[root@giraffa al]# mount -t iso9660 -o loop -vv /home/al/DOWNLOADS/damnsmall-0.4.4.iso /mnt/floppy/
mount: going to use the loop device /dev/loop0
set_loop(/dev/loop0,/home/al/DOWNLOADS/damnsmall-0.4.4.iso,0): success
mount: setup loop device successfully
/home/al/DOWNLOADS/damnsmall-0.4.4.iso on /mnt/floppy type iso9660 (rw,loop=/dev/loop0)
[root@giraffa al]# mount
[...]
/home/al/DOWNLOADS/damnsmall-0.4.4.iso on /mnt/floppy type iso9660 (rw,loop=/dev/loop0)
Se si vuole creare un file .iso direttamente dal contenuto di un CDROM, oltre ad usare programmi vari per masterizzare, basta il semplice comando:
dd if=/dev/cdrom of=/path/to/file.iso bs=32k (l'immagine iso sarà scritta nel path specificato dopo of=).
Alternativamente, in modo ancor più diretto e semplice:
cat /dev/cdrom > /path/to/file.iso
Se si vuole creare un file .iso contenente i file presenti in una data directory, si può usare il comando mkisofs:
mkisofs -RJ -o file.iso /directory/ (tutto il contenuto presente in /directory/ verrà inserito nel file.iso (con path relativo))

mv
Sposta o rinomina un file o una directory.
E' un comando comune a tutti gli Unix (con opzioni che possono variare). Notare che su Unix non esiste il corrispondente del comando "rename" di Windows. Il cambiamento di nome di un file viene fatto semplicemente "spostandolo" in un file con nome diverso.
mv [opzioni] sorgente destinazione
mv [opzioni] sorgenti... directory_destinazione
-f (--force) Forza lo spostamento, sovrascrivendo i file di destinazione preesistenti, se esistono.
-i (--interactive) Chiede conferma prima di sovrascrivere i file di destinazione (il mv su Linux è solitamente un alias di mv -i, per cui di default viene chiesta la conferma alla sovrascrittura)
-u (--update) Nel caso il file di destinazione esiste già, lo sovrascrive solo se ha data di modifica più vecchia.
-v (--verbose) Stampa il nome di ogni file prima di spostarlo.
-b (--backup) Crea copie di backup dei file che stanno per essere sovrascritti o rimossi.
-S SUFFISSO Aggiunge il SUFFISSO specificato a tutti file di backup.
Esempi
Il comportamento di mv varia a seconda della natura di sorgente e destinazione, seguono alcuni esempi generici, se risultano poco chiari fare pratica sul proprio sistema, è sempre il metodo migliore:
mv /directory/file /directory/file_nuovo (Rinomina file in file_nuovo)
mv /directory/file /directory/file_esistente (Sovrascrive file_esistente con file)
mv /directory/file /directory/subdirectory_esistente (Sposta file all'interno di subdirectory_esistente)
mv /directory/subdirectory /directory/subdirectory_nuova (Rinomina subdirectory)
mv /directory/subdirectory /subdirectory_nuova (Sposta, e rinomina, subdirectory)
mv /directory/subdirectory /directory/subdirectory_esistente (Sposta subdirectory all'interno di subdirectory_esistente)

MySQL: Backup e Restore
Come effettuare il backup ed il restore dei database gestiti con MySQL.
BACKUP
I principali tool messi a disposizione all'amministratore di MySQL per effettuare il backup dei propri dati sono due: mysqlhotcopy e mysqldump.
mysqlhotcopy
mysqlhotcopy è uno script, scritto in linguaggio Perl, che, basandosi sul comando cp, effettua la copia "grezza" di un database, semplicemente copiando il contenuto della relativa directory dati, in un altro luogo sullo stesso sistema. La sua caratteristica principale è la velocità.
Esempio:
[root@vagante /]# mysqlhotcopy arnaldoz /backup-db/
In questo esempio il contenuto del database arnaldoz presente in /var/lib/mysql/arnaldoz viene copiato nella directory /backup-db
mysqldump
Mysqldump è un'utility che presenta alcuni vantaggi rispetto a mysqlhotcopy, ed quindi ? maggiormente utilizzata. Essa genera un file ASCII contentente istruzioni SQL (CREATE TABLE, CREATE DATABASE ecc.) che permettono di ricreare completamente un database. Questo metodo permette di utilizzare lo script su qualsiasi piattaforma, ottenendo quindi una soluzione portabile. La seconda importante caratteristica ? la flessibilità, modificando lo script prodotto, è possibile il ripristino anche di una sola tabella. Infine mysqldump permette di effetture il dump di un database da remoto.
Esempi:
[root@vagante backup-db]# mysqldump arnaldoz > arnaldoz_dump_db.sql -u root -p
Enter password: db3mendo
In questo caso viene eseguito il dump del database arnaldoz generando le relative instruzioni nel file arnaldo_dump_db.sql. E' necessario comunicare a mysqldump che si utilizzerà l'utente amministratore -u root con la relativa password -p
[root@vagante backup-db]# mysqldump --database arnaldoz mysql > arnaldoz_mysql_new_db.sql -u root -p
Enter password: db3mendo
Utilizzando l'opzione --database si esegue il dump dei detabase indicati, in questo caso arnaldoz e mysql
[root@vagante backup-db]# mysqldump --all-database > arnaldoz_new_db.sql -u root -p
Enter password: db3mendo
Con l'opzione --all-database viene generato lo script per la creazione di tutti i database presenti sul server
E' importante notare che utilizzando l'opzione --database o --all-database nello script sql generato vengono incluse anche le istruzioni per creare il database (CREATE DATABASE), mentre negli altri casi, si presuppone che il database sia gia' esistente, di conseguenza viene generato uno script SQL che si occupa solamente di ricreare le tabelle.
Per effettuare la copia di un database nel modo più veloce ed affidabile possibile, è consigliato di utilizzare l'opzione di mysqldump --opt, la quale abilita automaticamente diverse altre opzioni quali --quick, --add-drop-table,--add-locks,--extended-insert, e--locktables:
[root@vagante backup-db]# mysqldump --opt arnaldoz > arnaldoz_dump_db.sql -u root -p
Enter password: db3mendo
--quick: effettua il dump direttamente sullo standard output;
--add-drop-table: inserisce le istruzioni di eliminare le tabelle esistenti prima di ricrearle;
--add-locks: blocca momentaneamente gli eventuali inserimenti;
--extended-insert: utilizza un metodo per velocizzare l'inserimento dei dati;
--lock-tables: blocca momentanteamente le tabelle in lettura;
RESTORE
Qualora il backup del database sia stato fatto con mysqlhotcopy, il restore avviene, dopo aver fermato il server, copiando il contenuto del file di backup nella directory dati di MySQL:
[root@vagante /]# cp -R /backup-db/arnaldoz /var/lib/mysql
Per il restore di un database di cui si è fatto il backup con mysqldump è possibile utilizzare l'utility di console mysql.
Alcuni esempi:
[root@vagante backup-db]# mysql < arnaldoz_dump_db.sql -u root -p
Enter password: db3mendo
Come utente root, si passa a mysql in input lo script che permette di ripristinare il contenuto del database
[root@vagante backup-db]# mysql --one-database arnaldoz < all_db_joker.sql -u root -p
In questo caso sebbene lo script serva per ripristinare un elenco di database, tramite l'opzione --one-database viene specificato solo un database

mysql_close()
Chiude una connessione con un DB MySQL
$success = mysql_close ([$db])
$success La funzione restituisce TRUE in caso di successo e FALSE in caso di fallimento.
$db Identificatore della connessione da chiudere (restituito da mysql_connect(). Se non specificato, chiude l'ultima connessione aperta.

mysql_connect()
Apre una connessione verso un DB MySQL
$db = mysql_connect([$db_host[, $db_username[, $db_password[,$newlink[,$clientflags]]]]]);
$db Restituisce un identificatore della connessione col DB (da utilizzare nelle chiamate alle successive funzioni di interrogazione) e FALSE in caso di fallimento
$db_host Nome host del database server e relativa porta. Default: localhost:3306
$db_username Nome dell'utente per il login al database. Di default corrisponde all'utente che possiede il processo corrente.
$db_password Password per il login al database. Di default è una stringa vuota
$newlink Di default, se viene effettuata una seconda chiamata a mysql_connect con gli stessi parametri, non viene aperta una nuova connessione ma la funzione restituisce l'ID della connessione esistente. Se questo parametro è impostato a TRUE viene aperta una nuova connessione ad ogni chiamata.
$clientflags Combinazione dei flag MYSQL_CLIENT_COMPRESS (usa la compressione dei dati), MYSQL_CLIENT_IGNORE_SPACE (permette gli spazi dopo i nomi delle funzioni) o MYSQL_CLIENT_INTERACTIVE (lascia trascorrere interactive_timeout secondi - anziché wait_timeout - di inattività prima di chiudere la connessione).
Compatibilità: il paramentro $newlink è stato indrodotto dal PHP 4.2.0; mentre $clientflags dal PHP 4.3.0
La connessione verrà chiusa al termine dell'esecuzione dello script, a meno che non venga chiusa esplicitamente da una chiamata a mysql_close().

Nel mare delle distribuzioni Linux
Una Distribuzione (distro) è un confezionamento (packaging) di Linux, con procedure che rendono comoda e semplice l'installazione.
Si consideri che il "Linux di Linus Torvalds" non è un OS come comunemente definito, ma il semplice kernel.
A questo ogni distribuzione aggiunge tutto il software necessario per avere un sistema operativo completo di software applicativo e di servizio.
Anche per questo molti preferiscono chiamarlo GNU/Linux poiché tutte le utility di base, dal gcc (compilatore) alle utility di gestione file fanno parte del progetto GNU, ideato da Richard Stallman.
Notare che essendo queste utility (bash, vi, emacs, awk, gcc ecc.) scritte in tempi successivi rispetto agli equivalenti Unix, sono generalmente più evolute e migliori per l'inevitabile progresso della scienza informatica.
Le distribuzioni differiscono per:
- Numero e versioni dei programmi installabili;
- Versione del kernel utilizzata e modalità di pre-installazione (il kernel solitamente non viene compilato durante una normale installazione);
- Procedura di installazione (interfaccia utente e possibilità di definire opzioni e scegliere quale software installare);
- Organizzazione di file di configurazione, programmi, log nel file system;
- Configurazioni predefinite del software installato.
Le distribuzioni più note sono:
Red Hat  http://www.redhat.com/
Red Hat è la più popolare distribuzione Linux e si adatta bene ad usi diversi (desktop, server, laptop) pur avendo una storia di sicurezza non certo esemplare. Pioniera nell'includere un meccanismo di update User Friendly e l'aggiornamento automatico tramite il RedHat Network. Ha introdotto il sistema di gestione di pacchetti software con estensione .RPM che facilita installazione e aggiornamento del software.
Debian  http://www.debian.org/
Distribuzione completamente sviluppata da una comunità che consta di centinaia di persone in tutto il mondo è quella che meglio incarna lo spirito del Free Software. Fornisce un proprio sistema di pacchettizzazione simile all'RPM (pacchetti .DEB). Viene considerata per puristi ed esperti e risulta generalmente meno user-friendly e più stabile delle altre.
S.U.S.E.  http://www.suse.co.uk/index_uk.html
Distribuzione più diffusa in Europa, solida e ben accessoriata, RPM compatibile e user-friendly. Utilizza un software di gestione e configurazione (YAST) completo, semplice, ma sgradito a chi ama modificare a mano i file di configurazione.
Mandrake  http://www.mandrake.com/
In crescente diffusione, usa pacchetti simili a RPM (MDK) che sono aggiornati molto rapidamente. E' molto user friendly e probabilmente è la più adeguata per un sistema desktop.
Slackware  http://www.slackware.com/
Slackware è una delle prime distribuzioni. Si differenzia dalle altre per non usare package tipo RPM o DEB e viene generalmente considerata più ostica da installare. Per puristi.
Gentoo  http://www.gentoo.org/
E' una distro relativamente nuova ma a suo modo rivoluzionaria. E' fatta per essere compilata direttamente sul PC di installazione in ogni sua parte. Si basa su un sistema simile ai ports BSD basati su semplici file di testo con tutti i riferimenti su un programma/pacchetto in termini di nome, descrizione, caratteristiche, dipendenze e url per scaricare i sorgenti e procedure di compilazione.
E' decisamente per esperti, ma permette tuning e personalizzazioni notevoli.
Lindows  http://www.lindows.com/
E' una delle distribuzioni più "commerciali", espressamente dedicata ad utenti non esperti che sono abituati a Windows. Incorpora e integra Wine e altri strumenti per rendere il sistema il più possibile simile a Windows, prevede un sistema di abbonamento online (Click'n'Run) tramite il quale si possono facilmente installare nuovi programmi. Non include nemmeno il compilatore gcc.

netstat
Netstat è un comando polifunzionale che ti permettere di verificare le connessioni, le route e statistiche del proprio sistema. Un comando che ogni sys adm deve conoscere alla perfezione, utile per diagnostica e controllo del sistema.
netstat [information-type] [options]
netstat {--help|-h} Richiama l'help
Per selezionare il tipo di informazioni da visualizzare, bisogna mettere come primo argomento una delle seguenti opzioni. Se non si specifica nulla il comando visualizzera' la lista delle socket aperte, opzione di default.
Information Type
--route , -r Visualizza le route impostate sul sistema
--groups , -g Visualizza informazioni riguardanti i multicast group membership (ipv4 e ipv6)
--interface=iface , -i Visualizza le statistiche di tutte le interfacce o della singola interfaccia specificata
--masquerade , -M Verifica le connessioni che hanno subito masquerading
--statistics , -s Visuallizza un sommario di statistiche
Options
--verbose , -v Abilita il verbose mode.
--numeric , -n Non risolve gli Ip e il numero delle porte, risparmiando i tempi per query DNS.
--protocol=family , -A Opzione per specificare l'address family quando si vuole visualizzare le connessioni.
-c, --continuous Esegue il comando ogni secondo (o ogni intervallo di secondi specificato).
-p, --program Mostra il PID, ed il nome del programma proprietario della socket. Utile per capire, per esempio, quale programma utilizza una specifica porta TCP.
-l, --listening Mostra solo le conessioni in LISTENING
-a, --all Mostra tutte le connessioni (LISTENING e non), se abbinato al flag -i visualizza le informazioni per tutte le interfacce

netstat -rn
Visualizzazione delle route configurate sul sistema.
L'output e' identico al comando route -n , l'unica differenza dei due comandi e' il PATH; ovvero il comando route non e' all'interno dei path settati di default da RH linux per i normali utenti netstat invece si.
Output del comando netstat.
[neo@dido neo]$ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.208.0 0.0.0.0 255.255.255.0 U 40 0 0 eth0
Route per i pacchetti che hanno come destinazione la propria network
127.0.0.0 0.0.0.0 255.0.0.0 U 40 0 0 lo
Route per i pacchetti che hanno come destinazione lo
0.0.0.0 192.168.208.254 0.0.0.0 UG 40 0 0 eth0
Route che identifica il default gw
Output del comando route. Da notare che si e' dovuto specificare il path assoluto del comando!
[neo@dido neo]$ route -n
bash: route: command not found
[neo@dido neo]$ /sbin/route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.208.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Route per i pacchetti che hanno come destinazione la propria network
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
Route per i pacchetti che hanno come destinazione lo
0.0.0.0 192.168.208.254 0.0.0.0 UG 0 0 0 eth0
Route che identifica il default gw

netstat -s
Visualizzazione delle statistiche per quanto riguarda la network.
Utili per capire se il vostro server ha problemi, anomalie in ambito network o semplicemente per dedurre quanto traffico ha prodotto la vostra macchina.
[neo@dido neo]$ netstat -s
Statistiche relative ai pacchetti IP
Ip:
14743 total packets received
0 forwarded
0 incoming packets discarded
14385 incoming packets delivered
15907 requests sent out
Statistiche relative ai pacchetti ICMP
Icmp:
6 ICMP messages received
0 input ICMP message failed.
ICMP input histogram:
destination unreachable: 6
6 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 6
Statistiche relative ai pacchetti TCP
Tcp:
1039 active connections openings
0 passive connection openings
0 failed connection attempts
0 connection resets received
2 connections established
14419 segments received
15721 segments send out
145 segments retransmited
0 bad segments received.
25 resets sent
Statistiche relative ai pacchetti UDP
Udp:
169 packets received
2 packets to unknown port received.
0 packet receive errors
180 packets sent
TcpExt:
ArpFilter: 0
567 TCP sockets finished time wait in fast timer
7 packets rejects in established connections because of timestamp
269 delayed acks sent
Quick ack mode was activated 134 times
16 packets directly queued to recvmsg prequeue.
400 packets directly received from prequeue
6182 packets header predicted
16 packets header predicted and directly queued to user
TCPPureAcks: 1336
TCPHPAcks: 1195
TCPRenoRecovery: 0
TCPSackRecovery: 0
TCPSACKReneging: 0
TCPFACKReorder: 0
TCPSACKReorder: 0
TCPRenoReorder: 0
TCPTSReorder: 0
TCPFullUndo: 0
TCPPartialUndo: 0
TCPDSACKUndo: 0
TCPLossUndo: 0
TCPLoss: 0
TCPLostRetransmit: 0
TCPRenoFailures: 0
TCPSackFailures: 1
TCPLossFailures: 0
TCPFastRetrans: 0
TCPForwardRetrans: 0
TCPSlowStartRetrans: 0
TCPTimeouts: 69
TCPRenoRecoveryFail: 0
TCPSackRecoveryFail: 0
TCPSchedulerFailed: 0
TCPRcvCollapsed: 0
TCPDSACKOldSent: 158
TCPDSACKOfoSent: 29
TCPDSACKRecv: 0
TCPDSACKOfoRecv: 0
TCPAbortOnSyn: 0
TCPAbortOnData: 4
TCPAbortOnClose: 34
TCPAbortOnMemory: 0
TCPAbortOnTimeout: 8
TCPAbortOnLinger: 0
TCPAbortFailed: 0
TCPMemoryPressures: 0

Network troubleshooting - Introduzione
Diagnosticare problemi di rete è attività che difficilmente si spiega a parole.
Per essere in grado di affrontare problematiche di rete complesse (ma anche quelle relativamente triviali) sono necessari diversi skill, non tutti tramandabili facilmente:
1 - Solide basi teoriche e conoscenza dello stack TCP/IP.
Inutile fingere, si deve poter diagnosticare in fretta un problema di DNS rispetto a quello dovuto ad un cavo scollegato, un problema di routing rispetto ad un problema dovuto a troppi errori su una interfaccia.
Per farlo, a prescindere dai sistemi usati, è sempre necessario avere in mente network layers e protocolli.
2 - Esperienza.
Come sempre, i trucchi migliori sono quelli che si acquisiscono sul campo e la familiarità con ambienti e dispositivi specifici ci rende più efficaci e rapidi nelle scelte e nelle implementazioni.
3 - Conoscenza degli strumenti a disposizione.
Qui possiamo dare qualche indicazione utile, valida per quasi tutti gli Unix e anche sistemi Windows:
- ping, traceroute, telnet sono utili per diagnosticare problemi di raggiungibilità di sistemi remoti
- ifconfig, route servono per identificare la configurazione di rete corrente ed evidenziare routing particolari o problemi di errori a livello di interfaccia fisica.
- arp e le arp cache sono sempre da considerare quando si cambia IP di una macchina o la macchina associata ad un IP
- netstat è uno strumento flessibile per identificare connessioni di rete attive e errori e statistiche di traffico su IP, TCP, UDP e ICMP.
- tcpdump, snoop e altri sniffer sono fondamentali quando si devono analizzare nel dettagli dei flussi di pacchetti in rete
- nslookup e dig sono fondamentali per diagnosticare problemi di DNS.

nslookup
Comando che permette di lanciare query dns per la risoluzione di ip o hostname.
Agisce in due modalita:
Interactive: Permette di effettuare piu' query e visualizza i singoli riultati. Viene abilitato in modo automatico quando il comando non e' seguito da argomenti oppure se il primo argomento e' un trattino (-) seguito dal secondo argomento che corrisponde all'host name o all'ip del name server.
non-interctive: Permette di effettuare una sola query e ovviamente visualizza il risultato della singola query. Abilitato ogni qualvolta che si specifica l'host-to-find.
Il DNS di default a cui si effettuano le query e' quello configurato in /etc/resolv.conf
nslookup [opzioni] [host-to-findi] [-server]
INTERACTIVE COMMAND
? richiama l'help
host [server]look up dell'host eseguendo una query al dns di default oppure al server specificato
server nomeserver Modifica il dns di default per la sessione corrente
set keyword [value] Comando che permette di cambiare i criteri di ricerca e visualizzazione delle informazioni che si vanno a richiedere al dns. Di seguito sono riportati alcune opzioni di questo comando.
all Visualizza tutte le opzioni che sono selezionate di default
class=value Modifica la query class
type Modifica il tipo di informazioni da richiedere al dns.
CLASS
IN Internet class
CHAOS chaos class
HESIOD MIT Athena Hesiod class
ANYwildcard, cioe' tutte le classi
TYPE
A L'indirizzo internet di un host
CNAME canonical name di un alias
MX mail exchanger
NS Name server autoritativo della zona
PTR l'host name se la query e' per un indirizzo internet altrimenti altre informazioni
SOA Visualizza i dns autoritativi della zona

Ottimizzazione della configurazione di Apache
Apache prevede nel file di configurazione di default una serie di direttive (alcune soltanto commentate) che da un lato ne aumentano le proprietà e le funzionalità, dall'altro impattano in modo non trascurabile sulle performance del sistema.
Alcune di queste impostazioni possono essere necessarie per il nostro servizio e non se ne può prescindere, altre, spesso, risultano di fatto inutilizzate ed inutilmente configurate.
Vediamo alcuni casi.
REVERSE DNS LOOKUP DEI CLIENT
Ogni richiesta HTTP che arriva al server viene fatta da un HOST in rete con un proprio indirizzo IP che viene loggato da Apache. E' possibile scegliere se provare anche a loggare il nome dell'host completo invece dell'IP, facendo una apposita query DNS (un REVERSE LOOKUP, che da un IP cerca di ottenere il rispettivo hostname). Assicurarsi che questa funzionalità venga disattivata e che Apache non perda tempo a risolvere gli indirizzi IP:
HostNameLookup off
Esistono svariati e migliori modi per procedere alla risoluzione degli IP loggati da Apache in un tempo successivo per dare statistiche sul traffico Web indicative si domini da cui arrivano i client.
GESTIONE DEI SYMLINK
Con la direttiva Options si può istruire Apache su come gestire i link simbolici.
Si può impedirgli di seguirli al di fuori della sua DocumentRoot o gli si può forzare un controllo sull'owner del link. Si risparmiano chiamate di sistema aggiuntive, e cicli di clock, se si evita ad Apache l'onere di controllare se un file è un link simbolico o no e, ancor più, di verificare il suo owner.
In termini di performance quindi la migliore scelta per qualsiasi container è :
Options FollowSymLinks che dice ad Apache di seguire i symlink e di non stare a controllarne l'owner.
Considerare che questa direttiva (insieme a Options SymLinksIfOwnerMatch) hanno una loro ragione d'essere in termini di sicurezza, per cui, come spesso accade, va valutato il giusto compromesso.
GESTIONE DEGLI OVERRIDE
La direttiva AllowOverride permette di definire in file separati (.htaccess) delle configurazioni specifiche per le directory in cui si trovano e in quelle figlie. In termini di performance l'abilitazione dell'Override comporta da parte di Apache una serie di controlli sull'esistenza effettiva del file .htaccess che inevitabilmente impattano sulle prestazioni. Per questo motivo, salvo eventualmente le directory in cui è strattamente necessario, si consiglia vigorosamente di disattivare l'override della configurazione generale con file locali .htaccess:
<Directory/>
AllowOverride None
</Directory>
Questo, per una volta, da benefici anche in termini di sicurezza.
Disattivando gli override diventa pleonastica anche la seguente parte di configurazione, presente negli httpd di default, che quindi può essere commentata:
#AccessFileName .htaccess
#<Files ~ "^\.ht">
# Order allow,deny
# Deny from all
# Satisfy All
#</Files>
STATUS E EXTENDED STATUS
Il mod_status fornisce un utile strumento di diagnostica, la location /server-status consultabile per visualizzare in tempo reale lo stato delle connessioni al server web. Con la direttiva ExtendedStatus, inoltre, è possibile visualizzare ulteriori interessanti informazioni.
Inutile dire che anche queste funzionalità impattano sulle risorse del sistema, in particolare l'ExtendedStatus, per cui, salvo necessità specifiche è bene disattivarle. Nel httpd.conf di default sono già scommentati:
#<Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .your-domain.com
#</Location>
#ExtendedStatus On
COOKIE E SESSION TRACKING
Tracciare le sessioni di navigazione degli utenti tramite cookie o altri strumenti può essere comodo per l'analisi dei log o fondamentale per il corretto funzionamento di certi siti dinamici, ma se non serve è bene farne a meno, disattivando direttamente il relativo modulo:
#LoadModule usertrack_module lib/apache/mod_usertrack.so
#AddModule mod_usertrack.c
Di fatto, anche caricando questo modulo, Apache non setta cookie a meno che non si indichino le specifiche direttive ( CookieDomain, CookieExpires, CookieName ...)
CONTENT NEGOTIATION
In genere, la documentazione di Apache suggerisce che i vantaggi di poter gestire la content negotiation prevalgono sui benefici in termini di prestazioni che si hanno disattivandola.
Un eccezzione è la direttiva DirectoryIndex, che accetta anche nomi di file senza suffissi (es: DirectoryIndex index) ma che è preferibile definire per ogni file che si vuole utilizzare come home page:
DirectoryIndex index.php index.htm index.html index.cgi
LIMITAZIONE DEL LOGGING
Di default Apache logga ogni richiesta ricevuta per cui scrive, per ogni file servito, almeno una riga di log in un file aperta del proprio file system. In server particolarmente affollati questa operazione può determinare un ulteriore appesantimento del sistema (oltre che enormi file di log difficili da gestire).
L'access log può essere completamente disattivato oppure limitato alle sole richieste di pagine (senza appesantirlo con il logging delle GET a immagini e altri file collaterali), l'error log, che non può essere disattivato, può essere impostato per abbassare il numero di informazioni da loggare:
LogLevel error (di default è "warn).
Per disabilitare l'access loggin basta commentare ogni direttiva CustomLog o TransferLog:
# CustomLog /var/log/httpd/access_log common
RIMOZIONE DI MODULI INUTILIZZATI
La configurazione di Apache permette, tramite la funzione IfModule, di attivare una serie di direttive soltanto se il modulo che le fornisce è presente. In questo modo è possibile testare le funzionalità del web server, attivando o disattivando intere sezioni di configurazione, semplicemente commentando la riga che carica il relativo modulo:
#LoadModule perl_module modules/libperl.so
Inoltre, aiutandosi con le informazioni fornite da server-info, è possibile rimuovere direttamente i moduli che forniscono direttive che non vengono nemmeno considerate.
Per migliorare le prestazioni e diminuire l'occupazione di memoria di Apache, si può evitare di caricare tutti i moduli che non servono sia perchè non si utilizzano per niente le relative direttive, sia perchè si decide di rinunciare alle funzionalità offerte da direttive incluse in un container IfModule.

Partizionamento di un sistema Linux
Durante l'installazione di una distribuzione Linux viene richiesto come partizionare gli hard disk, definendo dimensioni e tipo di file system.
Non è necessario avere una partizione già predisposta prima i iniziare, la fase di definizione delle varie partizioni necessarie per Linux viene gestita dal tool di installazione, ma si deve avere dello spazio libero (hard disk libero, spazio non partizionato o una partizione esistente che si puà cancellare (e dividere nelle partizioni che servono a Linux))
Il minimo partizionamento richiesto prevede:
- una partizione generale ("/" , la root directory) in cui vengono copiati tutti i file.
- una partizione di swap (non contiente file e viene usata solo come Virtual Memory, quando si esaurisce la RAM)
E' comunque consigliabile, almeno su un server, utilizzare partizioni indipendenti per diverse directory.
La decisione su come suddividerle e quali dimensioni assegnargli dipende dalle specifiche necessità del sistema.
Considerare che un eccessivo partizionamento aumenta la possibilità di sfruttare male la capacità dell'hard disk e rischiare che alcune partizioni si riempano al 100%.
Queste sono alcune directory che ha senso tenere su partizioni indipendenti da quella dalla root ( / ).
- /boot (partizione di boot, dove risiedono kernel e file di boot. Con BIOS vecchi deve stare nei primi 1023 settori dell'hard disk. 20 Mb di spazio possono bastare)
- /var (partizione in cui vengono messi file che cambiano di dimensione, tipicamente i log. E' utile averla su partizione indipendente per evitare che un aumento dei log inattesi riempa tutto il filesystem. Farla almeno di 100 Mb)
- /home (dove risiedono i file di tutti gli utenti. Può essere piccola e praticamente inutilizzata (mail, dns server) o molto grossa e piena di documenti (web, file server). Dimensionarla a seconda dell'uso della macchina)
- /tmp dove risiedono file temporanei.
In fase di partizionamento, oltre a decidere come partizionare gli hard disk bisogna assegnare ad ogni partizione un mount point.
Per esempio se abbiamo un hard disk da 10 Gb come primary master e lo vogliamo dividere in 6 partizioni, potremo ottenere:
PARTIZIONE MOUNT POINT
/dev/hda1 /
/dev/hda2 /boot
/dev/hda3 /var
/dev/hda4 /home
/dev/hda5 /tmp
/dev/hda6 /SWAP
Notare che la partizione di SWAP non necessita di un mount point.
Per /dev/hda si intende l'hard disk Primary Master IDE. I numeri successivi indicano le partizioni all'interno dell'hard disk.
Gli hard disk IDE hanno i seguenti nomi:
Primary Master: /dev/hda
Primary Slave: /dev/hdb
Secondary Master: /dev/hdc
Secondary Slave: /dev/hdd
Le singole partizioni di un hard disk hanno nomi tipo:
- /dev/hda1 (prima partizione del primary master)
- /dev/hdc4 (quarta partizione del secondary master)
Considerare inoltre che si possono formattare le partizioni con un file system diverso.
Possiamo per esempio avere, nell'esempio sopra indicato, tutte le partizioni in ext3 (uno dei File System più usati su Linux) e la partizione /dev/hda4 ( dove viene montala la /home ) formattata in FAT 32 (File System di Windows 98, supportato anche da Linux).
Su una directory del filesystem Unix è possibile montare anche Network File System come SMB (Reti Windows) o NFS.

passwd
Comando che permette di settare, modificare la password di un utente.
Root può modificare le password di ogni utente, mentri gli utenti normali possono modificare solo la propria.
passwd [-d] [-S] [username]
-d Disabilita la password per l'utente
-S Verifica lo status della password dell'utente.
Esempi
passwd Cambia la password dell'utente corrente. La password va digitata due volte e, in certi sistemi, deve avere un numero minimo di caratteri.
passwd al Cambia la password dell'utente al. Solo root può cambiare le password degli altri utenti.

php.ini
Per l'analisi delle configurazioni principali di php.ini prendiamo in esame il php.ini-dist che presenta un tipo di configurazione meno esasperata e più user friendly nonchè oggettivamente più utile per la programmazione.
Cominciamo con il dire che php.ini gestisce tutte le configurazioni possibili (eccezion fatta per le modalità di installazione e compilazione).
I settaggi che metterò negli esempi sono quelli di default
La logica è davvero molto semplice, in pratica corrisponde a questo esempio:
settaggio = value
Permette l'utilizzo dei tag abbreviati
short_open_tags = On
Permette l'utilizzo di tag ASP
asp_tags = Off
Il numero di cifre significative nei numeri a virgola mobile
precision = 12
Forza la compatibilità con l'anno 2000 (crea problemi con non-compliant browser)
y2k_compliance = Off
Abilitazione del buffering dell'output. Settando "On" questa configurazione permetterete a PHP di inviare la pagina al browser solo al termine dell'esecuzione di tutti gli script e tutte le varie funzioni di echo o print venrranno immagazzinate nel buffer. Questo ha il vantaggio di permettere l'invio di header lines anche dopo l'invio del body. Inoltre nel caso che nella maggioranza delle pagine ci sia commistione di html tradizionale e html generato da php attraverso echo() o print().
Oppure qualora si senta l'esigenza di comprimere l'output per velocizzare lo scaricamento delle pagine (attivando nel php.ini sia il buffering che la compressione). Lo svantaggio principale è di rallentare l'esecuzione del codice PHP nel caso che lo script non sfruttati appieno queste opportunità.
Nel caso che il server fornisca hosting a diversi clienti è preferibile lasciare queste opzioni disabilitate e lasciare la libertà ai programmatori di sfruttare il buffering con le funzioni ob_start etc...
output_buffering = Off
Puoi redirezionare l'output degli scripts verso una funzione. Ad esempio impostando output_handler a ob_gzhandler, l'output verrà trasparentemente compresso per i browser che supportano gzip o browser che scompattano il codice.
output_handler =
Rende trasparente la compressione tramite le librerie gzip. Le impostazioni valide sono 'Off' 'On' o specificando il buffer size da utilizzare per la compressione (default = 4 Kbyte)
Importante: se si imposta questa configurazione ad 'On' output_handler DEVE essere settata 'On'
zlib.output_compressed = Off
Implicit flush è una opzion che deve essere settata Off, al massimo deve essere utilizzata solamente in fase di debugging in quanto ha gravi conseguenze sulle performance
implicit_flush = Off
Impostando "on" si forza a passare per reference gli argomenti quando viene chiamata la funzione. Questo metodo è deprecato (anche se di default è settato On) e viene consigliato di sistemare gli script per funzionare anche se questa configurazione è settata ad "on" in quanto in futuro verrà cancellata.
allow_call_time_pass_reference = On
Safe mode effettua un rigido controllo sugli utenti che "girano" nello spazio web in cui vengono eseguiti script php.
Normalmente tutti gli script ereditano i permessi di Apache (che con certe configurazioni del server possono rivelarsi troppo ampi), invece dal momento in cui viene attivato safe_mode, gli script agiranno strettamente con i permessi dell'utente che li ha uplodati (cioè, in uno spazio in hosting, l'utente ftp), quindi, ad esempio, non potranno andare a leggere un file creato con php nello spazio WEb di un altro utente (revisionato da Fabio Heller)
safe_mode = Off
Di default safe mode quando viene aperto un file fa un UID compare. Se vuoi "rilassare" il tuo script ad un GID compare bisogna impostare la seguente impostazione ad "On"
safe_mode_gid = Off
Quando il safe mode è impostato su "On" il controllo UID/GID è bypassato quando viene incluso un file da quella directory e dalle sue sottodirectory
safe_mode_include_dir =
Se si imposta "On" dice a PHP di dichiararsi presente sul server
expose_php = On
Limiti risorse:
Tempo massimo di esecuzione di uno script PHP
max_execution_time = 30
Massima quantità di memoria che uno script PHP può occupare per la sua esecuzione
memory_limit = 8M
Gestione degli errori (per maggiori dettagli in php.ini vengono spiegati i vari livelli di visualizzazione degli errori)
Questa configurazione mostra tutti gli errori eccetto le notifiche
error_reporting = E_ALL & E_NOTICE
Visualizzazione errori come parte dell'output della pagina. Questa opzione deve essere impostata "On" SOLO per siti in sviluppo, per server in produzione è vivamente consigliato di spegnere questa configurazione e di utilizzare il logging interno di PHP (più avanti spiegato) perchè potrebbe visualizzare informazioni critiche come il path dei file
display_errors = On
Anche quando display_errors = On, gli errori occorsi durante la sequenza di startup di PHP non vengono visualizzati. E' fortemente raccomandato per server in produzione di disattivare questa funzionalità
display_startup_errors = Off
Logging degli errori in un file di log. Il team di php.net avvisa di attivare questa opzione per server in produzione
log_errors = Off
Memorizza l'ultimo errore/warning in $php_errormsg (boolean)
track_errors = Off
Disabilita l'inclusione di tag HTML negli errori
html_errors = Off
Log errors in uno specifico file (valido se log_errors = On)
error_log = filename
IMPORTANTE! la configurazione di questo parametro è molto importante perchè definisce la compatibilità con vecchie versioni di PHP in qui era impostata di default ad "On" mentre ora per motivi di sicurezza è consigliato settare ad "Off" Regiter Globals.
In breve questa funzione permette di non dover richiedere una variabile passata in un URL come GET o come POST ma di averla già disponibile.
Se register_globals = On nel caso di un url del tipo: http://www.dominio.com/pippo.php?ID=56 se nella pagina successiva printo $ID il PHP visualizzerà 56, nel caso di register globals = Off la variabile sarà disponibile solamente in $_GET["ID"] o con le vecchie variabile in $HTTP_GET_VARS["ID"] e non come $ID
register_globals = On
Questa direttiva dice a PHP di dichiarare le variabili argv&argc (quelle contanenti le informazioni GET). Se non si usano queste variabili si può spegnere questa configurazione per ottenere maggiori performance.
register_argv = On
Massima dimensione di un POST di dati che PHP accetti
post_max_size = 8M
Questa direttiva è deprecata e php.net consiglia di utilizzare l'altra variabile di ordinamento dei GET POST COOKIE spiegata precedentemente
gpc_order = "GPC"
Importante: Magic quotes
Magic quotes per variabili in ingresso GET/POST/COOKIE: Vuol dire che a tutte le variabili in incoming come GPC vengono aggiunti gli slashes. Es. ' = \' " = \"
magic_quotes_gpc = On
Magic quotes per dati runtime (Es. dati da SQL, da exec etc...)
magic_quotes_runtime = Off
Utilizza magic quotes stile sybase (escape per ' con '' anzichè \')
magic_quotes_sybase = Off
Directory dove risiedono le estensioni
extension_dir = ./
Configurazione per enablare o meno le dl() function che non funzionano correttamente su multithread server, IIS e Zeus e vengono automaticamente disabilitate in questi server
enable_dl = On
File Uploads
Impostare il permesso di HTTP upload di files
file_uploads = On
Directory dei file temporanei in fase di upload (se commentate questa configurazione verrà utilizzata quella di default del S.O.)
upload_tmp_dir
Massima dimensione di un file accettata da PHP
upload_max_filesize = 2M
File Opening
Configurazione per concedere la possibilità del trattamento con fopen di URL file
allow_url_fopen = On
Dinamic extension
Windows extensions (se commentata non viene caricata) un esempio:
extension = php_cpdf.dll
Module settings
Configurazione per attivazione dei syslog (disabilitare questa opzione permette un incremento delle performance di PHP)
define_syslog_variables = Off
Funzioni email per windows
Impostazione SMTP server
SMTP = localhost
Invio email da:
sendmail_from = me@localhost.com
Funzioni email per unix
Path di sendmail
;sendmail_path = (commentata di default)
Configurazioni database
SQL
sql.safe_mode
ODBC
Permette o previene connessioni persistenti
odbc.allow_persistent = ON
Controlla che la connessione persistente sia valida prima di utilizzarla
odbc.check_persistent = On
Massimo numero di connessioni persistenti (-1 equivale ad infinite)
odbc.links = -1
MYSQL
Per eventuali configurazioni del tipo mysql.allow_persistent = On valgono le spiegazioni date per ODBC e così per i database supportati. (tratterò esclusivamente i casi specifici di ogni DB).
Porta di default di mySQL. Se lasciata blank viene utilizzata la porta di default 3306
mysql.default_port =
Nome socket per connessioni locali a mySQL. Se vuota viene utilizzata quella di default
mysql.default_socket = On
Default host per mysql_connect() (non applicabile in safe mode)
mysql.default_host
Default user per mysql_connect() (non applicabile in safe mode)
mysql.default_user =
Default password per mysql_connect() (non applicabile in safe mode). E' assolutamente sconsigliabile utilizzare una password di default!!
mysql.default_password =
POSTGRESQL
Individua connessioni persistenti broken con pg_connect(). Necessita di un piccolo overhead
pgsql.auto_reset_persistent = Off
SYBASE
Error severity minimo visualizzato
sybase.min_error_severity = 10
Si forza la compatibilità con versioni vecchie di PHP (3.0) in caso di settaggio ad On forza PHP a assegnare tipi di risultati del tipo di quelli di sybase.
Questa compatibilità non rimarrà a lungo
sybase.compatibility_mode = Off
SYBASE-CT
Massimo numero di connessioni (persistenti e non) accettate da sybase (-1 senza limiti)
sybct.max_links = -1
N.b.Non mi dilungherò ulteriormente sui database in quanto indicativamente per tutti i database le configurazioni sono simili, ci sono altri casi eccezionali comunque descritti ampiamente in PHP.INI
SESSIONI
Handler utilizzato per lo store ed il retrieve dei dati
session.save_handler = files
Path dove vengono immagazzinati i files delle sessioni
session.save_handler = /tmp
Se usare i cookies
session.use_cookies = 1
Nome della sessione (usato come cookie name)
session.name = PHPSESSID
Inizializzazione sessioni alla richiesta di startup
session.auto_start = 0
Tempo di vita del cookie (se 0 finchè il browser non viene restartato)
session.cookie_lifetime = 0
Path per il quale il cookie è valido
session.cookie_path = /
Handler utilizzato per la serializzazione dei dati (lo standard è PHP)
session.serialize_handler = php
Percentuale di possibilità che la "Garbage Collection" venga iniziata quando la sessione viene inizializzata
session.gc_probability = 1
Importante: Numero di secondi dopo il quale la sessione viene considerata scaduta (importante in caso di carrelli della spesa)
session.gc_maxlifetime = 1440
Controlla l'HTTP referer per la validazione di stored URL che contengono l'ids
session.referer_check =
Quanti bytes vengono letti dal file
session.entropy_lenght = 0
Specifica dove creare il session ID
session.entropy_file =
Setta il no cache
session.cache_limiter = nocache
Tempo di espirazione del documeto in N minuti
session.cache_expire = 180
E' molto rischioso abilitare il trans sid perchè permette di accedere ad una sessione tramite vecchi bookmarks o url stored e perchè l'utente può inviare l'URL contenente la sessione via mail, irc etc...
sessione.use_trans_sid = 0
E con questa ultima spiegazione ho terminato di trattare le configurazioni principali di php.ini
Esempio di configurazione per un sito in produzione (da prendere con le molle e da customizzare in base alle proprie esigenze) PHP.INI

Processi "daemon"
Nel mondo Unix a volte vengono dati nomi alle cose con una fantasia particolare.
Si definiscono DAEMON dei processi costantemente in esecuzione, che si interrompono solamente allo spegnimento della macchina per poi ripartire alla successiva riaccensione. Girano in background senza un terminale di controllo ed in genere ognuno di loro rappresenta un servizio.
Fra i più comuni, in particolare su Linux, ci sono:
apmd Daemon di Advanced Power Management.
bootpd Daemon Internet Boot Protocol.
fingerd Daemon Finger.
ftpd Daemon File Transfer Protocol.
gated Gestisce le tabelle di routing tra reti differenti.
identd Identifica l'utente che sta eseguendo un processo TCP/IP.
imapd Daemon del server di posta elettronica IMAP.
inetd Daemon per i servizi Internet.
kerneld Fornisce servizi di caricamento automatico di moduli del kernel.
klogd Gestisce syslogd.
lpd Daemon per la stampante.
mountd Server per le richieste di mount su NFS.
named Server per i nomi di dominio Internet.
nfsd Daemon NFS.
pop3d Server POP3.
powerd Monitorizza una connessione UPS.
pppd Gestisce le connessioni di rete con protocollo punto-punto (Point to Point Protocol, in breve PPP).
rdistd Server per la distribuzione remota di programmi.
rexecd Server per l'esecuzione remota di programmi.
rlogind Server rlogin.
routed Daemon di routing.
rshd Server di shell remota.
rwhod Server remoto per who (rwho).
syslogd Daemon per il logging del sistema.
talkd Daemon di talk.
tcpd Daemon per la rete TCP.
tftpd Daemon Trivial File Transfer Protocol.
update Daemon per il flush dei buffer.
ypbind Processo NIS binder.
yppasswdd Server per la modifica di password NIS.
ypserv Server dei processi NIS.

Raid performance su Linux
Questo testo si basa su ricerche in rete e conoscenza generale degli argomenti correlati, come molta documentazione, ormai, si basa su quanto detto o sentito da altri e non su benchmark o esaustive esperienze dirette.
Nonostante questo riteniamo utile fornire informazioni di massima su come scegliere e dimensionare un sistema raid (software) su Linux.
Definizione degli obiettivi
Come sempre, non esiste una soluzione definitiva ad una necessità informatica: dipende da cosa si vuole ottenere, dalle disponibilità di tempo, risorse e conoscenze, dal carico, dimensionamento e la natura dei sistemi su cui si intende configurare un software raid:
- Che funzioni avrà il nostro sistema?
A seconda delle sue funzioni cambiano parametri quali il tipo di accesso al disco, le dimensioni medie dei file, la quantità degli accessi, il carico generale di I/O e sulla CPU.
In genere un server web avrà frequente accesso a vari (alcuni più spesso di altri) piccoli file, con un carico di I/O relativamente basso e bassa occupazione di disco (quantomeno per i dati, log esclusi).
Un database gestirà file di grosse dimensioni, generalmente in posizioni fisse, con carichi di I/O maggiori.
Un file o print server avrà accessi frequenti a vari file di dimensioni variabili, con alti carici di I/O e grosse quantità di dati da avere in storage.
- Quali compromessi fra ridondanza dei dati e performance possiamo valutare?
La natura dei dati stessi e la necessità di mantenerne l'integrità e la disponibilità influisce sulla scelta di tipo di Raid. Il mirroring è la forma che garantisce probabilmente la migliore protezione dei dati, a scapito di un maggiore utilizzo di spazio su disco e di tempi di scrittura più lenti.
Scelta e disposizione degli hard disk
In termini di performance è fondamentale disporre gli hard disk che fanno parte di un raid array su bus diversi, in modo da ottimizzare il più possibile il throughput dei dati e riduerre i colli di bottiglia.
Su canali (E)IDE, in particolare, si riscontrano notevoli rallentamenti nell'accesso al disco se entrambi gli hard disk appartengono alla stesso canale. Se si fa mirroring, per esempio, è meglio abbinare un primary master (hda) o slave ad un secondary master (hdc) o slave (hdd), ed è assolutamente da evitare un sistema raid 1 composto, ad esempio, da primary master e un primary slave.
Su SCSI il problema è minore, ma se si hanno a disposizione due diversi canali, è meglio usarli alternati per sfruttare al meglio il thoughput del bus.
Benchmarking utility
Chi ha necessità di eseguire test di performance sui dischi ha a disposizione alcuni strumenti liberamente utilizzabili:
Iozone - http://www.iozone.org/
E' un tool che produce grafici diversi, in stile MS Office, sulla base dei risultati di una varietà di test di accesso al disco. Disponibile per vari sistemi operativi (tra cui Linux e Windows).
Bonnie ++ - http://www.coker.com.au/bonnie++/
E' una suite che comprende test di lettura e scrittura di dati su disco, simula diverse condizioni, riconducibile alle attività di server comuni. Serve per ogni tipo di tuning delle performance su disco e risulta particolarmente utile per valutare diverse soluzioni di raid.
Deriva da Bonnie, a suo tempo piuttosto usato e ancora valido.
Tiobench - http://tiobench.sourceforge.net/
Dedicata espressamente ad analisi di sistemi raid, produce statistiche interessanti e dettagliate.
PostMark - http://www.netapp.com/tech_library/3022.html
Tool di disk benchmarking della NetWork Appliance. Presenta una propria command line da cui è possibile configurare, impostare e visualizzare i risultati dei test.
Un elenco completo di tool per il benchmark del disco per diverse piattaforme è disponibile su http://www.acnc.com/benchmarks.html
Linear mode - Append
Modalità: I dati vengono scritti sul primo disco fino a quando non è completo, poi sul secondo ecc.
Dischi necessari: 2 o più
Prestazioni Lettura: Uguale a quella di un sistema senza raid. Può migliorare nei rari casi in cui si scrive contemporaneamente su diversi dischi fisici.
Prestazioni Scrittura:
Ridondanza: Nessuna
Recupero dati in caso di guasto: Difficile. Ma il fatto di avere i dati scritti sequenzialmente potrebbe permettere il recupero parziale dei dati scritti sul disco integro.
Chunk size generalmente consigliato: 32KB
Spare Disks: Non supportati.
Raid 0 - Stripe mode
Modalità: I dati vengono letti e scritti contemporaneamente, in parallelo, sui diversi dischi fisici.
Dischi necessari: 2 o più
Prestazioni Lettura: Decisamente migliori, se i BUS non rappresentano un collo di bottiglia, si avvicinano a N*P Mb/sec (Numero di HD * Prestazioni HD).
Prestazioni Scrittura: Desisamente migliori. Come per la lettura, tutte le operazioni di scrittura vengono svolte in parallelo sui diversi dischi fissi.
Ridondanza: Nessuna
Recupero dati in caso di guasto: Praticamente impossibile: ogni file fisicamente viene distribuito su dischi diversi: se un disco si rompe, ogni file risulta danneggiato.
Chunk size generalmente consigliato: 32KB
Spare Disks: Non supportati.
Raid 1 - Mirroring
Modalità: I dati vengono letti e scritti contempraneamente, in parallelo, sui diversi dischi fisici.
Dischi necessari: 2 o più, meglio se di uguale geometria.
Prestazioni Lettura: Migliorate. Vengono fatte in parallelo con meccanismi che minimizzano i tempi di seek di un file sul disco.
Prestazioni Scrittura: Peggiorate. Tutte le operazioni di scrittura vengono fatte due volte.
Ridondanza: Completa. Tutti i dati sono scritti due volte su due diversi dischi. Se esistono dischi spare questi vengono automaticamente ricreati. Se si ha a disposizione una copia del mirror, questa può essere usata autonomamente.
Chunk size generalmente consigliato: 32KB
Spare Disks: Uno o più.
Raid 4 -
Modalità: I dati vengono scritti, in modalità di striping su più dischi e viene mantenuto un disco autonomo per le info di parità.
Dischi necessari: 3 o più
Prestazioni Lettura: Migliorate.
Prestazioni Scrittura: Rallentate dalla necessità di gestire le parity info su disco autonomo.
Ridondanza: Se un disco si rompe, le informazioni di parità permettono la ricostruzione dei suoi dati.
Chunk size generalmente consigliato: 32KB
Spare Disks: Uno o più.
Raid 5 -
Modalità: Sia i dati che le informazioni di parità vengono scritti in modalità di striping su più dischi.
Dischi necessari: 3 o più
Prestazioni Lettura: Migliorate. Simili a Raid 0.
Prestazioni Scrittura: Paragonabili a quelle di Raid 1.
Ridondanza: Se un disco si rompe, le informazioni di parità permettono la ricostruzione dei suoi dati.
Chunk size generalmente consigliato: 128KB
Spare Disks: Uno o più.

RAID riferimenti teorici
In ambito server l'utilizzo dei RAID (Rendundant Array of Inexpensive Disk) è tipicamente utilizzato per avere una certa rindondanza dati e per migliorare le prestazioni di lettura e scrittura dati.
Il RAID può essere gestito tramite software oppure tramite hardware (tipicamente controller RAID SCSI), naturalmente la seconda soluzione risulta essere la migliore in termini di performance ma onerosa in termini economici.
Di seguito verranno presentati i livelli RAID più utilizzati con i relativi vantaggi e svantaggi:
RAID 0
Il disco simulato dal RAID viene suddiviso in fette (strip), sulle quali verranno scritte i dati in modo consecutivo e in modalità round-robin.
Nel caso di più hard-disk, il metodo con cui vengono distribuiti i dati viene chiamata striping.
Il Raid a livello zero è migliore (in termini di performance) nel caso in cui il passaggio dati in I/0 è elevato, poichè il controller RAID dividerà la richiesta di lettura o scrittura per tutti gli hard-disk e in seguito riassemblerà tutte le informazioni ricevute.
Le note negative si hanno quando si utilizza questo tipo di RAID con i OS che normalmente richiedono la lettura o scrittura di un settore alla volta, perdendo così il vantaggio della parallelizzazione, inoltre l'affidabilità di tale livello risulta essere molto bassa poichè basta la rottura di un solo disco per perdere tutti i dati.
Questo modello di Raid viene anche chiamato "striping without parity".
RAID 1
Raid 1 viene utilizzato proprio per la sua funzionalità di duplicazione, ovvero esso duplica tutti i dati (in caso di due hard-disk, ne avremo uno master e il secondo utilizzato per il backup).
In fase di scrittura, ogni dato (o meglio fetta) viene scritto due volte: una volta sull'hard-disk master e la seconda sull'hard-disk di backup, mentre in fase di lettura il dato può essere letto da entrambi, distribuendo anche il carico. In termini di performance si hanno vantaggi solo in lettura, mentre le operazione di scrittura, dovendo avvenire in duplice copia, sono più lente.
Questa configurazione garantisce la ridonzanda dei dati: se si rompe un hard disk, tutti i dati saranno comunque disponibili sull'altro. Viene anche definita "disk mirroring".
RAID 3
A differenza dei livelli precedenti, la suddivisione dei dati non avviene più per settore ma per byte, ovvero ogni byte viene suddiviso in bit ai quali ne viene aggiunto uno, come bit di parità, per ogni "parola" dati scritta. Poichè il byte dovrà essere scritto per i vari dischi disponibili viene richiesta la sincronizzazione del movimento fra i vari hard-disk.
Un solo bit di parità non permette la correzzione di errori nei dati ma può solo rilevarlo mentre in caso di crash di un hard-disk completo la correzzione dell'errore è completa poichè il bit di parità permette di svelare la posizione del bit corrotto.
Il numero di richieste che si possono gestire al secondo sono identiche a quelle di un singolo hard-disk.
RAID 4
Richiede tre o più dischi, come con il RAID 0, le operazioni in lettura e scrittura sono eseguite in parallelo, ma in questo caso un disco, che può diventare un collo di bottiglia, mantiene le informazioni di parità per ricostruire i dati in caso di guasto sugli altri dischi. RAID 4 viene considerato un "disk striping with parity".
RAID 5
Il vantaggio di questo livello di RAID sta nel fatto che la sincronizzazione dei vari componenti del RAID non è richiesta e la suddivisione dati fra questi componenti non avviene più per bit ma per fette (strip) come nel caso del RAID 1 con in aggiunta i bit di parità che vengono distribuiti su tutti gli hard-disk in modalità round-robin.
Questo garantisce ridondanza in caso di guasto di uno qualsiasi dei dischi, anche se la ricostruzione dei dati risulta essere un'operazione piuttosto complessa.
E' una delle varianti più utilizzate, insieme a RAID 1, perchè garantisce buone prestazione (parallelismo in lettura e scrittura), integrità dei dati (i parity check vengono distribuiti su tutti i dischi) e "spreco" relativamente limitato di spazio su disco per la ridondanza. Anche questo tipo è un "disk striping with parity".

Ripristinare Windows dopo un errore con Lilo o altri Linux Loader
Non è raro sentire di utenti che hanno provato, animati da ottime intenzioni e buona volontà, ad installare Linux sul proprio PC, con Windows già installato, e per qualche errore o svista o inesperienza in fase di installazione non riescono più a "vedere" e caricare il proprio Windows.
In questi casi, arrabbiature, delusione, disillusione e sconforto fanno diventare un potenziale nuovo utente di Linux in un suo acceso detrattore.
Le distribuzioni recenti ormai sono piuttosto efficaci nel riconoscere e preservare l'installazione Windows esistente e far pacificamente convivere i due sistemi operativi, al punto che è sempre consigliabile, se si vuole un sistema Dual Boot, installare prima Windows e poi Linux (i SO di Microsoft sono generalmente più invadenti, sotto questo aspetto, e non tollerano/prevedono facilmente coesistenze).
Di fatto, comunque, è possibile fare 2 tipi di danni sul Windows pre esistente quando si prova ad installare il pinguino:
- Cancellare completamente il vecchio Windows, distruggendone o sovrascrivendo la partizione in cui è installato (era il caso di prestare più attenzione i WARNING segnalati durante l'installazione di Linux)
- Sovrascrivere il Master Boot Record del proprio hard disk con LILO o GRUB o altri Linux Loader senza aver l'opzione di caricare Windows: in questo caso non viene propriamente cancellato Windows dal proprio hard disk, ma soltanto la possibilità di caricarlo al boot.
In questo caso il ripristino dello status quo è relativamente semplice:
Procurarsi un floppy di boot o di ripristino o un CDROM di Windows.
Se è un Windows 95, 98, Me, digitare dal DOS: fdisk /mbr
Se si è sulla console di ripristino di Windows 2000, scrivere: fixmbr
In entrambi i casi si sovrascrive e si azzera il MBR dove verosimilmente è stato installato un Linux Loader come LILO e si potrà ritrovare il proprio Windows.
L'effetto collaterale di questa operazione è che a questo punto non sarà più accessible il Linux appena installato: se si sono creati dei floppy di ripristino durante l'installazione di Linux potrà essere possibile caricare Linux con quelli ed eventualmente configurare /etc/lilo.conf (o analoghi file di configurazione del Linux Loader) in modo corretto. Altrimenti è generalmente possibile operare il ripristino bootando dal CDROM usato per l'installazione.

Risorse online su Apache in italiano
Vari siti in lingua italiana parlano più o meno estesamente di Apache.
Vediamo alcuni dei più interessanti:
http://www.apache3000.net/  - APACHE 3000, un sito interamente dedicato ad Apache ed applicazioni web.
http://www.html.it/apache/  - HTML.it presenta un tutorial ben sviluppato oltre ad una serie di FAQ.
http://www.pluto.linux.it/journal/pj0201/apache1.html  - Su Pluto un tutorial ben scritto.
http://www.na.infn.it/compreso/apache/apache.pdf  - Un PDF che, tra l'altro, spiega come chrootare Apache.
http://www.phpcenter.it/course/index.php?id=16  - Su PHPCenter c'è un breve ma utile corso sull'installazione di MySQL+PHP+Apache, combinazione tipica in molti siti.
http://www.latoserver.it/apache/  - LatoServer presenta una sezione dedicata ad Apache con alcuni docs.

rm
Cancella file o directory.
E' comune in tutti gli Unix ma alcuni parametri possono variare.
ATTENZIONE: IN UNIX NON ESISTE IL "CESTINO", QUANDO UN FILE VIENE CANCELLATO NON E' POSSIBILE RECUPERARLO FACILMENTE! (Ci sono comunque dei metodi per recuperare dei file cancellati, ma non sono semplicissimi).
Per poter cancellare un file è necessario avere permessi in scrittura sulla directory che lo contiene, ma NON E' NECESSARIO AVERLI SUL FILE stesso (se non si hanno permessi di scrittura sul file che si vuole cancellare, e che si trova in una directory dove si può scrivere, viene semplicemente richiesta una conferma prima della cancellazione).
Se si vuole cancellare un file in modo definitivo, rendendo impossibile un suo recupero, utilizzare il comando shred.
rm [opzioni] file
-f (--force) Forza la rimozione senza richiesta di conferma.
-i (--interactive) Chiede conferma prima di cancellare i file
-R (-r , --recursive) Se viene indicata una directory la cancella con tutto il suo contenuto (USARE CON CAUTELA)
ATTENZIONE a usare certe opzioni di rm, un comando come rm -rf /* se eseguito come root cancella brutalmente tutto il file system (in realtà ad un certo punto la cancellazione si blocca perchè vengono cancellati alcuni file vitali al funzionamento corrente del sistema, ma il risultato è comunque catastrofico e irreparabile).
Esempi
rm -rf /tmp Cancella tutta la directory /tmp
rm -rf /tmp/* Cancella tutti i file contenuti nella directory /tmp (la directroy rimane vuota)

rmdir
Rimuove directory (ma non il loro contenuto).
Comando comune a tutti gli Unix.
Non cancella directory non vuote, per il quale è necessario un comando tipo rm -R
rmdir [opzioni] directory
-p (--parents) Rimuove la directory specificata e ogni directory genitore che dovesse essere rimasta vuota.
--verbose Modalità verbosa: per ogni directory rimossa stampa un messaggio
Esempi
rmdir /tmp/nuova Rimuove la sottodirectory "nuova" all'interno di /tmp (ma solo se nuova non contiene file.

rpm -qa
Visualizza l'elenco completo degli rpm installati.
Utile sopratutto se usato assieme al grep.
Nel caso volessi sapere se il pacchetto abiword è installato sul mio sistema, dovrei digitare al prompt:
[root@hell] rpm -qa | grep abiw

Salvare i dati
Il salvataggio dei dati modificati con VI comprende anche l'aggiornamento della data/ora di modifica.
Ecco alcuni dei comandi più comuni:
zz Esce da VI scrivendo solo se sono state apportate modifiche al file
:x Come zz
:wq Salva ed esce
:w Salva
:w file Salva una copia nel file file
:q Esce
:q! Forza l'uscita anche se non sono state salvate le modifiche fatte (che vengono perse).

Samba come Primary Domain Controller (PDC)
Samba 2.x può svolgere le attività di PDC, Primary Domain Controller, in una rete di client Windows (o mista).
Le funzionalità supportate sono:
- Login sul dominio (domain logon) per client Windows NT/2000/XP.
- Sicurezza a livello utente per client Windows 9x/ME (questi client non hanno il concetto di dominio, ma supportano il login su un dominio)
- Roaming profiles, per avere utenti che possono loggarsi su client diversi mantenendo il proprio ambiente.
- Browse list e master browser
- Policy di sistema in stile NT4
- Possibilità di ottenere la lista degli utenti/gruppi presenti sul PDC Samba
Le funzionalità ancore non supportate sono:
- Gestione Active Directory (introdotta dalla versione 3.x)
- Utilizzo come BDC (Backup Domain Controller). (Esistono dei workaround, ma sono piuttosto laboriosi)
- Possibilità di replicare il database delle password SAM da un server Windows (introdotta dalla versione 3.x)
Per configurare Samba come PDC di un dominio Windows è necessario:
1- Installare Samba su un server Linux/Unix (tramite sorgenti o RPM)
2- Configurare smb.conf
3- Creare directory per i roaming profile e i domain logons
4- Aggiungere le login e le password per gli utenti e le macchine del dominio
5- Configurare i client Windows per unirsi al dominio.
1- Installazione di Samba
L'installazione per un PDC non richiede particolari accorgimenti rispetto ad una normale installazione di Samba, tramite rpm o tar.gz.
2- Configurazione di smb.conf
Vediamo un esempio del file di configurazione di un Samba PDC. Varie impostazioni sono comuni a qualsiasi installazione Samba, alcune sono specifiche per un PDC (domain master = yes , security = user , encrypt passwords = yes), altre sono necessarie se si vuole supportare l'esecuzione sul client di uno script al login (logon script e condivisione [netlogon] ) o l'uso dei roaming profiles (logon path , condivisione [profiles]).
Valutare attentamente quest'ultima opzione: ha la comodità di separare l'uso di una singola macchina fisica da un singolo utente (tutti gli utenti possono usare tutte le macchine), ma comporta ad ogni login il caricamento o la sincronizzazione di tutti i "Documents and Settings" Windows fra il client e il server, con un potenziale carico sul network non indifferente e maggiori attese da parte dell'utente.
Fatto il login l'utente agirà sui file della macchina locale, che poi vengono a loro volta sincornizzati con quelli sul server al momento del logout.
[global]
; Settaggi generali (validi su ogni configurazione Samba)
workgroup = intranet E' il nome del Dominio e/o del Workgroup
netbios name = serverone E' il nome del server Samba
server string = Samba PDC - Versione %v La descrizione del server
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=8192 SO_RCVBUF=8192 Settings TCP consigliabili di default
; Settaggi per un PDC e un master browser
os level = 64 Imposta il valore con cui partecipare alle elezioni per il Master Browser
preferred master = yes Forza una elezione quando si avvia e vi partecipa con maggiori possibilità di successo
local master = yes Fa partecipare Samba alle elezioni per il Local Master Browser
domain master = yes La riga che indica a Samba di operare com PDC
; Gestione utenti e sicurezza
security = user Impone di autenticare gli utenti localmente. E' necessario su un PDC Samba
encrypt passwords = yes Cripta login e password in fase di autenticazione: obbligatorio su un PDC e necessario per interagire senza problemi con client Windows NT o successivi
domain logons = yes Permette ai client Windows di loggarsi sul dominio autenticandosi con il server Samba
hosts allow = 127.0.0.1 192.168.0.0/255.255.255.0 Permette l'accesso solo dal localhost e dalla rete 192.168.0.0/24
add machine script = /usr/sbin/useradd -d /dev/null -g machines -s /bin/false -M %u Aggiunge automaticamente al sistema l'account di una nuova macchina che entra nel dominio
; Gestione logging
log file = /var/log/samba/log.%m Definisce la posizione dei log e indica di creare log diversi on i nomi delle rispettive macchine client
log level = 2 Imposta a 2 il livello di logging, visualizzando tutti i file letti e scritti
max log size = 50 Imposta a 50 Kb la dimensione massima dei file di log
; User profiles, home directory e netlogon (a queste configurazioni in [global] vanno SEMPRE aggiunte le definizioni rispettivamente di [homes] , [profiles] e [netlogon] riportate più sotto
logon home = \\%L\%U\.profile Definisce la posizione del file .profile (per client Win9x/ME) in \\nomeserver\nomeutente
logon path = \\%L\profiles\%U Definisce la posizione della directory profiles (per client WinNT/2k/XP) in \\nomeserver\profiles\nomeutente
logon drive = H: Crea l'unità di rete H: al login su client Windows
logon script = netlogon.bat Specifica quale script eseguire sul client ad ogni login. Lo script viene cercato nella directory definita nella condivisione [netlogon]
[homes] Share speciale, che definisce la posizione delle home directory
comment = Home Directory per ogni User Descrizione della condivisione
browseable = no E' bene non rendere pubblicamente visibile le home dei singoli utenti
writeable = yes Ogni utente deve poter scrivere nella sua home
[profiles] Share speciale dove vengono scritti i file di profilo per i gli utenti roaming. Ad ogni login e logout il suo contenuto viene sincronizzato con la cartella dei documenti sul computer locale (C:/Documenti/NomeUtente.dominio)
path = /home/profiles La directory locale sul server Samba dove sono salvati i profili. Qui vengono, automaticamente, create delle sottodirectroy con i nomi degli utenti
writeable = yes I profili sono sincronizzati con il client al login e al logout e devono essere scrivibili
browseable = no Come per le home, anche i profili non devono essere visibili agli altri utenti
create mask = 0600 La maschera con cui vengono creati i file: Pieni permessi all'owner, nessun permesso per gli altri utenti
directory mask = 0700 La maschera con cui vengono create le directory: per l'owner devono essere anche eseguibili (sfogliabili)
[netlogon] Condivisione speciale che contiene gli script che vengono eseguiti sui client Windows al login sul dominio. Devono essere eseguibili su Windows e possono essere utilizzati per varie operazione di amministrazione centralizzata (backup di dati locali, aggiornamento programmi o antivirus, mappatura di nuove condivisioni di rete ecc.)
path = /home/netlogon La directory sul server in cui sono contenuti, in sottodirectory con nome uguale al login dell'utente, gli script definiti con la direttiva "logon script"
read only = yes Questi script devono essere accessbili solo in lettura...
write list = @admin ... tranne agli utenti del gruppo (@) admin
browseable = no Questa è una condivisione di servizio che è inutile mostrare agli altri utenti
3- Creazione delle directory supplementari
E' importante creare directory per i profile e i netlogon definiti in smb.conf con nomi e permessi corretti.
Sulla base della configurazione di esempio sopra riportata vanno eseguite le seguenti operazioni sul server Samba (come root):
[root@sambaserver root]# groupadd admin Si crea il gruppo admin, composto da utenti che possono editare gli script di logon. Considerare che questi script sono particolarmente importanti, in termini di sicurezza, visto che vengono eseguiti sui client Window
[root@sambaserver root]# mkdir -m 0775 /home/netlogon Crea la directory /home/netlogon, leggibile ed eseguibile da utti gli utenti e modificabile solo da owner e ownergroup
[root@sambaserver root]# chown root.admin /home/netlogon Si imposta root come owner della directory e admin come gruppo (con permessi di scrittura)
[root@sambaserver root]# mkdir /home/profiles Si crea una directory per i profili (uguale a quella definita in smb.conf)
[root@sambaserver root]# chmod 1757 /home/profiles Si imposta lo sticky bit e si rende questa directory scrivibile da root e le sue sottodirectory gestibili dai rispettivi utenti, senza possibilità di modificare quelle degli altri
4- Aggiungere login e password
Gestire gli utenti di un dominio con Samba non è una procedura immediata e vanno considerati alcuni aspetti fondamentali:
- Samba utilizza come file delle password /etc/samba/smbpasswd (di default) che presenta una riga per ogni utente (sia di un dominio che di un server con normale autenticazione). In questo file è prevista una riga (con login , password criptata e altri dati) per ogni utente.
- Per ogni utente presente sul file smbpasswd DEVE essere presente un rispettivo utente sul normale file degli utenti Unix /etc/passwd. Questo perchè Samba agisce sul sistema locale come un normale processo Unix e, anche se viene eseguito come root, accede al filesystem con i permessi degli utenti secondo quanto configurato.
- Quando Samba agisce come PDC, oltre a creare una login (sia in /etc/samba/smbpasswd che in /etc/passwd) per ogni utente, si deve creare una login speciale per ogni macchina del dominio. Questa login, definita trust account o computer account ha il nome NetBios del computer seguito dal segno dollaro ($). Al primo login da parte del trust account viene generata una sorta di password che viene utilizzata per autenticare le comunicazioni fra il PDC e il client e assicurarsi che non ci siano altre macchine che possano unirsi al dominio con lo stesso nome NetBios.
- La gestione delle login (sia per gli utenti che per i computer, sia su smbpasswd che su passwd) può essere fatta in maniera manuale, con i comandi sotto riportati, o in maniera automatica, tramite l'uso della direttiva add user script
- Windows9x/ME anche se possono eseguire un login su un dominio, NON sono strutturati per essere dei client a pieno titolo di un dominio in quanto non ne rispettano le logiche di sicurezza e trust.
Per aggiungere un computer account al dominio manualmente seguire la seguente procedura:
[root@sambaserver root]# groupadd machines Crea un gruppo per tutte i computer account
[root@sambaserver root]# useradd -g machines -d /dev/null -s /bin/false nomeNetBios$ Aggiunge al sistema una login, membro del gruppo machines, senza home directory, senza shell, con nome uguale al nome NetBios della macchina seguito dal segno $. Notare che questo account serve a Samba per agire sul sistema, ma è bene che non possa essere utilizzato per una normale login.
[root@sambaserver root]# passwd -l nomeNetBios$ Viene messo un lock sulla password, in modo da lasciarla nulla e non renderla modificabile se non da root
[root@sambaserver root]# smbpasswd -a -m nomeNetBios Si crea un nuovo computer account per /etc/samba/smbpasswd e si imposta la relativa password. L'opzione -a permette di crearlo, se non esiste, l'opzione -m indica che si tratta di un machine account, il nome NetBios della macchina da aggiungere NON va seguito da $, in questo caso, in quando questo carattere viene aggiunto automaticamente. Non è necessario ricordare la password inserita in quanto viene gestita direttamente fra PDC e client del dominio
Se si vuole evitare di aggiungere a mano un nuovo account per ogni macchina del dominio, si può provare ad aggiungere, come sopra indicato, la seguente riga a smb.conf:
add machine script = /usr/sbin/useradd -d /dev/null -g machines -s /bin/false -M %u
Verificare il path e la sintassi del comando useradd e assicurarsi di avere il gruppo machines già creato.
Per aggiungere a mano le login degli utenti (non delle macchine) del dominio:
[root@sambaserver root]# useradd pippo Aggiunge l'utente al /etc/passwd di sistema
[root@sambaserver root]# passwd pippo Gli imposta la password. Se l'utente non deve accedere al sistema Unix, impostagli una shell nulla in /etc/passwd
[root@sambaserver root]# smbpasswd -a pippo Aggiunge l'utente pippo a /etc/samba/smbpasswd e gli imposta la password
NOTA: Quando si configura un client Windows NT/2k/XP per farlo diventare parte di un dominio, viene richiesta una password di amministratore. In questa situazione si deve usare la login di root con la relativa password, per cui è necessario aggiungere l'utente root anche al smbpasswd:
[root@sambaserver root]# smbpasswd -a root
Notare che se per caso si cambia la password di root con passwd e non la si aggiorna anche con smbpasswd, la password che fa testo è la seconda, quella presente in /etc/samba/smbpasswd.
Per questo ed altri motivi, una volta creato un utente è buona cosa fare in modo che la sua password sul sistema Unix sia allineata con quella usata da Samba via rete. Per fare in modo che una password cambiata tramite Samba si rispecchi anche sul /etc/passwd locale si devono aggiungere a smb.conf simili righe di configurazione:
unix password sync = yes Imposta la sincronizzazione delle password fra Samba e il sistema Unix locale
passwd program = /usr/bin/passwd %u La riga di comando per cambiare la password Unix. %u è la login dell'utente
passwd chat = *New*UNIX*password* %n\n *Retype*new*UNIX*password* %n\n *Enter* new*UNIX*password* %n\n *Retype*new*UNIX*password* %n\n *passwd: *all* authentication*tokens*updated*successfully* La procedura di matching per gestire le richieste in output di passwd. Assicurarsi che sul proprio sistema siano utilizzate le stesse parole
Purtroppo questa procedura non funziona al contrario: se si cambia con passwd una password Unix, si dovrà cambiarla a mano con smbpasswd per tenere sincronizzata la password Unix con la password Samba.
5- Configurazione dei client
La configurazione di un sistema Windows per unirsi ad un dominio, varia a seconda della versione:
Windows 95/98/ME:
- Verificare che sia installato il "Client per Reti Microsoft" fra le proprietà di rete
- Assicurarsi che il Client per Reti Microsoft sia selezionato come protocollo di rete primario (Pannello di Controllo -> Rete -> Logon di rete primario).
- Andare su Pannello di Controllo -> Rete -> Client per reti Microsoft -> Proprietà -> Logon su Dominio NT.
- Se si è configurata su smb.conf l'opzione "add user script", selezionare il checkbox Crea un Computer Account, altrimenti creare a mano sul server Samba un utente con il nome della macchina Windows.
- Inserire il nome del proprio dominio e cliccare OK.
Windows NT:
- Andare su Pannello di Controllo -> Rete -> Identificazione Rete -> Proprietà
- Selezionare Dominio e inserire il nome del prorio dominio
- Selezionare Crea un Computer Account
- Alla richiesta della password di un amministratore inserire la login e la password di root, ricordarsi che l'utente root deve essere aggiunto a smbpasswd.
- Dovrebbe comparire un messaggio che ci da il benvenuto sul dominio.
Windows 2000:
Le procedure sono uguali a quelle per Windows NT tranne che i settaggi di rete sono trovati sotto Pannello di Controllo -> Sistema -> Identificazione Rete (oppure, sul Desktop, cliccare col tasto destro del mouse sull'icona Risorse del Computer, selezionare Proprietà, cliccare sulla tab Identificazione Rete e sul tasto Proprietà).
Windows XP:
La procedura con Windows XP è più complessa (lamentele a Microsoft che usa cambiare le specifiche e le implementazioni dei suoi protocolli anche per rendere più complicata l'interoperabilità con soluzioni alternative).
Notare che solo XP Professional Edition può essere usato per far parte di un dominio, Windows XP Home Edition non può far parte di un dominio (Samba o Windows based).
- Aprire l'editor delle policy di Sicurezza Locale (Start->Pannello di controllo->Strumenti di Aministrazione->Criteri di protezione locali->Criteri locali->opzioni di protezione)
- Disabilitare la voce "Domain member: Digitally encrypt or sign secure channel (always)" (Membro di dominio: aggiunta crittografia of irma digitale ai dati del canale protetto (sempre) )
- Disabilitare la voce "Domain member: Disable machine account password changes" (Controller di dominio: rifiuta cambio password account computer)
- Disabilitare la voce "Domain member: Require strong (Windows 2000 or later) session key" (Membro di dominio: richiesta chiave di sessione avanzata (Windows 2000 o versioni successive) )
- Scaricare da Samba.org (http://de.samba.org/samba/ftp/docs/Registry/WinXP_SignOrSeal.reg) la patch per il registro WinXP_SignOrSeal. Per applicarla cliccare due volte sul file .reg e rispondere Si alle domande
- A questo punto ci si può unire al dominio come su Windows NT/2000: Tasto destro su Risorse del Computer, selezionare Proprietà, Nome del Computer e tasto Modifica uppure cliccare su Identificazione di Rete ed eseguire il Wizard.
Linux/Unix:
Anche dei sistemi Linux, ovviamente, possono unirsi ad un dominio con un PDC Samba e se sono dei file server, si può configurare Samba per permettere l'autenticazione tramite il dominio.
Su smb.conf ci devono essere le seguenti righe:
[global]
workgroup = <nome dominio>
netbios name = <nome server samba>
security = DOMAIN
encrypt passwords = Yes
password server = <nome/ip del PDC>
preferred master = False
domain master = False
Ovviamente sul PDC Samba deve essere creato un computer account per il nostro Samba locale (con il nome specificato in netbios name) e, anche in questo caso, il computer locale deve preventivamente unirsi al dominio, con una procedura che è paragonabile a quelle viste sopra per client Windows. Sul Linux/Unix locale basta scrivere:
smbpasswd -j <nome dominio> -r <nome PDC server> -U root
Bisogna fornire la password di root del PDC Samba (ricordarsi che è la password salvata in smbpasswd e non in passwd/shadow, nel caso fossero diverse).
====================================================
Autenticazione di utenti MS-Windows con Samba
A partire dalla versione 2.0 è possibile configurare Samba come domain controller e autenticare gli utenti degli elaboratori clienti MS-Windows 95/98 sostituendo un servente MS-Windows NT/2000.
Con la versione 2.1 è stata data la possibilità di accreditare anche clienti MS-Windows NT.
Dalla versione 2.2, che è la più recente, Samba può accreditare anche clienti MS-Windows 2000/XP, partecipare a una ADS (Active directory service) ed è stato aggiunto il demone winbind che consente di usare un domain controller MS-Windows come servente per le utenze, allineando del tutto le utenze di GNU/Linux con quelle di MS-Windows e centralizzando la loro gestione su un solo sistema.
È sicuramente anche il caso di elencare ciò che Samba non può fare (almeno per il momento):
*utilizzo di BDC (Backup domain controller) in domini NT e Active directory replication con MS-Windows 2000;
*partecipazione ad alcun tipo di trust relationship;
*sostituzione di un MS-Windows 2000-Server.
In questa sede viene presa in esame solo la configurazione di Samba come PDC per l'accreditamento di clienti MS-Windows 95/98/Me/NT.
Di seguito viene presentato un possibile file smb.conf con le definizioni necessarie affinché Samba sia un PDC:
[global]
netbios name = ServerSamba
workgroup = INF
server string = Samba Server NT
log file = /var/log/samba/%m.log
max log file = 50
security = user
encrypt password = yes
smb password file = /etc/samba/smbpasswd
local master = yes
preferred master = yes
os level = 33
domain master = yes
;
domain logons = yes
;
# script di accesso fisso per tutti
logon script = logon.bat
# oppure uno per ogni cliente
; logon script = %m.bat
# oppure uno per ogni utente
; logon script = %U.bat 

# profili utenti 
logon path = \\ServerSamba\profile\%U
[netlogon]
comment = Directory degli script di inizializzazione
path = /home/netlogon
read only = yes
guest ok = yes
browseable = no
[home]
comment = Dir utente
path = /home/%U
browseable = yes
writable = yes
[public]
comment = Dir pubblica
path = /home/public
browseable = yes
writable = yes
public = yes
create mask = 0777
6.1 Domain logons
È la direttiva che permette di configurare Samba come PDC in quanto lo imposta come servente di autenticazione di dominio.
6.2 Logon script
Samba consente l'esecuzione degli script di accesso di MS-Windows (.BAT o .CMD). Tali script vengono eseguiti sul cliente al momento della connessione di un utente al dominio ma sono memorizzati sul servente e vengono quindi trasferiti attraverso la rete. Ovviamente sono molto utili per impostare dinamicamente le configurazioni di rete per gli utenti quando si connettono.
L'opzione logon script permette appunto di indicare il nome dello script da eseguire quando l'utente si collega; come si vede dall'esempio può essere uno script unico, valido per tutti, oppure dipendente dal cliente o dal nome utente.
Sul servente GNU/Linux questi script vengono memorizzati nella directory indicata nella condivisione netlogon, che viene descritta più avanti.
Una cosa importante da ricordare è che gli script di accesso vengono eseguiti in ambiente MS-Windows e devono essere quindi scritti con righe terminanti con i caratteri di <CR> e <LF>, invece del solo <LF> di un sistema GNU/Linux.
L'esempio seguente di script di accesso, definisce un disco di rete W: su una condivisione di Samba:
echo Connette disco di rete
net use w: \\ServerSamba\dati
6.3 Logon path
In MS-Windows 95/98 ciascun utente può avere il proprio profilo comprendente informazioni sull'aspetto della scrivania grafica, sulle applicazioni che appaiono nel menù {Start}, sullo sfondo e altre ancora. Tale profilo può essere memorizzato direttamente su un elaboratore cliente e si chiama allora «profilo locale», oppure sul servente e si chiama «profilo di roaming», in quanto l'utente ha a disposizione sempre lo stesso ambiente anche spostandosi da un cliente all'altro.
La direttiva logon path viene usata per indicare dove vengono memorizzati i profili dei vari utenti.
6.4 Logon home e logon drive
Con logon home si indica la posizione della directory personale di un utente, che può essere diversa da quella indicata nella sezione homes.
Con logon drive, da usare solo in caso di clienti MS-Windows NT, si indica la lettera del disco su un client in cui vengono abbinate le directory personali indicate con logon home.
6.5 Sezione [netlogon]
In questa sezione viene configurata una condivisione speciale che serve a contenere gli script di accesso. La configurazione scelta nell'esempio (sola lettura, pubblica, non visibile alla scansione delle risorse) è dettata dal ruolo particolare che svolge.
6.6 Definizione delle utenze per macchina
Nel caso nella rete siano presenti dei clienti MS-Windows NT/2000/XP Workstation/Professional, per essi devono essere creati sul PDC i cosiddetti machine account in aggiunta alle utenze normali. Ovviamente, tali utenze speciali devono essere inserite sia come utenti Samba che come utenti del sistema GNU/Linux che ospita il servente. Tale operazione può essere fatta in modo automatico (direttiva add user illustrata nel paragrafo sul livello di sicurezza domain nel capitolo riguardante il servente Samba 2.3.1.4) oppure manualmente, con i seguenti comandi:
# /usr/sbin/useradd -d /dev/null -g 100 -c"descrizione_dell'elaboratore_client" <-'
`->-s /bin/false nome_elaboratore$
# passwd -l nome_elaboratore$
# smbpasswd -a -m nome_elaboratore
È necessario prestare attenzione al carattere $ alla fine del nome della macchina nel primo e nel secondo comando.
Il secondo comando permette di bloccare la parola d'ordine di quell'utente fittizio.
Con il terzo comando si definisce l'utente nome_elaboratore per Samba grazie all'opzione -m.
6.7 Nota importante per clienti MS-Windows XP Professional
Nel caso si tenti di accedere da dei clienti MS-Windows XP, il processo di autenticazione non si conclude positivamente a causa di una impostazione di sicurezza che deve essere variata nella macchina cliente.
A questo scopo occorre attivare la macchina MS-Windows XP come utente Administrator in locale ed effettuare i seguenti passaggi:
«Pannello di controllo»
«Prestazioni e manutenzione»
«Strumenti di amministrazione»
«Criteri di protezione locali»
«Criteri locali»
«Opzioni di protezione»
Nella lista che si ottiene si deve individuare la voce:
«Membro di dominio: aggiunta crittografia o firma digitale ai dati del canale protetto (sempre)»
e si deve impostarla a disabilitata.
Al successivo avvio della macchina sarà possibile farsi autenticare dal PDC Samba.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome autenticazione_di_utenti_ms_windows_con_samba.html
==========================================================
Samba come PDC in una rete Windows
Samba può rimpiazzare NT come Primary Domain Controller in una rete di workstation Windows
Samba è un software/protocollo molto potente. Racchiude numerosissime feature che ne fanno probabilmente il prodotto per Linux più conosciuto: grazie ad esso si è infatti abbattuta del tutto la barriera tra reti Linux/Unix e Windows. In questo articolo si spiega come configurare un server Samba su piattaforma Linux come sistema di autenticazione PDC per una lan di macchine Windows.
Configurare SAMBA come PDC è stata un'esigenza visto che avevo bisogno di un metodo unico per autenticare le mie workstation Windows 98 ed NT. Il server della rete è Linux ,e quindi, non potevo togliere a lui il compito di autenticare i logon delle workstation e lasciarlo ad un 'semplice' server NT ;)
Ecco i pacchetti contenuti nel Server Linux RedHat 6.2:
# samba-common-2.0.10-0.62
# samba-client-2.0.10-0.62
# samba-2.0.10-0.62
Per la configurazione ed il controllo dei demoni di Samba vi rimando alla seguente risorsa:
http://www.pluto.linux.it/ildp/HOWTO/SMB-HOWTO.html 
Qui voglio solo mostrarvi cosa fare per configurare Samba come PDC. Ecco il mio file di configurazione:
# Samba config file created using SWAT
# from konus.konus.org (192.168.0.1)
# Date: 2001/06/26 23:30:45
# Global parameters
[global]
workgroup = KONUSGR
netbios name = FILESERVER
server string = Fileserver %v
encrypt passwords = Yes
update encrypted = Yes
log file = /var/log/samba/log.%m
time server = Yes
read prediction = Yes
socket options =
domain admin group = @adm
logon script = default.bat
logon drive = H:
domain logons = Yes
os level = 65
preferred master = Yes
domain master = Yes
remote announce = 192.168/KONUSGR
remote browse sync = 192.168
socket address = 192.168.0.4
hosts allow = 192.168.
[homes]
comment = Home Directories
writeable = Yes
create mask = 0750
browseable = No
[printers]
comment = All Printers
path = /tmp
create mask = 0700
printable = Yes
browseable = No
[c]
comment = Linux principale
path = /
writeable = Yes
guest ok = Yes
dont descend = /proc ./proc /etc
[mp3]
comment = MP3 Files
path = /usr/share/mp3
admin users = root, duck
write list = duck, root
force user = root
writeable = Yes
[netlogon]
path = /usr/local/samba/netlogon
[profiles]
path = /usr/local/samba/ntprofile
writeable = Yes
create mask = 0700
directory mask = 0700
In questo file di configurazione vi sono molti parametri che già di default vengono inseriti da Samba e vi rimando quindi al documento che vi ho citato prima. Vi spiego, invece, l'utilizzo di alcuni di essi utili a raggiungere il nostro scopo:
domain admin group = @adm
Questo parametro indica un gruppo configurato sul server. Tutti gli utenti che faranno parte di questo gruppo verranno considerati Amministratori del Dominio appena faranno un Logon su workstations NT nel nostro domino.
Il gruppo degli amministratori non è necessario che si chiami adm, l'importante è che sia presente una voce nel file /etc/group del server Linux.
encrypt passwords = Yes
update encrypted = Yes
Questi due parametri sono necessari per far si che vi sia una corrispondenza di criptazione fra le password del server Linux in smbpasswd e quelle dei server NT.
logon script = default.bat
Questo parametro permetterà a Samba di cercare lo script di default da eseguire su una macchina Windows NT, 98 o 95 che sia, appena verrà effettuato il Logon.
Lo script che ho inserito io è ad, esempio:
rem Default logon script, create links to this file.
net time \fileserver /set /yes
@echo off
if %OS%.==Windows_NT. goto WinNT
:Win95
net use x: \fileserver\mp3
net use y: \fileserver\c
goto end
:WinNT
net use x: \fileserver\mp3 /persistent:no
net use y: \fileserver\c /persistent:no
:end
Lo script default.bat lo dobbiamo mettere nella directory definita alla sezione:
[netlogon]
path = /usr/local/samba/netlogon
Configuriamo ora gli utenti e le workstation che potranno loggarsi al nostro dominio:
Macchine NT:
Ogni macchina NT del dominio dovrà avere la sua riga sia in /etc/passwd che in /etc/smbpasswd. Nel file /etc/passwd vi sarà l'ID del login mentre in smbpasswd vi sarà la stessa password criptata in formato NT.
adduser –g microsoft –c MSworkst –d /dev/null –s /bin/false –n pippo
Questa riga crea un utente di nome pippo (il nome della mia workstation NT), nel gruppo microsoft con commento MSworkst con directory home /dev/null e con shell /bin/false. In questo modo l'utente pippo non potrà effettuare un telnet sulla macchina Linux.
smbpasswd -a -m pippo
Questo comando, invece, crea la password di pippo nel file /etc/smbpasswd
Utenti del dominio:
Ogni utente del dominio dovrà avere un account sul PDC sia come utente del server linux che nel file smbpasswd. La home directory può benissimo essere /dev/null così come per la shell:
adduser -g users -c 'Raffaello Di Martino' -s /bin/false -n raffo
smbpasswd -a raffo
Ora possiamo provare a loggarci con la nostra workstation Microsoft...semplice no ?
Risorse
# Sito ufficiale di SAMBA http://www.samba.org/ 
# Samba: An introduction by Christopher R. Hertel http://rute.sourceforge.net/node42.html#SECTION004210000000000000000 
# The Samba 2.2 PDC HowTo, di David Bannon http://bioserve.latrobe.edu.au/samba/samba-pdc-howto.html 
# Samba NT Domain Controller, di Mayank Sarup http://www.freeos.com/articles/3842/ 

Singolo Web Server per carichi bassi
Se le nostre stime sul traffico Web da sostenere non sono alte e si presume che, quantomeno in una fase iniziale, possono bastare meno di, indicativamente, 512 Kbit di banda e un server in grado di gestire qualche centinaio di visite medie al giorno o qualche migliaia di pageviews, probabilmente una singola macchina può bastare.
Ovviamente è un'indicazione di massima, che si adatta a contesti medi con queste caratteristiche e necessità di uptime non estreme.
Se il nostro web server è il frontend di un datawarehouse di un TeraByte di dati, è ovvio che ci dovrà essere almeno una macchina separata per gestire il DB, se dovrà ospitare un sito estremamente sicuro, si dovrà considerare una o più macchine aunomome con funzioni di intrusion detection e traffic analysys, se il servizio deve avere uptime nell'ordine del 99,9% ci sarà da considerare l'implementazione di un cluster o di un'altra struttura di HA, e così dicendo.
Dimensionamento hardware
Casi particolari a parte, le necessità richieste possono essere erogate con un sistema Linux munito di Apache + PHP o Mod_Perl, con database MySql su un singolo server Intel Based, con RAM di almeno 256Mb (minimo), dischi EIDE di capacità sufficienti per ospitare le pagine web e i dati del DB, scheda di rete a 10/100 Mbit/sec, processore Pentium 3 o superiore.
Ovviamente visti i costi sempre descrescenti dell'hardware, è preferibile acquistare una macchina nuova, con le garanzie di assistenza del caso, che ormai offre capacità superiori.
La RAM, in particolare influisce sulle prestazioni del server, i 256 MB indicati probabilmente non bastano a riempire i 512 Mbit di banda ipotizzati con contenuti dinamici.
Software installati
Se la scelta è l'OpenSource le soluzioni sono quasi ovvie: Linux o *BSD come sistema operativo, Apache come web server, PHP o Perl come linguaggio più comune per la gestione di pagine dinamiche (anche se le alternative sono molte), MySQL o PostgreSQL come database server. Si possono installare programmi o servizi specifici (ftp server per l'uplodad delle pagine del sito, traffic analyzer per statistiche sul traffico web ecc.) e considerare l'uso di un sistema di firewalling interno: le Iptables su Linux sono estremamente efficaci e "leggere" e rappresentano un buon modo per limitare l'accesso pubblico a tutte le porte che non siano l'80 su cui deve essere erogato il servizio web pubblico.
Impostazione della struttura applicativa
Molte scelte che influenzano in modo determinante la possibilità di espansione di un sito dipendono da come si impostano, fin dall'inizio, le strutture a livello applicativo.
MAI, per quasi nessun motivo, si dovrebbe inserire all'interno del codice (PHP, Perl o altri) degli indirizzi IP fissi, che inchiodano il server ad uno specifico indirizzo che renderebbe complicata e faticosa ogni migrazione o upgrade.
Usare sempre nomi di host diversi per diversi servizi: se ci si deve collegare al database, chiamarlo in modo diverso da come si chiama la macchina su cui gira il web server (e il database stesso). Usare un alias, ad esempio db.openskills.info: il giorno in cui il sito crescerà e ci sarà bisogno di una macchina separata per il DB, basterà cambiare una entry nel DNS senza dover intervenire sul codice nelle pagine.
Individuare i diversi servizi logici del sistema chiamandoli con nomi diversi fin dall'inizio facilita la possibilità di scalare in tempi successivi.
Usare classi, oggetti, include: evitare di scrivere lo stesso dato legato al contesto specifico e quindi potenzialmente mutabile (per esempio i parametri di connessione al DB) in file diversi.
Backup dei dati
Esistono molteplici modi per fare un backup, l'unica cosa che li accomuna è il FARLO.
Non è pensabile, in alcuna situazione, di non prevedere un sistema di backup di qualche tipo dei propri dati.
Alcune regole generali possono comunque essere indicate:
- Eseguire un backup remoto, su una macchina diversa dal server stesso e, se possibile in un edificio diverso.
- Se non si hanno grandi quantità da backuppare è preferibile usare un hard disk più che un nastro, come medium su cui scrivere le copie: permette tempi di recovery più rapidi e maggiore affidabilità.
- Può bastare backuppare solo i dati (pagine del sito, dump del db) e le configurazioni custom, in caso di guasti un nuovo sistema Linux/Unix si mette in piedi in tempi relativamente rapidi.
- Valutare l'opportunità di avere un server di backup che operi anche come cold standby: con poche riconfigurazioni e procedure è possibile far diventare la macchina che fa la copia dei dati anche una macchina di backup per il servizio stesso.
- Fra i metodi di backup via rete più efficaci che conosciamo, per moli di dati nell'ordine dei Gigabyte, segnaliamo rsync che permette copie differenziali di intere directory fra macchine remote (e possibilità di ripristino dei dati in tempi rapidi e con pochi sforzi).
Ridondanza
Come sempre, il budget influenza in modo determinante le tecniche di ridondanza praticabili. Per il dimensionamento indicato, ipotizzando un budget ridotto, ci sentiamo di consigliare l'uso di hardware relativamente cheap (dischi IDE e non SCSI, niente mirror hardware, nessun specifico hardware di ridondanza) e prevedere la predisposizione di un server gemello, da usare per il backup e il cold standy.
Una simile configurazione, con un server principale in produzione, basato su economico hardware Intel-like e un server analogo configurato per eseguire regolare backup dei dati e già predisposto e configurato per offrire gli stessi servizi in caso di guasto del main server, può successivamente evolvere in una struttura ridondata più complessa, eventualmente con un hot standby.
In pratica, se il budget è un issue, l'esperienza di vari anni di utilizzo sia di hardware cheap che di soluzioni costose e più affidabili, ci porta a preferire una ridondanza completa di macchine economiche piuttosto che più costose soluzioni di ridondanza di singoli componenti.
Sicurezza
I requisiti minimi sono gli stessi prevedibili per ogni sistema presente su Internet:
- Esposizione ad IP pubblici solo delle porte strettamente necessarie per erogare il servizio;
- Aggiornamento costante, in presenza di nuove vulnerability, almeno del software che ascolta sulle porte pubbliche;
- Verifica di potenziali problemi di sicurezza degli script e delle pagine dinamiche a cui si può accedere tramite la porta pubblica (l'80, per il nostro web server).
Tutto quello che viene in più (Intrusion Detection a livello di rete, integrity check, statistiche ecc.) può essere utile o divertente, ma perde ogni significato se i 3 punti sopra elencati non vengono seguiti.
Per esporre il minor numero possibile di porte al pubblico, oltre ad eliminare tutti i servizi che di fatto non vengono utilizzati, si possono utilizzare firewall esterni o direttamente meccanismi di firewalling a livello dello stesso host.
Per certe porte ausiliarie (porta FTP per l'upload dei dati, porta TELNET o SSH per la gestione remota, porta utilizzata dal sistema di Network Backup in essere ecc.) è raccomandabile permettere l'accesso solo da range di IP limitati e fidati.
La struttura del network su cui appoggiare il proprio Web Server può ricalcare uno dei modelli tipici per il design di network pubblici, con presenza o meno di DMZ, firewall perimetrali e interni, bastion host ecc, la logica comunque deve rimanere quella esposta: lasciare accesso pubblico soltanto alle porte necessarie (solo la 80 per il server web), limitare il range di IP abilitati ad accedere a porte per i servizi accessori.