Indice

AMPP Server

1. Installazione base

2. Installare il Server SSH

Per installare il server SSH digitate

sudo apt-get install ssh openssh-server

Da questo punto in avanti è possibile usare un client SSH come PuTTY per connettersi al server Ubuntu 14.04 LTS da una qualsiasi workstation e terminare l'installazione comodamente seduti alla propria postazione.

3. Configurare la rete

http://www.cyberciti.biz/faq/setting-up-an-network-interfaces-file/

4. Aggiornare Linux (Opzionale)

Digitare

sudo apt-get update

per aggiornare il database dei package di apt e poi

sudo apt-get upgrade

per installare gli ultimi apgrade (se esistono).

5. Cambiare la Shell di default (Opzionale)

/bin/sh è un link simbolico (symlink) a /bin/dash, io preferisco usare la bash quindi

sudo ln -sf /bin/bash /bin/sh

6. Disabilitare AppArmor

AppArmor è un pacchetto che dovrebbe garantire la sicurezza. In realtà, spesso, causa più problemi di quanti ne previene. Deve essere fermato digitando

sudo /etc/init.d/apparmor stop
sudo update-rc.d -f apparmor remove

e disinstallato digitando

sudo apt-get remove apparmor apparmor-utils

7. Installare il Software di Base

Alcuni dei seguenti pacchetti sono propedeutici al completamento del server, altri servono solo per rendere la vita “più facile”.

sudo apt-get install build-essential nmap openssl unzip zip p7zip-full zlib1g-dev autoconf automake1.9 bison autotools-dev flex 
sudo apt-get install libarchive-zip-perl libio-compress-perl libpcre3 perl perl-modules g++ libdb5.1-dev libpopt-dev m4 make libtool 
sudo apt-get install lynx ncftp
sudo apt-get install mc imagemagick curl

8. Installare MySQL

Per installare MySQL digitare

sudo apt-get install mysql-server mysql-client

Durante l'installazione verrà richiesta la password per l'utente root di MySQL. Tale password è valida sia per l'utente root@localhost che per root@server1.example.com.

A fine installazione MySQL è attivo ma risponde solo per interrogazioni che provengono da localhost quindi necessitano di software come phpMyAdmin per lavorarci.
Volendo usare il server MySQL anche da altre postazioni (magari con applicazioni Windows per leggere e modificare i DB) è necessario modificare il file /etc/mysql/my.cnf commentantdo la linea bind-address = 127.0.0.1

