eLabFTW@INRAE : Documentation technique


Configuration de base d’une machine et d’un serveur virtuel


Auteur

  • Éric Quinton
  • Sandra Gaye
  • date: 17 janvier 2025

Relecture:

  • François Ehrenmann
  • update: 07 avril 2025

Les serveurs virtuels sont fournis par la DSI, à partir d’une demande Ariane : https://ariane.inrae.fr/block?id=ariane_sc_cat_item&sys_id=18f589cddb3c7c10ffaf7abe3b9619d6

Les informations à fournir sont les suivantes :

  • le nombre de vCPU
  • la quantité de mémoire allouée (au minimum, 4 Go pour un serveur de base)
  • l’espace disque demandé. Il ne peut pas dépasser 500 Go. Dans la pratique, si vous avez besoin d’espace volumineux pour une partition (> 100 Go), il vaut mieux passer par un montage NFS.
  • l’OS : choisissez Ubuntu, dans la dernière version proposée
  • activez le stockage avec option de sauvegarde, ce qui vous permettra de disposer de snapshots quotidiens conservés pendant 1 mois
  • si la machine virtuelle doit avoir un service ouvert depuis internet, choisissez “réseau ouvert à l’internet”. Une adresse publique lui sera attribuée. Si le service ne doit être accessible qu’aux agents INRAE, choisissez “Réseau interne INRAE” : une adresse privée sera attribuée (en 10.xxx)
  • Pour l’administration de la machine (SSH), cochez la case VPN, et indiquez le nom du groupe AD que vous aurez fait créer au préalable. Cette approche est préférable à l’attribution d’adresses IP (obsolète) ou à l’indication des logins des comptes autorisés à se connecter à l’interface d’administration.
  • Indiquez les ports à ouvrir. Par défaut, http et https possibles, mais vous pouvez demander d’autres ports, comme 5432 pour Postgresql ou 3306 pour MariaDB/Mysql. NB: les bases de données (5432, 3306..) ne peuvent pas être exposées depuis tout internet donc il est préférable de les mettre dans le réseau interne INRAE.

Une fois la demande réalisée, l’équipe DSI se charge de la création de la machine et vous contactera pour faire le point. C’est à ce moment là que vous pourrez demander l’endroit d’hébergement de votre machine (Montpellier - à préférer si vous faites des sauvegardes via S3 dans l’infra de Toulouse, Toulouse, voire Paris - déconseillé aujourd’hui).

Pré-paramétrer la machine

Machine virtuelle nue : coquille vide, OS à installer soi-même

Machine virtuelle “packagée” : machine virtuelle avec OS déjà installé (Ubuntu ou CentOS, Windows)

Suite à votre demande ci-dessus, la machine est créée “packagée” Ubuntu par la DSI, vous recevrez un e-mail récapitulant l’ensemble des paramètres pour la première connexion. Voici un exemple pour vous connecter :

ssh 10.131.xx.xx -l vmadmin

Une fois connecté, basculez en root avec la commande sudo -s

Administration de secours

La DSI a installé deux clés publiques dans le dossier .ssh du compte root et lui ont attribué un mot de passe, pour leur permettre d’intervenir en cas de panique (connexion ssh ou via la console d’administration) : ne les enlevez pas, cela vous permettra d’avoir une solution de secours en cas de souci.

Gestion de l’identification

La gestion de l’identification est réalisée ci-dessous avec le compte “USERNAME” comme exemple

La bonne approche en matière d’identification est de vous connecter avec votre clé ssh sous votre compte, puis de basculer en mode root avec sudo.

Les comptes utilisateurs n’ont pas de mot de passe, l’identification s’effectue exclusivement avec la clé ssh. Pour permettre l’accès en root, vous devez désactiver la demande de mot de passe pour sudo. Lancez la commande visudo, puis modifiez la ligne suivante ainsi :

# Allow members of group sudo to execute any command
%sudo	ALL=(ALL:ALL) NOPASSWD: ALL

Créez ensuite votre compte d’administration :

