Voici une série de procédures permettant de mettre en production un serveur sous la distribution Ubuntu Server 16.04.
Tout a été testé plutôt deux fois qu’une !
Préparer un serveur Ubuntu
Version : Ubuntu Server 16.04 LTS
Hypothèses de base :
- installation brute,
- seulement ssh d’installé
- un seul utilisateur (root),
- connecté via ssh en root.
Serveur/SSH
Installation
Si le serveur SSH n’est pas déjà installé, voici comment procéder.
#Installation du serveur SSH sudo apt-get install openssh-server
Test de mots de passe
Voici un site sympa qui propose de tester des mots de passe et de donner une estimation du temps nécessaire pour le hacker.
Il s’agit de https://howsecureismypassword.net/
J’ai fait un test avec un mot de passe « sécurisé », en voici le résultat :

En clair, pour cet exemple-là il faut : 33 x 1054 années.
Serveur/OpenStreetMap sous Ubuntu 14.04
Pour certains besoins, il est parfois nécessaire de mettre en place son propre serveur OpenStreetMap, comme par exemple pour des applications métiers, afin d’avoir le serveur en local, ne pas surcharger les serveurs OSM publiques, réduire le temps de latence, travailler sur des emprises définies (continent, pays, région, et même zone personnalisée).
Mon serveur étant sous ubuntu server, je ne m’intéresserai ici qu’à ce cas de figure, mais il y a fort à parier que les paquets soient accessibles sous d’autres distributions.
Présentation
Le but est de mettre en place un architecture permettant d’intégrer les exports d’OSM (dumps & diffs), afin de fournir un service de cartographie.
Le service devra mettre à disposition de leaflet des tuiles cartographiques.
Voici le schéma complet de l’infrastructure d’OpenStreetMap :
Les principaux services nécessaires sont les suivants :
Osmosis permet la gestion des données, import/export/comparaison des dumps et diffs des données OSM.
Osm2pgsql permet la conversion des données OSM afin de les importer dans la base PostgreSQL.
Mapnik permet de faire le rendu des tuiles en utilisant des styles personnalisables.
Mod_tile effectue la gestion des tuiles et du cache. Si elle existe et est à jour, il la sert au serveur web, si elle est obsolète ou n’existe pas, il va la demander à Mapnik.
Renderd gère la priorisation des demandes de tuiles de Mod_tile à Mapnik en prenant en compte la charge serveur.
OSM Bright permet de gérer les styles des cartes.
Recommandations matérielles
Pour un rendu important, comme au niveau planète, il faut prévoir une infrastructure matérielle conséquente :
- au moins 24 GB de RAM,
- avoir la DB sur des disques SSD,
- 512 GB d’espace disque si les données OSM sont mises à jour,
- 256 GB d’espace disque si les données OSM ne sont pas mises à jour, mais réimportées via l’option -drop,
- Concernant le processeur, je n’ai pas trouvé d’info.
Ceci sans faire allusion au RAID et besoins de sauvegardes.
Installations
Les commandes sont données pour un système avec ubuntu server 14.04
Installation des dépendances
sudo apt-get install libboost-all-dev subversion git-core tar unzip wget bzip2 build-essential autoconf libtool libxml2-dev libgeos-dev libgeos++-dev libpq-dev libbz2-dev libproj-dev munin-node munin libprotobuf-c0-dev protobuf-c-compiler libfreetype6-dev libpng12-dev libtiff4-dev libicu-dev libgdal-dev libcairo-dev libcairomm-1.0-dev apache2 apache2-dev libagg-dev liblua5.2-dev ttf-unifont lua5.1 liblua5.1-dev node-carto
Installation de PostgreSQL & PostGIS
sudo apt-get install postgresql postgresql-contrib postgis postgresql-9.3-postgis-2.1
Installation d’osm2pgsql
mkdir ~/src cd ~/src git clone git://github.com/openstreetmap/osm2pgsql.git cd osm2pgsql ./autogen.sh ./configure make sudo make install
Installation de Mapnik
cd ~/src git clone git://github.com/mapnik/mapnik cd mapnik git branch 2.2 origin/2.2.x git checkout 2.2 python scons/scons.py configure INPUT_PLUGINS=all OPTIMIZATION=3 SYSTEM_FONTS=/usr/share/fonts/truetype/ make sudo make install sudo ldconfig
Installation de mod_tile & renderd
cd ~/src git clone git://github.com/openstreetmap/mod_tile.git cd mod_tile ./autogen.sh ./configure make sudo make install sudo make install-mod_tile sudo ldconfig
Notes
Si les mises à jour de la base de données ne sont pas très fréquentes (<2/mois), il semble préférable d’utiliser le dump complet plutôt que les diffs.
Téléchargements:
Planet OSM – Pour télécharger les données au niveau global
Geofabrik – Pour télécharger les données au niveau désiré (Continent, Pays, Région)
Dernier fichier OSM – France (3 GB)
Sources :
Switch2OSM.org
Pages persos d’Adrien/Créer son propre miroir des données OpenStreetMap et un serveur de rendu des tuiles, avec Debian Wheezy
Makina Corpus/Un serveur OpenStreetMap pour votre ville
Wiki OSM/Automatiser la mise à jour quotidienne
Serveur/Subsonic
Subsonic est une plate-forme de streaming audio.
Prérequis.
Pour commencer il y a un prérequis, à savoir il faut JRE d’installé sur le serveur. Si ce n’est pas le cas, nous allons l’installer :
#apt-get install openjdk-8-jre
Installation.
Une fois les paquets installés, nous pouvons télécharger le paquet subsonic depuis le site :
#wget http://subsonic.org/download/subsonic-5.3.deb
et procéder à l’installation qui se passe sans demander de paramètres :
#dpkg - i subsonic-5.3.deb
Une fois terminé, la plate-forme est accessible via : http://serveur:4040
Le service est fonctionnel, mais de base, il n’est pas sécurisé.
Il faut dans un premier temps changer le mot de passe admin qui est admin,
ainsi qu’activer ssl pour y accéder via du https,
créer un utilisateur unix propre à au service en lieu et place à root,
puis créer les utilisateurs.
Activation du protocole SSL.
A venir
Changement de l’utilisateur système.
Il faut éditer le fichier de configuration :
# vi /etc/default/subsonic
et changer des variables comme :
SUBSONIC_USER = subsonic /*au lieu de */ SUBSONIC_USER = root
Pour plus d’information quant aux paramètres disponibles, la commande :
/usr/share/subsonic/subsonic.sh --help
donne les détails :
Usage: subsonic.sh [options] --help This small usage guide. --home=DIR The directory where Subsonic will create files. Make sure it is writable. Default: /var/subsonic --host=HOST The host name or IP address on which to bind Subsonic. Only relevant if you have multiple network interfaces and want to make Subsonic available on only one of them. The default value will bind Subsonic to all available network interfaces. Default: 0.0.0.0 --port=PORT The port on which Subsonic will listen for incoming HTTP traffic. Default: 4040 --https-port=PORT The port on which Subsonic will listen for incoming HTTPS traffic. Default: 0 (disabled) --context-path=PATH The context path, i.e., the last part of the Subsonic URL. Typically '/' or '/subsonic'. Default '/' --max-memory=MB The memory limit (max Java heap size) in megabytes. Default: 100 --pidfile=PIDFILE Write PID to this file. Default not created. --quiet Don't print anything to standard out. Default false. --default-music-folder=DIR Configure Subsonic to use this folder for music. This option only has effect the first time Subsonic is started. Default '/var/music' --default-podcast-folder=DIR Configure Subsonic to use this folder for Podcasts. This option only has effect the first time Subsonic is started. Default '/var/music/Podcast' --default-playlist-folder=DIR Configure Subsonic to use this folder for playlists. This option only has effect the first time Subsonic is started. Default '/var/playlists'
Sources :
doc.ubuntu-fr.org/Subsonic
Serveur/Webmin
Afin de faciliter l’administration d’un serveur, il peut être sympa d’avoir une interface web.
Je vais donc installer Webmin.
Dans un premier temps, il faut télécharger le paquet sur le serveur :
#wget http://prdownloads.sourceforge.net/webadmin/webmin_1.770_all.deb
Puis lancer son installation :
#dpkg -i webmin_1.770_all.deb
L’installation est automatique, il n’y a pas de paramètre à renseigner.
Une fois terminée, vous avez dans la console le retour suivant :
Webmin install complete. You can now login to https://serveur:10000/ as root with your root password, or as any user who can use sudo to run commands as root.
Donc l’utilisateur root a accès à l’interface, ainsi que les utilisateurs du groupe sudo.
Mon conseil, pour la gestion des autorisations d’accès à webmin est de créer un groupe webmin et d’y ajouter des utilisateurs, afin de savoir facilement et rapidement qui y a accès.
Serveur/Authentification SSH avec certificat
Dans un premier lieu, il faut générer les clefs, sur le client, via la commande :
$ ssh-keygen
Par défaut il s’agit de RSA en 2048 bits.
Elles seront stockées sous ~/.ssh/
La clef privée sera nommée : id_rsa
La clef publique sera nommée : id_rsa.pub
Pour une authentification avec le certificat sans devoir saisir la passphrase, il ne faut pas en saisir lors de la génération des clefs.
Maintenant que nous avons les clefs, il faut communiquer la clef publique au serveur, via une commande dédiée :
$ ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<ipaddress>
Il faudra saisir le mot de passe pour établir une connexion ssh pour la copie de la clef.
La commande permet de copier la clef publique dans le bon repertoire : ~/.ssh
avec le nom correct : authorized_keys
ainsi que les droits d’accès en 600.
Il ne reste plus qu’à effectuer la configuration sur le serveur ssh.
Pour cela, il faut éditer le fichier de configuration du daemon ssh :
# vi /etc/ssh/sshd_config
Il faut activer l’authentification via certificat :
PubkeyAuthentication yes
désactiver l’authentification de root :
PermitRootLogin no
Permettre l’authetification de root seulement par certificat :
PermitRootLogin without-password
RSAAuthentication yes PubkeyAuthentication yes
Désactiver l’authentification par mot de passe :
PasswordAuthentication no
Désactiver PAM authentication, ne donner les droits ssh qu’à certains utilisateurs ou groupes, ici le groupe ssh
UsePAM no IgnoreUserKnownHosts no AllowGroups ssh
Il suffit juste pour finaliser, de relancer le service ssh :
sudo service ssh restart
Sources :
doc-ubuntu-fr/Authentification par un système de clés publique/privée
doc.fedora-fr/SSH : Authentification par clé
Prendre un café/Installer sa clé SSH sur un serveur distant
Résoudre problème de certificat sur le client :
Chris Jean/Ubuntu SSH Fix for “Agent admitted failure to sign using the key”
NAS200 en RAID1 : Changement de disque dur
Voici quelques semaines, que l’un des deux disques durs de mon NAS m’a lâché.
Rien de bien grave donc, cette défaillance est palliée par le mirroiring en RAID1.
Il reste néanmoins à changer le disque défectueux avant que le deuxième fasse de même. Car comme je fait bien les choses, ces deux disques sont de la même marque, même modèle, et même date de fabrication, donc statistiquement, il y a beaucoup plus de chances qu’ils défaillent durant la même période. Ce qui est toujours recommandé est d’au moins utiliser des marques différentes.
Je me suis donc procuré un disque dur neuf et de capacité supérieure. A l’origine, j’utilisais des 1,5 To, celui que j’ai acheté fait 2 To, ce qui me permettra de gagner 500 Go de stockage lorsque le deuxième sera mort.
J’ai donc arrêté le NAS.
Remplacé le disque défectueux, par le neuf.
Puis je rallume le NAS.
Lorsque l’on se connecte sur l’interface web de gestion, on aperçoit que le système à détecté le nouveau disque et qu’il est en train de reconstruire le RAID en recopiant sur le nouveau disque. Il n’y a strictement rien à faire : c’est formidable.
Sauf que …, sauf que la reconstruction recommence sans cesse.
Comme je me suis aperçu de cela pendant la semaine et que je n’ai pas eu le temps de m’en occuper, je l’ai laissé faire. Le NAS a essayé de reconstruire le RAID pendant quinze jours, avant que je prenne les choses en mains.
J’ai donc ôté les deux disques du NAS, les ai connecté à un serveur maison, après avoir pris soin de déconnecter les disques durs du serveur.
J’ai bouté le serveur sur un CD live linux. Et là en fait, il n’y a rien à faire, le système reconstruit automatiquement le RAID.
On peux constater de l’avancement en lisant le fichier : /proc/mdstat via la commande :
#cat /proc/mdstat
server:~# cat /proc/mdstat md0 : active raid1 sda1[0] sdb1[1] 24418688 blocks [2/1] [U_] [=>...................] recovery = 9.9% (2423168/24418688) finish=2.8min speed=127535K/sec md1 : active raid1 sda2[0] sdb2[1] 24418688 blocks [2/1] [U_] [=>...................] recovery = 6.4% (1572096/24418688) finish=1.9min speed=196512K/sec
Cela est rendu possible car le disque neuf a fait un tour dans le NAS en premier, qui a partitionné ce disque et l’a ajouté au volume RAID.
Liens et sources : http://www.howtoforge.com/replacing_hard_disks_in_a_raid1_array
http://blog.anotherhomepage.org/post/2010/09/01/Reconstruction-d-un-RAID-1-logiciel-sous-Linux
http://www.linuxpedia.fr/doku.php/expert/mdadm
Monter un volume nas200 sous ubuntu
Pour monter au démarrage de l’ordinateur un volume de stockage réseau de NAS200, il faut faire quelques petites manipulations.
installer le paquet : smbfs
#sudo apt-get install smbfs
Puis il faut créer le répertoire d’accueil, exemple : /media/public_reseau
#mkdir /media/public_reseau
Ajouter la ligne de montage du volume dans fstab:
#nano /etc/fstab
Ajouter :
//nas200.local/public /media/public_reseau smbfs _netdev,credentials=/root/.smbcredentials 0 0
On doit pour finir, créer un fichier contenant le login & le mot de passe de l’utilisateur :
#nano /root/.smbcredentials
username=login
password=*****
Pour terminer, il ne reste plus qu’à redémarrer ou monter le volume:
#sudo mount -a