Introduzione

Di seguito una guida base su come installare e configurare OwnCloud, software opensource che vi permette di accedere e condividere file, documenti, foto, contatti, calendario e molto altro anche da terminali android, ios e windows mobile con le impostazioni di sicurezza e performance suggerite dal manuale di installazione per amministratori di OwnCloud

Prerequisiti

Apache2 installato e funzionante

PHP7 / fastcgi installato e funzionante

uAPC

memcached installato e avviato

Mariadb installato e configurato

accesso root al server

Istruzioni

Iniziamo con la creazione della struttura della directory, intendo installare e configurare owncloud in maniera tale che sia raggiungibile dal sottodominio cloud quindi digitando cloud.example.com.

cd /var/www
mkdir cloud.example.com
cd cloud.example.org
mkdir {cgi-bin,log,private,ssl,tmp,web,webdav}

creiamo un utente senza accesso alla shell a cui daremo i permessi per eseguire sotto apache owncloud

useradd -s /bin/false -d /var/www/cloud.example.com/ -m -g www-data cloud

impostiamo i permessi alle cartelle create:

chown cloud:www-data {cgi-bin,private,tmp,web,webdav}

una volta creata la struttura dobbiammo creare un file di configurazione per apache contenente le informazioni del nuovo virtual host

cd /etc/apache2/sites-available
nano cloud.example.com.conf

allinterno del file copiamo quanto segue modificando i parametri in base alle esigenze, vi copio tutto il file di configurazione

<IfModule mod_ssl.c>
<Directory /var/www/cloud.example.com>
                AllowOverride None
                                Require all denied
                </Directory>
<VirtualHost *:80>
   ServerName cloud.example.com
   Redirect permanent / https://cloud.example.com
</VirtualHost>
<VirtualHost *:443>
                DocumentRoot /var/www/cloud.example.com/web
ServerName cloud.example.com
                ServerAdmin Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
                Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
                ErrorLog /var/log/apache2/cloud.log
Alias /error/ "/var/www/cloud.example.com/web/error/"
                ErrorDocument 400 /error/400.html
                ErrorDocument 401 /error/401.html
                ErrorDocument 403 /error/403.html
                ErrorDocument 404 /error/404.html
                ErrorDocument 405 /error/405.html
                ErrorDocument 500 /error/500.html
                ErrorDocument 502 /error/502.html
                ErrorDocument 503 /error/503.html
                <IfModule mod_ssl.c>
                </IfModule>
                <Directory /var/www/cloud.example.com/web>
                                # Clear PHP settings of this website
                                <FilesMatch ".+\.ph(p[345]?|t|tml)$">
                                                SetHandler None
                                </FilesMatch>
                                Options +FollowSymLinks
                                AllowOverride All
                                Require all granted
                                                </Directory>
                <Directory /var/www/cloud.example.com/web>
                                # Clear PHP settings of this website
                                <FilesMatch ".+\.ph(p[345]?|t|tml)$">
                                                SetHandler None
                                </FilesMatch>
                                Options +FollowSymLinks
                                AllowOverride All
                                Require all granted
                                                </Directory>
