Outils pour utilisateurs

Outils du site


public:avec_un_peu_d_huile_de_cloud

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
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…

Déroulement de l'atelier / Installation

Connexion au serveur via SSH

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

~/.ssh/config
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
/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 :

  1. active la nouvelle configuration
  2. désactive la configuration par défaut
  3. contrôle la configuration générale
  4. redémarre apache
# a2ensite owncloud
# a2dissite 000-default
# apachectl -t
# service apache2 restart

Connexion au site et finalisation de l'installation

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 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.

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

Suivez les différents écrans, jusqu'à choisir entre un accès HTTP et HTTPS ou une redirection systématique vers HTTPS (recommandé) :

On valide… et c'est terminé !

On recharge son site préféré pour profiter de notre nouvelle connexion HTTPS :

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 :

/etc/apache/sites-enabled/owncloud.conf
<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 :

/etc/apache2/sites-enabled/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>

Alternatives

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é).

Liens

public/avec_un_peu_d_huile_de_cloud.txt · Dernière modification: 2016/05/23 12:28 de jean-yves.michaud