MouTonLibre

10 commentaires

J'ai failli appeler cet article « Bozon, c'est bon. Mangez-en ! » ou « Bozon, c'est pas de la bouse ! », mais voyez que j'arrive encore à me retenir... Toujours est-il que l'idée est là : BoZoN, dont j'ai appris l'existence par Cyrille, est un logiciel plutôt exceptionnel.

Du fait que j'auto-héberge mes services web sur Raspberry et que je débute dans ce domaine, j'ai besoin de services légers, faciles d'accès et facilement maintenables. Au contraire d'un Owncloud tendant vers l'usine à gaz (CozyCloud étant exclu car mono-utilisateur), BoZoN est une plateforme de stockage et partage de fichiers très minimaliste. Tout fonctionne sans base de données et repose uniquement sur le parcours de l''arborescence des dossiers utilisateurs et la création de liens de partage uniques, permettant une gestion complète (installation, sauvegardes, mises à jour, etc.) via de simples copier/coller. Et c'est le pied.

Je ne vais pas faire l'étalage de toutes les fonctionnalités ici, vous les retrouverez sur le site officiel, mais le seul manque éventuel est l'impossibilité de synchroniser des dossiers afin d'effectuer des sauvegardes facilement. Mais on finit par se faire aux *.zip.

Maintenant passons aux choses sérieuses. Premièrement, afin d'avoir un espace de stockage adapté au cloud (la carte SD du Raspberry étant un peu limite...), j'ai acheté un disque dur externe de 1.5 To. Ce qui laisse quand même pas mal de marge... À noter que ce disque dur est alimenté via une prise secteur, indispensable dans le cas d'un branchement sur Raspberry puisque ce dernier ne délivre nativement pas assez de puissance pour alimenter un disque dur via les ports USB. Afin que le disque dur soit monté automatiquement au démarrage du Raspberry, il faut rajouter une ligne au fstab. Pour cela, vous pouvez dans un premier temps brancher et monter votre disque dur puis copier la ligne correspondante dans le fichier /etc/mtab pour la coller dans le fichier /etc/fstab. Attention cependant, il est nécessaire de faire quelques adaptations. Dans mon cas, il a fallu modifier :

  1. l'identifiant de l'utilisateur à uid=33 pour qu'il corresponde à www-data ;
  2. l'identifiant du groupe à gid=33 pour qu'il corresponde également à www-data ;
  3. le point de montage vers l'emplacement sur le serveur ;
  4. le driver en ntfs-3g (et non ntfs) afin de pouvoir avoir accès en écriture au disque dur.

Ce qui donne finalement une ligne de ce type dans mon cas :

/dev/sda1 <emplacement sur le serveur> ntfs-3g rw,relatime,uid=33,gid=33,fmask=0177,dmask=077,nls=utf8,noserverino,errors=continue 0 0

