Code : MO-PLT-021 | Version : 1.1 | Date : 26 juin 2026 | Auteur : C. Legrand
Ce mode opératoire décrit la mise en conformité des comptes d'administration ProxMox VE de l'infrastructure BTS SIO avec les recommandations ANSSI PA-022 v3.0 sur l'administration sécurisée des systèmes d'information. Il couvre trois chantiers complémentaires :
clegrand@pve, manu@pve), en remplacement de l'usage partagé de root@pam ;/pool/icad (T16) de Administrator à PVEAdmin et harmonisation sur le groupe (modèle aligné sur les pools ksav et publicom) pour les trois comptes étudiants rattachés ;pvesh, compatible avec toute application conforme à la RFC 6238 (Bitwarden, Aegis, FreeOTP, Google Authenticator, Microsoft Authenticator, Proton Authenticator).Ces actions répondent au constat F-VIRT-019 de l'audit authentifié du 15 mars 2026 (comptes étudiants avec droits excessifs sur le pool icad) ainsi qu'à la recommandation R-12 (« déployer une authentification forte sur les interfaces d'administration »).
| Application | ProxMox VE 8.4.14 (kernel 6.8.12-17-pve) |
| Hébergement | Serveur physique (10.0.112.200), 2x Xeon E5-2620 v2, 32 Go RAM |
| Accès | https://10.0.112.200:8006 ou SSH root@10.0.112.200 |
| Comptes concernés | 2 nouveaux (clegrand@pve, manu@pve) + 3 existants (dbalmigere@pve, lbonet@pve, mboyer@pve) |
| Durée estimée | 20 à 30 minutes (15 min pour les ACL, 5 min par TOTP utilisateur) |
| Référentiel | ANSSI PA-022 v3, ANSSI « Les Essentiels » Virtualisation (2024), Proxmox VE User Management |
root sur le noeud ProxMox : ssh root@10.0.112.200 (clé ed25519 déployée)root@pam sauvegardés dans Vaultwarden (collection Virtualisation)clegrand@pve et manu@pve (générateur interne Vaultwarden)qrencode installé localement pour générer les QR codes TOTP en mode texte (apt install qrencode si absent)
Contexte historique du pool icad : le groupe et le pool icad hébergeaient initialement un projet étudiant (CT 100 « icad », aujourd'hui arrêté). Trois comptes étudiants y gardent une habilitation
Administratorposée individuellement sur le chemin/pool/icad, ce qui dévie du modèle appliqué aux pools ksav et publicom (ACL au niveau du groupe avec le rôlePVEAdmin). L'harmonisation retire sept privilèges sensibles (dontPermissions.ModifyetSys.Modify) et unifie la gouvernance des trois périmètres pédagogiques.
Les comptes clegrand@pve et manu@pve sont créés dans le realm natif pve (authentification interne ProxMox). Le compte partagé root@pam est conserve pour les opérations de bris de glace uniquement.
Etape 1 — Se connecter à l'hôte ProxMox
ssh root@10.0.112.200
La clé ed25519 de l'administrateur principal est déjà déployée dans /root/.ssh/authorized_keys depuis le 26/03/2026.
Etape 2 — Créer les deux comptes nominatifs et attribuer le rôle PVEAdmin
# Creation des comptes nominatifs (realm pve)
pveum user add clegrand@pve --comment "Cedric LEGRAND - admin nominatif"
pveum user add manu@pve --comment "Emmanuel MARTINEZ - co-administrateur"
# Definition des mots de passe (interactif)
pveum passwd clegrand@pve
pveum passwd manu@pve
# Attribution du role PVEAdmin sur la racine (propagation heritee)
pveum acl modify / --users clegrand@pve --roles PVEAdmin --propagate 1
pveum acl modify / --users manu@pve --roles PVEAdmin --propagate 1

Etape 3 — Vérifier la liste des comptes actifs
pveum user list

Cloisonnement PVEAdmin vs Administrator : le rôle
PVEAdmincouvre tout l'exploitation courante (gestion des VM/CT, snapshots, sauvegardes, migration, console) mais exclut explicitement quatre privilèges « système » :Sys.Modify,Permissions.Modify,Realm.AllocateetMapping.Modify. Ces droits restent cantonnés au compteroot@pam, conformément au principe ANSSI PA-022 de séparation par domaine technique.
Avant l'intervention, les trois étudiants du groupe icad possèdent chacun une ACL Administrator posée individuellement sur /pool/icad, contrairement aux pools ksav (/vms/101) et publicom (/vms/102) qui utilisent une ACL posée au niveau du groupe avec le rôle PVEAdmin.
Etape 4 — État initial de la matrice d'habilitations
pveum acl list

Etape 5 — Privilèges effectifs d'un étudiant du groupe icad
pveum user permissions dbalmigere@pve --path /pool/icad

Ordre des commandes critique : toujours ajouter l'ACL du groupe avant de retirer les ACL utilisateurs individuelles. Un retrait d'ACL prématuré laisserait temporairement les étudiants sans aucun accès au pool, ce qui peut interrompre un TP en cours.
Etape 6 — Attribuer le rôle PVEAdmin au groupe icad sur le pool
# 1. Ajout de l'ACL au niveau du groupe (nouvelle habilitation)
pveum acl modify /pool/icad --groups icad --roles PVEAdmin --propagate 1
Etape 7 — Retirer les ACL utilisateurs Administrator devenues redondantes
# 2-4. Suppression des trois ACL utilisateurs Administrator
pveum acl delete /pool/icad --users dbalmigere@pve --roles Administrator
pveum acl delete /pool/icad --users lbonet@pve --roles Administrator
pveum acl delete /pool/icad --users mboyer@pve --roles Administrator

Etape 8 — Vérifier l'état final de la matrice d'habilitations
pveum acl list

Etape 9 — Constater la réduction des privilèges effectifs
pveum user permissions dbalmigere@pve --path /pool/icad

L'activation du TOTP est une opération individuelle que chaque administrateur effectue pour son propre compte. La procédure décrite ci-dessous est agnostique à l'application cliente choisie (toute application conforme à la RFC 6238 est compatible).
Etape 10 — Générer un secret TOTP aléatoire et l'URI otpauth
# Secret de 30 octets aleatoires encodes en base32 (format RFC 4648)
SECRET=$(openssl rand -base32 30 | tr -d '=' | tr '+/' 'AB')
# Construction de l'URI otpauth selon la RFC 6238 (SHA1, 6 digits, periode 30 s)
URI="otpauth://totp/PVE-BTS:clegrand@pve?secret=${SECRET}\
&issuer=PVE-BTS&algorithm=SHA1&digits=6&period=30"

Etape 11 — Afficher le QR code en mode terminal
qrencode -t UTF8 "$URI"

Archiver le secret dans le gestionnaire de mots de passe : il est recommandé de stocker également le secret TOTP dans Vaultwarden (champ TOTP natif de l'élément
clegrand@pve) pour permettre la reconstitution du second facteur en cas de perte du téléphone, sans devoir re-enrôler. Cette duplication reste conforme à l'ANSSI tant que le coffre est protégé par une phrase-passe forte et un 2FA distinct.
Etape 12 — Enregistrer le second facteur côté ProxMox
L'administrateur doit fournir un code OTP valide (lu dans l'application) pour prouver qu'il a bien enrôlé le secret côté client :
pvesh create /access/tfa/clegrand@pve \
--type totp \
--totp "$URI" \
--value <CODE_OTP_6_CHIFFRES> \
--description "TOTP principal clegrand - 16/04/2026" \
--password "$MDP_CLEGRAND"