useradd -m -g users -G sudo -s /bin/bash USERNAME
mkdir /home/USERNAME/.ssh
vim /home/USERNAME/.ssh/authorized_keys

Ajoutez dans le fichier que vous venez de créer (authorized_keys) le contenu de votre clé publique (de préférence, générée avec le protocole ecdsa, soit la clé id_ecdsa.pub). Pour plus de détails sur la génération des paires de clés ssh, consulter le lien suivant : Générer des paires de clés SSH

Testez la connexion :

ssh 10.xxx -l USERNAME

Vérifiez que vous arrivez bien à vous connecter, puis à basculer en mode root avec la commande :

sudo -s

Une fois cette opération effectuée, vous pouvez désactiver le compte vmadmin, avec la commande :

usermod -L vmadmin

Le compte ne sera plus accessible avec la connexion login/mot de passe.

Vous pourrez rajouter des comptes pour vos administrateurs en suivant la même procédure.

Nettoyage et mise à niveau des paquets

Avec le compte USERNAME, lancer les commandes :

apt update
apt upgrade
apt autoremove

Pour activer le support de la souris dans vim (cela limite les recours aux flèches pour se déplacer, et le mode “visuel” est actif à la souris) :

echo "set mouse=a" > ~/.vimrc

Redimensionner les partitions

La machine est livrée avec des tailles de partitions par défaut, sans tenir compte de vos besoins effectifs ou de l’espace que vous avez demandé. Voici un exemple de dimensionnement par défaut :

df -h
Filesystem                Size  Used Avail Use% Mounted on
tmpfs                     392M  1,3M  390M   1% /run
/dev/mapper/vg1-root      5,4G  4,5G  680M  87% /
tmpfs                     2,0G     0  2,0G   0% /dev/shm
tmpfs                     5,0M     0  5,0M   0% /run/lock
/dev/sda1                 462M  353M   81M  82% /boot
/dev/mapper/vg1-opt       920M   44K  857M   1% /opt
/dev/mapper/vg1-home      920M  116K  857M   1% /home
/dev/mapper/vg1-tmp       920M   68K  857M   1% /tmp
/dev/mapper/vg1-var       3,6G  1,8G  1,7G  52% /var
/dev/mapper/vg1-varlog    1,8G  226M  1,5G  14% /var/log
/dev/mapper/vg1-varspool  2,7G  132K  2,6G   1% /var/spool
tmpfs                     392M  4,0K  392M   1% /run/user/1002

La machine est configurée avec des volumes logiques (LVM). Vous pouvez visualiser l’espace alloué dans le LVM avec les commandes suivantes :

# Affichage des volumes physiques :
pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda5
  VG Name               vg1
  PV Size               49,52 GiB / not usable 2,00 MiB
  Allocatable           yes 
  PE Size               4,00 MiB
  Total PE              12677
  Free PE               7913
  Allocated PE          4764
  PV UUID               XbeNvI-Y2l2-yKcn-PLIZ-bZ1s-yjet-0lcJXG

# Affichage des volumes logiques
vgdisplay
  --- Volume group ---
  VG Name               vg1
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  18
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                8
  Open LV               8
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <49,52 GiB
  PE Size               4,00 MiB
  Total PE              12677
  Alloc PE / Size       4764 / <18,61 GiB
  Free  PE / Size       7913 / 30,91 GiB
  VG UUID               OPO2jT-ScMI-H7Xe-coma-6pTc-jEvl-X1flCg

L’espace physique attribué à la machine (pvdisplay) est de 49,52 Gb, et 30,91 Gb sont actuellement disponibles (vgdisplay).

Nous allons ajouter 20 Go à la partition /var. Dans un premier temps, nous allons rechercher le nom du volume logique qui porte cette partition (commandes lvdisplay|grep /var et lvdisplay /dev/vg1/var) :

lvdisplay|grep /var
  LV Path                /dev/vg1/varlog
  LV Path                /dev/vg1/varspool
  LV Path                /dev/vg1/var