sudo nano /etc/mysql/my.cnf
[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address  =127.0.0.1
[...]

Riavviare MySQL

sudo /etc/init.d/mysql restart

e verificare tramite il comando

sudo netstat -tap |grep mysql

che la risposta sia come quella riportata di seguito

 root@server1:~# netstat -tap | grep mysql
 tcp        0      0 *:mysql                 *:*                     LISTEN      5869/mysqld
 root@server1:~#

9. Installare il frontend Web

9.1. Installare Apache

Installare Apache digitando

sudo apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert

9.2. Installare PHP5 / Python / Perl / Ruby

PHP5

Per installare PHP e gran parte delle sue librerie digitare

sudo apt-get install libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-pspell php5-recode php5-snmp php5-tidy php5-xmlrpc php5-xsl 

Consiglio di aggiungere anche i seguenti moduli per i collegamenti con DB diversi da MySQL e per la grafica

sudo apt-get install php5-odbc php5-pgsql php5-sybase php5-ldap php5-sqlite php5-interbase libphp-jpgraph

Molti script php usano lo short tag che nelle ultime versioni di PHP5 e disattivo di default, per ovviare a questo problema editare il file php.ini

cd /etc/php5/apache2
sudo nano php.ini

Premere Ctrl+W e digitare short_open_tag seguito da Invio.
Ripetere questa operazione sino a trvare una riga che riporta

short_open_tag = Off

Trasformarla in

short_open_tag = On

Riavviare Apache in modo che le modifiche vengano rese attive

sudo service apache2 restart

Ora la configurazione è ricaricata e PHP è pronto.

Python

Per installare il modulo Python di Apache digitare

sudo apt-get install libapache2-mod-python

Potrebbe essere utile installare anche questi moduli

sudo apt-get install python-mysqldb

Per cercarne altri

sudo apt-cache search python

Perl

Per installare il modulo Perl di Apache digitare

sudo apt-get install libapache2-mod-perl2

Ruby

libapache2-mod-ruby è stato rimosso dai repo di Ubuntu … si rende quindi necessario trovare un'altra strada per l'installazione di Ruby on Rails e la sua integrazione con Apache

10. Configurare il frontend Web

10.1. Configurare di Apache

10,1.1 Creazione dell'utente WebMaster e delle Cartelle che ospiteranno il sito

La parte seguente non è un must … è la via che ho trovato io per fare funzionare tutto e per poter uploadare il sito in ftp.
In parte è presa dalla documentazione di Debian

Creare un nuovo utente (potrebbe essere fatto anche sull'utente corrente ma esso è “sudoers” quindi potenzialmente pericoloso). Io lo chiamerò webmaster.

sudo adduser webmaster 

Dopo averne impostato la password aggiungerlo al gruppo www-data

sudo usermod -aG www-data webmaster

Loggarsi con il nuovo utente

su webmaster

e creare la seguente struttura di cartelle nella sua /home

mkdir public_html
mkdir materiale
mkdir config
mkdir cgi-bin
mkdir backup

Queste cartelle serviranno ad ospitare il sito ed il suo backup.

Tornare all'utente precedente

exit

cambiare il gruppo sulla cartella appena creata e riavviare il webserver

sudo chown  <nome_utente>:www-data /home/<nome_utente>/public_html
service apache2 restart

Sistemare i permessi sulla cartella /home/<nome_utente>/public_html come segue:

chmod 775 /home/<nome_utente>/public_html

10.1.2 Nuovo Virtual Host per Apache

Spostarsi nella cartella dei siti di Apache e creare il nuovo file di configurazione.
Ovviamente la dicitura miosito andrà sostituita con il nome del sito.

 cd /etc/apache2/sites-available/
 sudo cp 000-default.conf 010-miosito.conf

Ora modifichiamo il file di configurazione per impostare la nuova DocumentRoot del sito

sudo nano 010-miosito.conf

Trovare la riga che contiene DocumentRoot e modificarla per farla puntare alla cartella contenete il sito.

DocumentRoot /home/<utente webmaster>/public_html/

A questo punto il file di configurazione è pronto e deve essere attivato

sudo a2ensite 010-miosito.conf

e per evitare che vada in conflitto con la configurazione di default

sudo a2dissite 000-default.conf

A questo bunto è necessario riavviare Apache

sudo service apache2 restart

10.2. Configurazione dei linguaggi per il funzionamento con Apache

PHP

Per poter usare PHP controllare che /etc/apache2/mods-available/php5.conf sia corretto:

sudo nano /etc/apache2/mods-available/php5.conf
<IfModule mod_php5.c>
    <FilesMatch "\.ph(p3?|tml)$">
        SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch "\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>
    # Per ri-abilitare php nelle directory utente commentare le righe seguenti
    # (da <IfModule ...> a </IfModule>.) NON lo impostare a On dato che
    # impedisce ai file .htaccess di disabilitarlo.
    #<IfModule mod_userdir.c>
    #    <Directory /home/*/public_html>
    #        php_admin_value engine Off
    #    </Directory>
    #</IfModule>
</IfModule>

Python

Esistono due modi per gestire il codice Python con Apache

Perché Apache comprenda queste estensioni e le utilizzi in modo corretto è necessario editare il file mod_python.conf in /etc/apache2/mods-available/

cd /etc/apache2/mods-available/
sudo nano python.conf

e valorizzarlo come segue

<IfModule mod_python.c>
        AddHandler mod_python .py .psp
        PythonHandler mod_python.publisher | .py
        PythonHandler mod_python.psp | .psp
</IfModule>

A questo punto è necessario attivare il modulo Python

sudo a2enmod python

Se dovesse risultare già attivo è necessario disattivarlo prima di procedere ad una nuova attivazione

sudo a2dismod mod_python

o creare un link simbolico a mod_python.conf in /etc/apache2/mods-enabled/

Potrebbe essere utile installare anche questi moduli

sudo apt-get install python-mysqldb

Per cercarne altri

sudo apt-cache search python

Perl

Analogamente a quanto visto per Python è necessario creare il file perl.conf in /etc/apache2/mods-available/

sudo nano /etc/apache2/mods-available/perl.conf

e valorizzarlo come segue

<IfModule mod_perl.c>
        AddHandler perl-script .pl
        PerlHandler ModPerl::PerlRunPrefork
	PerlOptions +ParseHeaders
	PerlSendHeader On
</IfModule>

Anche in questo caso il modulo deve essere attivato

sudo a2enmod perl

10.3. Ultimi Ritocchi

Perché tutto funzioni correttamente è necessario editare il file /etc/apache2/mods-available/dir.conf

sudo nano /etc/apache2/mods-available/dir.conf

e modificare la direttiva DirectoryIndex come segue

<IfModule mod_dir.c>
   #DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
  DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl index.xhtml
 </IfModule>

Ora è necessario abilitare alcuni moduli di Apache ( SSL , rewrite , suexec , e include )

sudo a2enmod ssl
sudo a2enmod rewrite
sudo a2enmod suexec
sudo a2enmod include
sudo a2enmod userdir

ed, in fine, è necessario riavviare Apache affinchè tutte le modifiche diventino effettive

sudo /etc/init.d/apache2 restart

o più velocemente

sudo service apache2 restart

11. Primi Test

Per verificare il corretto funzionamento di Apache è sufficiente spostarsi in /home/webmaster/www/htdocs e creare i seguenti files come utente webmaster.

su webmaster

info.php

Questo file verifica il corretto funzionamento di PHP mostrando la pagina informativa.

vi info.php
<HTML>
    <HEAD>
        <TITLE>Test PHP</TITLE> 
    </HEAD>
    <BODY>
        <?php phpinfo(); ?>
    </BODY>
</HTML>

Per testare aprire un bowser e puntare a http://[your_site]/info.php.

test.py

Questo file verifica il corretto funzionamento di Python in modalità Publisher Handler.

vi test.py
def index(req):
  return "Test successful";

Per testare aprire un bowser e puntare a http://[your_site]/test.py.

test.psp

Questo file verifica il corretto funzionamento di Python in modalità Python Server Pages.

vi test.psp
<html>
    <body>
        <h1><% req.write("Hello!") %></h1>
    </body>
</html>

Per testare aprire un bowser e puntare a http://[your_site]/test.psp.

printenv.pl

Questo file verifica il corretto funzionamento di Perl come CGI e contrariamente agli altri deve essere posizionato in /home/webmaster/www/cgi-bin.

vi printenv.pl
#!c:/perl/bin/perl.exe
##
##  printenv -- demo CGI program which just prints its environment
##

print "Content-type: text/plain; charset=iso-8859-1\n\n";
foreach $var (sort(keys(%ENV))) {
    $val = $ENV{$var};
    $val =~ s|\n|\\n|g;
    $val =~ s|"|\\"|g;
    print "${var}=\"${val}\"\n";
}

Per testare aprire un bowser e puntare a http://[your_site]/cgi-bin/printenv.pl.

12. ProFTPD

Per installare ProFTPD digitare

sudo apt-get install proftpd ucf

Il programma di installazione chiede di selezionare la modalità di funzionamento.
Selezionare standalone.

Editare il file proftpd.conf ed aggiungere le righe riportate di seguito

sudo nano /etc/proftpd/proftpd.conf
[...]
DefaultRoot ~
IdentLookups off
ServerIdent on "FTP Server ready."
[...]

Riavviare il servizio per rendere attive le modifiche

sudo /etc/init.d/proftpd restart

xx. Postfix con SMTP-AUTH e TLS

14. Sincronizzare l'orologio di sistema

Poiché tutti i log e molte operazioni sono legate all'orario di sistema, è una buona idea tenere aggiornato l'orologio di sistema con un NTP (network time protocol) server su internet.
Per fare questo digitare

sudo apt-get install ntp ntpdate

Ora l'orologio di sistema verrà costantemente aggiornato

15. Applicazioni Web

Elenco Applicazioni
Applicazione Licenza Sito Descrizione
AWStats Freeware http://www.awstats.org/ Statistiche del sito estratte dal log di Apache
DokuWiki Freeware https://www.dokuwiki.org/dokuwiki# Documentazione ed Appunti
Koken Freeware + Coomercial http://koken.me/ Galleria Fotografica Professionale
ownCloud Freeware https://owncloud.org/
PasteBin Freeware https://github.com/atmoner/php-pastebin-v3 Strumento per la collaborare nel debug di code snipet
phpBB Freeware http://www.phpbbitalia.net/
phpMyAdmin Freeware http://www.phpmyadmin.net/ DB Manager per MySQL
phpSysInfo Freeware http://phpsysinfo.github.io/phpsysinfo/ Un piccolo script PHP che consente di monitorare lo stato del server
Veno File Manager Coomercial http://filemanager.veno.it/it/
Webmin Freeware http://www.webmin.com/ Controllo del server via interfaccia web
WordPress Freeware https://it.wordpress.org/

AWStats

Spoiler

Dokuwiki

Come per quasi tutte le applicazioni Web esiste un pacchetto di sistema da installare ma di solito è obsoleto e rende difficile l'aggiunta di plugins e temi.

Installazione Automatizzata (di sistema)

Per installare digitare

  sudo apt-get install dokuwiki

Installazione Manuale

L'installazione manuale non è eccessivamente difficile.
Impersonando webmaster, spostarsi in /home/materiale e scaricare l'ultima versione del tgz che si trova qui. Copiate il link e sostituitelo nel comando sottostante.

su - webmaster
wget http://download.dokuwiki.org/out/dokuwiki-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.tgz

Decomprimere il file scaricato e settare i permessi

tar -xvf ./dokuwiki-xxxx-xx-xx.tgz -C /home/webmaster/pubblic_html/
exit
cd /home/webmaster/pubblic_html
sudo chown -R webmaster:www-data dokuwiki
sudo chmod 775 -R dokuwiki/

Puntare il browser su http://[vostro_sito]/doluwiki e terminare l'installazione.

Alla fine rimuovere il file di installazione per evitare che possa essere usato come attacco

cd dokuwiki
rm install.php

Considerazioni Finali

In questo caso io voto per l'installazione manuale, non comporta rischi di sicurezza e consente di avere un maggior controllo sul prodotto.

Koken

Per prima cosa creare il database dove verranno salvati i dati, aprire phpMyAdmin e nel tab sql digitare quanto segue poi premere esegui

CREATE DATABASE Koken;
CREATE USER 'kokenuser'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL ON Koken.* TO 'kokenuser'@'localhost';

Spostarsi nella cartella materiale e scaricare il file di installazione

cd /home/webmaster/materiale
wget https://s3.amazonaws.com/install.koken.me/releases/Koken_Installer.zip

Decomprimere il file nella DocumentRoot del sito

sudo unzip -d /home/webmaster/public_html Koken_Installer.zip

Sistemare utenti e permessi

cd /home/webmaster/public_html 
cd Koken_Installer/
sudo mv koken ..
cd ..
sudo rmdir Koken_Installer
sudo chown -R webmaster:www-data koken
sudo chmod 775 -R koken

Navigare con il browser all'indirizzo http://[vostro_sito]/koken e terminare l'installazione in modo grafico La pagina che si aprirà eseguirà un controllo di tutte le configurazioni necessarie al funzionamento di Koken. Dovrebbe presentarsi come in figura seguente  Koken - Testing ServerFig. 1 Premere su Begin installation Nella schermata successiva vengono richiesti i dati anagrafici dell'amministratore, una mail ed una password  Koken - Setup UtenteFig. 2

Attenzione!: l'indirizzo e-mail che inserirete in fase di installazione servirà sia per accedere al vostro sito che per la registrazione al market di Koken (che avviene in automatico senza avvisare l'utente) e, se non fate attenzione quando vi viene chiesto, anche per spedirvi la newsletter …

Premete Next –> La videata successiva vi chiederà o parametri di collegamento a MySQL, se avete dato gli stessi nomi che ho usato io per la guida questi sono il parametri da fornire:

Host localhost
Database Koken
User kokenuser
Passwor La Vostra Password

Ricordatevi che sotto Linux tutti gli oggetti di MySQL (Database, Utenti, Tabelle, Ecc…) sono case sensitive

Premendo nuovamente su Next –> giungiamo alla fase finale dell'installazione  Koken - DownloadFig. 3 Premenso Install now inizia l'installazione di Koken al termina della quale si viene rimandati al login della sezione di amministrazione.
Usate la mail e la password inseriti nella prima videata per loggarvi.
Ora Koken è installato e quasi funzionante.
Portarsi nella root del webserver e sistemare i permessi della cartella

cd /home/webmaster/public_html
sudo chown -R webmaster:www-data koken
sudo chmod 775 -R koken/storage

ownCloud

Purtroppo sembra esserci un problema su ownCloud 8.x.x.x che ne rende impossibile l'installazione e l'utilizzo … riverificherò questa parte della guida appena i problemi saranno risolti.

Spoiler

Pastebin

Esistono diverse versioni di php-PasteBin, in questa guida copriremo la release v3.
PasteBin è uno strumento che serve a collaborare nel debug di code snipet nel modo seguente:

NOTA: Perchè tutto funzioni è necessario che sia attivo il modulo apache mod_rewrite (se avete seguito la guida passo passo lo è, in caso contrario fate un giro sulla sezione della configurazione di apache per vedere come si attiva).

Per prima cosa creare il database dove verranno salvati i dati, aprire phpMyAdmin e nel tab sql digitare quanto segue poi premere esegui

CREATE DATABASE PasteBin;
CREATE USER 'PasteBinusr'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL ON PasteBin.* TO 'PasteBinusr'@'localhost';

Per installarlo ci porteremo come di consueto nella solita cartella materiale

cd /home/webmaster/materiale

Con un browser portarsi all'indirizzo https://github.com/atmoner/php-pastebin-v3 e copiare l'url dello zip (che poi dovrete sostituire nel comando seguente)

sudo wget https://github.com/atmoner/php-pastebin-v3/archive/master.zip

Ora sarà sufficiente decomprimere il file nella giusta cartella

sudo unzip -d /home/webmaster/public_html/<vostro_sito> master.zip

rinominare la cartella

sudo mv /home/webmaster/public_html/<vostro_sito>/php-pastebin-v3-master /home/webmaster/public_html/<vostro_sito>/php-pastebin

e sistemare i permessi

cd /home/webmaster/public_html/<vostro_sito>
sudo chown -R webmaster:www-data php-pastebin
sudo chmod 775 -R php-pastebin/

Navigare con il browser all'indirizzo http://[vostro_sito]/php-pastebin e terminare l'installazione in modo grafico. La prima videata dovrebbe essere la seguente: Selezionando Start Installation si accede alla schermata successiva Poiché i percorsi sono tutti scritti in verde significa che hanno passato il test, quindi possiamo premere Stem 2 e passare alla schermata successiva In questa pagina vi vengono richiesti i parametri di collegamento al DB precedentemente creato, dovreste quindi avere una situazione come mostrata in figura seguente Premete quindi Test Connection per accedere alla pagina di creazione delle tabelle nel DB Premendo il tasto Install database! si accede all'ultima pagina di configurazione Immettere i dati per la creazione dell'utente amministratore e modificare il titolo a piacimento, poi premere il tasto Update Config ed eccovi giunti alla fine dell'installazione Prima di premere il tasto Go to your website assicuratevi di aver dato gli “ultimi ritocchi”. Ultimi ritocchi come indicato dalla schermata finale

sudo rm /home/webmaster/public_html/<your_website>/php-pastebin/install.php
sudo rm /home/webmaster/public_html/<your_website>/php-pastebin/libs/db.sql
sudo chmod 644 /home/webmaster/public_html/<your_website>/php-pastebin/libs/db.php

Ora php-PasteBin è pronto per essere usato http://[vostro_sito]/php-pastebin.

phpBB

phpMyAdmin

phpMyAdmin è un database manager indispensabile per gestire MySQL (verranno fatti riferimenti ad esso nel corso della guida).

Installazione Automatizzata (di sistema)

Per installare digitare

sudo apt-get install phpmyadmin

Il programma di installazione effettuerà la configurazione automatica del webserver.

Selezionare Apache2 (usando la barra spaziatrice e non l'invio :!:)

Per testarne il funzionamento è sufficiente aprire un borwser e farlo puntare a http://[vostro_sito]/phpmyadmin

La versione pacchettizzata nel sistema, solitamente, è meno aggiornata ma si integra meglio con le logiche di sicurezza del sistema.

Installazione Manuale

Se siete dei puristi potete cimentarvi nell'installazione da 0.
Il vostro pacchetto sarà allineato all'ultima versione ma potrebbe essere più insicuro.

Purtroppo il sito di phpMyAdmin non esporta la comoda funzione per scaricare sempre l'ultima versione, si rende quindi necessario andare sul sito e copiare il link della versione corrente per poi sostituirlo a quello riportato in questa guida. Mentre questa guida viene redatta la versione rilasciata di phpMyAdmin è la 4.4.8 il cui url per il download è http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/4.4.8/phpMyAdmin-4.4.8-all-languages.tar.gz/download#!md5!e0ba0592078f43a6ac1a47546877df18
Spostarsi nella cartella Materiale precedentemente creata

cd /home/webmaster/materiale

e scaricare phpMyAdmin (avendo cura di sostituire l'url con quello della versione più recente presente al momento dell'instalazione e di togliere tutta la parte da /download che darebbe problemi.)

sudo wget http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/4.4.8/phpMyAdmin-4.4.8-all-languages.tar.gz

Decomprimere il contenuto del file appena scaricato nella DocumentRoot del sito

tar -xzvf phpMyAdmin-x.x.x-all-languages.tar.gz -C /home/webmaster/pubblic_html

Sistemare owner e nome della catella

cd /home/webmaster/pubblic_html
sudo chown webmaster:www-data -R phpMyAdmin-x.x.x-all-languages
sudo mv phpMyAdmin-x.x.x-all-languages phpMyAdmin

Ora procediamo alla configurazione (semi-automatica di phpMyAdmin)

cd phpMyAdmin
mkdir config                            # create directory for saving
chmod 775 config                        # give it world writable permissions
cp config.sample.inc.php config.inc.php
cp config.inc.php config/               # copy current configuration for editing
chmod 775 config/config.inc.php         # give it world writable permissions

Per terminare la configurazione, aprire il browser e navigare verso la locazione del vostro phpMyAdmin aggiungento /setup
http://[vostro_sito]/phpmyadmin/setup Finito il setup salvate e tornate con il browser su http://[vostro_sito]/phpmyadmin

Considerazioni Finali

Personalmente mi ha divertito scrivere e provare la parte della configurazione manuale … ma l'eccessivo numero di parametri nella configurazione del pacchetto rendono tedioso il tentativo e non c'è una reale certezza di averlo reso anche sicuro quindi personalmente (almeno per ora) penso rimarrò sulla versione automatizzata.

phpSysInfo

phpSysInfo riporta alcune info riguardanti Hardware e Software del server su cui viene messo. Per installarlo ci porteremo come di consueto nella solita cartella materiale

cd /home/webmaster/materiale

Con un browser portarsi all'indirizzo https://github.com/phpsysinfo/phpsysinfo/releases/latest e copiare l'url del tar.gz (che poi dovrete sostituire nel comando seguente)

sudo wget https://github.com/phpsysinfo/phpsysinfo/archive/vx.x.x.tar.gz

Ora sarà sufficiente decomprimere il file nella giusta cartella

sudo tar -xvf ./vx.x.x.tar.gz -C /home/webmaster/pubblic_html/

rinominare la cartella

sudo mv /home/webmaster/pubblic_html/phpsysinfo-x.x.x/ /home/webmaster/pubblic_html/phpsysinfo/

e sistemare i permssi

cd /home/webmaster/pubblic_html
sudo chown -R webmaster:www-data phpsysinfo
sudo chmod 775 -R phpsysinfo/

Ora creiamo il nuovo file di configurazione

cd phpsysinfo
sudo cp phpsysinfo.ini.new phpsysinfo.ini
sudo chown webmaster:www-data phpsysinfo.ini

Modificate il file phpsysinfo.ini a vostro piacimento ma attenzione a non esporre troppi dati “sensibili” Ora potete, con il browser, navigare all'indirizzo http://[vostro_sito]/phpsysinfo per gli ultimi ritocchi tipo il tema da usare (nel mio caso nextgen).

WebMin

Webmin è un pacchetto che consente la gestione del server tramite interfaccia Web. Come quasi tutte le webapp ha due modi per poter essere installato

Installazione Automatizzata (di sistema)

Per installare digitare

sudo apt-get install webmin

Solo che, come per tutti i package delle distro, installa una versione non nuovissima …

Installazione Manuale

Per questa partitcolare webapp l'installazione manuale è abbastanza semplificata dall'esistenza di un .deb con l'ultima versione. Quindi spostarsi nella cartella materiale e scaricare il .deb andando prima sul sito con il browser e copiando il link all'ultima versione da sostituire nel comando seguente

cd /home/webmaster/materiale
sudo wget http://prdownloads.sourceforge.net/webadmin/webmin_x.xxx_all.deb

ed ora procediamo all'installazione vera e propria

sudo dpkg -i webmin_x.xxx_all.deb

Se vengono segnalati errori riguardanti le dipendenze dare il seguente comando

sudo apt-get -f install

digitare Y alla richiesta di poter installare le dipendenze.
Al termine webmin verrà attivato nel sistema.

Conclusioni

Una volta installato, webmin è raggiuncipile all'indirizzo https://your_site:10000/

WordPress

16. Dynamic DNS

Perchè un webserver possa essere visibile nel web è necessario che abbia un dominio registrato che punti su di lui.
Se avete l'IP fisso nessun problema ma, che succede se avete un IP dinamico ?
Serve qualcosa che mantenga allineato il vostro indirizzo con il dominio che avete registrato.
Io ho scelto di farlo attraverso il servizio di NO-IP Per mantenere il vostro IP sincronizzato con NO-IP è necessario installare il client di NO-IP.
Una volta esisteva un pacchetto di sistema ma nelle ultime versioni di Ubuntu è stato dismesso quindi sarà necessario procedere come segue

sudo -i
cd /usr/local/src/
wget http://www.noip.com/client/linux/noip-duc-linux.tar.gz
tar xf noip-duc-linux.tar.gz
cd noip-2.1.9-1/
make install
rm /usr/local/src/noip-duc-linux.tar.gz
exit

Questo installerà il client di sincronia, per configurarlo digitare

ATTENZIONE!!!: prima di dare questo comando assicurarsi di aver già fatto la registrazione su NO-IP ed avere le credenziali dell'account a disposizione

sudo /usr/local/bin/noip2 -C

Per cambiare l'intervallo di sincronizzazione digitare

sudo /usr/local/bin/noip2 -U 120

Per far ripartire il servizio digitare

sudo /usr/local/src/noip-2.1.9-1/debian.noip2.sh restart
#! /bin/sh
 
### BEGIN INIT INFO
# Provides:          noip2
# Required-Start:    $syslog
# Required-Stop:     $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: noip.com client service
### END INIT INFO
 
# . /lib/lsb/init-functions
case "$1" in
    start)
        echo "Starting noip2."
        /usr/local/bin/noip2
    ;;
    stop)
        echo "Shutting down noip2."
        killall noip2
        #killproc /usr/local/bin/noip2
    ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
