Le but de ce post est de donner un guide simple étape par étape de l'installation d'Owncloud sur un serveur Debian Jessie.
Installation de base
Toutes les étapes qui suivent prennent pour acquis pour vous être dans le compte superutilisateur (root
) de votre serveur.
Installer Owncloud
On utilise le package manager de Debian pour installer Owncloud:
$ aptitude update && aptitude install owncloud
Le package owncloud
de Debian installe les fichiers dans /usr/share/owncloud
Créer une database mysql
Il faut commencer par se logger dans mysql avec un compte administrateur:
$ mysql -u root -p
Une fois dans l'interface de mysql, on souhaite créer un database et en donner les droits complets à un user:
mysql> CREATE DATABASE nom_de_la_db;
mysql> GRANT ALL PRIVILEGES ON nom_de_la_db.* TO 'nom_du_user'@'hostname' IDENTIFIED BY 'mot_de_passe';
mysql> FLUSH PRIVILEGES;
mysql> quit;
Créer un Vhost Apache
Pour terminer la configuration d'Owncloud, il est nécessaire d'avoir accès à l'interface web. Pour cela, on met le site en ligne avec Apache:
$ cd /etc/apache2/sites-available
$ vim fqdm.conf
fqdm
, le fully qualified domain name est votre nom de domaine complet. Le VHost recommandé est le suivant:
#<VirtualHost *:443>
#ServerName fqdm.com
#ServerAdmin foo@fqdm.com
#DocumentRoot /usr/share/owncloud
#ErrorLog ${APACHE_LOG_DIR}/error.log
#Alias /owncloud /usr/share/owncloud
#<Directory /usr/share/owncloud>
#Options Indexes FollowSymLinks MultiViews
#AllowOverride All
#Require all granted
#SetEnv MOD_X_SENDFILE_ENABLED 1
#XSendFile On
#XSendFilePath /data
#</Directory>
#SSLEngine on
#SSLCertificateFile /etc/ssl/owncloud/cert.crt
#SSLCertificateKeyFile /etc/ssl/owncloud/key.pem
#SSLCertificateChainFile /etc/ssl/owncloud/GandiStandardSSLCA.pem
#SSLProtocol all -SSLv2 -SSLv3
#SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK
#SSLHonorCipherOrder on
#SSLCompression off
#</VirtualHost>
<VirtualHost *:80>
ServerName fqdm.com
ServerAdmin foo@fqdm.com
Alias /owncloud /usr/share/owncloud
#Redirect / https://fqdm.com/
</VirtualHost>
Comme nous n'avons pas encore crée de certificat SSL ou activés certains modules d'Apache, certaines lignes sont commentées. Comme résultat, le site est pour l'instant mis en ligne sur fqdm.com sans protection HTTPS.
Il faut maintenant activer le site et le module rewrite d'Apache, nécessaire au bon fonctionnement du site:
$ a2ensite fqdm.conf
$ a2enmod rewrite
$ service apache2 restart
Configuration d'Owncloud via l'interface web
Une fois le site activé, il faut configurer Owncloud via l'interface web. Pour ce faire, on va au http://fqdm.com et on suit l'installation automatisée, en choissant mysql comme base de données et en rentrant les identifiants que l'on a spécifié plus tôt en créant le nouvel utilisateur dans mysql.
Et voilà! En théorie, Owncloud devrait être accessible en se connectant avec le compte administrateur!
Optimisation de la sécurité et des performances
Une fois l'installation de base complétée, il est préférable d'optimiser certains paramètres, tant pour améliorer la sécurité que de la performance.
Mettre en place un certificat HTTPS
Il est fortement recommandé d'utiliser un certificat HTTPS pour sécuriser les connexions sur le site.
La création d'un certificat SSL n'est pas couvert par ce post, mais je recommande vivement les services offerts par Let's Encrypt. En plus d'être gratuits, Let's Encrypt met beaucoup l'accent sur l'automatisation, une excellente chose.
Une fois le certificat créé, on modifie le VHost apache pour utiliser une connexion sécurisée:
$ vim /etc/apache2/sites-available/fqdm.conf
<VirtualHost *:443>
ServerName fqdm.com
ServerAdmin foo@fqdm.com
DocumentRoot /usr/share/owncloud
ErrorLog ${APACHE_LOG_DIR}/error.log
Alias /owncloud /usr/share/owncloud
<Directory /usr/share/owncloud>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
#SetEnv MOD_X_SENDFILE_ENABLED 1
#XSendFile On
#XSendFilePath /data
</Directory>
SSLEngine on
SSLCertificateFile /path/to/ssl/cert
SSLCertificateKeyFile /path/to/ssl/key
SSLCertificateChainFile /path/to/ssl/chainfile
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK
SSLHonorCipherOrder on
SSLCompression off
</VirtualHost>
<VirtualHost *:80>
ServerName fqdm.com
ServerAdmin foo@fqdm.com
#Alias /owncloud /usr/share/owncloud
Redirect / https://fqdm.com/
</VirtualHost>
Assurez-vous que le module ssl est activé et redémarrez apache:
$ a2enmod ssl
$ service apache2 restart
Utiliser un autre dossier pour les données d'utilisateurs
Par défaut, Owncloud enregistre les données des utilisateurs dans /usr/share/owncloud/data. Il est intéressant de déplacer ce dossier pour éviter qu'il soit réécrit par erreur durant une mise à jour:
$ service apache2 stop
$ mkdir /data
$ mkdir /data/Owncloud-data
$ mv /usr/share/owncloud/data /data/Owncloud-data/
$ chown -R www-data:www-data /data/Owncloud-data/
Une fois le dossier déplacé, il faut modfier la configuration d'Owncloud,
plus précisément cette ligne dans config.php
$ vim /usr/share/owncloud/config/config.php
> 'datadirectory' => '/data/Owncloud-data/data',
$ service apache2 restart
Utiliser XSendfile
Il est possible d'accélérer le transfert de fichiers avec le module X-Sendfile d'Apache. On va donc décommenter les lignes suivantes dans le VHost précédement créé:
$ vim /etc/apache2/sites-available/fqdm.conf
> SetEnv MOD_X_SENDFILE_ENABLED 1
> XSendFile On
> XSendFilePath /data/Owncloud-data
$ aptitude install libapache2-mod-xsendfile
$ a2enmod xsendfile
$ service apache2 restart
Attention!
Tous les dossiers externes qu'Owncloud utilise doivent être spécifiés avec la ligne XSendFilePath dans le VHost. Par exemple, si on décide de rajouter un partage local au compte d'un utilisateur, il faut le spécifier à XSendfile. Sinon l'utlisateur ne sera pas en mesure de télécharger les fichiers en question.
Utiliser fail2ban pour empêcher les attaques par force brute sur un compte
Par défaut, il serait possible à une personne mal intentionnée d'utiliser un programme
pour tester tous les mots de passe possibles pour un compte. fail2ban
permet de restreindre
ces attaques en bannissant un adresse ip s'étant trompée x nombres de fois de suite. On
commence par configurer fail2ban
:
$ aptitude install fail2ban
$ vim /etc/fail2ban/filter.d/owncloud.conf
> [Definition]
> failregex={"app":"core","message":"Login failed: user '.*' , wrong password, IP:<HOST>","level":2,"time":".*"}
$ vim /etc/fail2ban/jail.local
> [owncloud]
> enabled = true
> filter = owncloud
> port = 80,443
> logpath = /var/log/owncloud.log
> maxrety = 5
> bantime = 1200
On s'assure maintenant qu'Owncloud enregistre les bonnes informations:
$ vim /usr/share/owncloud/congfig/config.php
> 'loglevel' => '2',
> 'log_authfailip' => true,
Il ne reste plus qu'à redémarrer fail2ban:
$ service fail2ban restart
Changer la manière dont le cron est appellé
Il est plus efficace de rouler la cronjob via le cron du serveur que par PHP. On commence donc par sélectionner l'option "cron" dans le menu administrateur d'Owncloud.
Il faut par la suite rajouter une cronjob à www-data:
$ crontab -u www-data -e
> */15 * * * * php -f /var/www/owncloud/cron.php > /dev/null 2>&1