# Affichage du détail du volume logique :
lvdisplay /dev/vg1/var
  --- Logical volume ---
  LV Path                /dev/vg1/var
  LV Name                var
  VG Name                vg1
  LV UUID                etacnJ-jo1c-80xk-zqB4-tFfY-HLAV-1KPIgk
  LV Write Access        read/write
  LV Creation host, time template-pkg-ubuntu16, 2017-07-10 17:32:54 +0200
  LV Status              available
  # open                 1
  LV Size                3,72 GiB
  Current LE             953
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3

Puis nous allons augmenter la taille de la partition de 20Gb avec la commande lvresize :

lvresize --resizefs --size +20GB /dev/vg1/var
  Size of logical volume vg1/var changed from 3,72 GiB (953 extents) to 23,72 GiB (6073 extents).
  Logical volume vg1/var successfully resized.
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mapper/vg1-var is mounted on /var; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/mapper/vg1-var is now 6218752 (4k) blocks long.

Vous pouvez maintenant vérifier la taille effectivement allouée à la partition /var :

df -h|grep var
/dev/mapper/vg1-var        24G  1,8G   21G   8% /var
/dev/mapper/vg1-varlog    1,8G  226M  1,5G  14% /var/log
/dev/mapper/vg1-varspool  2,7G  132K  2,6G   1% /var/spool

Ajouter des paquets pour faciliter l’administration

# recherche dans les fichiers présents dans le serveur
apt install plocate
updatedb

Activer la déconnexion automatique ssh

Éditez le fichier /etc/ssh/sshd_config, et rajoutez ces deux lignes :

ClientAliveInterval 14400
ClientAliveCountMax 0

À noter que la connexion directe en root est possible, mais est réservée à la DSI, avec une connexion par clé ssh.

Redémarrez le serveur ssh :

systemctl restart ssh

Installer un serveur relais de mail

Il est intéressant de configurer le serveur pour qu’il puisse envoyer des messages en cas de problème. De plus, la plupart des services ont recours à des envois de mails, ne serait-ce que pour indiquer que les sauvegardes programmées se sont bien déroulées.

Deux outils sont en général utilisés pour envoyer des mails : msmtp et postfix. Si postfix est souvent préférable, sa configuration est un peu capricieuse pour “attaquer” les relais de messagerie Microsoft. La configuration avec msmtp est plus simple.

Demander un compte de messagerie applicative

La demande est à réaliser par l’intermédiaire d’un ticket Ariane : https://ariane.inrae.fr/block?id=ariane_sc_cat_item&sys_id=e44bb9e1db4f7a806b6ef08dae961987

Vous recevrez le login et le mot de passe associé.

Installer msmtp

La configuration a été fournie par Sylvain Descloux, SIIR de Bordeaux.

apt install msmtp msmtp-mta bsd-mailx
groupadd --system msmtp
cd /var/log
mkdir msmtp
chgrp msmtp msmtp
chmod 770 msmtp

Note : Lors de l’installation de msmtp, choisissez “Yes” pour activation de Apparmor

Paramétrez la rotation des logs en rajoutant le fichier /etc/logrotate.d/msmtp :