esac
 
exit 0

Then give it executable permissions and update the rc.d scripts:

sudo chmod +x /etc/init.d/noip2
sudo update-rc.d noip2 defaults

Now you can reboot your Raspberry Pi and it will automatically update it’s ip at noip on boot.

17. Backups

Il disco dei backups

Poichè lasciare il backup sugli stessi dischi che si stanno backuppando potrebbe non essere un'idea geniale, ho acquistato un disco esterno dove poter copiare i bacups.
Per prima cosa attaccare un disco esterno ed identificarlo

sudo fdisk -l

(dalle dimensioni dovrebbe essere facilmente identificabile)
Nel mio caso è stato identificato dal sistema come /dev/sdb1.
A questo punto si procede alla formattazione in ext4 (In questo modo sarà leggibile solo da linux se preferite che venga visto anche da windows non eseguite il passo successivo) .

sudo mkfs.ext4 -L BackupsDisk /dev/sdb1

Poi è necessario montare il disco, io ho optato per un mount in fase di startup del server.
Eseguire il comando seguente e prendere nota dello UUID

sudo lsblk --output NAME,LABEL,FSTYPE,UUID

il cui risultato

sdb
└─sdb1                        BackupsDisk ext4        aca1e3de-aa82-46e2-b54d-de9950f672f7

