**Attenzione:** Guida in fase di stesura.
====== 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 [[http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html|PuTTY]] per connettersi al server Ubuntu 16.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. 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
===== 6. 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 mc imagemagick build-essential unzip zip p7zip-full
sudo apt-get install nmap openssl zlib1g-dev autoconf bison autotools-dev flex
sudo apt-get install libarchive-zip-perl libio-compress-perl libpcre3 perl perl-modules g++ libpopt-dev m4 make libtool
sudo apt-get install lynx ncftp
sudo apt-get install curl
===== 7. Installare MySQL o MariaDB =====
Attualmente ci sono ben due versioni di MySQL disponibili:
* [[linux:webserver:ampp_server_16.04#install_mysql|MySQL]] "classico" il cui sviluppo è garantito da Oracle.
* [[linux:webserver:ampp_server_16.04#mariadb|MariaDB]] un fork di MySQL proma che venisse acquisito da Oracle, il cui sviluppo è garantito da Monty Widenius (lo sviluppatore originario)
Di seguito verranno illustrate entrambe le alternative (le sezioni 7.1 e 7.2 sono in mutua esclusione)
==== 7.1 Install MySQL ====
Per installare MySQL digitare
sudo apt-get -y install mysql-server mysql-client
I pacchetti ''//mysql-server//'' e ''//mysql-client//'' sono dei "meta-pacchetti", di fatto sono degli alias all'ultima versione scaricabile.
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 termine installazione MySQL è già operativo ma volendo rimuovere il DB di test e l'utente anonimo è consigliabile eseguire una riconfigurazione ''sicura''.
sudo mysql_secure_installation
di seguito l'output del comando con le relative risposte
//''Securing the MySQL server deployment. \\
\\
Enter password for user root: ''//**<- Enter the MySQL root password** \\
\\
//''VALIDATE PASSWORD PLUGIN can be used to test passwords \\
and improve security. It checks the strength of password \\
and allows the users to set only those passwords which are \\
secure enough. Would you like to setup VALIDATE PASSWORD plugin? \\
\\
Press y|Y for Yes, any other key for No: \\
Using existing password for root. \\
Change the password for root ? (Press y|Y for Yes, any other key for No) : ''//**<- Digitare y se volete cambiare la password di root immessa poco prima, altrimenti digitare 'n'.** \\
\\
//''... skipping. \\
By default, a MySQL installation has an anonymous user, \\
allowing anyone to log into MySQL without having to have \\
a user account created for them. This is intended only for \\
testing, and to make the installation go a bit smoother. \\
You should remove them before moving into a production \\
environment. \\
\\
Remove anonymous users? (Press y|Y for Yes, any other key for No) :''// <- y \\
//''Success. \\
\\
Normally, root should only be allowed to connect from \\
'localhost'. This ensures that someone cannot guess at \\
the root password from the network. \\
\\
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :''// <- y \\
//''Success. \\
\\
By default, MySQL comes with a database named 'test' that \\
anyone can access. This is also intended only for testing, \\
and should be removed before moving into a production \\
environment. \\
\\
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :''// <- y \\
//''- Dropping test database... \\
Success. \\
\\
- Removing privileges on test database... \\
Success. \\
\\
Reloading the privilege tables will ensure that all changes \\
made so far will take effect immediately. \\
\\
Reload privilege tables now? (Press y|Y for Yes, any other key for No) :''// <- y \\
//''Success. \\
\\
All done! ''// \\
L'installazione "sicura" è finita.
==== 7.2 MariaDB ====
Per installare MySQL digitare
sudo apt-get -y install mariadb-server mariadb-client
Eseguiamo la configurazione
sudo mysql_secure_installation
di seguito l'output del comando con le relative risposte
//''NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB''// \\
//'' SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!''// \\
//''In order to log into MariaDB to secure it, we'll need the current''// \\
//''password for the root user. If you've just installed MariaDB, and''// \\
//''you haven't set the root password yet, the password will be blank,''// \\
//''so you should just press enter here.''// \\
//''Enter current password for root (enter for none):''// <- Enter\\
//''OK, successfully used password, moving on...''// \\
//''Setting the root password ensures that nobody can log into the MariaDB''// \\
//''root user without the proper authorisation.''// \\
//''Set root password? [Y/n]''// <- y \\
//''New password:''// **<- Digitare la nuova password di root per MariaDB ** \\
//''Re-enter new password:''// **<- Reinserire la password per controllo** \\
//''Password updated successfully!''// \\
//''Reloading privilege tables..''// \\
//'' ... Success!''// \\
//''By default, a MariaDB installation has an anonymous user, allowing anyone''// \\
//''to log into MariaDB without having to have a user account created for''// \\
//''them. This is intended only for testing, and to make the installation''// \\
//''go a bit smoother. You should remove them before moving into a''// \\
//''production environment.''// \\
//''Remove anonymous users? [Y/n]''// <- y \\
//'' ... Success!''// \\
//''Normally, root should only be allowed to connect from 'localhost'. This''// \\
//''ensures that someone cannot guess at the root password from the network.''// \\
//''Disallow root login remotely? [Y/n]''// <- y \\
//'' ... Success!''// \\
//''By default, MariaDB comes with a database named 'test' that anyone can''// \\
//''access. This is also intended only for testing, and should be removed''// \\
//''before moving into a production environment.''// \\
//''Remove test database and access to it? [Y/n]''// <- y \\
//'' - Dropping test database...''// \\
//'' ... Success!''// \\
//'' - Removing privileges on test database...''// \\
//'' ... Success!''// \\
//''Reloading the privilege tables will ensure that all changes made so far''// \\
//''will take effect immediately.''// \\
//''Reload privilege tables now? [Y/n]''// <- y \\
//'' ... Success!''// \\
//''Cleaning up...''// \\
//''All done! If you've completed all of the above steps, your MariaDB''// \\
//''installation should now be secure.''// \\
//''Thanks for using MariaDB!''// \\
==== 7.3 Controlli ====
A prescindere da quale DB sia stato installato (MySQL / MariaDB) è consigliabile eseguire un test di connessione digitando quanto segue
sudo mysql -u root -p
Digitando la password di ''root'' dovremmo entrare sulla console del DB. \\
==== 7.4 Nuovo utente Amministratore ====
Poichè, durante l'installazione, si è deciso di impedire all'utente ''root'' di loggare da remoto si rende necessario creare un nuovo utente che ci consenta di operare tramite interfacce remote tipo ''phpMyAdmin''.
Il codice seguente serve a tale scopo:
CREATE USER '<#sys_dba>'@'localhost' IDENTIFIED BY '<#YourPassword>';
GRANT ALL PRIVILEGES ON *.* TO '<#sys_dba>'@'localhost' WITH GRANT OPTION;
CREATE USER '<#sys_dba>'@'%' IDENTIFIED BY '<#YourPassword>';
GRANT ALL PRIVILEGES ON *.* TO '<#sys_dba>'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
==== 7.5 Utente per i Backups ====
Per evitare di lasciare la password di ''root'' o del ''nuovo utente amministratore'' nei batch di bachup, sarebbe consigliabile creare anche un utente specifico per i backups.
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;
FLUSH PRIVILEGES;
Per uscirne digitare **''quit''**
===== 8. Installare il frontend Web =====
==== 8.1. Installare Apache ====
Installare Apache digitando
sudo apt-get install apache2 apache2-doc apache2-utils libexpat1 ssl-cert
==== 8.2. Installare PHP7 / Python / Perl / Ruby ====
=== PHP7 ===
Per installare PHP e gran parte delle sue librerie digitare
sudo apt-get install php7.3 libapache2-mod-php7.3 php7.3-curl php7.3-fpm php7.3-cli php7.3-common php7.3-curl php7.3-gd php7.3-intl php7.3-bz2 php7.3-imap php7.3-pspell php7.3-recode php7.3-snmp php7.3-tidy php7.3-xmlrpc php7.3-xml php7.3-mysql php7.3-mbstring php7.3-zip php-imagick php-pear php-memcache php-gettext
Consiglio di aggiungere anche i seguenti moduli per i collegamenti con DB diversi da MySQL
sudo apt-get install php-ldap php7.3-json php7.3-odbc php7.3-pgsql php7.3-sqlite3 php-mongodb php7.3-sybase php7.3-interbase
== Installare Opcache e APCu PHP cache per velocizzare PHP ==
In PHP 7 è inclusa un opcode cacher, uno strumento in grado di ottimizzare le prestazioni del codice PHP.
Inoltre è consigliabile installare anche APCu che è un wrapper per garantire la retrocompatibilità con le funzioni di caching APC, un sistema di caching molto usato su PHP e implementato in molti CMS.
Per installarli è sufficiente digitare:
sudo apt-get -y install php7.3-opcache php-apcu
Potrebbe apparire la segnalazione che Opcache è già installato... va ignorata.
== Sistemazione short tag ==
Molti script ''php'' usano lo ''short tag'' che nelle ultime versioni di PHP7 e disattivo di default, per ovviare a questo problema editare il file ''php.ini''
cd /etc/php/7.3/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.
===== 9. Configurare il frontend Web =====
==== 9.1. Configurare di Apache ====
=== 9.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 [[https://wiki.debian.org/it/LaMp|documentazione]] di Debian.
Creare un nuovo utente (potrebbe essere fatto anche sull'utente corrente ma essendo un ''"sudoers"'' è potenzialmente pericoloso).
Nel resto della guida referenzierò tale utente come **<#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''
cd $HOME
mkdir www
cd www
mkdir public_html
mkdir materiale
mkdir config
mkdir cgi-bin
mkdir backup
mkdir logs
mkdir stats
Queste cartelle serviranno ad ospitare il sito ed il suo backup.
Accedere alla cartella ''public_html'' e creare una cartella per ogni dominio che si desidera gestire
cd public_html
mkdir miosito.com
Tornare all'utente precedente
exit
cambiare il gruppo sulla cartella appena creata e riavviare il webserver
sudo chown -R <#webmaster>:www-data /home/<#webmaster>/www/public_html
sudo chown -R <#webmaster>:www-data /home/<#webmaster>/www/logs
sudo chown -R <#webmaster>:www-data /home/<#webmaster>/www/cgi-bin
sudo chown -R <#webmaster>:www-data /home/<#webmaster>/www/stats
sudo service apache2 restart
Sistemare i permessi sulla cartella ''/home/<#webmaster>/www/public_html'' come segue:
sudo chmod 775 -R /home/<#webmaster>/www/public_html
sudo chmod 775 -R /home/<#webmaster>/www/logs
sudo chmod 775 -R /home/<#webmaster>/www/cgi-bin
sudo chmod 775 -R /home/<#webmaster>/www/stats
=== 9.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.
ServerName miosito.com
ServerAdmin Your@email
DocumentRoot /home/<#webmaster>/www/public_html/miosito.com/
/www/public_html/miosito.com/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
.
.
.
ErrorLog /home/<#webmaster>/www/logs/error_http_miosito_com.log
CustomLog /home/<#webmaster>/www/logs/access_http_miosito_com.log combined
.
.
.
ScriptAlias /cgi-bin/ /home/<#webmaster>/www/cgi-bin/
/www/cgi-bin/>
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
Require all granted
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
Ora è necessario riavviare Apache
sudo service apache2 restart
==== 9.2. Configurazione dei linguaggi per il funzionamento con Apache ====
=== PHP ===
Per poter usare PHP controllare che ''/etc/apache2/mods-available/php7.3.conf'' sia corretto:
sudo nano /etc/apache2/mods-available/php7.3.conf
SetHandler application/x-httpd-php
SetHandler application/x-httpd-php-source
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
# Deny access to files without filename (e.g. '.php')
Require all denied
# Running PHP scripts in user directories is disabled by default
#
# To re-enable PHP in user directories comment the following lines
# (from to .) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
#
#
# php_admin_flag engine Off
#
#
=== Python ===
Esistono due modi per gestire il codice Python con Apache
* Il Publisher Handler -- Consente di scrivere scripts in puro Python (''.py'') che vengono interpretati
* PSP Handler -- Python Server Pages, consentono di embeddare codice Python nell'HTML come avviene per PHP (''.psp'').
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
AddHandler mod_python .py .psp
PythonHandler mod_python.publisher | .py
PythonHandler mod_python.psp | .psp
A questo punto è necessario attivare il modulo Python
sudo a2enmod 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
AddHandler perl-script .pl
PerlHandler ModPerl::PerlRunPrefork
PerlOptions +ParseHeaders
PerlSendHeader On
Anche in questo caso il modulo deve essere attivato
sudo a2enmod perl
==== 9.3. Attivazione SSL ====
Questa parte della guida è nuova e potrebbe essere soggetta ad ampliamenti / modifiche future.
SSL/ TLS è un layer du sicurezza che permette di codificare la connessione fra un client ed un server. \\
Per GOOGLE i siti che non supportano SSL hanno un punteggio più basso e molti browser iniziano a "storcere il naso" se il sito non è crittografato SSL (specialmente se in presenza di una richiesta di credenziali). \\
Per farsi che Apache abiliti il protocollo https (quindi la crittografia SSL) digitare:
sudo a2enmod ssl
sudo a2ensite default-ssl
In questo modo ''/etc/apache2/sites-available/default-ssl.conf'' verrà incluso nella configurazione di apache.
=== 9.3.1 Ottenere un certificato SSL gratis da Let's Encrypt ===
Poichè per poter attivare un certificato SSL Gratis da Let's Encrypt è necessario che l'indirizzo il server sia già raggiungibile tramite DNS, questa parte della guida è stata spostata al punto 16.
==== 9.4. 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
#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
Ora è necessario abilitare alcuni moduli di Apache ( rewrite , suexec , e include )
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
===== 10. Primi Test =====
==== 10.1. Implementazione Prerequisiti per Test ====
=== Impostazione "DNS" per i test ===
Poiché Apache instrada le chiamate sulla base dell'url che riceve, si rende necessario che il sistema operativo da cui verranno svolti i controlli conosca l'indirizzo del server web associato al dominio scelto (''miosito.com''). \\
Per fare ciò, evitando di dover implementare un server DNS apposito, é necessario modificare un file di sistema come vedremo di seguito.
== Per SO Windows ==
Spostarsi nella cartella ''C:\Windows\System32\drivers\etc'' ed editare il file ''hosts'' aggiungendo la riga seguente
mio.ind.iri.zzo miosito.com
Una volta salvato il file il nuovo dominio dovrebbe essere raggiungibile immediatamente.
== Per SO Linux ==
Analogamente a quanto avviene per Windows, si renderá necessario modificare il file ''/etc/hosts''. \\
Per fare ciò digitare
sudo nano /etc/hosts
Una volta salvato il file il nuovo dominio dovrebbe essere raggiungibile immediatamente.
=== Ottenere l'indirizzo da mettere nel file hosts ===
Per ottenere l'indirizzo IP da mettere nel file ''hosts'' è necessario, sul web server, procedere come segue
sudo ifconfig
che dovrebbe restituire qualcosa di molto simile a quanto riportato di seguito
eth0: flags=4163 mtu 1500
inet XXX.XXX.XXX.XXX netmask 255.255.255.0 broadcast YYY.YYY.YYY.YYY
inet6 ffff::ffff:ffff:ffff:ffff prefixlen 64 scopeid 0x20
ether 00:15:5d:46:11:07 txqueuelen 1000 (Ethernet)
RX packets 269808 bytes 370708199 (370.7 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 121356 bytes 8868073 (8.8 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 236 bytes 22352 (22.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 236 bytes 22352 (22.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
La parte da riportare nel file ''hosts'' è quella contrassegnata come ''XXX.XXX.XXX.XXX''.
==== 10.2. Inizio dei Test ====
Per verificare il corretto funzionamento di Apache è sufficiente spostarsi in ''/home/webmaster/public_html/miosito.com'' e creare i seguenti files come utente ''webmaster''.
su webmaster
cd /home/<#webmaster>/www/public_html/miosito.com
=== info.php ===
Questo file verifica il corretto funzionamento di PHP mostrando la pagina informativa.
nano info.phpTest PHP
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.
nano 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.
nano test.psp
<% req.write("Hello!") %>
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''.
cd /home/<#webmaster>/www/cgi-bin
nano 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%%**.
=== Tornare utente "Amministratore" ===
Digitare **''exit''** per tornare all'utente amministratore.
===== 11. 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'' assicurandosi che le variabili riportate di seguito abbiano il valore indicato. In alternativa modificarle od aggiungerle.
sudo nano /etc/proftpd/proftpd.conf
[...]
DefaultRoot ~
IdentLookups off
ServerName "FTP <#MioSito>"
[...]
Riavviare il servizio per rendere attive le modifiche
sudo /etc/init.d/proftpd restart
Per impostarlo in modo che venga avviato al boot
sudo update-rc.d proftpd defaults
===== 12. Postfix con SMTP-AUTH e TLS =====
===== 13. 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 (**n**etwork **t**ime **p**rotocol) server su internet. \\
Per fare questo digitare
sudo apt-get install ntp ntpdate
Ora l'orologio di sistema verrà costantemente aggiornato
===== 14. Applicazioni Web =====
^ Elenco Applicazioni ^^^^
^ Applicazione ^ Licenza ^ Sito ^ Descrizione ^
| [[linux:webserver:ampp_server_16.04#AWStats|AWStats]] | Freeware | http://www.awstats.org/ | Statistiche del sito estratte dal log di Apache |
| [[linux:webserver:ampp_server_16.04#DokuWiki|DokuWiki]] | Freeware | https://www.dokuwiki.org/dokuwiki# | Documentazione ed Appunti |
| [[linux:webserver:ampp_server_16.04#Koken|Koken]] | Freeware + Coomercial | http://koken.me/ | Galleria Fotografica Professionale |
| [[linux:webserver:ampp_server_16.04#ownCloud|ownCloud / Nextcloud]] | Freeware | https://owncloud.org/ / https://nextcloud.com/ | |
| [[linux:webserver:ampp_server_16.04#PasteBin|PasteBin]] | Freeware | https://github.com/atmoner/php-pastebin-v3 | Strumento per la collaborare nel debug di ''code snipet'' |
| [[linux:webserver:ampp_server_16.04#phpBB|phpBB]] | Freeware | http://www.phpbbitalia.net/ | Bulletin Board |
| [[linux:webserver:ampp_server_16.04#phpMyAdmin|phpMyAdmin]] | Freeware | http://www.phpmyadmin.net/ | DB Manager per ''MySQL'' |
| [[linux:webserver:ampp_server_16.04#phpSysInfo|phpSysInfo]] | Freeware | http://phpsysinfo.github.io/phpsysinfo/ | Un piccolo script PHP che consente di monitorare lo stato del server |
| [[linux:webserver:ampp_server_16.04#Veno File Manager|Veno File Manager]] | Coomercial | http://filemanager.veno.it/it/ | |
| [[linux:webserver:ampp_server_16.04#Webmin|Webmin]] | Freeware | http://www.webmin.com/ | Controllo del server via interfaccia ''web'' |
| [[linux:webserver:ampp_server_16.04#WordPress|WordPress]] | Freeware | https://it.wordpress.org/ | Blog |
| [[linux:webserver:ampp_server_16.04#Magento|Magento CE]] | Freeware | https://magento.com/ | E-Commerce |
| [[linux:webserver:ampp_server_16.04#PrestaShop|PrestaShop]] | Freeware | https://www.prestashop.com | E-Commerce |
| [[linux:webserver:ampp_server_16.04#MantisBT|MantisBT]] | Freeware | https://www.mantisbt.org/ | Bug Tracking |
| [[linux:webserver:ampp_server_16.04#OSTicket|OSTicket]] | Freeware | http://osticket.com/ | Ticketing System |
| [[linux:webserver:ampp_server_16.04#GitLab CE|GitLab]] | Freeware | https://gitlab.com/ | Intefaccia web a ''git'' |
\\
{{section>:linux:webserver:webapps:awstats#AWStats&nofooter}}
{{section>:linux:webserver:webapps:dokuwiki&nofooter}}
{{section>:linux:webserver:webapps:koken&nofooter}}
{{section>:linux:webserver:webapps:owncloud&nofooter}}
{{section>:linux:webserver:webapps:pastebin&nofooter}}
{{section>:linux:webserver:webapps:phpbb&nofooter}}
{{section>:linux:webserver:webapps:phpmyadmin&nofooter}}
{{section>:linux:webserver:webapps:phpsysinfo&nofooter}}
{{section>:linux:webserver:webapps:webmin&nofooter}}
{{section>:linux:webserver:webapps:wordpress&nofooter}}
===== 15. 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 **''[[http://www.noip.com|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
Ora è necessario fornire i permessi di esecuzione ed aggiornare lo script rc.d:
sudo chmod +x /etc/init.d/noip2
sudo update-rc.d noip2 defaults
Ora, riavviando il server, l'indirizzo IP su NOIP verrà aggiornato automaticamente.
===== 16. Ottenere un certificato gratis da Let's Encrypt =====
Let's Encrypt è un ente certificatore creato da GOOGLE con l'appoggio dei principali enti certificatori mondiali. \\
Come gran parte delle cose realizzate da GOOGLE è possibile usufruirne tramite un comodo script in Python che, altrettanto comodamente, può essere recuperato con l'apt-get.
sudo apt-get -y install python-letsencrypt-apache
Da terminare
===== 17. Backups =====
==== 17.1. 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 [[https://wiki.archlinux.org/index.php/Fstab_%28Italiano%29|guida]] seguente.
Prima di procedere oltre, riavviate il server ed assicuratevi che il disco sia stato montato correttamente.
==== 17.3. 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'
dumpusers=$dbackups'MySQLUserGrants-'$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'
MYSQL_CONN="-u<#BackUp_User> -p<#BackUp_User_Password>"
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 ${MYSQL_CONN} --add-drop-table --all-databases > $dumpfile
mysql ${MYSQL_CONN} --skip-column-names -A -e "SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') AS query FROM mysql.user WHERE user NOT IN ('root','pma','phpmyadmin','debian-sys-maint')" | mysql ${MYSQL_CONN} --skip-column-names -A | sed 's/$/;/g' > $dumpusers
# 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 $dumpusers
rm $dumpfile
rm $dumpusers
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/'
MYSQL_CONN="-u<#BackUp_User> -p<#BackUp_User_Password>"
Ora rendetelo eseguibile con
sudo chmod 775 backmeup.sh
==== 17.4. 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 [[http://www.pc-freak.net/images/crontab-execute-cron-jobs-every-second-on-linux-cron-logo.png|questa immagine]] abbastanza esplicativa.
Premere Ctrl-X e salvare le modifiche ed uscire dalla ''//modalità root//'' con
exit
==== 17.5. 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.
==== 18.1. Prerequisiti ====
Per la parte successiva della guida è necessario disporre di PuttyGen che può essere scaricato [[https://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe|qui]]
==== 18.2. 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
==== 18.3. 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**.
{{ :linux:webserver:ampp_server_16.04:key-based_ssh_logins_01.png?nolink |}} \\
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.
{{ :linux:webserver:ampp_server_16.04:key-based_ssh_logins_02.png?nolink |}} \\
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**. \\
{{ :linux:webserver:ampp_server_16.04:key-based_ssh_logins_03.png?nolink |}} \\
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. \\
{{ :linux:webserver:ampp_server_16.04:key-based_ssh_logins_04.png?nolink |}} \\
Premete **Save private key**.
{{ :linux:webserver:ampp_server_16.04:key-based_ssh_logins_05.png?nolink |}} \\
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**.
{{ :linux:webserver:ampp_server_16.04:key-based_ssh_logins_06.png?nolink |}} \\
Ora copiate la chiave pubblica dalla finestra di PuttyGen
{{ :linux:webserver:ampp_server_16.04:key-based_ssh_logins_07.png?nolink |}}
==== 18.4. 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
===== xx. Links =====
[[http://articles.techrepublic.com.com/2415-7343_11-161368.html|webalizer]] \\
[[http://www.rigacci.org/wiki/doku.php/doc/appunti/linux/sa/dokuwiki|dokuwiki]] \\
[[https://www.howtoforge.com/ssh_key_based_logins_putty|Key-Based SSH Logins With PuTTY]] \\
[[http://terminal28.com/how-to-install-and-configure-teamspeak3-server-linux-debian-ubuntu/|TeamSpeack3 Server]] \\
[[https://www.howtoforge.com/tutorial/install-apache-with-php-and-mysql-on-ubuntu-16-04-lamp/]] \\
[[https://www.howtoforge.com/tutorial/install-nextcloud-server-and-client-on-debian-9/]] \\
[[https://www.svennd.be/setting-up-postfix-tsl-with-lets-encrypt/]]
\\
Quella che segue è solo una serie di appunti che serviranno alla stesura della guida.
===== Rendere Accessibile la /var/www =====
mkdir /home/[YOUR USERNAME]/www
mount --bind /var/www /home/[YOUR USERNAME]/www
seguendo [[http://www.zaphu.com/2007/08/21/ubuntu-lamp-server-guide-configure-apache-mysql-and-cgi-bin/|questa guida]]
===== Applicazioni Web =====
WordPress
[[http://www.supriyadisw.net/2006/12/wordpress-installation-on-ubuntu-with-lamp]]
===== Nuovi Appunti: 20100120 =====
[[http://wiki.vpslink.com/HOWTO:_CentOS_5_setup_for_LAMP_and_ISPconfig]]
\\ (Utile per vedere alcune configurazioni)