Installer un serveur Owncloud (French)

2016-05-21 - Louis-Philippe Véronneau

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

ownclouddebian