OwnCloud sous Apache
OwnCloud
étant une application écrite en php, cet article présente la mise à disposition sous Apache
.
Attention, l'exposition peut nécessiter l'ajout du domaine par la liste des sites de confiances, comme décrit dans l'article suivant.
Sommaire
Votre avis
Nobody voted on this yet
|
|
Pré requis
La mise à disposition nécessite l'activation d'un ensemble de module de Apache
.
- rewrite
- headers
- env
- dir
- mime
L'outil a2enmod permet d'activer ces modules. Certains peuvent être déjà disponibles, et seul un avertissement sera affiché.
#sudo a2enmod rewrite Enabling module rewrite. To activate the new configuration, you need to run: service apache2 restart #sudo a2enmod headers Enabling module headers. To activate the new configuration, you need to run: service apache2 restart #sudo a2enmod env Module env already enabled #sudo a2enmod dir Module dir already enabled #sudo a2enmod mime Module mime already enabled
Déploiement site sécurisé
La procédure décrite ci dessous permet de mettre à disposition l'application avec un accès sécurisé HTTPS
avec utilisation d'un certificat fourni par Let's Encrypt et un tutoriel très bien réalisé.
L'application sera rendue disponible depuis un sous domaine du domaine principal.
Pour rappel, l'application est déployée dans le répertoire /var/opt/owncloud/installed
.
Préparation environnement
Certbot sera utilisé pour demander et renouveler le certificat du site. Dans son fonctionnement, le process essaye d'accéder à un .well-known
à la racine du site. De plus, une bonne pratique consiste à fournir un répertoire racine pour les sites déployés sous Apache
. Le répertoire /var/www/mycloud
est alors créé, ainsi que le sous répertoire .well-known
.
#sudo mkdir -p /var/www/mycloud/.well-known
Pour cette application, il n'est pas nécessaire de placer un fichier index.html
, avec un contenu vide, dans le répertoire racine, soit /var/www/mycloud
, car la racine sera sur l'instance qui possède déjà un fichier index.php
.
Un fichier robots.txt
y est placé avec les directives indiquant aux moteurs de recherche de ne rien indexer.
User-agent: *
Disallow: /
Les permissions mises en place donnent un accès uniquement aux compte du serveur, soit www-data
.
#sudo find /var/www/mycloud -type f -exec chmod 0600 {} \; #sudo find /var/www/mycloud -type d -exec chmod 0700 {} \; #sudo chown -R www-data:www-data /var/www/mycloud
Configuration HTTP
Dans un premier temps, une configuration temporaire est mise en place pour accéder de façon non sécurisé.
Un fichier mycloud
est créé dans le répertoire /etc/apache2/sites-available
avec le contenu suivant.
<VirtualHost *:80>
ServerAdmin contact-email@dummy.net
ServerName www.mycloud.dummy.net
DocumentRoot /var/opt/owncloud/installed
DirectoryIndex index.php
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/mycloud_error.log
CustomLog ${APACHE_LOG_DIR}/mycloud_access.log combined
Alias /.well-known "/var/www/mycloud/.well-known"
<Directory "/var/www/mycloud/.well-known">
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Alias /robots.txt "/var/www/mycloud/robots.txt"
<Directory /var/opt/owncloud/installed>
Options -Indexes +FollowSymLinks
AllowOverride none
Require all granted
</Directory>
</VirtualHost>
Les directives sur l'accès à /.well-known
et robots.txt
permettent de servir les éléments depuis la racine /var/www/mycloud
.
Cette configuration doit être mise à disposition en plaçant un lien dans /etc/apache2/sites-enabled
.
#sudo ln -s /etc/apache2/sites-available/mycloud /etc/apache2/sites-enabled/008-mycloud.conf
Le nom du lien, à savoir 008-mycloud.conf
, respecte une incrémentation sur la machine utilisée, il peut être remplacé pour tout autre nom valide pour Apache
.
Il suffit de relancer la configuration d'Apache
pour qu'elle soit prise en compte.
#sudo apache2ctl graceful
Certificat
L'application est à présent disponible avec l'URL http://www.mycloud.dummy.net. Un certificat va être demandé à l'aide de Certbot.
#sudo certbot certonly --webroot -w /var/www/mycloud -d www.mycloud.dummy.net --email contact-email@dummy.net Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator webroot, Installer None Obtaining a new certificate Performing the following challenges: http-01 challenge for www.mycloud.dummy.net Using the webroot path /var/www/mycloud for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/www.mycloud.dummy.net/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/www.mycloud.dummy.net/privkey.pem Your cert will expire on 2018-05-06. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Le certificat est stocké dans le répertoire /etc/letsencrypt/live/www.mycloud.dummy.net/
.
Configuration HTTPS
Le certificat étant disponible, la configuration HTTPS
peut être mise en place.
Un fichier mycloud-dummy-ssl
est créé dans le répertoire /etc/apache2/sites-available
avec le contenu suivant.
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin contact-email@dummy.net
ServerName www.mycloud.dummy.net
DocumentRoot /var/opt/owncloud/installed
DirectoryIndex index.php
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/mycloud_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/mycloud_ssl_access.log combined
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.mycloud.dummy.net/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.mycloud.dummy.net/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.mycloud.dummy.net/chain.pem
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCompression off
SSLOptions +StrictRequire
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:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
Alias /.well-known "/var/www/mycloud/.well-known"
<Directory "/var/www/mycloud/.well-known">
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Alias /robots.txt "/var/www/mycloud/robots.txt"
<Directory /var/opt/owncloud/installed>
Options -Indexes +FollowSymLinks
AllowOverride none
Require all granted
</Directory>
</VirtualHost>
</IfModule>
Les configurations mises en place dans le précédent paragraphe sont reprises et complétées avec la déclaration du certificat et l'alias. De plus, une directive sur le Header
est mise en place afin de forcer l'accès au maximum l'accès sur le site sécurisé.
Cette configuration doit être mise à disposition en plaçant un lien dans /etc/apache2/sites-enabled
.
#sudo ln -s /etc/apache2/sites-available/mycloud-dummy-ssl /etc/apache2/sites-enabled/009-mycloud-ssl.conf
Le nom du lien, à savoir 009-mycloud-ssl.conf
, respecte une incrémentation sur la machine utilisée, il peut être remplacé pour tout autre nom valide pour Apache
.
Enfin la configuration HTTP
, sur le port 80
, est modifiée pour forcer la redirection sur l'accès en HTTPS
. Le précédent fichier mycloud
est modifié avec le contenu suivant.
<VirtualHost *:80>
ServerAdmin contact-email@dummy.net
ServerName www.mycloud.dummy.net
DocumentRoot /var/opt/owncloud/installed
DirectoryIndex index.php
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/mycloud_error.log
CustomLog ${APACHE_LOG_DIR}/mycloud_access.log combined
RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
Il suffit de relancer la configuration d'Apache
pour que les modifications soient prises en compte.
#sudo apache2ctl graceful
Configuration simple
Ce mode de configuration permet de mettre à disposition l'application dans une configuration de site existant, en s'inspirant de celle de Mediawiki par exemple.
Par contre, les modes présentés ne mettent pas en évidence l'utilisation de certificat et sont effectué sur des accès HTTP
simple.
Configuration simple
La documentation officielle indique un moyen de publication sous Apache
à l'aide de la création d'un fichier owncloud.conf
, sous /etc/apache/conf-available
, avec le contenu suivant.
Alias /owncloud /var/www/owncloud
<Directory /var/www/owncloud/>
AllowOverride All
</Directory>
Dans cette configuration, les binaires sont déployées sous /var/www/owncloud
, ce qui est légèrement différent de l'installation réaliséee.
Cette mise en place est dans la philosophie de l'installation sous Ubuntu
, et il faut créer un lien sous /etc/apache2/sites-enabled/
.
#ln -s /etc/apache2/conf-available/owncloud.conf /etc/apache2/conf-enabled/owncloud.conf
Configuration pour un domaine spécifique
Au fil du temps, le serveur Apache
a été enrichi sur la machine, afin de servir différents domaine. La configuration de l'application est placée dans le fichier de configuration du domaine souhaité.
<VirtualHost *:80>
ServerAdmin contact-email@dummy.net
DocumentRoot /var/www/perso
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/perso>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
# Old configuration for APACHE 2.2
# Order allow,deny
# Allow from all
Require all granted
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
# Old configuration for APACHE 2.2
# Order allow,deny
# Allow from all
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/perso_ssl_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/perso_ssl_access.log combined
Alias /owncloud "/var/opt/owncloud/installed"
<Directory "/var/opt/owncloud/installed">
AllowOverride All
Dav Off
Require all granted
</Directory>
</VirtualHost>
A noter que la configuration ne correspond pas exactement à ce qu'il y a dans la documentation. Le paramètre Require all granted
a été ajouté sinon l'application n'est pas disponible.
La paramètre Dav Off
a été placé pour l'application uniquement, afin de ne pas impacter les potentielles autres applications du domaine.
Voir aussi
Documentation officielle: https://doc.owncloud.org/server/latest/admin_manual/installation/source_installation.html