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
ServerAdminQuesto 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 -fQuesto 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.
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