Vi fornirà lo UUID del disco. Ora sarà necessario editare il file fstab per aggiungere il mount in fase di boot

sudo nano /etc/fstab

aggiungere al file fstab la seguente riga

UUID=aca1e3de-aa82-46e2-b54d-de9950f672f7 /media/backups ext4 defaults 0       1

Ovviamente al parametro UUID dovrete sostituire quello precedentemente copiato, il mount point potete metterlo anche diverso da quello che ho indicato io …
per tutti gli altri parametri rimando alla guida seguente.

Prima di procedere oltre, riavviate il server ed assicuratevi che il disco sia stato montato correttamente.

Utente MySQL per il dump del DB

Per eseguire il dump de db è sempre meglio avere un utente specifico che abbia la possibilità di leggere ed eseguire il dump su tutti i DB (presenti e futuri) presenti nel vostro MySQL.
Ecco lo script di creazione da eseguire con phpMyAdmin

CREATE USER 'Your_Backup_User'@'localhost' IDENTIFIED BY  'Your_Backup_User_Password';
GRANT SELECT, RELOAD, FILE, SUPER, LOCK TABLES, SHOW VIEW ON *.* TO 'Your_Backup_User'@'localhost' IDENTIFIED BY 'Your_Backup_User_Password' 
WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;

Script di backup

