====== Avec un peu d huile de cloud ======
===== Présentation =====
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.
===== Préparation de l'atelier =====
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 |
|deb//n// | 22//n// | 80//n// |
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...
===== Déroulement de l'atelier / Installation =====
==== Connexion au serveur via SSH ====
On va utiliser le [[https://doc.ubuntu-fr.org/ssh|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:~#
===== Installation Owncloud =====
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**.
==== Préparation de la base de données ====
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.
==== Préparation du serveur Web Apache ====
=== Se connecter à son serveur web ===
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.
==== Configuration du serveur Web Apache ====
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
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
Require all granted
AllowOverride All
Maintenant on :
- active la nouvelle configuration
- désactive la configuration par défaut
- contrôle la configuration générale
- redémarre **apache**
# a2ensite owncloud
# a2dissite 000-default
# apachectl -t
# service apache2 restart
==== Connexion au site et finalisation de l'installation ====
{{ public:owncloud_install.png?direct&140|}}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//).
==== Tuning Apache ====
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
===== Connexion sécurisée à l'interface Web par HTTPS =====
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 [[https://letsencrypt.org/ |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 [[https://github.com/letsencrypt/letsencrypt|client officiel]]. Nous avons suivi le [[https://letsencrypt.org/getting-started/|tutoriel du site officiel]] en remettant chaque étape ci-dessous.
==== Obtention du client ====
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
{{ public:selection_052.png?direct&300 |}}
Suivez les différents écrans, jusqu'à choisir entre un accès HTTP et HTTPS ou une redirection systématique vers HTTPS (recommandé) :
{{ public:selection_053.png?direct&300 |}}
On valide... et c'est terminé !
{{ public:selection_054.png?direct&300 |}}
On recharge son site préféré pour profiter de notre nouvelle connexion HTTP**S** :
{{ public:selection_055.png?direct |}}
=== Ce qui s'est passé ===
La commande ''letsencrypt --apache'' a eu pour effet deux actions principales :
* Connexion à LetsEncrypt pour demander un certificat signé par l'autorité de certification de LetsEncrypt. Pour se faire, le programme s'enregistre automatique et demande le certificat pour le(s) domaine(s) que l'on a sélectionné en console. LetsEncrypt demande alors à notre serveur Apache de prouver qu'il est bien //détenteur du domaine// en affichant un code de confirmation lisible par LetsEncrypt. Une fois que l'on a montré patte blanche, LetsEncrypt envoi le certificat et notre client le récupère. C'est le protocole ACME.
* Modification de la configuration et redémarrage du serveur Apache. Dans notre cas on a demandé à ce que soit redirigé les requêtes HTTP vers HTTPS. On obtient au final deux fichiers pour la configuration Apache :
Le fichier pour HTTP, qui intègre maintenant une redirection :
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
Require all granted
AllowOverride All
RewriteEngine on
RewriteCond %{SERVER_NAME} =deb10.demo.alolise.org
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
Le fichier pour HTTPS **owncloud-le-ssl.conf** :
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
Require all granted
AllowOverride All
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
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
==== Alternatives ====
D'autres [[https://www.metachris.com/2015/12/comparison-of-10-acme-lets-encrypt-clients/#client-lets-encrypt|implémentations alternatives]] exitent, notamment [[https://github.com/diafygi/acme-tiny|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é).
===== Liens =====
[[http://alolise.org|site de l'association Alolise]]