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 l’utilisateur>.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 :
- https://wiki.inra.fr/wiki/inrassi/Technique/Durcissement+de+configuration+Apache
- https://wiki.inra.fr/wiki/inrassi/Technique/Durcissement+de+configuration+PHP
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