Indice
Attenzione: Guida in fase di stesura.
NOTA: Nel corso della guida troverete dei valori contassegnati da <#….>, tali valori vanno sostituiti con i vostri valoti. In futuro spero di poter mettewre la possibilitá di inserire i vostri valori ad inizio guida e ricompilare il documento sostituendo le variabili cono i vostri valori.
Assolutamente onn usate le variabili come se fossero dei valori reali perché dareste ad un poteziale attaccante delle utili informazioni per aggredire il sito.
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 16.04 LTS da una qualsiasi workstation e terminare l'installazione comodamente seduti alla propria postazione.
3. Configurare la rete
4. Aggiornare Linux
Digitare
sudo apt-get update
per aggiornare il database dei package di apt e poi
sudo apt-get upgradeper 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 systemctl stop apparmor 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:
- MySQL “classico” il cui sviluppo è garantito da Oracle.
- 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 the MySQL root password
Enter password for user root:
VALIDATE PASSWORD PLUGIN can be used to test passwords ← Digitare Y se volete cambiare la password di root immessa poco prima, altrimenti digitare 'n'.
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) :
… skipping. ← Y
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) :
Success. ← Y
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) :
Success. ← Y
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) :
- Dropping test database… ← Y
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) :
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
haven't set the root password yet, 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 or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] ←- N
… skipping.
You already have your root account protected, so you can safely answer 'n'.
Change the 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.1.1 Avviare Automaticamente Apache all'Avvio del Sistema
Per avviare automaticamente Apache all'avvio del sistema
sudo systemctl start apache2 sudo systemctl enable apache2
e poi lo verifichiamo con
sudo systemctl status apache2
8.2. Installare PHP8 / Python / Perl / Ruby
PHP 8.1
Per installare PHP e gran parte delle sue librerie digitare
sudo apt-get install php8.1 libapache2-mod-php8.1 php8.1-curl php8.1-fpm php8.1-cli php8.1-common php8.1-gd php8.1-intl php8.1-bz2 php8.1-imap php8.1-pspell php8.1-snmp php8.1-tidy php8.1-xmlrpc php8.1-xml php8.1-mysql php8.1-mbstring php8.1-zip php8.1-imagick php8.1-memcache php8.1-dev php8.1-gettext php8.1-xsl php8.1-calendar php8.1-exif php8.1-tokenizer php8.1-uuid php8.1-yaml php-json php-pear
Consiglio di aggiungere anche i seguenti moduli per i collegamenti con DB diversi da MySQL
sudo apt-get install php8.1-ldap php8.1-odbc php8.1-pgsql php8.1-sqlite3 php8.1-mongodb php8.1-sybase php8.1-interbase
Installare Opcache e APCu PHP cache per velocizzare PHP
In PHP 8 è 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 php8.1-opcache php8.1-apcu
Sistemazione short tag
Molti script php usano lo short tag che nelle ultime versioni di PHP8 e disattivo di default, per ovviare a questo problema editare il file php.ini
cd /etc/php/8.1/apache2 sudo nano php.ini
Premere Ctrl+W e digitare short_open_tag seguito da Invio.
Ripetere questa operazione sino a trovare 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 restartOra la configurazione è ricaricata e PHP è pronto. In caso di problemi, usare il procedimento precedente per modificare i seguenti valori come segue
display_errors = On display_startup_errors = On
Python
Per installare il modulo Python di Apache digitare
sudo apt-get install libapache2-mod-wsgi-py3
Per poter usare la potenza degli ambienti virtuali di Python installare i seguenti pacchetti
sudo apt-get install python3-pip python3-venv python-is-python3
Per cercarne altri
sudo apt-cache search python
per installare le librerie di collegamento a mysql (mysqlclient), é necessario aver prima installato il pacchetto libmysqlclient-dev
sudo apt install libmysqlclient-dev
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 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
Tornate nella cartella superiore
cd ..
Poi accedere alla cartella cgi-bin e creare una cartella per ogni dominio che si desidera gestire
cd cgi-bin 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> 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 755 -R /home/<#webmaster> sudo chmod 775 -R /home/<#webmaster>/www/public_html sudo chmod 755 -R /home/<#webmaster>/www/logs sudo chmod 775 -R /home/<#webmaster>/www/cgi-bin sudo chmod 755 -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
ServerAlias www.miosito.com
ServerAdmin Your@email
DocumentRoot /home/<#webmaster>/www/public_html/miosito.com/
<Directory /home/<#webmaster>/www/public_html/miosito.com/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
.
.
.
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/miosito.com/
<Directory /home/<#webmaster>/www/cgi-bin/miosito.com/>
AllowOverride All
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
Require all granted
</Directory>
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 systemctl reload apache2
9.2. Configurazione dei linguaggi per il funzionamento con Apache
PHP
Per poter usare PHP controllare che /etc/apache2/mods-available/php8.1.conf sia corretto:
sudo nano /etc/apache2/mods-available/php8.1.conf
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".+\.phps$">
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
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
Require all denied
</FilesMatch>
# Running PHP scripts in user directories is disabled by default
#
# To re-enable PHP in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
#<IfModule mod_userdir.c>
# <Directory /home/*/public_html>
# php_admin_flag engine Off
# </Directory>
#</IfModule>
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/
sudo nano /etc/apache2/mods-available/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
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
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
<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 ( 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 systemctl restart apache2
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/hostsUna 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 ifconfigche dovrebbe restituire qualcosa di molto simile a quanto riportato di seguito
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> 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<link>
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<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
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.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.
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
<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.
cd /home/<#webmaster>/www/cgi-bin/miosito.com 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 (network time protocol) server su internet.
Per fare questo digitare
sudo apt-get install ntp ntpdateOra l'orologio di sistema verrà costantemente aggiornato
14. 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 / Nextcloud | Freeware | https://owncloud.org/ / https://nextcloud.com/ | |
| PASTE | Freeware | https://github.com/jordansamuel/PASTE | Strumento per la collaborare nel debug di code snipet |
| phpBB | Freeware | http://www.phpbbitalia.net/ | Bulletin Board |
| 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 |
| Cockpit | Freeware | https://cockpit-project.org/ | Monitoraggio e controllo del server via interfaccia web |
| WordPress | Freeware | https://it.wordpress.org/ | Blog |
| Magento CE | Freeware | https://magento.com/ | E-Commerce |
| PrestaShop | Freeware | https://www.prestashop.com | E-Commerce |
| MantisBT | Freeware | https://www.mantisbt.org/ | Bug Tracking |
| OSTicket | Freeware | http://osticket.com/ | Ticketing System |
| GitLab | Freeware | https://gitlab.com/ | Intefaccia web a git |
AWStats
Poiché AWStats continua a dare problemi se si tenta di utilizzare il tasto di aggiornamento ho deciso di deprecare questa WebApp.
Questo software è un analizzatore dei files di log di Apache. Genera grafici sulla fruizione delle pagine.
Per installarlo basta digitare
sudo apt-get install awstats
Se si vuole avere anche la geolocalizzazione dei visitatori installare anche
sudo apt-get install libnet-ip-perl sudo apt-get install libgeo-ipfree-perl
Il file di configurazione di AWStats si trova in /etc/awstats.
Viene fornito un template chiamato “awstats.conf”.
E' necessario creare una copia di awstats.conf per ogni dominio di cui si desidera avere le statistiche:
sudo cp /etc/awstats/awstats.conf /etc/awstats/awstats.miosito.com.confSuccessivamente modificare il nuovo file
sudo nano /etc/awstats/awstats.miosito.com.confcercare le voci indicate di seguito e renderle come mostrato:
#Apache LogFile="/home/<#webmaster>/www/logs/access_http_miosito_com.log" # Name Dominio SiteDomain="miosito.com" HostAliases="localhost 127.0.0.1 miosito.com" # Cartella statistiche DirData="/home/<#webmaster>/www/stats" # Abilitare tasto Update AllowToUpdateStatsFromBrowser=1 # Visualizza intero anno AllowFullYearView=3
Potete anche aggiungere le seguenti righe per attivare i plugins della geolocalizzazione
LoadPlugin="tooltips" LoadPlugin="geoipfree"
Copiare il file di awstats nella cgi-bin del sito
sudo cp /usr/lib/cgi-bin/awstats.pl /home/<#webmaster>/www/cgi-bin/e modificarne i privilegi
sudo chown <#webmaster>:www-data /home/<#webmaster>/www/cgi-bin/awstats.pl sudo chmod 554 /home/<#webmaster>/www/cgi-bin/awstats.pl
Generare le prime statistiche (basate sul file var/log/apache2/access.log già esistente
/home/<#webmaster>/www/cgi-bin/awstats.pl -config=yourdomain.com -update
Dovreste ottenere un output simile a questo
Create/Update database for config "/etc/awstats/awstats.toto.com.conf" by AWStats version 6.7 (build 1.892) From data in log file "/var/log/apache2/access.log"... Phase 1 : First bypass old records, searching new record... Searching new records from beginning of log file... Phase 2 : Now process new records (Flush history on disk after 20000 hosts)... Jumped lines in file: 0 Parsed lines in file: 191338 Found 0 dropped records, Found 24 corrupted records, Found 0 old records, Found 191314 new qualified records.
Creare il file /etc/apache2/conf.d/statistics
nano /etc/apache2/conf.d/statisticse copiarvi le seguenti linee
Alias /awstatsclasses "/usr/share/awstats/lib/" Alias /awstats-icon/ "/usr/share/awstats/icon/" Alias /awstatscss "/usr/share/doc/awstats/examples/css" ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ ScriptAlias /statistics/ /usr/lib/cgi-bin/ Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Riavviare Apache
sudo /etc/init.d/apache2 restart
e verificare se tutto ha funzionato puntando il vostro browser su
http://yourdomain.ext/awstats/awstats.pl
o
http://yourdomain.ext/awstats/awstats.pl?config=yourdomain.ext
se avere più files di configurazione.
Per rendere la generazione delle statistiche automatica è necessario mettere la chiamata per l'aggiornamento in contab
crontab -eed aggiungere queste righe
# update every 10 min */10 * * * * root /usr/lib/cgi-bin/awstats.pl -config=toto.com -update > /dev/null
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
ATTENZIONE!!!: Purtroppo il progetto Koken-CMS (Koken.me) è stato discontinuato, le istruzioni seguenti funzionano ancora ma non è dato sapere sino a quando.
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 Koken_Installer.zip -d /home/<#webmaster>/www/public_html/[miosito.com]Sistemare utenti e permessi
cd /home/<#webmaster>/www/public_html/[miosito.com] 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://[mio_sito.com]/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
Fig. 1
Premere su Begin installation
Nella schermata successiva vengono richiesti i dati anagrafici dell'amministratore, una mail ed una password
Fig. 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
Fig. 3
Premendo 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>/www/public_html/[miosito.com] sudo chown -R <#webmaster>:www-data koken sudo chmod 775 -R koken/storage
Plugins Interesanti
| Nome Plugin | Descrizione | Utl | Provato |
|---|---|---|---|
| Content Warning for Koken CMS | Plugin per informare i visitatori della presenza di contenuti espliciti nel sito | https://github.com/Koken-Community-Support/Content-Warning | No |
| GDPR Cookie Consent for Koken CMS | GDPR Cookie | https://github.com/Koken-Community-Support/GDPR-Cookie-Consent | No |
| Let-It-Snow for Koken CMS | Fa nevicare (Natale) | https://github.com/Koken-Community-Support/Let-It-Snow | No |
| Fireworks for Koken | Fiochi d'artificio (Natale e Capodanno) | https://github.com/Koken-Community-Support/FireWorks | No |
| Xmas Lights | Aggiunge lucine natalizie sulla barra in alto del sito | https://github.com/Koken-Community-Support/Xmas-Lights | No |
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.
Pastebin
PasteBin è uno strumento di collaborazione per la condivisaione di code formattatto e/o logs.
Dopo l'acquisto di PasteBin ed il conseguente ritiro dal mondo open source, numerosi team ne hanno forkato i sorgenti dando vita ad una miriade di versioni.
Con l'avvento di piattaforme di collaborazione come slack le webapp derivate da PasteBin perdono un po' il loro significato rimanendo utili solo per postare codice o logs sui forumn (che solitamente danneggiano la formattazione e non hanno hightlight.
Questo ha fatto si che numerosi fork venissero abbandonati e, con l'avvento di PHP 7 molti di essi hanno proprio smesso di funzionare.
Io sono un nostalgico e, visto che ho trovato un fork aggiornato a PHP 7, ho deciso di tentarne l'installazione.
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 il codice seguente poi premere esegui od, in alternativa
sudo mysql -u root -p
CREATE DATABASE PasteBin; CREATE USER '<Your_PasteBinusr>'@'localhost' IDENTIFIED BY '<yourpassword>'; GRANT ALL ON PasteBin.* TO '<Your_PasteBinusr>'@'localhost';
Se il codice SQL è stato eseguito tramite MySql da riga di comando sarà necessario terminare con
exit
Per installarlo ci porteremo come di consueto nella solita cartella materiale
cd /home/<webmaster>/www/materiale
Con un browser portarsi all'indirizzo https://github.com/jordansamuel/PASTE e copiare l'url dello zip (che poi dovrete sostituire nel comando seguente)
sudo wget https://github.com/jordansamuel/PASTE/archive/master.zipOra sarà sufficiente decomprimere il file nella giusta cartella
sudo unzip -d /home/<webmaster>/www/public_html/<vostro_sito> master.ziprinominare la cartella
sudo mv /home/<webmaster>/www/public_html/<vostro_sito>/PASTE-master /home/<webmaster>/www/public_html/<vostro_sito>/paste
e sistemare i permessi
cd /home/<webmaster>/www/public_html/<vostro_sito> sudo chown -R <webmaster>:www-data paste sudo chmod 775 -R paste/
Navigare con il browser all'indirizzo http://[vostro_sito]/paste e terminare l'installazione in modo grafico. La prima videata dovrebbe essere la seguente:
Alcuni dati sono precompilati e non vanno alterati (Conviene comunque copiare la chiave riportata nell'ultimo campo e salvarla da qualche parte).
Gli unici dati da inserire sono:
| Parametri | |
|---|---|
| Campo | Valore di esmpio relativi a esempio precedente |
| Database Name | PasteBin |
| Username | <Your_PasteBinusr> |
| Password | <yourpassword> |
Selezionando Install si accede alla schermata successiva
Immettere i dati per la creazione dell'utente amministratore, poi premere il tasto Submint ed eccovi giunti alla fine dell'installazione
Prima di procedere é necessario rimupvere la cartella install, da terminale
sudo rm -rf /home/<webmaster>/www/public_html/<your_website>/paste/install
Ora PASTE è pronto per essere usato http://[vostro_sito]/paste per usarlo o http://[vostro_sito]/paste/admin per amministrarlo.
Phpbb
Installazione Automatizzata (di sistema)
Installazione Manuale
Considerazioni Finali
phpMyAdmin
phpMyAdmin è un database manager indispensabile per gestire MySQL (verranno fatti riferimenti ad esso nel corso della guida).
Installazione Automatizzata (di sistema)
Da Ubuntu 18.04, phpMyAdmin non è più parte dei repository ufficiali quindi sarà necessario aggiungere il ppa
sudo add-apt-repository ppa:phpmyadmin/ppa sudo apt-get update
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 )
Selezionare Yes alla richiesta di procedere con la configurazione
Attribuire una password all'utente interno che phpMyAdmin utilizzerà per salvare le sue configurazioni su DB (lútente se lo crea da solo ).
Ed in fine confermare la password
Per testarne il funzionamento è sufficiente aprire un borwser e farlo puntare a http://[miosito.com]/phpmyadmin
La versione pacchettizzata nel sistema, solitamente, è meno aggiornata ma si integra meglio con le logiche di sicurezza del sistema.
Aggiornare Manualmente
Spesso accade che la pacchettizzazione dei software avvenga lentamente.
Questa cosa, eseguendo l'installazione di sistema, può poertare all'installazione di una versione meno recente rispetto all'ultima.
Di seguito i passi per aggiornare all'ultima versione.
Per prima cosa scaricare il file contenente l'ultima versione (al momento della stesura di questa guida la versione più recente di phpMyAdmin è la 5.0.1 il cui url per il download è https://files.phpmyadmin.net/phpMyAdmin/5.0.1/phpMyAdmin-5.0.1-all-languages.tar.gz
Spostarsi nella cartella Materiale precedentemente creata
cd /home/<#webmaster>/www/materialee 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 https://files.phpmyadmin.net/phpMyAdmin/5.0.1/phpMyAdmin-5.0.1-all-languages.tar.gzAl momento dell'installazione, phpMyAdmin, crea/modifica una serie di files:
/usr/share/phpmyadmin/libraries/vendor_config.php/usr/share/phpmyadmin/autoload.php- il contenuto della cartella
/etc/phpmyadmin/
Per prima cosa eseguire un backup della cartella di phpMyAdmin
sudo mv /usr/share/phpmyadmin/ /usr/share/phpmyadmin.bakPoi preparare il nuovo folder
sudo mkdir /usr/share/phpmyadmin/Estrarre il file scaricato precedentemente
sudo tar -xzvf phpMyAdmin-x.x.x-all-languages.tar.gz -C /usr/share/phpmyadmin/Riposizionare correttamente i files
sudo mv /usr/share/phpmyadmin/phpMyAdmin-x.x.x-all-languages/* /usr/share/phpmyadminEliminare la cartella ormai vuota
sudo rm -rf /usr/share/phpmyadmin/phpMyAdmin-x.x.x-all-languages
Modificare il file /usr/share/phpmyadmin/libraries/vendor_config.php
sudo nano /usr/share/phpmyadmin/libraries/vendor_config.phpaggiornando i valori come mostrato di seguito
define('TEMP_DIR', '/var/lib/phpmyadmin/tmp/'); define('CONFIG_DIR', '/etc/phpmyadmin/');
ATTENZIONE: non copiate il file vendor_config.php dalla cartella /usr/share/phpmyadmin.bak perché potrebbe contenere variabili valorizzare in maniera incompatibile con la nuova versione.
Provare ad eseguire phpMyAdmin puntando il browser all'indirizzo http://[miosito.com]/phpmyadmin e, se tutto ha funzionato correttamente, ripulire le cose inutili rimaste nel sistema
sudo rm -rf /usr/share/phpmyadmin.bak sudo rm /home/<#webmaster>/www/materiale/phpMyAdmin-x.x.x-all-languages.tar.gz
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 5.0.1 il cui url per il download è https://files.phpmyadmin.net/phpMyAdmin/5.0.1/phpMyAdmin-5.0.1-all-languages.tar.gz
Spostarsi nella cartella Materiale precedentemente creata
cd /home/<#webmaster>/www/materialee 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 https://files.phpmyadmin.net/phpMyAdmin/5.0.1/phpMyAdmin-5.0.1-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/niosito.comSistemare owner e nome della catella
cd /home/<#webmaster>/pubblic_html/niosito.com 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://[miosito.com]/phpmyadmin/setup
Finito il setup salvate e tornate con il browser su http://[miosito.com]/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.gzOra 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.debSe 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/
Cockpit
Cockpit è un pacchetto per il monitoraggio e la gestione dei server tramite interfaccia Web.
Installazione Automatizzata (di sistema)
Per installarlo il core digitare
sudo apt install cockpit
Dovremo poi attivare il socket di systemd
sudo systemctl enable --now cockpit.socket
Cockpit mette a disposizione una non vasta ma ben organizzata serie di moduli installabili per gestire diversi tipi di task.
Di seguito un elenco ottenuto tramite una ricerca nella cache di apt.
sudo apt-cache search cockpit-
- cockpit-389-ds – Cockpit user interface for 389 Directory Server
- cockpit-bridge – Cockpit bridge server-side component
- cockpit-dashboard – Cockpit remote servers and dashboard
- cockpit-doc – Cockpit deployment and developer guide
- cockpit-docker – Cockpit user interface for Docker containers
- cockpit-machines – Cockpit user interface for virtual machines
- cockpit-networkmanager – Cockpit user interface for networking
- cockpit-packagekit – Cockpit user interface for packages
- cockpit-pcp – Cockpit PCP integration
- cockpit-storaged – Cockpit user interface for storage
- cockpit-system – Cockpit admin interface for a system
- cockpit-tests – Tests for Cockpit
- cockpit-ws – Cockpit Web Service
si proceda quindi all'installazione dei moduli
sudo apt-get install cockpit-dashboard cockpit-machines cockpit-docker cockpit-networkmanager cockpit-packagekit cockpit-storaged cockpit-389-ds ockpit-bridge cockpit-system
E'possibile installare la documentazione
sudo apt-get install cockpit-doc
e la possibilitá di approcciarlo tramite web Service
sudo apt-get install cockpit-ws
Conclusioni
Una volta installato, cockpit è raggiuncipile all'indirizzo https://your_site:9090/
N.B.: Per la natura dell'applicazione e per le sue feature ímportanti' si consiglia di limitarne l'accesso alla sola rete interna.
WordPress
Installazione Automatizzata (di sistema)
Installazione Manuale
Considerazioni Finali
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 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 -CPer cambiare l'intervallo di sincronizzazione digitare
sudo /usr/local/bin/noip2 -U 120Per 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,UUIDil 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.
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 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 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.
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
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
webalizer
dokuwiki
Key-Based SSH Logins With PuTTY
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/