Posizionarsi nella cartella /usr/local/sbin e creare il file backmeup.sh

cd /usr/local/sbin
sudo nano backmeup.sh

il cui contenuto è il seguente

date=`date +%Y%m%d_%H%M%S`
usrname='webmaster'
dbackups='/home/'$usrname'/backup/'
fname=$dbackups'backup-'$date'.tar'
dumpfile=$dbackups'dump-all-'$date'.sql'
zfname=$dbackups'backup-'$date'.7z'
oldfiles=$dbackups'backup-*.7z'
fddimg=$dbackups'backup-mbr-'$date'.img'
fetcname=$dbackups'backup-etc-'$date'.tgz'
frootname=$dbackups'backup-root-'$date'.tar'
fvarlogname=$dbackups'backup-varlog-'$date'.tar'
fhomename=$dbackups'backup-home-'$date'.tar'
fconfigfiles=$dbackups'backup-configfiles-'$date'.tar'
dconffiles=$dbackups'configfiles'
 
cd $dbackups
 
echo ==== INIZIO [`date +%Y%m%d_%H%M%S`] ====
 
# Elimina Backups vecchi
echo ==[ Elimina Backups vecchi ]==
rm $oldfiles
 
 
#BackUp MBR
#echo ==[ BackUp MBR ]==
#dd if=/dev/sda of=$fddimg bs=512 count=1
 