<IfModule mod_perl.c>
                        PerlModule ModPerl::Registry
                        PerlModule Apache2::Reload
                        <Directory /var/www/cloud.example.com/web>
                                PerlResponseHandler ModPerl::Registry
                                PerlOptions +ParseHeaders
                                Options +ExecCGI
                        </Directory>
                        <Directory /var/www/cloud.example.com/web
                                PerlResponseHandler ModPerl::Registry
                                PerlOptions +ParseHeaders
                                Options +ExecCGI
                        </Directory>
            <Files *.pl>
                                SetHandler perl-script
            </Files>
                </IfModule>
                # cgi enabled
        <Directory /var/www/cloud.example.com/cgi-bin>
                Require all granted
                                        </Directory>
                ScriptAlias  /cgi-bin/ /var/www/cloud.example.com/cgi-bin/
                <FilesMatch "\.(cgi|pl)$">
                        SetHandler cgi-script
                </FilesMatch>
                # suexec enabled
                <IfModule mod_suexec.c>
                        SuexecUserGroup cloud www-data
                </IfModule>
                # php as fast-cgi enabled
        # For config options see: http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html
                <IfModule mod_fcgid.c>
                                FcgidIdleTimeout 300
                                FcgidProcessLifeTime 3600
                                # FcgidMaxProcesses 1000
                                FcgidMaxRequestsPerProcess 5000
                                FcgidMinProcessesPerClass 0
                                FcgidMaxProcessesPerClass 10
                                FcgidConnectTimeout 3
                                FcgidIOTimeout 600
                                FcgidBusyTimeout 3600
                                FcgidMaxRequestLen 1073741824
                </IfModule>
                <Directory /var/www/cloud.example.com/web>
                                <FilesMatch "\.php[345]?$">
                                        SetHandler fcgid-script
                                </FilesMatch>
                                FCGIWrapper /var/www/php-fcgi-scripts/cloud/.php-fcgi-starter .php
                                FCGIWrapper /var/www/php-fcgi-scripts/cloud/.php-fcgi-starter .php3
                                FCGIWrapper /var/www/php-fcgi-scripts/cloud/.php-fcgi-starter .php4
                                FCGIWrapper /var/www/php-fcgi-scripts/cloud/.php-fcgi-starter .php5
                                Options +ExecCGI
                                AllowOverride All
                                Require all granted
                                                </Directory>
                <Directory /var/www/cloud.example.com/web>
                                <FilesMatch "\.php[345]?$">
                                        SetHandler fcgid-script
                                </FilesMatch>
                                FCGIWrapper /var/www/php-fcgi-scripts/cloud/.php-fcgi-starter .php
                                FCGIWrapper /var/www/php-fcgi-scripts/cloud/.php-fcgi-starter .php3
                                FCGIWrapper /var/www/php-fcgi-scripts/cloud/.php-fcgi-starter .php4
                                FCGIWrapper /var/www/php-fcgi-scripts/cloud/.php-fcgi-starter .php5
                                Options +ExecCGI
                                AllowOverride All
                                Require all granted
                                                </Directory>
                # add support for apache mpm_itk
                <IfModule mpm_itk_module>
                        AssignUserId cloud www-data
                </IfModule>
<IfModule mod_dav_fs.c>
                # Do not execute PHP files in webdav directory
                        <Directory /var/www/cloud.example.com/webdav>
                                <ifModule mod_security2.c>
                                        SecRuleRemoveById 960015
                                        SecRuleRemoveById 960032
                                </ifModule>
                                <FilesMatch "\.ph(p3?|tml)$">
                                        SetHandler None
                                </FilesMatch>
                        </Directory>
                        DavLockDB /var/www/cloud.example.com/tmp/DavLock
                        # DO NOT REMOVE THE COMMENTS!
                        # IF YOU REMOVE THEM, WEBDAV WILL NOT WORK ANYMORE!
      # WEBDAV BEGIN
                        # WEBDAV END
                </IfModule>
RewriteEngine on
RewriteCond %{SERVER_NAME} =cloud.example.com

 

salviamo il file dopo aver modificato le parti evidenziate, ora creiamo il file di configurazione per fastcgi

mkdir /var/www/php-fcgi-scripts/cloud/
nano /var/www/php-fcgi-scripts/cloud/.php-fcgi-starter

all'interno copiamo quanto segue:

#!/bin/sh
PHPRC="/etc/php/7.0/cgi/"
export PHPRC
PHP_DOCUMENT_ROOT="/var/www/cloud.example.com"
export PHP_DOCUMENT_ROOT
# The variable PHP_FCGI_CHILDREN is onyl useful for lighty or nginx as apache
# mod_fcgi will control the number of childs themself and never use the additional processes.
# PHP_FCGI_CHILDREN=8
# export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
export TMP=/var/www/clud.example.com/tmp
export TMPDIR=/var/www/cloud.example.com/tmp
export TEMP=/var/www/cloud.example.com/tmp
exec /usr/bin/php-cgi \
-d open_basedir="/var/www/cloud.example.com/web:/var/www/cloud.example.com/private:/var/www/cloud.example.com/tmp:/web:/srv/www/cloud.example.com/web:/usr/share/php:/tmp:/usr/share/phpmyadmin:/dev/urandom:/tmp:" \
-d disable_functions="" \
-d suhosin.executor.func.blacklist="" \
-d upload_tmp_dir=/var/www/cloud.example.com/tmp \
-d session.save_path=/var/www/cloud.example.com/tmp \
-d sendmail_path="/usr/sbin/sendmail -t -i -f Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo." \
 $1

Salviamo il file modificando la parte evidenziata in base alle esigenze e aggiustiamo i permessi

chown -R cloud:www-data /var/www/php-fcgi-scripts/cloud

Afinche cloud.example.com sia raggiungibile sarà necessario inserire un record A nel nostro name server, nel caso utilizziate bind modificate il file /etc/bind/pri.example.com e aggiungete cloud 3600 A   IPWAN sostituendo IPWAN con l'ip del vostro server, nel caso il dns sia gestito in esterno usate il pannello di controllo del vostro fornitore per aggiungere un record A e attendete la propagazione che in genere comunque dovrebbe richiedere qualche minuto.

nano /etc/bind/pri.example.com
.....
cloud 3600 A    1.1.1.1
.....

Fatto questo siamo pronti ad abilitare il nuovo host su apache2

a2ensite cloud.example.com
service apache2 reload

Una volta abilitato il sito e attivato generiamo i certificati necessari per la connessione https:

letsencrypt

seguendo la procedura guidata letsencrypt dovrebbe rilevare il nuovo host cloud.example.com assicuratevi che sia spuntato anche quello e alla richiesta dirottate tutto su traffico sicuro, in questo modo letsencrypt genererà i certificati e modificherà in automatico il file di configurazione cloud.example.com.conf generato precedentemete con i valori neccessari

Ci accingiamo ora a creare un database ed un utente da utilizzare per l'archivio di OwnCloud, dalla shell di mysql e modificando le parti evidenziate come meglio ritenete opportuno

mysql -u root -p
CREATE DATABASE OWNCLOUD;
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON OWNLOUD.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;

Installazione OwnCloud

spostiamoci nella directory /var/www/cloud.example.com/web e scarichiamo il file necessario all'installazione vera e propria di OwnCloud. L'ultima versione stabile al momento è la 9.0.1

cd /var/www/cloud.example.com/web
wget https://download.owncloud.com/download/community/setup-owncloud.php

chown cloud:www-data setup-owncloud.php

apriamo il nostro browser e digitanto https://cloud.example.com/setup-owncloud.php dovrebbe partire l'installazione guidata, nella parte iniziale verificherà che siano presenti tutti i pacchetti necessari per il funzionamento, nello step 2 vi richiederà i dati di accesso al database (sul menu a tendina scegliete mariadb), allo step 3 abbiate pazienza anche se sembra non stia facendo nulla in realtà stà scaricando l'archivio per poi scomprimerlo con i file necessari, circa 30 mega, finita questa operazione vi farà creare l'utente amministratore.

Terminata l'installazione e prima di iniziare a lavorare modificate il file config.php che si troverà in /var/www/cloud.example.com/web/config dove andremo ad aggiungere alcune direttive

nano /var/www/cloud.example.com/web/config/config.php

aggiungere al suo interno queste tre righe per attivare la cache:

.....
'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Memcached',
'memcached_servers' => array(array('localhost', 11211),),
);

Ricollegatevi col vostro browser al cloud e andando nella sezione admin non dovreste avere avvisi di sicurezza.

cloudapp

Risoluzioni problemi

Durante l'installazione di OwnCloud potrebbe comparirvi il messaggio in cui vi avvisa della mancanza del supporto ai file zip, per abilitarlo assicuratevi di aver installato il pacchetto php7.0-zip e di abilitarlo

apt install php7.0-zip
phpenmod zip
service apache2 restart