PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Bridouz : Installer Nextcloud sur son Raspberry

dimanche 5 février 2017 à 01:00

Il y a quelques temps j’avais évoqué ici mon acquisition d’un raspberry pi 3 pour me faire un petit serveur @home. Depuis le début j’utilisai la distribution DietPi, basée sur Raspbian avec pleins d’améliorations et des logiciels pré-configurés installables en quelques clics. Le serveur tournait parfaitement, sans avoir besoin de bidouiller la bête. Mais c’est lors d’un banal renouvellement de certificats letsencrypt que les ennuis ont commencé.

L’outils Dietpi-Letsencrypt m’indiqua qu’aucun serveur web n’était configuré sur la machine. J’essaie de passer de Lighttpd à Nginx, toujours le même message d’erreur. Une réinstallation n’a rien changé alors il a fallu tourner la page, revenir à du Raspbian pure pour tout faire comme un grand à la main, mieux comprendre les rouages. Voici donc les quelques notes prises pendant cette aventure.

Installer Raspbian

Raspbian est la distribution officielle pour les Raspberry, elle est basée sur Debian et apporte toute la stabilité dont la distribution mère tire sa renommée.

Pour télécharger la distribution il faut se rendre sur le site officiel de la fondation Raspberry, on y trouve alors deux images :

La première image est plus lourde et offre une interface graphique légère, la deuxième quant à elle, est plus légère et s’oriente donc logiquement vers une base pour un serveur.

Une fois l’image téléchargée, libre à chacun de la copier sur la carte SD avec son outil préféré. DD fait très bien le boulot par exemple.

Boot headless

Nous voulons donc créer un serveur headless, sans écran. Cela veut dire qu’il va falloir passer par une connexion ssh pour avoir accès à Raspbian en ligne de commande.

Par défaut Raspbian n’active pas ssh, cela depuis novembre 2016 et l’affaire des attaques DDOS à travers des objets connectés. Il faut donc l’activer à la main une fois l’installation automatique faite.
Pour ne pas avoir à brancher un écran au Raspberry afin d’activer SSH, une astuce existe. Il suffit de créer un fichier nommé ssh dans le dossier /boot pour activer le service à la première connexion. Le fichier peut rester vide, seul sa présence compte.

Il est également possible de configurer une connexion wifi au premier démarrage en éditant le fichier /etc/wpa/supplicant/wpa/supplicant.conf :

network={
    ssid="NomduRéseauWIFI"
    psk="motdepasswifi"
}

Il est également possible de modifier le port de connexion ssh en éditant le fichier /etc/ssh/sshd_config. Ainsi le serveur se verra un peu plus protégé des attaques automatiques sur le port 22.

Serveur Web et Base de Données

Raspbian est maintenant installée, il va falloir s’occuper du serveur web. Pour cela je suis parti sur un combo Nginx/MariaDB, les deux logiciels ont une très bonne réputation et la documentation est abondante.

Nginx + MariaDB :

Commençons par mettre à jour son OS puis installer les logiciels :

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx mariadb-server mariadb-client

Lors de l’installation de MariaDB un mot de passe vous sera demandé pour se connecter avec l’utilisateur root à la base de données.

Configuration de MariaDB

Le logiciel de contrôle de base de données est maintenant installé. Il va falloir le configurer pour permettre à Nextcloud d’écrire dessus.

Pour sécuriser d’avantage sa base SQL il est possible de lancer la commande mysql_secure_installation.

Création de la base mysql

Pour se connecter à la base nous utilisons la commande suivante : mysql -u root -p, le mot de passe crée lors de l’installation de MariaDB sera alors demandé.

Nous allons maintenant créer la base de données pour Nextcloud, configurer l’utilisateur qui pourra s’y connecter et gérer la base de données.

## Création de la base de données
create database nextcloud;

## Création de l'utilisateur
CREATE USER "nextclouduser"@"localhost" ;

## Définition d'un mot de passe
SET password FOR "nextclouduser"@"localhost" = password('mot_de_passe_pour_nextcloud') ;

## Attribution des privilèges pour la base
GRANT ALL ON nextcloud.* TO "nextclouduser"@"localhost" ;

## Néttoyer les privilèges
flush privileges;

## Quitter MySQL
exit;

Nginx et Php

Maintenant que Nginx est installé et que la base de données est crée nous allons installer PHP et divers modules nécessaires au bon fonctionnement de Nextcloud.