Etape 13 — Vérifier l'enrôlement
pveum user tfa list clegrand@pve

Après enrôlement, toute connexion (interface web ou API) de clegrand@pve déclenche un échange en deux étapes : l'authentification primaire renvoie un ticket partiel marqué NeedTFA=1, qui ne donne aucun accès aux ressources tant que le second facteur n'est pas valide. Il faut alors réinjecter ce ticket partiel accompagné du code TOTP courant pour obtenir un ticket d'accès complet.

Interface web équivalente : sur
https://10.0.112.200:8006, le même échange est réalisé de façon transparente : un premier écran demande identifiant et mot de passe, puis un second écran « Second factor required » demande le code à 6 chiffres généré par l'application. L'option « Remember me » ne concerne que le premier facteur — le code TOTP est demandé à chaque nouvelle session.
| Contrôle | Commande / attendu |
|---|---|
| Comptes nominatifs présents | pveum user list \| grep -E 'clegrand\|manu' — 2 lignes, enable=1 |
| Rôle PVEAdmin attribué | pveum acl list \| grep '/ .*PVEAdmin' — 2 lignes |
| Pool icad harmonisé | pveum acl list \| grep /pool/icad — 1 seule ligne group icad PVEAdmin |
| Aucune ACL utilisateur résiduelle | pveum acl list \| grep -c Administrator — 0 |
| Privilèges étudiant réduits | pveum user permissions dbalmigere@pve — absence de Permissions.Modify et Sys.Modify |
| TOTP enrôlé pour un administrateur | pveum user tfa list clegrand@pve — 1 entrée de type totp |
| Connexion interactive OK | Login web + code OTP accepté en moins de 30 s |
Chaque chantier est réversible indépendamment. En cas d'anomalie constatée pendant les vérifications, appliquer uniquement le rollback du bloc concerné.
Accès console nécessaire en cas de perte TOTP : si le TOTP est activé sur le compte de bris de glace
root@pamet que le téléphone associé est perdu, la seule remise en service passe par un accès console physique ou IPMI au noeud. Éditer/etc/pve/priv/tfa.cfget retirer la section correspondante puis redémarrerpveproxy. Garder systématiquement un jeu de codes de récupération (--type recovery) hors ligne.
Rollback T14 — retrait des comptes nominatifs
pveum user delete clegrand@pve
pveum user delete manu@pve
Rollback T16 — restauration des ACL utilisateurs Administrator
# Restaurer les ACL utilisateurs Administrator
pveum acl modify /pool/icad --users dbalmigere@pve --roles Administrator --propagate 1
pveum acl modify /pool/icad --users lbonet@pve --roles Administrator --propagate 1
pveum acl modify /pool/icad --users mboyer@pve --roles Administrator --propagate 1
# Retirer l'ACL groupe PVEAdmin
pveum acl delete /pool/icad --groups icad --roles PVEAdmin
Rollback TOTP — révoquer un facteur enrôlé
# Lister les facteurs pour recuperer l'identifiant
pveum user tfa list clegrand@pve
# Supprimer un facteur precis
pveum user tfa delete clegrand@pve --id <IDENTIFIANT_TFA>