Dans le cadre des JDLL 2016, Alolise a encadré un atelier d'une heure consistant à installer un service Owncloud, en utilisant la dernière version stable téléchargée depuis le site officiel.
Ce wiki a servi de procédure à dérouler lors de l'atelier. Depuis il a été remanié afin de prendre en compte les remarques des participants. Nous avons également ajouté la partie sur la création d'un certificat TLS via LetsEncrypt.
Alolise a mis en place un hyperviseur proxmox sur aloliseoff avec une ip publique. Sur ce proxmox, on a un réseau local 192.168.0.0/24 qui permet de connecter des containers LXC de demo.
Une configuration pare-feu sur l'hyperviseur permet d'accéder aux conteneur via une ip (demo.alolise.org) et selon un port http et ssh en suivant la logique d'accès aux différents conteneurs suivante :
machine n | port d'accès ssh | port d'accès http |
---|---|---|
deb10 | 2210 | 8010 |
deb11 | 2211 | 8011 |
deb12 | 2212 | 8012 |
debn | 22n | 80n |
Pour mettre ça en place dans le cluster alolise il faudrait : - Mettre en place IPv6 - pour ipv4 des ports 22xx et 80xx et 443xx - éventuellement des vhosts nginx pour garder 80 et 443
L'accès à proxmox pour voir la configuration des conteneurs de démonstration est possible en se connectant à https://demo.alolise.org avec l'utilisateur/ le nom du conteneur : deb10, deb11, etc…
On va utiliser le protocole SSH pour se connecter de manière sécurisée au serveur distant.
Le mot de passe nécessaire pour toute les connexions : demolise
Modifier votre fichier de configuration de vos connexions SSH (~/.ssh/config).
Exemple pour accéder au serveur deb10
host alolise_demo_nginx hostname demo.alolise.org port 22 user demolise host alolise_demo_deb10 hostname 192.168.0.10 user root ProxyCommand ssh -qAx alolise_demo_nginx -W %h:%p
Pour les autres serveurs, adapter le fichier de configuration en fonction :
host alolise_demo_nginx hostname demo.alolise.org port 22 user demolise host alolise_demo_debXX hostname 192.168.0.XX user root ProxyCommand ssh -qAx alolise_demo_nginx -W %h:%p
Ensuite il suffit d'ajouter ses clés ssh (optionnel).
Exemple pour deb10 toujours :
$ ssh-copy-id alolise_demo_nginx $ ssh-copy-id alolise_demo_deb10
Puis de se connecter (adapter XX au numéro du serveur) :
$ ssh alolise_demo_debXX Linux deb10 4.2.6-1-pve #1 SMP Wed Dec 9 10:49:55 CET 2015 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri Apr 1 11:52:44 2016 from 192.168.0.2 root@debXX:~#
Installer les paquets qui seront nécessaires à l'installation du tarball Owncloud via le gestionnaire de paquet aptitude ou apt-get :
# aptitude install apache2 libapache2-mod-php5 php5-mysqlnd mysql-server curl php5-gd php5-curl libapache2-mod-fcgid php-http-webdav-server
Lors de l'installation du paquet mysql-server, le mot de passe du compte administrateur de MySQL vous sera demandé. Donner un mot de passe suffisamment complexe et conservez-le, le compte root de MySQL permet d'accéder à toutes les bases de données du serveur.
Téléchargement de la dernière version (https://owncloud.org/install/#instructions-server) :
mkdir /opt/owncloud && cd /opt/owncloud curl -O https://download.owncloud.org/community/owncloud-9.0.0.tar.bz2
Check package integrity using MD5 (.tar.bz2 / .zip) or SHA256 (.tar.bz2 / .zip)
curl -O https://download.owncloud.org/community/owncloud-9.0.0.tar.bz2.md5 cat owncloud-9.0.0.tar.bz2.md5 md5sum owncloud-9.0.0.tar.bz2
Enfin on extrait l'archive :
tar xf owncloud-9.0.0.tar.bz2
On a maintenant tous les fichiers propres à Owncloud extraits dans le dossier /etc/owncloud/owncloud.
On créer la base MySQL owncloud et on ajout un utilisateur administrateur admincloud pour cette base :
# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 41 Server version: 5.5.47-0+deb8u1 (Debian) mysql> CREATE DATABASE owncloud; Query OK, 1 row affected (0.08 sec) mysql> GRANT ALL PRIVILEGES ON owncloud.* TO 'admincloud'@'localhost' IDENTIFIED BY 'demolise'; Query OK, 0 rows affected (0.03 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)
La première commande mysql -u root -p
est exécutée depuis le SHELL en tant que root ; le prompt est un # (réservé à l'utilisateur root) et non un $.
Le prompt mysql> nous indique que l'on est bien connecté au serveur MySQL. Les commandes sont donc écrites en langage SQL. Attention à ne pas oublier le ;
qui marque la fin de chaque requête SQL.
Encore une fois, attention à mettre un mot de passe suffisamment fort pour une installation “réelle”. Ici, demolise est utilisé pour simplifier le déroulement de l'atelier.
On se connecte à cette adresse : http://deb10.demo.alolise.org
Seulement en HTTP ! Si nous avons le temps nous verrons rapidement comment activer le SSL.
Toujours en utilisateur root, on créer le fichier de configuration qui va dire à Apache vers quel dossier pointer lorsqu'il reçoit des requêtes à destination de debXX.demo.alolise.org. Le fichier contient la configuration suivante (adapter le ServerName en fonction de votre domaine).
# nano /etc/apache2/sites-available/owncloud.conf
<VirtualHost *:80> ServerName debXXdemo.alolise.org ServerAdmin webmaster@localhost DocumentRoot /opt/owncloud/owncloud # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /opt/owncloud/owncloud> Require all granted AllowOverride All </Directory> </VirtualHost>
Maintenant on :
# a2ensite owncloud # a2dissite 000-default # apachectl -t # service apache2 restart
On se connecte à http://deb10.demo.alolise.org, et on entre les infos demandées puis on valide.
A la fin de l'installation, on arrive sur l'interface utilisateur d'Owncloud (avec l'utilisateur admin).
La page de paramètres de Ownclould http://debXX.demo.alolise.org/index.php/settings/admin permet de contrôler que tout va bien. Normalement avec la configuration précédente permettant l'utilisation du .htaccess seuls l'HTTPS et le cache devraient être en Warning.
En complément, on peut activer certains modules pour utiliser les paramètres définis dans le fichier .htaccess
(cela ne règlera pas les Warnings mentionnés ci-dessus) :
a2enmod fcgid rewrite headers service apache2 restart
Il ne reste plus qu'à mettre en place une connexion sécurisée au serveur Web, notamment afin de ne pas envoyer le mot de passe de notre utilisateur en clair sur Internet…
On peu depuis quelques mois (au 01/04/2016) utiliser une implémentation du protocole ACME (Automated Certificate Management Environment) grâce à l'aboutissement du projet Let's Encrypt.
Le projet Let's Encrypt est le chaînon manquant à une adoption massive de la version sécurisée du protocole HTTP. Nous avons maintenant la possibilité de mettre en place simplement et de maintenir automatiquement HTTPS sur l'ensemble de nos site Web, avec des certificats reconnus pas les navigateurs.
Le plus simple est d'utiliser le client officiel. Nous avons suivi le tutoriel du site officiel en remettant chaque étape ci-dessous.
Tout d'abord on active les dépôts backports de Jessie en ajoutant dans etc/apt/sources.list :
# backports deb http://ftp.debian.org/debian jessie-backports main contrib
Puis on met à jour et on install letsencrypt et les outils pour Apache :
# aptitude update # aptitude install --jessie-backports python-cryptography python-letsencrypt python-letsencrypt-apache
Enfin, on lance le client (toujours en root), qui nous détecte et met en place tout ce qu'il faut :
letsencrypt --apache
Suivez les différents écrans, jusqu'à choisir entre un accès HTTP et HTTPS ou une redirection systématique vers HTTPS (recommandé) :
On recharge son site préféré pour profiter de notre nouvelle connexion HTTPS :
La commande letsencrypt –apache
a eu pour effet deux actions principales :
Le fichier pour HTTP, qui intègre maintenant une redirection :
<VirtualHost *:80> ServerName deb10.demo.alolise.org ServerAdmin webmaster@localhost DocumentRoot /opt/owncloud/owncloud # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /opt/owncloud/owncloud> Require all granted AllowOverride All </Directory> RewriteEngine on RewriteCond %{SERVER_NAME} =deb10.demo.alolise.org RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </VirtualHost>
Le fichier pour HTTPS owncloud-le-ssl.conf :
<IfModule mod_ssl.c> <VirtualHost *:443> ServerName deb10.demo.alolise.org ServerAdmin webmaster@localhost DocumentRoot /opt/owncloud/owncloud # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. LogLevel warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /opt/owncloud/owncloud> Require all granted AllowOverride All </Directory> SSLCertificateFile /etc/letsencrypt/live/deb10.demo.alolise.org/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/deb10.demo.alolise.org/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet </IfModule>
D'autres implémentations alternatives exitent, notamment acme-tiny, qui a été testé avec succès (Client ACME léger semi-automatique, possibilité d'automatiser le renouvellement une fois le premier certificat généré).