Maintenant que le disque dur est monté automatiquement au démarrage, il ne reste plus qu'à installer BoZoN ! Pour cela, seules quelques étapes sont nécessaires.

  1. Téléchargez l'archive.
    wget https://github.com/broncowdd/BoZoN/archive/master.zip
  2. Décompressez l'archive (unzip est une dépendance à BoZoN, à installer au préalable).
    unzip master.zip
  3. Copiez le dossier vers la racine de votre site.
    cp -R BoZoN-master/* <emplacement sur votre serveur>
  4. Ajoutez la configuration Nginx suivante. (Attention à mettre à jour les différents champs.)
    server {
    	listen 80;
    	listen [::]:80; #ipv6
    	server_name <nom de domaine>;
    	return 301 https://$server_name$request_uri;
    }
    server {
    	listen 443 ssl;
    	listen [::]:443 ssl; #ipv6
    	server_name <nom de domaine>;
    
    	index index.php;
    	root <emplacement sur votre serveur>;
    	client_max_body_size XXXXM; # XXXX à remplacer avec la taille maximale autorisée pour l'envoi de fichiers. Attention à actualiser le fichier php.ini également.
    
    	location ~ \.php$ { 
    		try_files $uri = 404;
    		fastcgi_pass unix:/var/run/php5-fpm.sock;
    		include fastcgi_params;
    		fastcgi_intercept_errors on;
    		fastcgi_param HTTPS on;
    		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    	}
    
    	# On protège certains dossiers.
    	location / {
    		location ~ (uploads|private|thumbs) {
    			deny all;
    		}
    		location ~ core {
    			deny all;
    			location ~* \.js$ {
    				allow all;
    			}
    		}
    	}
    
    	# Configuration HTTPS
    	ssl_certificate <emplacement du certificat>;
    	ssl_certificate_key <emplacement de la clé>;
    	ssl_trusted_certificate <emplacement de la chaîne de contrôle de l'autorité de certification>;
    
    	ssl_protocols TLSv1.2;
    	ssl_ecdh_curve secp384r1;
    
    	ssl_ciphers EECDH+AESGCM:EECDH+AES;
    	ssl_prefer_server_ciphers on;
    
    	resolver 80.67.169.12 80.67.169.40 valid=300s;
    	resolver_timeout 5s;
    	ssl_stapling on;
    	ssl_stapling_verify on;
    
    	ssl_session_cache shared:SSL:10m;
    	ssl_session_timeout 5m;
    	ssl_session_tickets off;
    
    	add_header Strict-Transport-Security "max-age=15552000; includeSubdomains; preload";
    }
    
  5. Relancez Nginx.
    service nginx reload

Rendez-vous sur votre site avec votre navigateur préféré, et il ne vous reste plus qu'à vous connecter ! À noter qu'à la première connexion, il vous sera demandé de créer le compte administrateur.

Le petit plus que j'apprécie vraiment est que suite à la copie de ma bibliothèque musicale sur BoZoN, je peux maintenant l'écouter n'importe où grâce au lecteur intégré. Allez si je peux me permettre une suggestion, il serait vraiment génial de pouvoir créer des playlists... La création de liens symboliques dans un dossier via BoZoN ne pourrait pas être envisageable ? ;)

À noter que, du fait de mon amateurisme, il se peut que la configuration de Nginx soit perfectible. BoZoN est prévue pour fonctionner de base avec Apache, et la configuration que je vous ai donnée relève du bricolage. N'hésitez donc surtout pas à me faire part de vos remarques.

9 commentaires

Suite aux différentes remarques reçues via les commentaires de mon article sur Let's Encrypt, j'ai décidé de remettre un peu les mains dans le cambouis.

Ma configuration de Nginx était un peu flaibarde et trop simpliste. Ce qui me donnait une note de B au SSL server test de Qualys SSL labs. En suivant le tutoriel donné par Angristan, j'ai donc remis à jour ma configuration de Nginx.

Cela aurait pu durer 5 minutes, le temps d'écrire les lignes, mais non. Disons que chez moi, ça ne marche jamais du premier coup. La faute à l'activation du protocole spdy qui, je ne sais pas pourquoi, fait tout planter... Pour résoudre le problème j'ai donc été forcé d'ignorer la ligne :

listen 443 ssl spdy;

pour réécrire la ligne « par défaut » :

listen 443 ssl;

Bon hormis ce petit problème, la configuration donnée par Angristan est géniale&nbsp! Merci à toi.

Et pour conclure je me permets donc de comparer ma configuration à celle de ma banque (haha). À vous de juger.

LCL niveau Cblog niveau A

11 commentaires

Suite à de nombreuses remarques quant à ma sécurisation SSL bidon dans les commentaires de mon précédent article, j'ai décidé de corriger ça ce soir.

Dans un premier temps, je me servais d'un certificat auto-signé. Et autant vous dire que les navigateurs ne me considéraient pas comme une entité de toute confiance. À raison. Non pas que je cherche à pirater des données personnelles, mais bien parce que techniquement je me classe dans la catégorie des amateurs. Et n'ayant même pas confiance en moi, je vois mal des organismes m'accorder la leur.

Donc pour faire un peu plus sérieux, et accessoirement pour sauver mon flux RSS, je suis passé par le service de certification gratuit "Let's Encrypt". Et il n'y a pas à dire, ça assure.

Pour générer des certificats, rien de plus simple. Dans un permier temps, on installe Let's Encrypt :

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help

À partir de là, il faut couper le serveur (et comme je suis un fou, j'ai fait ça le soir pour faire chier le plus de personne possible) avec la commande suivante (avec Nginx comme logiciel de serveur web) :

service nginx stop

Et là vous vous hallucinez car vous reconnaissez SysV et non systemd... Oui j'aime nager à contre-courant (en fait je n'ai rien choisit mais on s'en fou, c'est pour la postérité). Mais là n'est pas la question et si jamais vous êtes sous systemd, la commande pour couper le service est :

systemctl stop nginx

À ce moment là, il ne reste plus qu'à générer les couples certificats/clés avec cette commande :

./letstencrypt-auto certonly --standalone --agree-tos --email email@exemple.org -d exemple.org

Après quelques secondes, vous retrouverez le certificat (fullchain.pem) et la clé (privkey.pem) dans le dossier suivant :

/etc/letsencrypt/live/exemple.org/

Et... C'est tout ! Il ne vous reste plus qu'à changer la configuration de Nginx pour prendre en compte les nouveaux certificats et le tour est joué. Simple comme bonjour.

Juste un détail, quand vous définissez l'adresse du certificat dans la configuration de Nginx, ne faites pas une erreur de frappe comme moi... Ça peut vous ruiner une soirée.