/var/log/msmtp/*.log
{
  su root msmtp
  rotate 4
  weekly
  missingok
  notifempty
  compress
  delaycompress
  sharedscripts
  postrotate
    invoke-rc.d rsyslog rotate > /dev/null
  endscript
}

Puis :

systemctl restart logrotate

Si vous avez activé Apparmor à l’installation de msmtp (c’est proposé au moment de l’installation du paquet), il faut également éditer le fichier /etc/apparmor.d/usr.bin.msmtp, commenter les lignes suivantes :

  owner @{HOME}/.msmtp*.log wk,
  /var/log/msmtp wk,

et ajouter les suivantes :

  owner /var/log/msmtp            wk,
  owner /var/log/msmtp/msmtp*.log wk,

Et pour l’envoi depuis des comptes applicatifs, rajouter également :

  owner /var/lib/postgresql/.msmtp* r,
  owner /var/www/.msmtp* r,

Puis redémarrez le service Apparmor :

systemctl restart apparmor

Paramétrer l’envoi de mails

Le paramétrage est à effectuer compte par compte, en rajoutant le fichier .msmtprc dans le dossier home de l’utilisateur (ici USERNAME dans le cadre de cette procédure) (/var/www pour les applis web, /var/lib/postgresql pour le serveur de bases de données Postgresql).

Voici le modèle du fichier :

account default
host smtp.inrae.fr
port 587
from <mail>@inrae.fr
auto_from off
auth on
user <mail>@inrae.fr
password <mot de passe>
logfile /var/log/msmtp/msmtp-<nom de lutilisateur>.log
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

user et password sont ceux qui correspondent à la boite aux lettres applicative créée via la demande Ariane.

Si l’envoi de mails ne fonctionne pas, désactivez la ligne tls_starttls on (en principe, pas nécessaire).

Une fois le fichier créé :

chmod 600 .msmtprc
usermod -a -G msmtp <nom de l'utilisateur>

Pour tester le bon fonctionnement de msmtp, après avoir configuré un fichier .msmtprc pour root, lancez la commande :

mail -s "test de mail" votreadresse@inrae.fr

Le message
<ctrl D>

Créez ensuite la redirection vers les comptes d’administration. Pour cela, faites créer d’abord un groupe de distribution pour que les messages soient adressés à l’ensemble des administrateurs à partir d’un ticket ariane : https://ariane.inrae.fr/block?id=ariane_sc_cat_item&sys_id=0d2e3f39dbc3b200ed07751bbf961928

La documentation concernant le paramétrage des groupes de distribution est disponible ici : https://ariane.inrae.fr/sys_attachment.do?sys_id=a9622fc58799bd10ac00c9dc8bbb35aa&view=true.

Attention : le propriétaire d’un groupe ne reçoit pas les messages envoyés, sauf si vous l’avez rajouté dans les destinataires.

Pour renvoyer les messages vers le groupe de distribution, il faut rajouter, à la fin du fichier .msmtprc, la ligne suivante :

aliases /etc/aliases

Voici l’exemple de ce fichier /etc/aliases à éditer :

postmaster: root
root: mon-groupe-de-distribution@inrae.fr

Et testez l’envoi d’un message :

echo "Test d'envoi d'un message depuis le serveur SERVERNAME"| mail -s "Test d'envoi - SERVERNAME" root

En cas de non réception, vous pouvez consulter les logs dans le dossier /var/log/msmtp.

Configuration réseau

Configuration DNS

Pour accéder à votre serveur, faites une demande de configuration DNS : https://ariane.inrae.fr/block?id=ariane_sc_cat_item&sys_id=3b374bf637d002006da398a543990e9c

Générer un certificat

Vous aurez probablement besoin d’un certificat, notamment pour les applications web (cas de eLabFTW). Si c’est le cas, pour demander le certificat, suivez les instructions décrites ici : https://ariane.inrae.fr/block?id=ariane_article&sysparm_article=KB0010114

et déposez la demande de certificat ici : https://ariane.inrae.fr/block?id=ariane_sc_cat_item&sys_id=f4fedf7a37d002006da398a543990e8a

Sécuriser le serveur web

Si vous utilisez la VM comme serveur web, consultez ces documents pour affiner la configuration :

Supervision de la machine

En l’absence d’un outil de supervision de type Nagios, vous pouvez décider d’envoyer des informations hebdomadaires, qui vous renseigneront sur l’occupation disque, l’état des processeurs, la mémoire.

Note : Si machine virtuelle DEBIAN, s’assurer que le paquet sysstat est bien installé (apt install sysstat), ainsi que le paquet aptitude (apt install aptitude).

Créez le script /opt/bilan-sante.sh :

#/bin/bash
servername="SERVERNAME.inrae.fr"
dest="<groupe de distribution>@inrae.fr"
filename="/opt/sante.txt"
backupfile="/opt/backup/elabftw-backup.log"
echo "serveur `hostname` `hostname -I` " >$filename
echo "Bilan de santé au `date`" >> $filename
echo "Utilisation de la mémoire (en Mo)">>$filename
free -m>>$filename
echo "Utilisation des processeurs" >> $filename
mpstat >> $filename
echo "Utilisation des disques ">>$filename
df -h >>$filename
echo "État de la dernière sauvegarde effectuée" >>$filename
cat $backupfile >> $filename
cat $filename | mail -s "Serveur $servername - bilan de santé" $dest

Avertissement : il y aura une erreur sur la génération du fichier de log /opt/backup/elabftw-backup.log car dépendante de l’installation de eLabFTW sur la machine virtuelle

Rendez-le exécutable puis rajoutez une entrée dans la crontab en exécutant les commandes :

chmod +x /opt/bilan-sante.sh
(crontab -l ;echo "0 21 * * 7 /opt/bilan-sante.sh")|crontab -

Le bilan vous sera adressé chaque dimanche à 21 heures.

Correction des scripts de mise à jour du système

Les VM sont livrées avec deux scripts qui gèrent les mises à jour de sécurité :

Note : Si machine virtuelle DEBIAN, enlever root ci-dessous dans la crontab

chmod +x /etc/cron.scripts/apt-security-updates
chmod +x /etc/cron.scripts/apt-autoremove

crontab -l
# Script de mise a jour et de nettoyage
#
00 4 * * 7   root    /etc/cron.scripts/apt-security-updates
00 5 * * 7   root    /etc/cron.scripts/apt-autoremove

Ces scripts sont destinés à mettre à niveau les paquets, ce qui est déjà prévu avec le paquet unattended-upgrades : il vaut mieux les désactiver.

Par contre, vous devrez adapter la configuration par défaut, en vous assurant d’avoir les lignes ci-dessous activées :

vim /etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::Allowed-Origins {
	"${distro_id}:${distro_codename}";
	"${distro_id}:${distro_codename}-security";
	"${distro_id}ESMApps:${distro_codename}-apps-security";
	"${distro_id}ESM:${distro_codename}-infra-security";
};
Unattended-Upgrade::Package-Blacklist {
};
Unattended-Upgrade::DevRelease "auto";
Unattended-Upgrade::Mail "<mail d'administration>@inrae.fr";
Unattended-Upgrade::MailReport "only-on-error";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "02:00";

Note : Si machine virtuelle DEBIAN, remplacer `lsb_release -cs` par le nom de votre version de debian (Ex : bookworm)

Une fois la modification effectuée, relancez le service :

systemctl restart unattended-upgrades

Renommer la machine (hostname)

La machine est nommée automatiquement avec un numéro d’ordre, et il est difficile de savoir où on est connecté, quand on administre plusieurs machines à la fois.

Voici la méthode à utiliser pour renommer la machine. Nous allons ajouter un radical et conserver le nom initial, pour pouvoir dialoguer au besoin avec la DSI en cas de souci.

NEWNAME=<nouveau nom>-`hostname`
hostnamectl set-hostname $NEWNAME
hostname

Éditez ensuite le fichier /etc/hosts, et modifiez la seconde ligne ainsi :

127.0.1.1	<nouveau nom>-vm-pkglinux-290

Lorsque vous vous reconnecterez, le nom de la machine aura été changé dans le prompt.

Gestion des incidents

En cas de souci de fonctionnement ou pour toute demande, vous pouvez ouvrir un ticket ici : https://ariane.inrae.fr/block?id=ariane_sc_cat_item&sys_id=906528a10a0a0bf000a85bc20dfb6541&sys_parm_service=49dcb31237ec4200275c261953990e6e

Dé-commissionnement d’une machine virtuelle

Si une machine n’est plus utilisée, demander sa suppression pour libérer les ressources attribuées et réduire notre impact environnemental. Pour cela, créez un ticket incident Ariane, fournissez le nom de la VM et son adresse IP.

Ariane - Quelques liens utiles

Demande de certificat : https://ariane.inrae.fr/block?id=ariane_sc_cat_item&sys_id=f4fedf7a37d002006da398a543990e8a

Demande d’enregistrement DNS : https://ariane.inrae.fr/block?id=ariane_sc_cat_item&sys_id=3b374bf637d002006da398a543990e9c