sudo apt-get install php5-curl php5-gd php5-tidy php5-mysql php5-intl php5-mcrypt php5-imagick php-xml-parser`php5-fpm

Pour paramétrer nginx pour inclure php5-fpm dans la configuration et donc pouvoir utiliser Nextcloud il faudra inclure le code suivant dans la configuration nginx. On y reviendra plus tard.

include fastcgi_params;
fastcgi_split_path_info ^(.+\\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
#Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;

La commande nginx -t permet de contrôler vos fichiers de configuration Nginx et de relever les erreurs de syntaxe qui pourraient nuire au bon fonctionnement du serveur. C’est donc une commande à utiliser sans modération !

Certbot

Pour obtenir un certificat SSL pour notre serveur et ainsi assurer une connexion chiffrée avec le navigateur ou le client il est maintenant possible d’utiliser Certbot aka Letsencrypt pour générer le dit certificat localement. L’outil est notamment développé par l’EFF et Mozilla.

Il est important d’avoir au préalable un nom de domaine pour votre serveur. Il est possible d’en acheter un auprès de fournisseurs tels OVH ou Gandhi. Ou alors il est également possible de passer par un service de DNS Dynamique (DDNS) comme [no-ip](https://www.noip.com), ce dernier a d’ailleurs un outil disponible qui s’installe sur Raspbian et qui connecte automatiquement votre serveur avec votre nom de domaine noip crée.

Récupérer Certbot

le root nginx de base se situe dans /var/www/html, j’ai choisi /var/www pour une meilleure gestion de mes différents services sur mon serveur.

Dans un premier temps nous devons récupérer certbot et le rendre exécutable :

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

Il faut alors modifier le fichier de configuration Nginx /etc/nginx/sites/available/default/ pour y insérer la localisation .well-known qui est utilisé par l’ACME Challenge pour vous délivrer un certificat.

sudo nano /etc/nginx/sites-available/default

### Rajouter les lignes suivantes à celle du bloc Serveur SSL
        location ~ /.well-known {
                allow all;
        }

Une fois cela fait nous allons redémarrer Nginx : service nginx reload

Maintenant on envoie Certbot au charbon avec ./path/to/certbot-auto certonly --webroot -w /var/www -d votresite.com

Si tout c’est bien passé les certificats sont créés, on peut rapidement voir le résultat en allant fouiller dans les repertoires de certbot :
ls -l /etc/letsencrypt/live/your_domain_name

Il faudra penser à ajouter le nom de domaine du serveur dans le fichier de configuration Nginx

Ajout des certificats à Nginx

Nous devons éditer le fichier de configuration d’Nginx pour ajouter l’URL de notre serveur ainsi que les lignes suivantes pour pointer vers les certificats créés par Certbot.

Pour faciliter la gestion des différents paramètres dans le fichier default Nginx nous allons utiliser des snippets. Ce qui va permettre de séparer les différents paramètres dans des fichiers distincts, que l’on pourra plus rapidement éditer par la suite.

sudo nano /etc/nginx/snippets/ssl-letsencrypt.conf

# Ajouter le certificat SSL
ssl_certificate /etc/letsencrypt/live/nodenixbox.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nodenixbox.com/privkey.pem;/

Amélioration du niveau SSL

Les certificats générés de base par Certbot sont bons mais, il est possible de les rendre encore plus fort :

# Générer un Strong Diffie-Hellman Group
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Le fichier crée (/etc/ssl/certs/dhparam.pem) sera utilisé par la suite pour le serveur.

Cypher et Android

Lors de ma première connexion du client Nextcloud Android avec mon instance je rencontrais une erreur qui indiquait que la connexion était impossible, un rapide tour sur le web indiqua qu’il fallait utiliser le cypher ECDHE-RSA-AES128-SHA pour que la synchronisation fonctionne correctement.

Nous allons de nouveau utiliser un snippets pour incorporer les paramètres ssl pour le serveur : Les paramètres sont issus de la documentation officielle Nextcloud et du site cipherli.st.

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-RSA-AES128-SHA";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Disable preloading HSTS for now.  You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header Cache-Control "public, max-age=7200";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
access_log off;

ssl_dhparam /etc/ssl/certs/dhparam.pem;

Nextcloud

Installation

L’installation est assez simple par la suite, il suffit de récupérer l’archive de la dernière version stable, de décompresser l’archive et de balancer le dossier dans /var/www:

wget https://download.nextcloud.com/server/releases/latest.tar.bz2
tar xfvj latest.tar.bz2
sudo mv nextcloud /var/www

Créer un dossier data

Pour que Nextcloud fonctionne correctement il faut absolument créer un dossier data avec les permissions qui vont bien.

sudo mkdir -p /var/www/nextcloud/data
sudo chown www-data:www-data /var/www/nextcloud/data
sudo chmod 750 /var/www/nextcloud/data

Permissions

cd /var/www/nextcloud
sudo chown www-data:www-data config apps

Pour vérifier que les permissions sont bien strictes la doc officielle de Nextcloud met à disposition un petit script bash pour cela.

Ensuite il ne reste plus qu’à se rendre sur l’URL adressedevotrepi/nextcloud pour démarrer l’installation

Nextcloud et Nginx

Maintenant nous allons paramétrer nginx pour inclure le dossier Nextcloud au serveur et ainsi arriver à la fin du périple et pouvoir par la suite utiliser Nextcloud sur notre serveur.

Il suffit d’éditer le fichier de configuration default et d’y indiquer :

#################
### Nextcloud ###
#################
     location ~ /.well-known {
        allow all;
    }

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    # rewrite ^/.well-known/host-meta /nextcloud/public.php?service=host-meta
    # last;
    #rewrite ^/.well-known/host-meta.json
    # /nextcloud/public.php?service=host-meta-json last;

    location = /.well-known/carddav {
      return 301 $scheme://$host/nextcloud/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host/nextcloud/remote.php/dav;
    }

    location /.well-known/acme-challenge { }
    
    location ^~ /nextcloud {

        # set max upload size
        client_max_body_size 512M;
        fastcgi_buffers 64 4K;

        # Disable gzip to avoid the removal of the ETag header
        gzip off;

        # Uncomment if your server is build with the ngx_pagespeed module
        # This module is currently not supported.
        #pagespeed off;

        error_page 403 /nextcloud/core/templates/403.php;
        error_page 404 /nextcloud/core/templates/404.php;

        location /nextcloud {
            rewrite ^ /nextcloud/index.php$uri;
        }

        location ~ ^/nextcloud/(?:build|tests|config|lib|3rdparty|templates|data)/ {
            deny all;
        }
        location ~ ^/nextcloud/(?:\\.|autotest|occ|issue|indie|db_|console) {
            deny all;
        }

        location ~ ^/nextcloud/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\\.php(?:$|/) {
            include fastcgi_params;
            fastcgi_split_path_info ^(.+\\.php)(/.*)$;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param HTTPS on;
            #Avoid sending the security headers twice
            fastcgi_param modHeadersAvailable true;
            fastcgi_param front_controller_active true;
            fastcgi_pass php-handler;
            fastcgi_intercept_errors on;
        }

        location ~ ^/nextcloud/(?:updater|ocs-provider)(?:$|/) {
            try_files $uri/ =404;
            index index.php;
        }

        # Adding the cache control header for js and css files
        # Make sure it is BELOW the PHP block
        location ~* \\.(?:css|js|woff|svg|gif)$ {
            try_files $uri /nextcloud/index.php$uri$is_args$args;
            add_header Cache-Control "public, max-age=7200";
            # Add headers to serve security related headers  (It is intended
            # to have those duplicated to the ones above)
            # Before enabling Strict-Transport-Security headers please read
            # into this topic first.
            # add_header Strict-Transport-Security "max-age=15768000;
            # includeSubDomains; preload;";
            add_header X-Content-Type-Options nosniff;
            add_header X-Frame-Options "SAMEORIGIN";
            add_header X-XSS-Protection "1; mode=block";
            add_header X-Robots-Tag none;
            add_header X-Download-Options noopen;
            add_header X-Permitted-Cross-Domain-Policies none;
            # Optional: Don't log access to assets
            access_log off;
        }

        location ~* \\.(?:png|html|ttf|ico|jpg|jpeg)$ {
            try_files $uri /nextcloud/index.php$uri$is_args$args;
            # Optional: Don't log access to other assets
            access_log off;
        }
    }

Peaufinage et Sécurité

Sécuriser son dossier data

Il est recommandé de placer son dossier data en dehors de la racine du serveur web pour éviter toute intrusion. Comme je ne suis pas un mec qui réfléchit de base je n’ai pas fait la manipulation avant l’installation mais bien après.

sudo mkdir /var/nextcloud
sudo mv -v /var/www/nextcloud/data /var/nextcloud/data

Puis il faut éditer le fichier config.php de Nextcloud et modifier la ligne 'datadirectory' => '/var/www/nextcloud/data', pour y modifier le chemin vers le dossier data.

Il est d’ailleurs possible de faire la manip’ avant l’installation de Nextcloud pour n’avoir qu’à sélectionner le dossier data sécurisé lors de l’installation. C’est tout aussi pratique.

Getenv

Lors de mon installation Nextcloud indiqua que la fonction Getenv de PHP n’était pas trouvable. Il faut alors décommenter la ligne PHP : ;env[PATH] = /usr/local/bin:/usr/bin:/bin dans le fichier /etc/php5/fpm/pool.d/www.conf

Memcache

Nextcloud me renvoyait également une erreur au sujet de Memcache. Un tour sur la doc et la solution est trouvée.

# Installer un Memcache
sudo apt-get install php5-apcu

# Ajouter le memcache à nextcloud
sudo nano nextcloud/config/config.php
'memcache.local' => '\\OC\\Memcache\\APCu', # à ajouter #

Maintenant tout est bon pour faire tourner Nextcloud sans erreur, nous n’avons plus qu’à redémarrer les services php5-fpm et nginx et tada.

Nous pouvons maintenant profiter de la dernière version stable de Nextcloud sur un petit serveur @Home où seul votre connexion internet sera une limite.

Gravatar de Bridouz
Original post of Bridouz.Votez pour ce billet sur Planet Libre.

Articles similaires

Jean-Baptiste Holcroft : Fin du FOSDEM à Bruxelles - merci !

dimanche 5 février 2017 à 00:00

Pour mon premier FOSDEM, je suis très heureux de cette édition, d’abords parce que c’est un évènement majeur du logiciel libre européen auquel je souhaite assister depuis 10 ans, mais surtout par les rencontres et conférences auxquelles j’ai pu assister. Merci aux organisateurs et aux nombreux contributeurs !

Beaucoup de discussions sur les traductions

Ce fut l’occasion pour moi d’aller plus loin dans mon projet de communauté des traducteurs francophones :

Un projet plus concrêt

En discutant sur ma vision concernant mon projet d’animation des traducteurs francophones, je pense maintenant pouvoir résumer le cœur du projet :

J’aimerais voir parler de retours d’expériences de traducteurs par rapport à leurs travaux, de coordinateurs par rapport à leurs outillages et de développeurs dans leur difficultés. C’est principalement une plateforme d’échange que je propose, se faisant le relais de l’actualité et des bonnes pratiques, pouvant s’emparer de problèmes pour les résoudre si les ressources sont présentes pour les animer.

Peut-être qu’on arrivera également à faire échanger la communauté du logiciel libre avec les traducteurs professionnels, Red Hat nous a produit un document de bonnes pratiques concernant les applications, mais nous pouvons aller beaucoup plus loin en sollicitant des experts linguistiques pour nous aider à aborder de la bonne façon la traduction de termes problématiques, dans la chasse aux incohérences classiques, etc.

On a discuté assez longtemps sur l’opportunité de faire une plateforme de traduction centrale et portant le projet. Mais je crains que nous n’ayons pas les ressources nécessaires pour gérer ce type d’outillage, mais surtout que les logiciels comme ceux-ci devraient proposer par défaut de l’hébergement de projets libres (Weblate, Zanata et Transifex le font).

Beaucoup de décentralisation

J’ai assisté à plusieurs conférences sur la décentralisation d’internet, la file d’attente avant chaque conférence a mené à refuser l’entrée à de nombreux visiteurs, faute de pouvoir respecter les normes de sécurité en vigueur. J’ai raté la conférence YunoHost qui a récolté une bonne quantité d’applaudissements.

Enfin, le rapprochement avec Framasoft se poursuit doucement, les applications disponibles arrivent et cela promet de ne faire que de s’améliorer dans le temps. J’ai hâte ! 😃

Et tout le reste…

C’est déprimant le nombre de choses intéressantes que j’aurais souhaité voir… J’ai raté la conférence de Misc sur la sécurité dans le contexte de l’auto-hébergement, celle concernant conversejs et l’intégration continue des traductions avec Pootle, et tellement d’autres ! Ce FOSDEM va me donner des heures et des heures de visionnage de vidéos, j’espère que cette année on les aura toutes !

Gravatar de Jean-Baptiste Holcroft
Original post of Jean-Baptiste Holcroft.Votez pour ce billet sur Planet Libre.

Articles similaires

Jean-Baptiste Holcroft : FOSDEM - décentralisation

dimanche 5 février 2017 à 00:00

Ouverture de la devroom par Tristant Nitot

Tristan Nitot déclare le lancement de la salle Décentralisation d’Internet nous parle des enjeux de la protection de la vie privée, en nous expliquant l’impact de la surveillance sur les citoyens, qui peuvent s’autocensurer de façon volontaire ou non.

L’exemple pris est l’accès à des articles Wikipédia sur des sujets sensibles aux états-unis, montrant une grande diminution de l’accès après les révélations de Snowden. Ça me rappel une situation avec des amis qui m’ont montré Siri, j’ai proposé en plaisantant de demander comment faire une bombe, je me suis presque fait arracher le téléphone des mains…

C’est la centralisation qui permet la surveillance, donc c’est par la décentralisation que nous parviendrons à construire une société ouverte.

La clef de cette présentation est contenue dans ce slogan :

NSA a brisé mon internet -> nous devons en créer un g/nouveau.

D’où vient la démarche de décentralisation d’internet ?

Il y a 17 ans, au lancement du FOSDEM, la focalisation était sur l’axe client, maintenant c’est sur le serveur qu’il faut se focaliser, d’où le lancement pour la première fois de cette salle. C’est le lancement, vous direz à vos petits-enfants : « J’y étais ! »

A-t-on une chance de gagner vs Datacenter & quantité de données ?

Tristan Nitot exprime ici plutôt de l’enthousiasme, l’architecture d’internet est déjà décentralisée, de plus les fabricants de téléphone créent des microprocesseurs surpuissants et très économes, l’orange Pi est à 7 € pour quad cœur à 1,2 GHz.

Comment diminuer la barrière à l’entrée ?

Cozy est extrêmement simple à prendre en main, ce n’est pas la seule façon de faire, ni la meilleure, mais c’est un progrès et est très accessibles.

Diaspora

Antoine Duparay (fla) présente deux catégories d’utilisateurs entre l’utilisation inconséquente de Facebook à l’abstinence complète par crainte. Entre les deux explique-t-il, il y a de la place, c’est ce que propose Diaspora*.

On y trouve les fonctionnalités de base, de recherche, de mise en page et de partage, mais privé par défaut, toutes les options de partages sont au plus bas. Pas de vrai prénom et nom de famille n’est requis, même le courriel n’est pas vérifié. L’outil est tellement respectueux de votre vie privée, qu’il est même possible d’y accéder via Tor.

Le présentateur évoque clairement l’arrivée de l’État Islamique en 2014, le porteur du projet précise que Diaspora ne vise pas à être anti-États, mais de combattre la centralisation par les grands acteurs économiques. Diaspora étant comme un serveur de messagerie, couper un serveur ne signifie pas qu’il ne peut pas apparaître à côté.

La version 0.6 offre une nouvelle mise en page et ergonomie, et des travaux de fonds ont été menés sur le cœur du logiciel, notamment sur le mécanisme de Fédération, travail fait en commun avec pluiseurs acteurs : Diaspora*, Friendica, Hubzilla/Redmatrix (en savoir plus.

Gravatar de Jean-Baptiste Holcroft
Original post of Jean-Baptiste Holcroft.Votez pour ce billet sur Planet Libre.

Articles similaires

Bridouz : Installer Nextcloud sur son Raspberry

samedi 4 février 2017 à 01:00

Il y a quelques temps j’avais évoqué ici mon acquisition d’un raspberry pi 3 pour me faire un petit serveur @home. Depuis le début j’utilisai la distribution DietPi, basée sur Raspbian avec pleins d’améliorations et des logiciels pré-configurés installables en quelques clics. Le serveur tournait parfaitement, sans avoir besoin de bidouiller la bête. Mais c’est lors d’un banal renouvellement de certificats letsencrypt que les ennuis ont commencé.

L’outils Dietpi-Letsencrypt m’indiqua qu’aucun serveur web n’était configuré sur la machine. J’essaie de passer de Lighttpd à Nginx, toujours le même message d’erreur. Une réinstallation n’a rien changé alors il a fallu tourner la page, revenir à du Raspbian pure pour tout faire comme un grand à la main, mieux comprendre les rouages. Voici donc les quelques notes prises pendant cette aventure.

Installer Raspbian

Raspbian est la distribution officielle pour les Raspberry, elle est basée sur Debian et apporte toute la stabilité dont la distribution mère tire sa renommée.

Pour télécharger la distribution il faut se rendre sur le site officiel de la fondation Raspberry, on y trouve alors deux images :

La première image est plus lourde et offre une interface graphique légère, la deuxième quant à elle, est plus légère et s’oriente donc logiquement vers une base pour un serveur.

Une fois l’image téléchargée, libre à chacun de la copier sur la carte SD avec son outil préféré. DD fait très bien le boulot par exemple.

Boot headless

Nous voulons donc créer un serveur headless, sans écran. Cela veut dire qu’il va falloir passer par une connexion ssh pour avoir accès à Raspbian en ligne de commande.

Par défaut Raspbian n’active pas ssh, cela depuis novembre 2016 et l’affaire des attaques DDOS à travers des objets connectés. Il faut donc l’activer à la main une fois l’installation automatique faite.
Pour ne pas avoir à brancher un écran au Raspberry afin d’activer SSH, une astuce existe. Il suffit de créer un fichier nommé ssh dans le dossier /boot pour activer le service à la première connexion. Le fichier peut rester vide, seul sa présence compte.

Il est également possible de configurer une connexion wifi au premier démarrage en éditant le fichier /etc/wpa/supplicant/wpa/supplicant.conf :

network={
    ssid="NomduRéseauWIFI"
    psk="motdepasswifi"
}

Il est également possible de modifier le port de connexion ssh en éditant le fichier /etc/ssh/sshd_config. Ainsi le serveur se verra un peu plus protégé des attaques automatiques sur le port 22.

Serveur Web et Base de Données

Raspbian est maintenant installée, il va falloir s’occuper du serveur web. Pour cela je suis parti sur un combo Nginx/MariaDB, les deux logiciels ont une très bonne réputation et la documentation est abondante.

Nginx + MariaDB :

Commençons par mettre à jour son OS puis installer les logiciels :

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx mariadb-server mariadb-client

Lors de l’installation de MariaDB un mot de passe vous sera demandé pour se connecter avec l’utilisateur root à la base de données.

Configuration de MariaDB

Le logiciel de contrôle de base de données est maintenant installé. Il va falloir le configurer pour permettre à Nextcloud d’écrire dessus.

Pour sécuriser d’avantage sa base SQL il est possible de lancer la commande mysql_secure_installation.

Création de la base mysql

Pour se connecter à la base nous utilisons la commande suivante : mysql -u root -p, le mot de passe crée lors de l’installation de MariaDB sera alors demandé.

Nous allons maintenant créer la base de données pour Nextcloud, configurer l’utilisateur qui pourra s’y connecter et gérer la base de données.

## Création de la base de données
create database nextcloud;

## Création de l'utilisateur
CREATE USER "nextclouduser"@"localhost" ;

## Définition d'un mot de passe
SET password FOR "nextclouduser"@"localhost" = password('mot_de_passe_pour_nextcloud') ;

## Attribution des privilèges pour la base
GRANT ALL ON nextcloud.* TO "nextclouduser"@"localhost" ;

## Néttoyer les privilèges
flush privileges;

## Quitter MySQL
exit;

Nginx et Php

Maintenant que Nginx est installé et que la base de données est crée nous allons installer PHP et divers modules nécessaires au bon fonctionnement de Nextcloud.

sudo apt-get install php5-curl php5-gd php5-tidy php5-mysql php5-intl php5-mcrypt php5-imagick php-xml-parser`php5-fpm

