Guida Linux Server
Transcript
Guida Linux Server
Guida Linux Server Introduzione e installazione 1. 1. Panoramica generale Cos'è un server, i vantaggi di Linux in ambienti server, le principali distribuzioni 2. 2. Installazione Ubuntu Server Come installare la versione server di Ubuntu 9.10 3. 3. Configurazione della rete ed installazione software di base Impariamo a configurare la connessione alla rete del proprio server ed installiamo gli strumenti indispensabili I servizi Web 1. 4. Installare un web server: Apache Installiamo il web server più comunemente utilizzato: Apache in versione 2 2. 5. Configurare il web server Apache Le operazioni necessarie per la messa a punto del web server Apache 3. 6. Installare PHP e MySQL Vediamo come installare il motore PHP ed integrarlo con MySQL per la gestione dei database 4. 7. Configurare PHP e MySQL Come impostare e configurare al meglio i server PHP e MySQL I servizi per posta elettronica e file 1. 8. Installare un server mail: Postfix Come installare il server di posta elettronica Postfix 2. 9. Configurare Postfix Uno sguardo alla configurazione di Postfix e al suo utilizzo 3. 10. Installare Samba per la condivisione dei file Installiamo il servizio per condividere file in una rete Linux o in una rete mista Windows/Linux 4. 11. Configurare Samba Come configurare Samba per tutte le operazioni che può eseguire I servizi per DNS e accesso remoto 1. 12. Installare un DNS Server: BIND9 Vediamo come installare il server per la risoluzione degli indirizzi (DNS) BIND9 2. 13. Configurare Bind Configurazione e messa a punto del server DNS BIND9 3. 14. Installare SSH e FTP Come installare due tra i più diffusi sistemi di accesso da remoto: via protocollo SSH o protocollo FTP 4. 15. Configurare SSH e FTP per accedere da remoto Vediamo come impostare e configurare con sicurezza queste due vie di accesso al proprio server 5. 16. Installare e configurare Crontab e Anacron Installiamo e configuriamo gli strumenti necessari all'esecuzione di comandi in maniera automatica La sicurezza 1. 17. Iptables: configurare il firewall Impostiamo le regole del firewall Iptables per consentire ai processi di utilizzare la rete in maniera sicura 2. 18. mod_security e mod_ssl Moduli di protezione aggiuntiva per Apache: maggiore sicurezza e crittografia delle connessioni 3. 19. Backup Come avere sempre copie di backup dei file presenti sul proprio server: tar e rsync 4. 20. SpamAssassin Combattiamo lo spam con SpamAssassin, applicazione indispensabile per un server mail Strumenti di amministrazione 1. 21. EHCP (Easy Hosting Control Panel) Semplice e comodo pannello per la gestione di diverse impostazioni 2. 22. Webmin Installiamo e configuriamo al meglio Webmin Servizi utili 1. 23. Gestione dei servizi Vediamo come avviare, stoppare e gestire i principali servizi 2. 24. Monitoraggio dell'hardware - I Hdparm e smartctl. Come tenere sempre sotto controllo lo stato della macchina: il disco rigido. 3. 25. Monitoraggio dell'hardware - II Memtest86+ e lm_sensors. Come tenere sempre sotto controllo lo stato della macchina: la memoria Ram e le temperature Panoramica generale Vi siete mai chiesti come fanno i siti web che visitate a essere sempre disponibili e ad offrire i servizi che mettono a disposizione in ogni momento della giornata? La risposta è molto semplice, e nota ai più: ogni sito web, infatti, è ospitato su un server, una macchina costantemente collegata alla rete e sul quale vengono installati un sistema operativo ed una serie di applicazioni e strumenti tali da poter fornire agli utenti che si collegano da tutto il mondo servizi ed informazioni. Un server non è altro che un normale computer, a volte dotato di configurazioni hardware appositamente studiate per tale obiettivo, collegato ad internet: per tale motivo, è possibile creare in maniera non particolarmente complessa un proprio server casalingo, oppure acquistarne uno presso una farm, aziende che ospitano fisicamente i server, ed installare quanto necessario al suo funzionamento. Obiettivo di questa guida è, appunto, quello di fornire tutte le informazioni necessarie alla messa a punto di un proprio server, partendo dall'installazione del sistema operativo ed arrivando all'installazione e alla configurazione dei principali strumenti necessari. La base sulla quale costruiremo il nostro server sarà una distribuzione Linux: è noto, infatti, come Linux offra ottime prestazioni in ambienti server, grazie alla sua affidabilità, a prezzi notevolmente contenuti o in alcuni casi totalmente assenti. Sono tante, infatti, le distribuzioni Linux che vengono utilizzate da aziende di grosso calibro per la realizzazione dei propri server: Debian, ad esempio, grazie all'accurato lavoro di selezione e test dei pacchetti ufficiali svolto dal team di sviluppo, è una base solida e affidabile per un server; numerose sono poi le distribuzioni nate appositamente con lo scopo di girare in ambienti server: un esempio su tutti è CentOS, basata sulla distribuzione commerciale Red Hat Enterprise Linux, ed attualmente una delle principali soluzioni gratuite disponibili. Lo stesso HTML.it, per la maggioranza dei propri server, utilizza Linux come sistema operativo sul quale far girare i propri siti e i propri servizi. Questa guida, però, sarà basata su un'altra distribuzione, maggiormente diffusa tra gli utenti desktop, ma che presenta anche una versione per server: si tratta di Ubuntu, ed in particolare di Ubuntu Server, da qualche tempo giunta alla versione 9.10 con notevoli miglioramenti nelle prestazioni e nella sua funzionalità. L'installazione dei pacchetti necessari avverrà tramite apt-get, il sistema per la gestione dei software tipico di Debian e derivate, ma verrà affiancata dalla classica installazione tramite compilazione del codice sorgente del software, così da estendere la validità della guida a qualsiasi distribuzione Linux. Ma chiudiamo questa breve introduzione ed entriamo subito nel vivo della guida: nel prossimo capitolo vedremo come scaricare ed installare Ubuntu Server 9.10, scegliendo la versione più adatta alla propria configurazione hardware e alle proprie esigenze. Installazione Ubuntu Server Entriamo subito nel vivo della guida, vedendo come installare scaricare l'immagine ISO ufficiale di Ubuntu Server e come installarla per avere a disposizione una delle migliori soluzioni in ambienti server attualmente disponibile. Dalla pagina dedicata del sito Ubuntu è possibile scegliere quale versione scaricare: nel nostro caso utilizzeremo Ubuntu Server 9.10, l'ultima versione disponibile al momento della stesura della guida. Selezioniamo dal menu un mirror dal quale scaricare l'immagine ISO (sceglietene uno italiano) e, con un clic su Alternative download options, scegliete se scaricare una versione di Ubuntu Server ottimizzata per l'architettura del proprio server: a 32 o a 64 bit. Una volta effettuata questa scelta, siamo pronti per dare il via al download attraverso l'apposito pulsante. Per chi volesse scaricare Ubuntu Server dal velocissimo server Garr può usare i seguenti link diretti: Ubuntu Server 9.10 64 bit - Ubuntu Server 9.10 32 bit. Terminato il download, è possibile verificare che quanto scaricato non possegga difetti tramite un controllo con MD5SUM, di cui è disponibile una guida dettagliata sul Wiki ufficiale di Ubuntu. Passiamo dunque alla masterizzazione dell'immagine ISO su un supporto CD o DVD, ed avviamo la macchina scegliendolo come dispositivo di avvio. La prima schermata che avremo davanti sarà molto familiare a chiunque abbia già installato almeno una volta una qualunque versione di Ubuntu. Dopo aver selezionato la lingua, è possibile scegliere tra diverse opzioni: per procedere con l'installazione, selezioniamo Installa Ubuntu Server, e attendiamo il caricamento della schermata successiva. Figura 1: La schermata iniziale di installazione di Ubuntu Server Inizierà adesso una serie di finestre di dialogo che permetteranno di configurare molti dettagli del sistema operativo che andremo ad installare: si partirà dalla selezione della lingua del sistema e del layout della tastiera, dopo di che verrà rilevata la configurazione hardware della macchina, verranno selezionati alcuni pacchetti dal CD di installazione, sarà avviata la configurazione automatica della rete, e si riprenderà ad impostare il sistema operativo scegliendone il Nome host, ossia il nome che avrà la macchina all'interno della rete. Successivamente sarà avviato lo strumento per la gestione delle partizioni: è possibile scegliere di usare il partizionamento automatico, che provvederà ad utilizzare tutto il disco per l'installazione, oppure di gestire manualmente il disco e scegliere la dimensione da dedicare ad ogni partizioni. Se sulla macchina dovrà essere installato solo Ubuntu Server, consigliamo di scegliere l'opzione Guidato - usa l'intero disco senza impostare il LVM (gestore logico dei volumi), che richiederà solo di scegliere il disco da utilizzare. In ogni caso, al termine dell'operazione di partizionamento, verrà mostrata una finestra riepilogativa, che permetterà di verificare tutte le impostazioni relative al disco: se tutto è configurato al meglio, scegliamo di scrivere le modifiche sul disco spostandoci con le frecce della tastiera su Sì e premendo Invio. Figura 2: La conferma del partizionamento del disco L'operazione di scrittura sul disco fisso impiegherà alcuni minuti, ed una volta ultimata partirà l'installazione del sistema di base. Quando saranno stati installati tutti i componenti principali, verrà chiesto di scegliere il nome da assegnare al proprio utente e la relativa password, con la possibilità di cifrare la propria directory home. Si passerà dunque alla configurazione di apt-get e degli aggiornamenti automatici. In seguito verrà proposta una serie di applicazioni da installare, tipiche degli ambienti server: quelle selezionate verranno installate in maniera automatica, anche se nel seguito della guida vedremo come installare manualmente molti degli strumenti proposti, per cui è possibile lasciare tutti i campi vuoti. Gli unici aspetti di tale elenco che non verranno trattati sono Samba, Tomcat e Virtual Machine, per cui se si necessita di tali componenti può tornare utile selezionarne l'installazione automatica. Dopo aver selezionato quali componenti installare verrà avviata l'installazione di altri software necessari al funzionamento del sistema operativo, inclusi quelli da noi selezionati poco prima. Al termine di questa operazione verrà effettuata una pulizia dei pacchetti utilizzati per l'installazione, verranno configurati automaticamente alcuni parametri di sistema, e verrà mostrata una nuova finestra che ci confermerà il termine dell'installazione di Ubuntu Server. Scegliamo di continuare, e attendiamo il riavvio della macchina. Una volta avviato il sistema operativo, siamo pronti ad utilizzare Ubuntu Server per creare il nostro server personale. Configurazione della rete ed installazione software di base Dopo aver portato a termine l'installazione di Ubuntu Server ed aver avviato il sistema operativo, siamo pronti per metter mano subito alla configurazione dell'ambiente server. Le prime operazioni necessarie sono l'impostazione dei parametri di rete e l'installazione di un browser testuale, per poter navigare tra le pagine web e scaricare i sorgenti delle applicazioni che installeremo. Va ricordato che, per impostazione predefinita, Ubuntu Server non installa l'interfaccia grafica e tutte le operazioni sono da eseguirsi attraverso il terminale o console. Due comandi che potrebbero risultare utili in questa modalità sono halt che serve per spegnere la macchina e reboot che serve per riavviarla. Entrambi vanno utilizzati facendoli precedere dal comando sudo che permette di eseguire comandi che hanno bisogno dell'autorizzazione dell'amministratore (root) e della sua password: per spegnere, ad esempio, il server andrà eseguito il comando sudo halt e inserire la password dell'account di root (di solito quella che si usa per eseguire il login). Per poter lavorare con questo tipo di comandi senza dover ogni volta farli precedere da sudo si può eseguire il comando sudo su. Figura 3: Il terminale di Ubuntu Server 9.10 Se la macchina è stata collegata alla rete prima dell'installazione del sistema operativo, il programma di installazione avrà configurato i parametri di rete in modo tale che l'indirizzo IP del computer venga assegnato tramite DHCP. Tale configurazione, però, non si presta ad un ambiente server, in quanto una macchina che lavora come server ha bisogno di avere un indirizzo IP statico. Per tale motivo modifichiamo il file /etc/network/interfaces tramite il comando $ sudo nano /etc/network/interfaces e, posto che la nostra rete sia collegata ad un router con IP 192.168.0.1, rendiamolo simile al seguente: 1 # This file describes the network interfaces available on your system 2 # and how to activate them. For more information, see interfaces(5). 3 # The loopback network interface auto lo 4 iface lo inet loopback 5 # The primary network interface 6 auto eth0 7 iface eth0 inet static address 192.168.0.100 8 netmask 255.255.255.0 9 network 192.168.0.0 10 broadcast 192.168.0.255 gateway 192.168.0.1 11 12 13 In questo caso, l'interfaccia di rete utilizzata è eth0 e l'IP assegnato è 192.168.0.100. Per conoscere le interfacce di rete presenti sulla propria macchina è possibile utilizzare il comando ifconfig, che fornirà un elenco di tutte quelle collegate ed attive. L'IP può essere scelto a piacere, purché sia del tipo 192.168.0.X, dove X è un numero compreso tra 2 e 254. Andiamo adesso a modificare il file /etc/hosts per far sì che la macchina riconosca l'indirizzo IP scelto: $ sudo nano /etc/hosts e aggiungiamo la riga 1192.168.0.100 ubuntu utilizzando lo stesso IP scelto prima, e dove ubuntu è il nome di host che abbiamo assegnato alla macchina durante la fase di installazione, reperibile anche tramite il comando $ cat /etc/hostname Passiamo alla configurazione dei server DNS, tramite la modifica del file /etc/resolv.conf: $ sudo nano /etc/resolv.conf Una scelta universale è quella di utilizzare il servizio gratuito offerto da OpenDNS, aggiungendo a tale file le seguenti righe: 1# OpenDNS 2nameserver 208.67.220.220 3nameserver 208.67.222.222 Riavviamo i servizi di rete tramite il comando $ sudo /etc/init.d/networking restart e testiamo la connessione "pingando" un sito web a piacere, ad esempio $ ping www.google.it Nel caso in cui tutto sia stato configurato in maniera corretta, si riceverà una risposta ai pacchetti inviati tramite ping, segno che la connessione funziona, altrimenti è necessario riconfigurare i parametri di rete e correggere eventuali errori commessi. Una volta stabilita la connessione alla rete, procediamo con l'installazione del browser web links2, tramite il comando $ sudo apt-get install links2 Ultimo passaggio preliminare necessario è l'installazione di alcuni pacchetti di base che serviranno per la compilazione dei sorgenti di alcuni software. Per fare ciò, lanciamo il comando: $ sudo apt-get install binutils cpp gcc make automake autoconf debhelper g++ Installare un web server: Apache Iniziamo, dunque, ad installare tutte le applicazioni che collaboreranno alla messa a punto del nostro server. Il primo strumento da cui partiremo è Apache, la base di tutta l'architettura che andremo a realizzare: si tratta di una delle piattaforme server più diffuse ed apprezzate attualmente in circolazione, non presenta troppi ostacoli per una configurazione sufficiente a far girare nel migliore dei modi il proprio server, ed è dotata di una documentazione piuttosto vasta che potrà essere utile nella risoluzione dei problemi riscontrati. Ad ogni richiesta fatta al nostro server, sarà proprio Apache ad occuparsi di rispondere, fornendo le informazioni richieste, come ad esempio una pagina web. I pacchetti di Apache sono presenti nei repository di Ubuntu, così come tutti gli altri software che installeremo nel seguito della guida, ma può essere utile compilare ed installare manualmente tali strumenti per ottenere un maggiore livello di personalizzazione. Installazione da repository L'installazione tramite repository è molto semplice. Come prima operazione, aggiorniamo il database dei pacchetti tramite il comando: $ sudo apt-get update Quindi procediamo con l'installazione con: $ sudo apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert Verranno così prelevati dai repository i pacchetti precompilati in formato Deb e saranno installati in maniera del tutto automatica. Dopo pochi minuti, Apache sarà subito pronto per essere avviato ed utilizzato in tutte le sue funzionalità. Installazione da codice sorgente Vediamo invece adesso come installare il web server Apache tramite la compilazione del codice sorgente. Tramite il browser links2 che abbiamo precedentemente installato al momento della configurazione della rete, colleghiamoci alla pagina di download di Apache tramite: $ links2 http://httpd.apache.org/download.cgi Tramite la tastiera scorriamo la pagina fino ad arrivare alla sezione che permette di scaricare il pacchetto compresso: sempre tramite i tasti direzionali della tastiera selezioniamo il file in formato .tar.gz presente vicino alla voce "Unix Source" e premiamo Invio. Figura 4: Il download di Apache 2 Scegliamo di salvare il file e attendiamo il termine dell'operazione di download. Premiamo contemporaneamente i tasti CTRL e C per chiudere il browser e scompattiamo l'archivio con il seguente comando: $ tar xzvf httpd-2.2.XX.tar.gz dove ad XX va sostituito il numero della versione di Apache che abbiamo scaricato; per semplificare l'operazione, dopo aver digitato httpd premiamo il tasto TAB sulla tastiera per utilizzare il completamento automatico che fornirà il nome esatto dell'archivio scaricato. Entriamo dunque nella directory contenente i sorgenti con $ cd httpd-2.2.xx per poter procedere con la compilazione dei sorgenti. La prima operazione da fare è la preparazione dell'ambiente di compilazione tramite lo strumento configure. Tramite tale strumento è possibile abilitare e disabilitare funzionalità di cui abbiamo bisogno o, viceversa, non sono utili ai nostri scopi, suggerire percorsi alternativi per l'installazione, introdurre nuovi moduli e così via. Sul sito di Apache è disponibile un elenco dei moduli attivi e di quelli non attivi di default: tra questi ultimi figurano due moduli piuttosto importanti, mod_rewrite, utile per la trasformazione e la riscrittura degli URL, e mod_ssl, che vedremo nel dettaglio nei capitoli successivi. Prima di compilare Apache con tali moduli dobbiamo però installare le librerie necessarie al modulo ssl: $ sudo apt-get install libssl-dev Passiamo poi alla configurazione del web server: $ ./configure --enable-so --enable-rewrite --enable-ssl aggiungendo, se vogliamo, altri moduli da abilitare o disabilitare utilizzando lo stesso schema visto per mod_rewrite e mod_ssl. Passiamo ora alla compilazione del web server, tramite il comando $ make e, al termine del processo che potrebbe durare anche diversi minuti, a seconda delle capacità della propria macchina, passiamo all'installazione digitando $ sudo make install Una volta ultimata l'installazione, per testare subito se Apache è stato installato correttamente digitiamo $ sudo /etc/init.d/apache2 start Configurare il web server Apache Una volta installato Apache e controllato che tutto sia andato per il verso giusto, passiamo alla configurazione del web server in modo tale da avere tutte le funzionalità e tutte le caratteristiche di cui abbiamo bisogno. I file di configurazione di Apache sono diversi, ognuno mirato ad uno scopo, e situati tutti nella directory /etc/apache2, a meno di eventuali modifiche apportate durante la fase di compilazione: apache2.conf include le principali opzioni e permette di avere una configurazione di base già piuttosto buona, httpd.conf contiene i parametri configurati dall'utente, in ports.conf risiede l'elenco delle porte sulle quali Apache deve stare in ascolto per eventuali connessioni. Dopo l'installazione, il file httpd.conf sarà vuoto, ports.conf avrà solo poche righe, mentre apache2.conf sarà più corposo degli altri due file. Tutte le modifiche apportate a httpd.conf e ports.conf saranno riflesse anche al file apache2.conf, il quale ingloba i parametri di configurazione descritti nei primi due file grazie alle righe 1include /etc/apache2/httpd.conf 2include /etc/apache2/ports.conf La sintassi da utilizzare nei file di configurazione di Apache2 è abbastanza semplice: ogni riga contiene una direttiva, e alcune direttive possono definire un container, ovvero permettono di impostare alcune opzioni su file, directory o entrambi. Possono essere inclusi commenti, preceduti dal simbolo cancelletto #, e nel caso si necessiti di utilizzare più di una riga per una direttiva è possibile utilizzare il backslash \ per indicare ad Apache che la direttiva continua sulla riga successiva. Tale backslash non deve però essere seguito da alcun carattere o spazio. Esiste inoltre un comando per effettuare un test della configurazione, per evidenziare eventuali errori di sintassi, ed è il seguente: $ apache2ctl configtest Accediamo dunque al file /etc/apache2/httpd.conf con un editor di testo e vediamo come individuare una configurazione ottimale $ sudo nano /etc/apache2/httpd.conf In primo luogo, definiamo le informazioni più importanti da fornire ad Apache. Nulla può essere più chiaro di un esempio pratico: 1ServerName webserver 2DocumentRoot /var/www 3ServerRoot /etc/apache2 Listen 80 4User apache 5Group apache 6 La prima riga, ServerName, definisce il nome da associare al server che andremo a creare; DocumentRoot indica la directory all'interno della quale andranno inseriti i file da rendere pubblici, ovvero le pagine HTML dei siti web che andremo ad ospitare e così via, mentre ServerRoot sta a segnalare ad Apache qual è la directory di base del web server; la direttiva Listen indica le porte su cui Apache è in ascolto, e permette di essere ripetuta più volte per indicare porte diverse; User e Group, infine, indicano gli utenti ed il relativo gruppo che hanno accesso ad Apache. I parametri inseriti in questo esempio sono puramente indicativi, e possono essere personalizzati come più si preferisce. Apache è un web server modulare, ovvero permette di attivare o disattivare funzionalità semplicemente includendo o escludendo gli appositi moduli. Per attivare un modulo è possibile utilizzare la direttiva LoadModule, seguita dal nome del modulo da includere. Un elenco dei moduli disponibili è presente presso la documentazione ufficiale di Apache. Per applicare filtri e opzioni a determinate cartelle o file è possibile utilizzare le direttive <Directory> e <File>. La loro sintassi si avvicina molto alla sintassi utilizzata per i file XML: si tratta infatti di container, che necessitano di apertura con specificazione dell'oggetto su cui andranno applicate le opzioni, le varie configurazioni da applicare e di chiusura. Ad esempio, per permettere l'accesso alla directory /var/www/sitoweb ai soli IP relativi alla rete 192.168.1.X, scriveremo 1<Directory /var/www/sitoweb> 2 order deny,allow deny from all 3 allow from 192.168.1 4 </Directory> 5 Per maggiori informazioni sulle altre possibili opzioni, la documentazione relativa ad entrambe le direttive fornisce una delle migliori risorse. Una volta configurate tutte le impostazioni necessarie al proprio server, siamo pronti a chiudere l'editor nano tramite la combinazione di tasti CTRL + X, salviamo con lo stesso nome e riavviamo Apache con il comando $ sudo /etc/init.d/apache2 restart Installare PHP e MySQL Le potenzialità di Apache possono essere estese grazie all'installazione di due degli strumenti più diffusi nel settore dei server: PHP e MySQL. Il PHP Hypertext Preprocessor, infatti, permette di realizzare pagine dinamiche e di realizzare vere e proprie applicazioni web, grazie alla sua semplicità di scrittura e alla sua leggerezza; MySQL, invece, è un cosiddetto DataBase Management System, ovvero permette di immagazzinare informazioni all'interno delle tabelle di un database e di poterli gestire come meglio si ritiene opportuno. Il binomio PHP-MySQL rappresenta una delle soluzioni migliori attualmente disponibili, ed hanno il vantaggio di essere entrambi rilasciati con licenze Open Source. Vediamo adesso come installarli tramite i repository di Ubuntu Server. Come sempre, utilizziamo apt-get per il download dei pacchetti e per la loro installazione: per installare PHP, digitiamo $ sudo apt-get install libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-idn php-pear php5-recode php5-snmp php5-sqlite php5-xmlrpc php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-ps php5-pspell In questo modo installeremo tutte le principali componenti di PHP, necessarie al suo funzionamento e all'integrazione con Apache e MySQL. Esistono anche altri pacchetti che arricchiscono PHP di ulteriori funzionalità, come ad esempio le librerie GD installabili tramite il pacchetto php5-gd: per avere un elenco dettagliato dei pacchetti disponibili è possibile digitare $ apt-cache search php5 Il download dei pacchetti impiegherà un po' di tempo a causa delle dimensioni degli stessi, ma l'installazione sarà piuttosto rapida. Al termine, possiamo procedere con l'installazione dei pacchetti relativi a MySQL tramite il comando $ sudo apt-get install mysql-server mysql-client Durante l'installazione ci verrà chiesta la password da associare all'utente Root di MySQL: come per gli utenti di un sistema operativo Unix-Like, l'utente Root di MySQL non ha limitazioni in quanto a privilegi o permessi, ed ha accesso sia alla gestione che alla configurazione dei database. Una volta scelta la password tenendo conto di aspetti importanti quali la sicurezza e l'affidabilità della password stessa, confermiamola nel passaggio successivo e portiamo a termine l'installazione. Per controllare che l'installazione di MySQL è andata a buon fine, è possibile provare ad avviare il demone tramite il comando $ sudo /etc/init.d/mysql start e attendere la conferma dell'avvio. Per quanto riguarda l'installazione da sorgenti, tramite il browser testuale links2 è possibile accedere alle pagine di download dei due strumenti tramite i comandi $ links2 http://dev.mysql.com/downloads/mysql/5.1.html e $ links2 http://www.php.net/downloads.php e selezionare il download dei pacchetti contenenti i codici sorgenti, come fatto in precedenza con Apache. Compilare da sorgenti PHP e MySQL può essere utile, ma è un'operazione che può essere evitata tranquillamente in quanto non comporta particolari vantaggi, a differenza di Apache che durante la fase di compilazione può essere configurato in maniera piuttosto ampia. Per questo motivo, per sapere come fare ad installare da sorgenti questi due pacchetti rimandiamo alle documentazioni ufficiali di PHP e MySQL, sufficientemente ricche e ben strutturate. Configurare PHP e MySQL Come di norma, dopo l'installazione di PHP e MySQL passiamo alla loro configurazione. La prima operazione è l'abilitazione del modulo PHP in Apache e la configurazione di alcune opzioni di sicurezza che permettono di evitare l'esecuzione di codice potenzialmente dannoso. Tramite l'editor nano modifichiamo il file httpd.conf $ sudo nano /etc/apache2/httpd.conf ed aggiungiamo le seguenti righe: 1 2# Carico il modulo PHP5 LoadModule php5_module modules/libphp5.so 3# Abilito il parsing delle estensioni .php e .phps tramite il parser PHP 4<FilesMatch \.php$> SetHandler application/x-httpd-php 5 </FilesMatch> 6 \.phps$> 7<FilesMatch SetHandler application/x-httpd-php-source 8</FilesMatch> 9 e riavviamo Apache tramite $ sudo /etc/init.d/apache2 restart Passiamo ora alla configurazione vera e propria di PHP, tramite la modifica del file /etc/php5/apache2/php.ini $ sudo nano /etc/php5/apache2/php.ini Dopo l'installazione, tale file risulta essere già scritto, e contiene delle impostazioni di base, che possono essere ritenute sufficienti a chiunque necessiti di utilizzare PHP per la sola realizzazione di pagine dinamiche senza l'utilizzo di particolari configurazioni o strumenti aggiuntivi. Una modifica necessaria riguarda l'abilitazione del modulo relativo a MySQL: per farlo, spostiamoci nella parte finale del file, cerchiamo la sezione Dynamic Extensions e decommentiamo la riga extension=mysql.so eliminando il punto e virgola presente all'inizio. Per quanto riguarda MySQL, il file di configurazione è presente nella directory /etc/mysql e prende il nome di my.cnf. Apriamolo con il solito editor $ sudo nano /etc/mysql/my.cnf ed andiamo ad abilitare l'ascolto di MySQL su qualunque interfaccia, andando ad individuare la riga 1bind-address 127.0.0.1 e anteponendole un cancelletto per commentarla, in questo modo 1# bind-address 127.0.0.1 Come nel caso di PHP, anche MySQL presenta una configurazione iniziale sufficiente ad utilizzare tutte le principali funzionalità di cui gode. Per sapere meglio come configurare in maniera ottimale MySQL, ma soprattutto per avere una buona documentazione in italiano per imparare a gestire i database e le informazioni in essi contenute, suggeriamo la guida a MySQL di Database.HTML.it. Installare un server mail: Postfix Questa sezione sull'installazione e sulla configurazione degli strumenti necessari a mettere in piedi il nostro server personale continua con una delle principali applicazioni per l'invio e la ricezione di e-mail: Postfix. Postfix è un mail server, ovvero un software che si occupa di fornire tutti gli strumenti necessari per gestire la posta elettronica tramite il proprio server, senza appoggiarsi a provider esterni. Tra le sue principali caratteristiche troviamo la capacità di gestire grossi quantitativi di e-mail senza risentirne in termini di prestazioni, il supporto ai protocolli di crittazione per rendere sicuro lo scambio di posta, e un'organizzazione modulare che permette di avere tanti piccoli strumenti indipendenti, i cui bug e problemi non influiscono sugli altri. Come di norma, vediamo prima come installare Postfix tramite i comodi repository forniti dal team di Ubuntu, e poi tramite i sorgenti disponibili sul sito ufficiale del progetto, per ottenere una maggiore personalizzazione dell'applicazione. Per lanciare il download e l'installazione dei pacchetti di Postfix, come abbiamo visto nei capitoli precedenti, utilizziamo apt-get: $ sudo apt-get install postfix libsasl2-2 sasl2-bin libsasl2-modules procmail Durante la fase di installazione verranno poste due semplici domande, relative alla tipologia di mail server da installare (scegliamo Sito Internet) e al nome da assegnare al server di posta, che deve essere il nome del dominio che utilizzeremo per la posta elettronica. Vediamo adesso, invece, come procedere con l'installazione tramite codice sorgente. Utilizziamo links2 per accedere alla pagina di download $ links2 http://www.postfix.org/download.html Scegliamo il mirror da cui prelevare il file sorgente, e selezioniamo la voce "Source Code" per iniziare il download. Al termine, avremo un archivio del tipo postfix-X.X.X.tar.gz: scompattiamolo con $ tar xvzf postfix-X.X.X.tar.gz ed entriamo nella directory con $ cd postfix-X.X.X Adesso passiamo alla compilazione, semplicemente digitando $ make e, al termine della compilazione, se tutto è andato per il verso giusto, passiamo all'installazione con il classico $ sudo make install Durante la fase di compilazione è possibile passare alcuni parametri per personalizzare l'installazione successiva: ad esempio, è possibile combinare Postfix con database MySQL, PostgreSQL o LDAP, oppure utilizzare Perl per le espressioni regolari. Maggiori dettagli sono disponibili nella sezione relativa alla compilazione della guida ufficiale di Postfix, con informazioni su come abilitare ogni singolo strumento. Per verificare che l'installazione di Postfix sia andata a buon fine, avviamo il demone tramite il comando $ sudo /etc/init.d/postfix start Se riceviamo una risposta positiva, possiamo passare alla fase successiva: la configurazione del server di posta elettronica. Configurare Postfix Come per tutte le applicazioni fin'ora installate, anche Postfix offre un file di configurazione testuale per le principali impostazioni: tale file è /etc/postfix/main.cf. Per accedervi, utilizziamo nano $ sudo nano /etc/postfix/main.cf Qui sono situate tutte le più importanti opzioni di Postfix: dall'hostname ai principali alias, dai parametri relativi ai singoli account di posta ad altre tante informazioni. Per avere una prima semplice configurazione di Postfix, però, è possibile utilizzare uno strumento grafico: chiudiamo il file, e lanciamo il comando $ sudo dpkg-reconfigure postfix Verrà così mostrata una schermata di dialogo, che guiderà l'utente nella messa a punto del server di posta. Il primo quesito proposto, come durante la fase di installazione, riguarda la tipologia di mail server da utilizzare, e selezioniamo Sito Internet. Anche la seconda domanda risulta essere familiare: permette, infatti, di selezionare il nome del mail server, e possiamo sia modificare il valore precedentemente scelto, sia lasciarlo intatto. Il passaggio successivo permette di selezionare il destinatario delle e-mail indirizzate agli utenti root e postmaster, di solito non utilizzati per motivi di sicurezza. Il quarto passaggio offre la possibilità di aggiungere altri domini che verranno utilizzati per realizzare account di posta elettronica da gestire con Postfix: ogni dominio deve essere separato dall'altro tramite una virgola. Andando avanti, possiamo selezionare l'utilizzo degli aggiornamenti sincroni per la ricezione della posta elettronica, quali indirizzi locali Postfix deve gestire, se utilizzare o meno procmail per la consegna della posta locale (se lo abbiamo installato, scegliamo di utilizzarlo), i limiti di dimensioni relativi ai messaggi di posta elettronica, il carattere per individuare le estensioni degli indirizzi locali e il protocollo internet da utilizzare, che nella maggior parte dei casi è IPv4. Confermiamo l'ultima scelta, attendiamo la modifica automatica del file di configurazione ed il riavvio del server di posta, dopo di che siamo pronti ad utilizzare Postfix. Questa configurazione può essere sufficiente a chi non necessita di utilizzare ulteriori strumenti o di avere configurazioni più raffinate. Per imparare a gestire la posta elettronica con Postfix ed avere maggiori informazioni, consigliamo la documentazione presente sul sito ufficiale, piuttosto ricca di contentuti e ben strutturata, e che permette sia di avere delle guide alla configurazione e all'aggiunta di ulteriori strumenti, che di disporre di una valida guida alla risoluzione dei principali problemi. Installare Samba per la condivisione dei file Nel caso in cui si stia realizzando un server domestico, oppure ci siano più macchine connesse alla stessa rete locale, può tornare utile condividere in tale rete file e cartelle in modo da poter accedere a risorse fisicamente presenti su macchine diverse senza la necessità di trasferirli manualmente. Ciò è possibile grazie all'installazione di una sola applicazione: Samba. Samba è, appunto, uno strumento per la condivisione di file (e anche stampanti) tra macchine su cui girano sistemi operativi diversi. Con Samba, ad esempio, è possibile accedere a file situati su un computer Linux (il nostro server, ad esempio) semplicemente utilizzando il classico Esplora Risorse di Windows. Per l'installazione tramite i tradizionali repository Ubuntu, lanciamo il comando $ sudo apt-get install samba smbfs Insieme a questi due pacchetti verranno installate altre dipendenze e strumenti utili ad utilizzare a pieno le potenzialità offerte da Samba. Il download e l'installazione dovrebbe impiegare pochi minuti, e al termine sarà subito possibile passare alla configurazione dell'applicazione, per condividere file e cartelle e gestire i permessi di accesso. Per l'installazione dai sorgenti il procedimento è leggermente diverso. Iniziamo con il download del pacchetto contenente l'ultima versione disponibile, attraverso il comando $ wget http://us1.samba.org/samba/ftp/samba-latest.tar.gz Al termine del processo di download, scompattiamo l'archivio $ tar xvzf samba-latest.tar.gz Verrà creata così una directory del tipo samba-X.X.X: entriamo nella sua sottocartella source con il comando $ cd samba-X.X.X/source e creiamo ed avviamo lo script di configurazione con i comandi $ ./autogen.sh $ ./configure Come visto anche nei capitoli precedenti, l'esecuzione del configure può essere personalizzata tramite il passaggio di alcuni argomenti, per abilitare o disabilitare moduli e funzionalità. Ad esempio, per abilitare il supporto al protocollo SSL, possiamo lanciare $ ./configure --with-ssl Un elenco dettagliato di tutti i possibili parametri accettati dallo script configure è disponibile a questo indirizzo. Al termine dell'esecuzione di tale script, diamo il via alla compilazione, che impiegherà diversi minuti $ make Dopo aver atteso il tempo necessario alla compilazione del codice sorgente di Samba, siamo pronti ad installare tale software lanciando il comando $ sudo make install Per risparmiare spazio sul disco, è possibile installare solo i file binari, evitando dunque di installare anche la documentazione di Samba: ciò è possibile utilizzando per l'installazione il comando $ sudo make installbin Nel caso in cui volessimo installare in un secondo momento la documentazione, sarà possibile ottenerla utilizzando il comando $ sudo make installman Nel prossimo capitolo vedremo com'è strutturato il file di configurazione di Samba e come è possibile aggiungere nuove cartelle da condividere con gli altri utenti. Configurare Samba Anche Samba presenta un file di configurazione testuale che permette di gestire tutti i principali parametri dell'applicazione: tale file è /etc/samba/smb.conf, e presenta una struttura ed una sintassi piuttosto semplice, oltre ad essere diviso in blocchi, ognuno preposto ad uno scopo. Per entrare subito nel vivo della configurazione, apriamo tale file con nano $ sudo nano /etc/samba/smb.conf ed iniziamo a scorrerlo dall'alto verso il basso. I primi parametri che incontriamo riguardano la configurazione globale di Samba, all'interno della sezione [global]. Tramite queste opzioni è possibile configurare il nome del gruppo di lavoro relativo alla rete locale, il nome che assumerà la macchina all'interno di tale gruppo di lavoro e la relativa descrizione, gli IP cui è permesso l'accesso ai file locali, il livello di sicurezza da mantenere, i permessi di accesso su file e cartelle, e diverse altre opzioni. Un esempio per la sezione [global] può essere il seguente 1 [global] workgroup = GRUPPODILAVORO 2 netbios = NOMEMACCHINA 3 4 5 6 7 8 9 10 server string = DESCRIZIONE allow hosts = 192.168.1.0/24 security = USER create mask = 0755 encrypt passwords = yes smb passwd file = /etc/smbpasswd log file = /var/log/samba/log.%m Il valore USER di security permette di consentire l'accesso ai file solo tramite login: per avere una condivisione accessibile liberamente, tale parametro va impostato a SHARE. Le voci prima descritte, come del resto anche diverse altre, sono già presenti all'interno del file smb.conf creato dopo l'installazione: probabilmente conterranno valori leggermente diversi, oppure saranno commentate o sparse per tutto il file, per cui non è necessario aggiungerle manualmente, ma semplicemente individuarle e modificarle opportunamente. La sezione, come lascia intuire il suo nome, [homes], permette di gestire la condivisione della propria directory home. È consigliato creare apposite cartelle per la condivisione dei file, come vedremo successivamente, ma a volte può essere comodo avere in condivisione l'intera cartella home. Per fare ciò, è necessario impostare tale sezione in questo modo 1 [homes] 2 comment=Directory Home 3 browseable= yes public= yes 4 valid users= pippo, pluto, caio 5 create mask= 0700 6 directory mask= 0700 7 Così facendo, gli utenti pippo, pluto e caio potranno accedere alla nostra directory home a tutti i file in essa contenuti. Se vogliamo aggiungere una nuova cartella a quelle già condivise, è necessario creare una nuova sezione all'interno del file smb.conf. Supponiamo, ad esempio, di voler condividere con tutti la cartella /home/utente/documenti: la sezione andrà creata seguendo questo schema 1[documenti] 2 path=/home/utente/documenti browseable=yes 3 valid users=pippo, pluto, caio 4 Per poter abilitare gli utenti pippo, pluto e caio all'accesso ai file, siano essi contenuti nella directory home o in altre cartelle aggiunte successivamente, è necessario creare gli utenti virtuali per Samba in tale modo $ sudo smbpasswd -a utente È necessario, però, che l'utente da aggiungere a Samba sia già presente all'interno del proprio sistema: per maggiori informazioni su come crearli e gestirli, consigliamo una lettura alla documentazione di adduser $ man adduser Installare un DNS Server: BIND9 Passiamo adesso alla configurazione di BIND9, uno degli strumenti per la realizzazione di server DNS più diffusi. Grazie a BIND9 è possibile sia realizzare un sistema di dns caching, sia mettere a punto un vero e proprio Primary Master Server: in questo modo potremo gestire autonomamente la risoluzione dei nomi a dominio relativi ai siti web che vorremo gestire con il nostro server. L'installazione tramite apt-get è molto semplice, come già visto nei capitoli precedenti. L'unica operazione da fare, infatti, è lanciare il comando $ sudo apt-get install bind9 che porterà a termine il download dei pacchetti in formato DEB e la loro installazione. Insieme a BIND9 verranno scaricati ed installati anche altre dipendenze e software aggiuntivi, per un totale di pochi MB di peso. Al termine, verrà avviato il demone e sarà da subito possibile iniziare a configurare e utilizzare BIND9. Vediamo ora, invece, come procedere con l'installazione tramite codice sorgente. Come visto nei capitoli precedenti, utilizzeremo il browser links2 per accedere alla pagina di download del sito ufficiale del progetto, lanciando in questo caso il seguente comando $ links2 http://www.bind9.net/download Scorriamo la pagina alla ricerca di un mirror il più possibile vicino, accediamo alla pagina di download di tale mirror, selezioniamo l'ultima versione disponibile e procediamo con il download del file in formato .tar.gz. Al termine, chiudiamo il browser e avremo, all'interno della directory in cui abbiamo lanciato links2, un file il cui nome sarà del tipo bind-9.X.X.tar.gz, dove, come al solito, X.X indicano il numero di versione. Scompattiamo l'archivio con $ tar xvzf bind-9.X.X.tar.gz entriamo nella cartella dei sorgenti con $ cd bind-9.X.X e configuriamo la compilazione tramite $ ./configure --prefix=/usr --enable-threads -with-libtool Adesso passiamo alla compilazione dei sorgenti, con il classico $ make e diamo il via all'installazione dell'applicazione lanciando $ sudo make install Per avviare BIND9, così da testare l'installazione appena eseguita, digitiamo $ sudo /etc/init.d/bind9 start Per avere un maggiore livello di sicurezza, però, non avvieremo BIND9 in questo modo, ma lo utilizzeremo in chroot: nel prossimo capitolo vedremo come fare, e come configurare al meglio le impostazioni del nostro DNS Server. Configurare Bind Come detto, dunque, utilizzeremo BIND9 in chroot. Ciò vuol dire che tale software verrà avviato all'interno di un'apposita directory e sarà confinato lì, avendo accesso alle sole risorse di cui ha bisogno per il suo funzionamento, e non potendo dunque accedere a file che non gli appartengono. In questo modo si riesce a garantire una maggiore sicurezza in caso di attacchi, che nel caso colpissero proprio BIND9 non risulterebbero dannosi come nel caso in cui l'applicazione sia avviata normalmente. Per avviare BIND9 in chroot, è necessario come prima operazione creare la struttura delle directory che andrà a formare il nostro ambiente di chroot: $ sudo mkdir -p /chroot/named $ cd /chroot/named $ sudo mkdir -p dev etc/namedb/slave var/run Configuriamo, quindi, i permessi di accesso a tale ambiente: $ $ $ $ sudo sudo sudo sudo chown chmod chown chmod root:root /chroot 700 /chroot bind:bind /chroot/named 700 /chroot/named Creiamo il file di configurazione di BIND9 nella nuova directory $ sudo mkdir /chroot/named/etc $ sudo touch /chroot/named/etc/named.conf e diamo all'utente bind l'accesso alle directory slave e run $ sudo chown bind:bind /chroot/named/etc/namedb/slave $ sudo chown bind:bind /chroot/named/etc/var/run Creiamo, infine, i dispositivi di cui BIND9 ha bisogno: $ sudo mknod /chroot/named/dev/null c 1 3 $ sudo mknod /chroot/named/dev/random c 1 8 Adesso andiamo a modificare il file /etc/default/bind9 con nano $ sudo nano /etc/default/bind9 sostituendo la riga 1OPTIONS="-u bind" con 1OPTIONS="-u bind -t /var/named -t /chroot/named -c /etc/named.conf" e, infine, andiamo ad aggiungere al file /chroot/named/etc/named.conf le seguenti righe 1options { 2 directory "/etc/namedb"; pid-file "/var/run/named.pid"; 3 statistics-file "/var/run/named.stats"; 4 }; 5 Avviando adesso BIND9 con $ sudo /etc/init.d/bind9 start questo verrà avviato in ambiente chroot. Passiamo adesso alla realizzazione di un DNS Caching Server e di un Primary Master Server. Per la prima operazione, è sufficiente aggiungere alla fine del file named.conf le seguenti righe: 1forwarders { 2 208.67.220.220; 208.67.222.222 3 } 4 Le sequenze di numeri 208.67.220.220 208.67.222.222 sono gli IP dei DNS Server di OpenDNS: è possibile modificarli a piacere, scegliendo il proprio servizio di DNS preferito. Per impostare BIND9 come Primary Master Server, invece le operazioni da eseguire sono le seguenti: copiamo il file named.conf.local nell'ambiente chroot $ sudo cp /etc/bind/named.conf.local /chroot/named/etc/bind/named.conf.local aggiungiamo le righe 1zone "dominio.com" { 2 type master; file "/etc/bind/db.dominio.com"; 3 }; 4 dove dominio.com è il nome a dominio che vogliamo gestire. Adesso, utilizziamo un template già fatto come base per creare il file di zona: $ sudo cp /etc/bind/db.local /chroot/named/bind/db.dominio.com e andiamo a modificarlo secondo i parametri più consoni alle nostre necessità. Tramite questo file è possibile creare record A, MX, CNAME e così via: se non si è molto pratici di gestione di DNS, è consigliata prima una lettura alla pagina di Wikipedia sul Domain Name System, così da avere un quadro della situazione più chiaro. Infine, dobbiamo creare un file per il reverse della zona. All'interno del file named.conf.local aggiungiamo le righe 1zone "192.168.1.in-addr.arpa" { 2 type master; notify no; 3 file "/etc/bind/db.192"; 4 }; 5 dove 192.168.1 sono le prime tre terne di numeri della rete locale, personalizzabili a seconda delle impostazioni di rete che si hanno. Adesso, creiamo un file db.192 $ sudo nano /chroot/named/etc/bind/db.192 e aggiungiamo le stesse opzioni che abbiamo inserito nel file db.esempio.com. Per ogni record A creato in tale file, va creato un record PTR nel file db.192. Ricordiamo, infine, che ad ogni modifica della zona va incrementato di 1 la riga relativa al seriale. Installare SSH e FTP Un server che si rispetti è accessibile, oltre che localmente, anche da remoto: a tale scopo, in questo capitolo ed in quello successivo vedremo come installare e configurare due strumenti per l'accesso da remoto: SSH e FTP. SSH: Secure shell SSH, acronimo che sta per Secure SHell, è un protocollo cifrato per la connessione da remoto tramite riga di comando e che permette di eseguire comandi come se si avesse accesso fisico alla postazione server. Per installare il software necessario all'utilizzo del protocollo SSH è sufficiente lanciare da terminale $ sudo apt-get install ssh openssh-server mentre sulla macchina dalla quale si vuole accedere al server, nel caso sia installata Ubuntu o un'altra distribuzione che utilizza apt-get, è sufficiente lanciare $ sudo apt-get install openssh-client Una prima configurazione dei parametri di connessione verrà fatta in maniera automatica, ma vedremo nel capitolo successivo come impostare tali parametri in maniera più idonea alle nostre necessità. FTP: File transfer protocol FTP, invece, sta per File Transfer Protocol, e come lascia intuire lo stesso nome è un protocollo nato con lo scopo di fornire uno strumento per il trasferimento di file tra macchine diverse connesse in rete. Di server FTP ne esistono diversi, e la nostra scelta ricade su vsftpd: piuttosto leggero, dalle ottime prestazioni, oltre che sicuro ed affidabile, rappresenta una delle migliori soluzioni attualmente disponibili per ambienti GNU/Linux, e risulta anche sufficientemente semplice da configurare. Per installare vsftpd tramite i repository di Ubuntu Server, lanciamo dalla riga di comando la seguente istruzione $ sudo apt-get install vsftpd e attendiamo il termine del download dei pacchetti e della relativa installazione. Al termine, sarà già possibile avviare il demone, ma come per OpenSSH sarà necessaria una configurazione preliminare, per garantire maggiore sicurezza e per sfruttare a pieno tutte le potenzialità offerte da tale software. Come per tutte le applicazioni viste fin'ora, anche per OpenSSH e vsftpd sono disponibili pacchetti contenenti i codici sorgenti per l'installazione tramite compilazione manuale, ma in questo caso non sono moltissimi i vantaggi che si ottengono: per questo motivo tralasciamo tale procedimento, lasciando a voi la possibilità di documentarvi su come installare da sorgenti tali strumenti. Passiamo adesso alla messa a punto delle configurazioni di SSH e FTP Configurare SSH e FTP per accedere da remoto Configurazione del server Ssh Come prima operazione, vediamo come configurare SSH per un accesso sicuro da remoto. Iniziamo con la realizzazione di una copia di backup del file di configurazione, così da poter ripristinare rapidamente la configurazione di base nel caso in cui durante la modifica vengano perse informazioni importanti $ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup Copiamo anche i file contenenti le chiavi di sicurezza generate automaticamente da OpenSSH, così da averne una copia di backup nel caso vadano perse. La directory in cui verranno salvate può essere scelta a piacere, purchè la si ricordi nel momento in cui se ne avrà bisogno $ sudo cp /etc/ssh/ssh_host*_key* /directory/backup Apriamo il file sshd_config con l'editor nano per iniziare a modificare i parametri che ci interessano. $ sudo nano /etc/ssh/sshd_config Il file risulta piuttosto semplice da comprendere, in quanto commentato in ogni sua parte. Come prima cosa, andiamo a disabilitare il login tramite l'account root modificando il valore di PermitRootLogin in questo modo PermitRootLogin no e decommentiamo la riga relativa alla voce IgnoreUserKnownHosts, per fare in modo che il login venga concesso solo tramite l'inserimento di username e password. IgnoreUserKnownHosts yes Adesso, aggiungiamo gli utenti che vogliamo abilitare al login tramite la riga AllowUsers pippo pluto caio Allo stesso modo, possono essere aggiunti interi gruppi: AllowGroups gruppo1 gruppo2 gruppo3 Adesso, avviamo il demone SSH: $ sudo /etc/init.d/sshd start o riavviamolo nel caso sia già stato avviato $ sudo /etc/init.d/sshd restart Con questa configurazione è possibile accedere al server tramite SSH in maniera sufficientemente sicura. Per personalizzare maggiormente i parametri di connessione e le impostazioni di OpenSSH, è possibile leggere la documentazione presente in Ubuntu Server tramite il comando $ man sshd_config che offre ulteriori dettagli su ogni voce presente nel file di configurazione. Configurazione del server Ftp Passiamo, adesso, alla messa a punto del server FTP. Il file di configurazione di vsftpd è /etc/vsftpd.conf: apriamolo con il tradizionale editor nano $ sudo nano /etc/vsftpd.conf e andiamo a decommentare le righe relative a local_enable, per abilitare la connessione via FTP locale, e write_enable, per abilitare la scrittura agli utenti connessi tramite FTP. L'accesso al server FTP può avvenire sia tramite login, sia in maniera anonima: nel caso in cui si voglia disabilitare quest'ultima opzione, è necessario portare a no la voce anonymous_enable, in questo modo anonymous_enable no Per consentire l'accesso ad altri utenti oltre al nostro, è necessario crearne di nuovi, associare ad ognuno una directory home e abilitarli all'accesso via FTP. La seguente sequenza di comandi permette l'aggiunta dell'utente pippo a quelli cui è concesso il login via FTP: $ $ $ $ $ $ sudo sudo sudo sudo sudo sudo mkdir /home/pippo useradd -d /home/pippo -g users -s /bin/false pippo passwd pippo chwon -R pippo.users /home/pippo touch /etc/vsftpd.user_list echo "pippo" > /etc/vsftpd.user_listist Infine, aggiungiamo al file di configurazione di vsftpd le seguenti righe 1userlist_enable=YES 2userlist_deny=NO 3userlist_file=/etc/vsftpd.user_list Tale operazione può essere ripetuta per ogni utente da aggiungere. Per maggiori informazioni sulle voci del file di configurazione consigliamo la lettura della documentazione ufficiale. Come prima, avviamo o riavviamo il demone con il comando $ sudo /etc/init.d/vsftpd start oppure $ sudo /etc/init.d/vsftpd restart Installare e configurare Crontab e Anacron Chiudiamo questa sezione riguardante l'installazione delle applicazioni necessarie alla messa a punto di una configurazione di base del nostro server e alla loro impostazione con due strumenti molto utili: Crontab e Anacron. Il loro scopo è lo stesso: entrambi, infatti, permettono di eseguire comandi in maniera automatica a determinati orari o a distanza di intervalli di tempo prestabiliti. Ciò che li differenzia è il tipo di macchine per cui sono nati: se Crontab, infatti, ha come target macchine accese 24 ore su 24, Anacron permette la ripetizione di comandi in maniera periodica su macchine non costantemente accese. Crontab, dunque, permette di configurare anche l'orario esatto di esecuzione di ogni singolo comando o istruzione, mentre Anacron, che ha una sintassi di configurazione molto più semplice e basilare, permette di impostare il periodo di tempo dopo il quale va eseguito nuovamente un comando e dopo quanti minuti tale comando viene lanciato nei giorni prestabiliti. Iniziamo a vedere come configurare Crontab, che risulta essere già installato in Ubuntu Server: il file principale di tale strumento è /etc/crontab, e può essere modificato tramite un editor testuale come nano. $ sudo nano /etc/crontab Le operazioni da eseguire vanno inserite una per riga, secondo lo schema mm hh gg MM GG user comando dove mm: indica il minuto di esecuzione, ed è un valore numerico compreso tra 0 e 59; hh: indica l'ora di esecuzione, ed è un valore numero compreso tra 0 e 23; gg: indica il giorno di esecuzione, ed è un valore numerico compreso tra 1 e 31; MM: indica il mese di esecuzione, ed è un valore numerico compreso tra 1 e 12; GG: indica il giorno della settimana in cui verrà eseguito il comando, ed è un valore numerico compreso tra 0 e 6, dove 0 indica la Domenica, 1 il Lunedì fino 6 che indica il Sabato; user: l'utente con cui verrà lanciato il comando; comando: il comando da eseguire. Ogni campo può contenere anche valori multipli: separandoli con una virgola, verranno considerati come valori diversi, mentre separandoli con un trattino alto indicheranno tutto l'intervallo. Esiste poi un operatore jolly, l'asterisco, che indica a Crontab che tale campo può assumere tutti i valori possibili. Per far partire un comando ogni ventesimo minuto dalle 9 alle 18 (di tutti i giorni, di tutti i mesi) come utente administrator, dovremmo quindi scrivere: 0 9-18 * * * administrator /percorso/al/comando 2&>1 Passiamo adesso ad Anacron: la prima operazione necessaria è l'installazione, in quanto non viene fornito insieme ad Ubuntu Server. Per fare ciò, affidiamoci al classico apt-get: $ sudo apt-get install anacron Al termine della rapida installazione, possiamo iniziare subito ad impostare i comandi da eseguire con tale strumento. Il file da modificare è /etc/anacrontab, e la sintassi in questo caso è la seguente: PERIODO INTERVALLO NOME COMANDO PERIODO: indica ogni quanto tempo va eseguito il comando in questione, ed il suo valore è in giorni, INTERVALLO: indica dopo quanto tempo il comando andrà eseguito nel giorno assegnato, utile per evitare di eseguire troppi comandi contemporaneamente e sovraccaricare il sistema; NOME: indica il nome da associare al comando; COMANDO: il comando da eseguire. Sia nel caso di Anacron che in quello di Crontab, dopo ogni modifica ai relativi file di configurazione è necessario riavviare il demone per rendere effettivi i cambiamenti: ciò è possibile con i seguenti comandi: $ sudo /etc/init.d/cron restart $ sudo /etc/init.d/anacron restart Iptables: configurare il firewall Iniziamo questa sezione riguardante la sicurezza del nostro server da uno degli aspetti più noti: la configurazione del firewall. Sono numerose, infatti, le minacce che possono provenire dalla rete, e se in ambienti domestici è sempre buona prassi tenere sempre aggiornati i propri software per la sicurezza, in ambienti server lo è ancora di più. Ubuntu Server, come la versione per Desktop e diverse altre distribuzioni, presenta sin dalla prima installazione IPTables: si tratta di uno dei migliori firewall attualmente disponibili per ambienti Linux, interamente configurabile tramite riga di comando, ed in grado di fornire un ottimo livello di sicurezza se configurato in maniera opportuna. La configurazione di IPTables avviene semplicemente impostando delle policy attraverso alcuni comandi. L'elenco delle policy presenti è disponibile tramite $ sudo iptables -L Digitando tale comando dopo l'installazione si avrà come output una sequenza simile a questa: Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Ciò vuol dire che IPTables non presenta alcuna configurazione attiva, ma nonostante sia in funzione ogni pacchetto è libero di transitare sia in entrata che in uscita. Vediamo, dunque, come impedire ciò, e permettere solo lo scambio di pacchetti sicuri. Come probabilmente avrete notato, l'output del comando precedente risulta diviso in 3 parti: Chain INPUT: il flusso di pacchetti in entrata verso la nostra macchina; Chain FORWARD: il flusso di pacchetti che transita attraverso la nostra macchina, ma non è diretta a noi; Chain OUTPUT: il flusso di pacchetti in uscita. IPTables, dunque, permette di configurare questi tre aspetti in maniera separata: è possibile, ad esempio, bloccare tutto il traffico in entrata, ma permettere qualunque connessione in uscita, o viceversa. Una configurazione robusta prevede il blocco di tutte le connessioni in entrata, tranne alcune eccezioni che andremo a gestire manualmente. Iniziamo, dunque, col bloccare tutto il traffico verso il server, con i seguenti comandi $ sudo iptables -P INPUT DROP $ sudo iptables -P FORWARD DROP Il secondo comando permette di negare anche il traffico in transito attraverso la nostra macchina, ed è possibile anche trascurare tale aspetto. Abilitiamo il traffico locale, che non presenta alcuna minaccia $ sudo iptables -P INPUT -i lo -j ACCEPT Adesso, è necessario andare ad abilitare alcuni tipi di connessioni, ad esempio, per permettere ad Apache di fornire pagine web, o ad SSH di poter essere utilizzato come protocollo di connessione remota. Ciò avverrà tramite l'apertura del traffico attraverso alcune porte, secondo lo schema che segue: $ sudo iptables -A INPUT -p [PROTOCOLLO] --dport [PORTA] -j ACCEPT I valori da modificare sono quelli tra parentesi quadre: PROTOCOLLO: il tipo di protocollo da abilitare, da scegliere tra udp e tcp; PORTA: la porta attraverso la quale passerà il traffico. Ogni servizio avviato utilizzerà una porta diverse per interfacciarsi con l'esterno: ad esempio, Apache utilizza la 80, SSH la 22, FTP la 21 e così via, a meno di cambiamenti apportati ai relativi file di configurazione. Un elenco delle porte standard è disponibile su Wikipedia, con relativo protocollo utilizzato. Per aprire la porta 80 di Apache in ingresso dovremmo dunque scrivere: $ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT Volendo,è possibile anche aprire alcune porte solo a determinati IP, tramite il passaggio di un apposito parametro seguito dall'IP o dal range di IP, in questo modo: $ sudo iptables -A INPUT -p [PROTOCOLLO] --dport [PORTA] -s 192.168.1.0/24 -j ACCEPT In questo modo verrà abilitato il traffico proveniente dagli IP del tipo 192.168.1.X sulla porta selezionata; per abilitare un solo IP è necessario inserirlo per intero. Per concludere, una nota: come si è visto, impostando in questo modo IPTables non si è modificato alcun file. Per questo motivo, al prossimo riavvio della macchina ogni impostazione andrà persa. Per ripristinare la configurazione, è possibile creare uno script da avviare durante il boot della macchina, così da eseguire ogni volta tutti i comandi lanciati per impostare IPTables. mod_security e mod_ssl Nel capitolo relativo ad Apache abbiamo accennato ad alcuni moduli per la sicurezza che adesso analizzeremo più nel dettaglio: si tratta di mod_security e mod_SSL, che offrono la possibilità di rendere ancora più sicuro il proprio web server. Mod_security In particolare, mod_security è una sorta di firewall aggiuntivo che può essere integrato all'interno di Apache, che attraverso una serie di regole preimpostate o configurate manualmente previene attacchi dall'esterno, quali, ad esempio, SQL Injection e simili. La sua installazione è molto semplice: è sufficiente infatti lanciare il seguente comando $ sudo apt-get install libapache-mod-security Per caricare il modulo in Apache, lanciamo $ sudo a2enmod mod-security e riavviamo il web server con $ sudo /etc/init.d/apache2 restart Adesso, apriamo il file di configurazione globale di Apache: $ sudo nano /etc/apache2/apache2.conf e aggiungiamo le seguenti righe 1 <IfModule mod_security.c> 2 SecFilterEngine On 3 SecFilterCheckURLEncoding On SecFilterCheckUnicodeEncoding Off 4 SecFilterForceByteRange 0 255 5 SecAuditEngine RelevantOnly 6 SecAuditLog /var/log/apache2/audit_log 7 SecFilterDebugLog /var/log/apache2/modsec_debug_log SecFilterDebugLevel 0 8 SecFilterScanPOST On 9 SecFilterDefaultA"deny,log,status:500"s:500" 10</IfModule> 11 12 Come già visto in precedenza, ogni riga contiene una direttiva, e nel dettaglio: SecFilterEngine: attiva o disattiva il filtro di mod-security; SecFilterCheckURLEncoding: codifica i caratteri speciali prima del loro passaggio all'URL; SecFilterCheckUnicodeEncoding: abilita o disabilita la validazione della codifica Unicode; SecFilterForceByteRange: permette il passaggio di richieste la cui dimensione in Byte è contenuta in un certo intervallo; SecAuditEngine: abilita il logging, con il valore RelevantOnly logga solo gli avvenimenti più importanti; SecAuditLog: specifica il file di log; SecFilterDebugLog: specifica il file di debug; SecFilterDebugLevel: specifica il livello di accuratezza del file di debug; SecFilterScanPOST: abilita la scansione delle variabili passate tramite il metodo POST; SecFilterDefaultAction: specifica il comportamento da tenere nel caso in cui una richiesta venga filtrata; in questo caso, blocca la richiesta, la inserisce nel file di log, e restituisce all'utente un errore 500. Maggiori dettagli sull'utilizzo di mod_security sono disponibili all'interno della documentazione ufficiale del progetto. Mod_ssl Passiamo adesso a mod_ssl: si tratta di un modulo che permette di abilitare le connessioni cifrate tramite il protocollo https, così da garantire lo scambio di informazioni tra client e server in maniera sicura. Tale modulo è incluso nel pacchetto apache2.2-common, che molto probabilmente è stato installato insieme al web server. In ogni caso, per essere sicuri, lanciamo il comando $ sudo apt-get install libapache-mod-ssl openssl che installerà anche le librerie relative a OpenSSL. Attiviamo il modulo tramite $ sudo a2enmod ssl e riavviamo Apache per rendere effettivi i cambiamenti $ sudo /etc/init.d/apache2 restart Adesso è necessario generare il certificato e la relativa chiave: con la seguente sequenza, creeremo una directory apposita per contenere tali file e li creeremo tramite OpenSSL $ sudo mkdir /etc/apache2/ssl $ cd /etc/apache2/ssl $ sudo openssl req -new -newkey rsa:2048 -keyout apachessl.pem -x509 -set_serial 1000 -days 365 -out apachessl.crt Creiamo un file di configurazione per il sito con cui utilizzare SSL, in questo modo $ sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl apriamo tale file $ sudo nano /etc/apache2/sites-available/ssl ed aggiungiamo le seguenti righe 1NameVirtualHost *:443 2<virtualhost *:443> 3 SSLEngine On SSLCertificateFile /etc/apache2/ssl/apachessl.crt 4 SSLCertificateKeyFile /etc/apache2/ssl/apachessl.pem 5 </virtualhost> 6 Infine, apriamo il file /etc/apache2/ports.conf e, nel caso in cui non sia già presente, aggiungiamo la riga Listen 443 Backup Una delle operazioni più importanti nella gestione di un server è la realizzazione di copie di backup dei file più importanti: configurazione delle diverse applicazioni utilizzate, file dei siti web ospitati, tabelle dei database, file di configurazione del sistema operativo e così via. Un metodo molto semplice per realizzare copie di backup del proprio sistema operativo è l'utilizzo di tar, l'applicazione per la creazione di archivi compressi. Supponiamo, ad esempio, di voler fare un backup di tutto il sistema operativo, ad esclusione delle directory /proc e /mnt: per fare ciò è sufficiente lanciare il comando $ tar -zcvpf /archive/full-backup-`date '+%d-%B-%Y'`.tar.gz --directory / -exclude=mnt --exclude=proc --exclude=var/spool/squid . In questo modo, sarà creato un file in formato .tar.gz contenete tutte le directory e relative sottodirectory presenti nella partizione in cui è installato il sistema operativo. Il nome del file conterrà anche la data e l'ora di creazione, così da poter conservare in maniera ordinata tutti i backup. Il file compresso potrà poi essere copiato su un altro disco di backup, inviato ad un computer remoto, o salvato in qualunque altro modo. Un altro strumento molto utilizzato per il backup è rsync: si tratta di un'applicazione per la copia di dati sia in maniera locale che tra computer diversi collegati in rete. Il suo utilizzo è molto semplice: per salvare il contenuto della nostra directory home nella directory backup, ad esempio, sarà sufficiente lanciare il comando $ rsync -a -v /home /backup È possibile realizzare backup automatici a determinati orari o intervalli di tempo, sia attraverso tar che con rsync, utilizzando crontab o anacron (vedi lezione 16), come descritto nei capitoli precedenti di questa guida. In questo modo, non ci si dovrà preoccupare di eseguire manualmente il backup. Esistono, poi, diverse altre soluzioni per il backup, più semplici da utilizzare, ma che offrono come unico modo di utilizzo quello attraverso un'interfaccia grafica. Per tale motivo, sarà necessario installare un ambiente desktop sul nostro server: per installare GNOME, ad esempio, bisognerà lanciare il comando $ sudo apt-get install xorg gnome-desktop I file che verranno installati saranno molti, ed il loro download impiegherà diverso tempo. Il server, inoltre, verrà caricato di ulteriori processi, e dunque sarà sicuramente meno reattivo rispetto alla versione senza ambiente desktop: l'altro lato della medaglia, però, offre la possibilità di utilizzare strumenti grafici per il backup e non solo. Una serie di software per il backup in ambienti grafici è disponibile in un nostro articolo, con la descrizione di ognuno ed alcuni screenshot dimostrativi. SpamAssassin Chiunque riceve mail quotidianamente conosce fin troppo bene la parola Spam: sono migliaia, se non milioni, le email spazzatura che quotidianamente vengono inviate, ed il fenomeno non sembra abbia intenzione di arrestarsi. Per combattere lo spam, però, esistono numerosi strumenti, ed in questo capitolo vedremo come integrare il server di posta elettronica Postfix, precedentemente installato, con uno dei software migliori in questo settore: Spamassassin. Spamassassin è uno strumento per il filtraggio della posta elettronica in arrivo, che blocca automaticamente tutte le e-mail che ritiene possano essere spam, lasciando passare solo messaggi ritenuti sicuri. Vediamo dunque come installarlo ed integrarlo con Postfix. L'installazione avverrà tramite i repository di Ubuntu, attraverso il comando $ sudo apt-get install spamassassin spamc Dopo l'installazione, Spamassassin è configurato in modo tale da essere avviato con l'utente root: per questo motivo andremo ad abilitare l'esecuzione con un utente creato appositamente per Spamassassin, tramite la sequenza che segue: $ $ $ $ sudo sudo sudo sudo groupadd -g 5001 spamd useradd -u 5001 -g spamd -s /sbin/nologn -d /var/lib/spamassassin spamd mkdir /var/lib/spamassassin chown spamd:spamd /var/lib/spamassassin Adesso, modifichiamo il file /etc/default/spamassassin modificando alcuni valori in modo tale che rispecchi quanto segue 1ENABLED=1 2SAHOME="/var/lib/spamassassin/" OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir 3${SAHOME} -s ${SAHOME}spamd.log" 4PIDFILE="${SAHOME}spamd.pid" Apriamo il file /etc/postfix/master.cf, individuiamo verso l'inizio del file la riga 1smtp inet sostituiamola con n - n - - smtpd 1smtp inet n - n - - smtpd -o content_filter=spamassassin ed aggiungiamo alla fine del file il seguente blocco spamassassin unix n n pipe flags=R user=spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient} Ultima operazione è la configurazione delle opzioni di Spamassassin: ciò avviene tramite la modifica del file /etc/spamassassin/local.cf. Apriamolo, ed inseriamo quanto segue rewrite_header Subject [***** SPAM _SCORE_ *****] required_score 2.0 report_safe 0 # Abilitiamo il filtro Bayesiano use_bayes 1 use_bayes_rules 1 # Abilitiamo l'apprendimento automatico delle regole bayes_auto_learn 1 # Disabilitiamo i controlli di rete skip_rbl_checks 0 use_razor2 0 use_dcc 0 use_pyzor 0 EHCP (Easy Hosting Control Panel) Il primo pannello che tratteremo è EHCP, acronimo di Easy Hosting Control Panel: si tratta di un pannello per la gestione dei principali servizi web attraverso una semplice ed intuitiva interfaccia grafica, senza la necessità di metter mano a file di configurazione vari. Per installarlo, colleghiamoci alla pagina di download ufficiale, scarichiamo il file in formato tgz, decomprimiamolo con il comando $ tar -zxvf ehcp_latest.tgz entriamo nella directory creata $ cd ehcp e lanciamo lo script di installazione con il comando $ ./install.sh Verranno poste diverse domande per permettere ad EHCP di configurare l'ambiente di lavoro al meglio, e di installare tutte le applicazioni che verranno mostrate. EHCP, infatti, permette di installare facilmente e rapidamente strumenti com Apache, MySQL, PHP e così via. Al termine dell'installazione, sarà possibile accedere da un altro computer attraverso il proprio browser, qualunque esso sia: è sufficiente infatti collegarsi all'indirizzo IP del server ed inserire nella schermata di login i dati relativi al nostro utente per trovarsi subito di fronte l'interfaccia principale di EHCP, che permetterà di configurare e gestire tutti i parametri delle diverse applicazioni installate. Tale interfaccia si presenta piuttosto semplice e leggera, e rappresenta una maniera molto comoda per configurare le impostazioni più ostiche o più complicate delle applicazioni installate per la messa a punto del server. EHCP è un'applicazione realizzata principalmente per distribuzioni come Debian, Ubuntu e derivate, motivo per cui si integra alla perfezione con quella che è la struttura di base del sistema operativo e degli strumenti messi a disposizione. Per installarlo in altri ambienti operativi è necessario apportare alcune modifiche durante la fase di installazione. Con EHCP è inoltre possibile accedere ad alcune informazioni di sistema basilari per monitorare lo stato di forma della macchina e per ricevere informazioni sul sistema operativo. Le informazioni fornite non sono moltissime, e sicuramente sono in numero inferiore rispetto al prossimo pannello che analizzeremo: Webmin. Webmin Webmin è probabilmente il più completo pannello attualmente disponibile per ambienti Linux: grazie alla sua semplicità di utilizzo e all'elevato numero di funzionalità che mette a disposizione, permette di avere accesso praticamente a quasi tutte le informazioni e le impostazioni di sistema. Grazie a Webmin sarà possibile creare utenti, riavviare il sistema, modificare i permessi di accesso a file e directory, cambiare le impostazioni delle applicazioni e svolgere tante altre operazioni, il tutto attraverso un comodo browser. La gestione del server, oltre che localmente, può avvenire anche da remoto: sarà infatti possibile gestire da un'altra postazione il nostro server attraverso Webmin, così da poter controllare lo stato del sistema e gestire il tutto anche quando non si è fisicamente vicini alla macchina. Come prima operazione, procediamo con l'installazione di Webmin sul server: per fare ciò, apriamo il browser links2 all'indirizzo della pagina ufficiale del progetto $ links2 http://www.webmin.com/ e scegliamo dal menù laterale il download della versione in formato DEB. Una volta scaricato, installiamolo con il comando $ sudo dpkg -i webmin_x.xxx_all.deb dove x.xxx, come al solito, indica il numero di versione. Nel caso in cui vengano riscontrati problemi con le dipendenze, è possibile risolverli lanciando il comando $ sudo apt-get -f install Adesso, dopo aver installato webmin, sarà possibile accedere alla sua interfaccia principale, anche da remoto, collegandoci con il browser all'indirizzo http://indirizzodelserver:10000 (o https://indirizzodelserver:10000 se si usa la connessione SSL) Nel caso in cui ci si colleghi localmente, sarà possibile collegarsi anche a http://localhost:10000 (o https://localhost:10000) Sin da subito è possibile riscontrare la semplicità di organizzazione di Webmin: tramite il menu laterale sinistro è possibile accedere alle diverse sezioni dell'applicazione: la voce System, ad esempio, permette di accedere alla gestione del sistema operativo, offrendo la possibilità di svolgere moltissimi compiti che nei capitoli precedenti abbiamo svolto tramite riga di comando; la sezione Networking si occupa della gestione delle impostazioni di rete, mentre cliccando su Server sarà possibile accedere alla gestione delle principali applicazioni per Server installate, come Apache o MySQL; la sezione Hardware, infine, permette di ricevere informazioni sullo stato dell'hardware della macchina, come lo spazio disponibile sul disco fisso, la memoria occupata e così via. Per avere maggiori informazioni su Webmin, suggeriamo la lettura di questo articolo della sezione Server di HTML.it. Gestione dei servizi Chiudiamo questa guida con due capitoli riguardanti alcuni problemi comuni che possono essere riscontrati e la manutenzione della macchina. Iniziamo con la gestione dei servizi, aspetto che abbiamo visto sotto alcuni aspetti in molti dei capitoli precedenti e che andremo a comprendere ora in maniera più approfondita. Nel capitolo 3, ad esempio, dopo aver configurato i parametri di rete, abbiamo lanciato il comando $ sudo /etc/init.d/networking restart In questo modo, abbiamo riavviato la gestione della rete, rendendo attivi i cambiamenti apportati. All'interno della directory /etc/init.d, infatti, sono situati diversi script che permettono l'avvio di servizi ed applicazioni durante la fase di avvio del sistema operativo. Come visto, tali servizi possono essere fermati manualmente, avviati nuovamente o riavviati durante la loro esecuzione. In generale, la gestione di un servizio avviene secondo la sintassi che segue $ sudo /etc/init.d/servizio [comando] Al posto di [comando] deve essere inserito uno dei seguenti valori: start: permette l'avvio di un servizio che non è attualmente avviato; stop: al contrario di start, ferma un servizio precedentemente avviato; restart: riavvia un servizio attualmente attivo, utile in caso di cambiamenti alla configurazione dell'applicazione; reload: ricarica i file di configurazione del servizio senza riavviarlo; force-reload: come nel caso precedente, ma forza il servizio a caricare nuovamente le impostazioni. Oltre a gestire gli script già presenti, è possibile anche inserire script personali all'interno della cartella /etc/init.d, così che questi vengano avviati automaticamente durante la fase di boot della macchina. Supponiamo, ad esempio, di voler creare uno script denominato mioscript e di voler fare in modo che venga caricato dal sistema operativo durante l'avvio. Creiamo un file all'interno del quale andranno aggiunte le direttive che andrà ad eseguire lo script, semplicemente con un editor di testo $ sudo nano /etc/init.d/mioscript Aggiorniamo il database degli script, con il comando $ sudo update-rc.d mioscript defaults e rendiamo eseguibile lo script $ sudo chmod +x /etc/init.d/mioscript La gestione di questi aspetti resta comunque un'operazione importante e delicata: è consigliata, infatti, una lettura di questo articolo che spiega chiaramente come funzionano i runlevel in Ubuntu e Debian. Monitoraggio dell'hardware - I Tenere sotto controllo la propria macchina è sempre un'operazione importante, da non trascurare per evitare spiacevoli perdite o danni alle componenti hardware del sistema. In questo capitolo vedremo quali sono alcuni dei principali software per monitorare lo stato della propria macchina. Hard Disk Iniziamo con una delle componenti più importanti, i dischi fissi, che contengono tutte le informazioni relative al sistema operativo, alle applicazioni installate, oltre che i file personali che eventualmente abbiamo salvato. Un primo strumento da utilizzare per conoscere lo stato dei propri hard disk è hdparm, installabile tramite il comando $ sudo apt-get install hdparm Lo scopo principale di hdparm è quello di modificare numerosi parametri relativi alla scrittura e alla lettura dei dati da e sull'hard disk, oltre che al funzionamento stesso del dispositivo, ma può essere utilizzato anche per ottenere informazioni sulle prestazioni. Lanciando, ad esempio, il comando $ sudo hdparm /dev/sda sarà possibile effettuare un test della velocità in alcune operazioni sul disco /dev/sda. La documentazione fornita insieme all'applicazione offre una buona base per sapere quali sono i parametri configurabili con hdparm e come utilizzare l'applicazione. Tale documentazione è sfogliabile tramite $ man hdparm Per avere informazioni più dettagliate sullo stato di forma di ogni disco fisso installato è possibile utilizzare smartctl, che però necessita di hard disk che supportino il sistema S.M.A.R.T. Per installarlo è sufficiente $ sudo apt-get install smartctl mentre per eseguire un test rapido basta lanciare il comando $ sudo smartctl -t short /dev/sda Al posto di short, possiamo inserire long per avere un test più lungo, che potrebbe impiegare anche un'ora. Altra informazione molto importante da monitorare è la temperatura: a tale scopo risulta essere utile l'applicazione hddtemp, sviluppata proprio per fornire la temperatura di esercizio del disco fisso. Installabile tramite il comando $ sudo apt-get install hddtemp permette di conoscere la temperatura di ogni disco semplicemente con il comando $ sudo hddtemp /dev/sda Monitoraggio dell'hardware - II opo aver visto come monitorare il disco rigido, vediamo come controllare lo stato di funzionamento della Ram e delle temperature. RAM Oltre che avere un quantitativo di RAM sufficiente a supportare le operazioni che andranno eseguite, è importante anche conoscere sempre lo stato di funzionamento dei propri banchi di memoria: non sono rari, infatti, i casi in cui le applicazioni crashano a causa di problemi di lettura o scrittura in memoria, e anche altri tipi di problemi possono essere causati da un cattivo stato della RAM. Per controllare lo stato della propria memoria è possibile utilizzare l'utility memtest86+: per fare ciò, durante la fase di avvio della macchina premiamo il tasto Esc prima che venga avviato il sistema operativo, così da far apparire la schermata di GRUB che ci permette di selezionare il sistema operativo, e scegliamo la voce relativa a memtest86+. Si aprirà una nuova schermata dalla quale sarà possibile avviare un test della memoria. Temperature Oltre che dell'hard disk, è importante controllare anche la temperatura di tutti gli altri dispositivi hardware. Uno strumento che permette di fare ciò è lm_sensors: semplice da utilizzare, permette di sfruttare i sensori presenti sulla scheda madre per monitorare la temperatura della macchina, a patto che la propria scheda madre ne possegga. Installiamo lm_sensors con il comando $ sudo apt-get install lm_sensors avviamo la ricerca dei sensori con il comando $ sudo sensors-detect e seguiamo il procedimento guidato che permetterà di configurare l'applicazione. Una volta terminato, sarà possibile conoscere la temperatura dei dispositivi riconosciuti tramite il comando $ sensors