# Ripulisce i vecchi files di configurazione precedentemente salvati
echo ==[ Ripulisce i vecchi files di configurazione precedentemente salvati ]==
rm $dconffiles/*.txt
rm $dconffiles/*.cf
rm $dconffiles/*.ini
 
 
# Esporto il crontab, le configurazioni di postfix (in 2 formati) ed il php.ini
echo ==[ Esporto il crontab, le configurazioni di postfix [in 2 formati] ed il php.ini ]==
crontab -l > $dconffiles/crontab.txt
postconf > $dconffiles/postconf.txt
cp /etc/postfix/main.cf $dconffiles/
cp /etc/php5/apache2/php.ini $dconffiles/
 
#Eseguo il dump del DB (Ricordardi di modificare user e password)
echo ==[ Eseguo il dump del DB ]==
mysqldump -uYour_Backup_User -pYour_Backup_User_Password --add-drop-table --all-databases > $dumpfile
 
# Backup delle webapps installate con apt-get
echo ==[ Backup delle webapps installate con apt-get ]==
echo $fname
tar cpvf $fname /usr/share/phpmyadmin
tar rpvf $fname /usr/share/webmin
 
echo ==[ Backup /etc /root /var/log ]==
tar -czvpf $fetcname /etc
tar cpvf $frootname /root
tar cpvf $fvarlogname /var/log
 
echo ==[ Backup dump file del DB ]==
tar rvf $fname $dumpfile
rm $dumpfile
 
echo ==[ Compressione files di configurazione ]==
tar cpvf $fconfigfiles $dconffiles
 
echo ==[ Compressione di tutti i files backuppati ]==
7z a $zfname $fname
7z a $zfname $fetcname
7z a $zfname $frootname
7z a $zfname $fvarlogname
7z a $zfname $fddimg
7z a $zfname $fconfigfiles
 
echo ==[ Rimozione dei backups non compressi ]==
rm $fname
rm $fetcname
rm $frootname
rm $fvarlogname
rm $fddimg
rm $fconfigfiles
 
echo ==[ Backup /home ]==
tar -cpvf $fhomename --exclude backup /home/$usrname
 
echo ==[ Compressione /home ]==
7z a $zfname $fhomename
 
echo ==[ Rimozione dei backup /home non compresso ]==
rm $fhomename
 
echo ==[ Sistemazione diritti backup compresso ]==
chown $usrname:www-data $zfname
 
echo ==[ Copia in backups ]==
cp $zfname /media/backups/
 
echo ==== FINE [`date +%Y%m%d_%H%M%S`] ====

avendo cura di sostituire nelle righe seguenti i vostri dati

usrname='webmaster'
dbackups='/home/'$usrname'/backup/'
mysqldump -uYour_Backup_User -pYour_Backup_User_Password --add-drop-table --all-databases > $dumpfile

Ora rendetelo eseguibile con

sudo chmod 775 backmeup.sh

Schedulare il backup

Poichè molte parti dello script richiedono i privilegi di root per funzionare, dovremo avere cura di schedulare lo script nel crontab del root.

sudo -i
crontab -e

Se è la prima volta che lanciate il comando crontab -e, il sistema vi chiederà con quale editor volete eseguire le modifiche (verrà reso predefinito per il futuro)
Fate la vostra scelta (io ho scelto di continuare ad usare nano)

Aggiungere al file crontab la seguente riga

00 20 * * * /usr/local/sbin/backmeup.sh > /var/log/my_backup.log

Per i parametri di crontab vi rimando a questa immagine abbastanza esplicativa.

Premere Ctrl+X e salvare le modifiche ed uscire dalla modalità root con

exit

Conclusioni

Ora il vostro backup è pronto per essere eseguito.
Se volete fare un primo giro di prova senza attendere l'esecuzione della schedulazione

cd /usr/local/sbin
sudo ./backmeup.sh

Al termine dello script verificate che il file generato si trovi sia sotto la cartella backup dell'utente webmaster che sul disco dei backups

18. Accesso Remoto e Tunneling

Spesso è utile poter accedere al server da remoto per cambiare configurazioni o modificare parametri che non si vuole siano “aggredibile” tramite un'interfaccia web da chiunque. Per questo ci viene in aiuto il procolollo SSH il cui server abbiamo installato come primo passo di questa guida. Poichè esporre il protocollo SSH con la richiesta di login e password rappresenta comunque un rischio, è preferibile disattivare la richiesta delle credenziali ma accedere tramite un meccanismo a chiave pubblica e privata.

Prerequisiti

Per la parte successiva della guida è necessario disporre di PuttyGen che può essere scaricato qui

Creazione Struttura su File System

Per fare ciò è necessario creare la cartella .ssh nella home dell'utente con cui intendete collegarvi. Immaginando di essere già nella sua home procedere come segue:

mkdir .ssh
cd .ssh
nano authorized_keys2 #salvare il file vuoto
cd ..
chmod 600 .ssh/authorized_keys2
chmod 700 .ssh

Generazione delle chiavi (Pubblica / Privata)

Avviare PuttyGen, selezionare SSH-2 RSA nel riquadro Type of key to generate e specificare 1024 (o valore superiore) come valore per Number of bits in a generated key.
A questo punto premere il tasto Generate.
Durante il processo di generazione è necessario “agitale” il puntatore del mouse nell'area in alto della finestra di PuttyGen per aumentare il random della chiave.
Quando la barra blu arriva a fine dell'indicatore, le chiavi sono state generate.
Mettete in Key comment qualcosa che faccia capire di quale chiave si tratta (avendo generato una chiave per ognuno dei miei dispositivi mobili, nel commento ho messo il nome del dispositivo in modo da sapere a quale fa riferimento la chiave. La cosa potrebbe tornare utile in caso di furto o smarrimento per poter disattivare solo quel dispositivo). Per aumentare la sicurezza, potete impostare una passphrase che vi verrà richiesta al momento dell'utilizzo della chiave, non è obbligatorio metterla ma senza chiunque avrà la chiave potrà collegarsi (io la uso per la macchina in ufficio, per evitare che chiunque possa collegarsi al mio server da li). Se volete impostarla digitate la password desiderata nel campo Key passphrase e ripetetela nel campo Confirm passphrase.

Ora premete Save publick key e salvate la chiave in un percorso “sicuro” del vostro PC avendo cura di darle un nome che vi consenta di capire a quale sistema verrà applicata.

Premete Save private key.
Potete salvare questa chiave nello stesso percorso dell'altra ma badate di potervi accedere solo voi e di non perderla perchè se disattivate il login tramite username/password non sarà più possibile accedere al server se non con una live. Potete dare qualsiasi nome vogliate al file ma l'estensione deve rimanere .ppk.
Ora copiate la chiave pubblica dalla finestra di PuttyGen

Salvare la chiave pubblica sul server

Accedere al server con il solito login username/password e salvare la chiave precedentemente copiata nel file authorized_keys2

cd .ssh
nano authorized_keys2

Portatevi alla fine del file e premete il tasto destro del mouse per incollare.
La linea aggiunta dovrebbe assomigliare a questa

ssh-rsa AAAAB3NzaC1yc2EA[...]Lg5whU0zMuYE5IZu8ZudnP6ds= myname@example.com

webalizer
dokuwiki
Key-Based SSH Logins With PuTTY
TeamSpeack3 Server


Spoiler
Spoiler