Pour paramétrer nginx pour inclure php5-fpm dans la configuration et donc pouvoir utiliser Nextcloud il faudra inclure le code suivant dans la configuration nginx. On y reviendra plus tard.

include fastcgi_params;
fastcgi_split_path_info ^(.+\\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
#Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;

La commande nginx -t permet de contrôler vos fichiers de configuration Nginx et de relever les erreurs de syntaxe qui pourraient nuire au bon fonctionnement du serveur. C’est donc une commande à utiliser sans modération !

Certbot

Pour obtenir un certificat SSL pour notre serveur et ainsi assurer une connexion chiffrée avec le navigateur ou le client il est maintenant possible d’utiliser Certbot aka Letsencrypt pour générer le dit certificat localement. L’outil est notamment développé par l’EFF et Mozilla.

Il est important d’avoir au préalable un nom de domaine pour votre serveur. Il est possible d’en acheter un auprès de fournisseurs tels OVH ou Gandhi. Ou alors il est également possible de passer par un service de DNS Dynamique (DDNS) comme [no-ip](https://www.noip.com), ce dernier a d’ailleurs un outil disponible qui s’installe sur Raspbian et qui connecte automatiquement votre serveur avec votre nom de domaine noip crée.

Récupérer Certbot

le root nginx de base se situe dans /var/www/html, j’ai choisi /var/www pour une meilleure gestion de mes différents services sur mon serveur.

Dans un premier temps nous devons récupérer certbot et le rendre exécutable :

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

Il faut alors modifier le fichier de configuration Nginx /etc/nginx/sites/available/default/ pour y insérer la localisation .well-known qui est utilisé par l’ACME Challenge pour vous délivrer un certificat.

sudo nano /etc/nginx/sites-available/default

### Rajouter les lignes suivantes à celle du bloc Serveur SSL
        location ~ /.well-known {
                allow all;
        }

Une fois cela fait nous allons redémarrer Nginx : service nginx reload

Maintenant on envoie Certbot au charbon avec ./path/to/certbot-auto certonly --webroot -w /var/www -d votresite.com

Si tout c’est bien passé les certificats sont créés, on peut rapidement voir le résultat en allant fouiller dans les repertoires de certbot :
ls -l /etc/letsencrypt/live/your_domain_name

Il faudra penser à ajouter le nom de domaine du serveur dans le fichier de configuration Nginx

Ajout des certificats à Nginx

Nous devons éditer le fichier de configuration d’Nginx pour ajouter l’URL de notre serveur ainsi que les lignes suivantes pour pointer vers les certificats créés par Certbot.

Pour faciliter la gestion des différents paramètres dans le fichier default Nginx nous allons utiliser des snippets. Ce qui va permettre de séparer les différents paramètres dans des fichiers distincts, que l’on pourra plus rapidement éditer par la suite.

sudo nano /etc/nginx/snippets/ssl-letsencrypt.conf

# Ajouter le certificat SSL
ssl_certificate /etc/letsencrypt/live/nodenixbox.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nodenixbox.com/privkey.pem;/

Amélioration du niveau SSL

Les certificats générés de base par Certbot sont bons mais, il est possible de les rendre encore plus fort :

# Générer un Strong Diffie-Hellman Group
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Le fichier crée (/etc/ssl/certs/dhparam.pem) sera utilisé par la suite pour le serveur.

Cypher et Android

Lors de ma première connexion du client Nextcloud Android avec mon instance je rencontrais une erreur qui indiquait que la connexion était impossible, un rapide tour sur le web indiqua qu’il fallait utiliser le cypher ECDHE-RSA-AES128-SHA pour que la synchronisation fonctionne correctement.

Nous allons de nouveau utiliser un snippets pour incorporer les paramètres ssl pour le serveur : Les paramètres sont issus de la documentation officielle Nextcloud et du site cipherli.st.

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-RSA-AES128-SHA";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Disable preloading HSTS for now.  You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header Cache-Control "public, max-age=7200";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
access_log off;

ssl_dhparam /etc/ssl/certs/dhparam.pem;

Nextcloud

Installation

L’installation est assez simple par la suite, il suffit de récupérer l’archive de la dernière version stable, de décompresser l’archive et de balancer le dossier dans /var/www:

wget https://download.nextcloud.com/server/releases/latest.tar.bz2
tar xfvj latest.tar.bz2
sudo mv nextcloud /var/www

Créer un dossier data

Pour que Nextcloud fonctionne correctement il faut absolument créer un dossier data avec les permissions qui vont bien.

sudo mkdir -p /var/www/nextcloud/data
sudo chown www-data:www-data /var/www/nextcloud/data
sudo chmod 750 /var/www/nextcloud/data

Permissions

cd /var/www/nextcloud
sudo chown www-data:www-data config apps

Pour vérifier que les permissions sont bien strictes la doc officielle de Nextcloud met à disposition un petit script bash pour cela.

Ensuite il ne reste plus qu’à se rendre sur l’URL adressedevotrepi/nextcloud pour démarrer l’installation

Nextcloud et Nginx

Maintenant nous allons paramétrer nginx pour inclure le dossier Nextcloud au serveur et ainsi arriver à la fin du périple et pouvoir par la suite utiliser Nextcloud sur notre serveur.

Il suffit d’éditer le fichier de configuration default et d’y indiquer :

#################
### Nextcloud ###
#################
     location ~ /.well-known {
        allow all;
    }

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    # rewrite ^/.well-known/host-meta /nextcloud/public.php?service=host-meta
    # last;
    #rewrite ^/.well-known/host-meta.json
    # /nextcloud/public.php?service=host-meta-json last;

    location = /.well-known/carddav {
      return 301 $scheme://$host/nextcloud/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host/nextcloud/remote.php/dav;
    }

    location /.well-known/acme-challenge { }
    
    location ^~ /nextcloud {

        # set max upload size
        client_max_body_size 512M;
        fastcgi_buffers 64 4K;

        # Disable gzip to avoid the removal of the ETag header
        gzip off;

        # Uncomment if your server is build with the ngx_pagespeed module
        # This module is currently not supported.
        #pagespeed off;

        error_page 403 /nextcloud/core/templates/403.php;
        error_page 404 /nextcloud/core/templates/404.php;

        location /nextcloud {
            rewrite ^ /nextcloud/index.php$uri;
        }

        location ~ ^/nextcloud/(?:build|tests|config|lib|3rdparty|templates|data)/ {
            deny all;
        }
        location ~ ^/nextcloud/(?:\\.|autotest|occ|issue|indie|db_|console) {
            deny all;
        }

        location ~ ^/nextcloud/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\\.php(?:$|/) {
            include fastcgi_params;
            fastcgi_split_path_info ^(.+\\.php)(/.*)$;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param HTTPS on;
            #Avoid sending the security headers twice
            fastcgi_param modHeadersAvailable true;
            fastcgi_param front_controller_active true;
            fastcgi_pass php-handler;
            fastcgi_intercept_errors on;
        }

        location ~ ^/nextcloud/(?:updater|ocs-provider)(?:$|/) {
            try_files $uri/ =404;
            index index.php;
        }

        # Adding the cache control header for js and css files
        # Make sure it is BELOW the PHP block
        location ~* \\.(?:css|js|woff|svg|gif)$ {
            try_files $uri /nextcloud/index.php$uri$is_args$args;
            add_header Cache-Control "public, max-age=7200";
            # Add headers to serve security related headers  (It is intended
            # to have those duplicated to the ones above)
            # Before enabling Strict-Transport-Security headers please read
            # into this topic first.
            # add_header Strict-Transport-Security "max-age=15768000;
            # includeSubDomains; preload;";
            add_header X-Content-Type-Options nosniff;
            add_header X-Frame-Options "SAMEORIGIN";
            add_header X-XSS-Protection "1; mode=block";
            add_header X-Robots-Tag none;
            add_header X-Download-Options noopen;
            add_header X-Permitted-Cross-Domain-Policies none;
            # Optional: Don't log access to assets
            access_log off;
        }

        location ~* \\.(?:png|html|ttf|ico|jpg|jpeg)$ {
            try_files $uri /nextcloud/index.php$uri$is_args$args;
            # Optional: Don't log access to other assets
            access_log off;
        }
    }

Peaufinage et Sécurité

Sécuriser son dossier data

Il est recommandé de placer son dossier data en dehors de la racine du serveur web pour éviter toute intrusion. Comme je ne suis pas un mec qui réfléchit de base je n’ai pas fait la manipulation avant l’installation mais bien après.

sudo mkdir /var/nextcloud
sudo mv -v /var/www/nextcloud/data /var/nextcloud/data

Puis il faut éditer le fichier config.php de Nextcloud et modifier la ligne 'datadirectory' => '/var/www/nextcloud/data', pour y modifier le chemin vers le dossier data.

Il est d’ailleurs possible de faire la manip’ avant l’installation de Nextcloud pour n’avoir qu’à sélectionner le dossier data sécurisé lors de l’installation. C’est tout aussi pratique.

Getenv

Lors de mon installation Nextcloud indiqua que la fonction Getenv de PHP n’était pas trouvable. Il faut alors décommenter la ligne PHP : ;env[PATH] = /usr/local/bin:/usr/bin:/bin dans le fichier /etc/php5/fpm/pool.d/www.conf

Memcache

Nextcloud me renvoyait également une erreur au sujet de Memcache. Un tour sur la doc et la solution est trouvée.

# Installer un Memcache
sudo apt-get install php5-apcu

# Ajouter le memcache à nextcloud
sudo nano nextcloud/config/config.php
'memcache.local' => '\\OC\\Memcache\\APCu', # à ajouter #

Maintenant tout est bon pour faire tourner Nextcloud sans erreur, nous n’avons plus qu’à redémarrer les services php5-fpm et nginx et tada.

Nous pouvons maintenant profiter de la dernière version stable de Nextcloud sur un petit serveur @Home où seul votre connexion internet sera une limite.

Gravatar de Bridouz
Original post of Bridouz.Votez pour ce billet sur Planet Libre.

Articles similaires

Jean-Baptiste Holcroft : Mon ordiphone sans outils Google

samedi 4 février 2017 à 00:00

Ce qu’on appelait avant un téléphone cellulaire, puis portable puis Smartphone, est avant tout pour moi un ordinateur avec des fonctionnalités de téléphone (d’où l’usage provocateur du terme « ordiphone »). Le problème avec Android, ce sont les outils propriétaires de Google, placés comme un point de passage obligatoire pour presque tout. Avec le Fairphone et YunoHost, j’ai réussi à faire un pas de plus vers la liberté et c’était très simple.

Les outils propriétaires de Google

Google impose ce qu’on appelle les Google Apps, ensemble de logiciels indispensables pour installer la logithèque « Android Market », cependant ces outils ont tous les droits sur le système, à un tel point que tout ce qui est fait sur le téléphone peut potentiellement être capturé puis envoyé à Google. Allant jusqu’à la saisie des touches. C’est un peu comme cette fonction Management Engine des processeurs Intel : c’est une petite boite noire qui peut tout faire sans vous demander votre avis. C’est l’archétype de ce qu’il faut éviter pour être libre, ces boites noires, c’est précisément pour cette raison que j’utilise Fedora sur mon système en plus d’être très proche des producteurs de logiciels.

Je me souviens d’une conférence de Richard Stallman, si votre outil installe des choses sans votre consentement, alors c’est un malware/maliciel ! Avec cette définition, Windows était pour lui à cette époque un maliciel et si on cherche, je suppose qu’il dirait la même chose sur ces outils imposés par Google sur Android. Souvent je me retrouvais avec des mises à jour automatiques d’application que je ne pouvais pas supprimer et que je n’utilisais pas.

Le Fairphone

Focalisé sur le thème du développement durable, cette entreprise laisse beaucoup de liberté à ses utilisateurs, notamment celle de choisir d’avoir ou non les Google Apps sur son téléphone en ne les installant pas par défaut. Le produit en ma possession est le FP1, donc leur toute première version. Il est perfectible mais l’ayant déjà cassé et réparé, la promesse de durabilité est jusqu’à présent tenue. J’apprécie surtout un système qui sur une prise USB 1 ampère (majorité des voitures) continue à se charger même en utilisation, permettant de continuer à avoir son logiciel de navigation fonctionnel même quand on rentre dans sa voiture avec deux pourcents de batterie.

Mon serveur YunoHost

Système d’exploitation serveur, YunoHost est une surcouche de configuration d’applications afin qu’elles utilisent toutes les mécanismes de sécurité et ressources du système de façon cohérente (notamment l’annuaire LDAP et le portail). Avec lui, héberger sa messagerie et ses services principaux est simple, le tout avec des certificats HTTPS fournis par Let's Encrypt (la version 2.5 de YunoHost est sortie le 2 février dernier)

Le résultat

F-droid comme logithèque, k9mail pour la messagerie, ttrss pour les flux RSS, Conversations et Telegram pour la messagerie instantanée, DAVdroid pour la synchronisation des contacts et des agendas, QuickDic pour le dictionnaire, nextcloud pour la sauvegarde automatique des photos/vidéos, LibreOffice Viewer et Document Viewer pour les fichiers de bureautique, OpenFoodFact pour l’analyse du contenu de mes produits, Wikipédia pour l’encyclopédie, OSMAnd pour les données géographiques, etc.

Tous ces outils fournissent les services de base dont j’ai besoin, ils fonctionnent souvent en mise à jour sur demande, économisant les ressources de tout le monde et sont très pratiques en mobilité.

Vous voulez me parler de cet article ? Contactez-moi sur le salon « traducteurs » de jabberfr.org (client XMPP javascript disponible en bas de chaque page).

Gravatar de Jean-Baptiste Holcroft
Original post of Jean-Baptiste Holcroft.Votez pour ce billet sur Planet Libre.