Dawan Proxmox VE — TSSR

Chapitre 1 — Introduction, Installation et LXC

7. Comptes et droits : utilisateurs, realms et pools

Un Proxmox fraîchement installé n'a qu'un seul compte utile, root@pam, qui sert à tout : l'interface web, l'API et le shell. C'est pratique à l'installation, et c'est une faille dès qu'on travaille à plusieurs.

Cette section pose le modèle des comptes et des droits : utilisateurs, rôles, realms. Puis l'outil qui range les ressources et permet de déléguer sans tout ouvrir : les pools. La section suivante protège les connexions elles-mêmes.

7.1 Utilisateurs, rôles et chemins

Un contrôle d'accès répond à trois questions : qui demande, sur quoi, pour faire quoi. Proxmox y répond par un modèle à rôles (RBAC : Role-Based Access Control). Ce modèle associe un utilisateur (ou un groupe), un rôle qui regroupe des privilèges, et un chemin sur lequel le droit s'applique.

Terme Ce que c'est Dans le laboratoire
Realm L'endroit où le mot de passe est contrôlé : pam (comptes Linux du nœud) ou pve (comptes propres à Proxmox), détaillé au §7.2 pam pour root, pve pour formation
Utilisateur Un compte, toujours écrit nom@realm formation@pve
Groupe Un ensemble d'utilisateurs, à qui l'on donne les droits une seule fois stagiaires
Rôle Une liste de privilèges (VM.PowerMgmt, VM.Console…) PVEVMAdmin
Chemin L'objet protégé : / (tout), /nodes/<nœud>, /vms/<id>, /storage/<id>, /pool/<nom> /
Propagation Le droit posé sur un chemin descend sur tout ce qui est dessous Le droit sur / vaut pour toutes les VM et tous les conteneurs

Les rôles fournis couvrent les besoins courants : Administrator (tout), PVEAdmin (VM et conteneurs, sans la configuration système du nœud), PVEVMAdmin (gestion complète des VM et conteneurs). Viennent ensuite PVEVMUser (démarrer, arrêter, console), PVEAuditor (lecture seule) et PVEDatastoreAdmin (stockages). pveum role list affiche la vingtaine de rôles et leurs privilèges.

Une permission se lit donc : « l'utilisateur formation@pve a le rôle PVEVMAdmin sur le chemin / », et, par propagation, sur tout ce qu'il contient.

RBAC Proxmox : modèle à trois dimensions — qui (utilisateur/groupe), sur quoi (chemin de ressource hiérarchique), avec quels droits (rôle)

Les trois dimensions d'un droit : qui, sur quoi (du datacenter entier / à une seule VM /vms/<vmid>), et avec quel rôle. Un droit posé haut dans l'arborescence descend sur tout ce qui est en dessous.

Dans l'interface : Datacenter → Permissions → Users crée les utilisateurs, Groups les groupes, Roles liste les rôles, et Permissions → Add crée l'association utilisateur, rôle, chemin.

Datacenter → Permissions → Users sur un nœud neuf : le seul compte root@pam

Datacenter → Permissions → Users sur un nœud neuf : un seul compte, root@pam, du realm pam, actif et sans date d'expiration. Le bouton Permissions affiche tout ce qu'un compte peut faire.

Datacenter → Permissions → Roles : les rôles intégrés et leurs privilèges

Datacenter → Permissions → Roles : les rôles fournis (Built-In à Yes), chacun avec ses privilèges. Administrator les a tous ; PVEAuditor n'a que des privilèges .Audit.

En ligne de commande, pveum fait les mêmes opérations :

Dans le Shell du nœud (interface web → votre nœud → Shell) :

# Créer un utilisateur Proxmox interne (realm pve)
pveum user add formation@pve --password 'Dawan2025!' --comment "Compte de formation"

# Créer un groupe, puis y ajouter l'utilisateur
pveum group add stagiaires --comment "Groupe des stagiaires"
pveum user modify formation@pve --groups stagiaires   # rattacher au groupe

# Donner le rôle PVEVMAdmin sur tout le datacenter (chemin /)
pveum acl modify / --users formation@pve --roles PVEVMAdmin

# Vérifier les utilisateurs, puis les droits posés
pveum user list   # les comptes
pveum acl list    # les droits posés

Résultat attendu : pveum user list montre formation@pve, avec stagiaires dans la colonne groups, pve dans realm-type et 1 dans enable (compte actif). pveum acl list montre le triplet /, formation@pve, PVEVMAdmin, avec propagate à 1.

Tout est écrit dans /etc/pve/user.cfg. Pour retirer un droit : pveum acl delete avec les mêmes options.

Bonne pratique de délégation. Attribuez les droits à des groupes, pas à des utilisateurs un par un : l'ajout d'un membre suffit ensuite à lui donner tous les accès prévus. Deux mécanismes complètent ce modèle, au §8 : la double authentification et les jetons d'API.

7.2 Les domaines d'authentification (realms)

Un utilisateur Proxmox n'est que la contrepartie d'une identité vérifiée par un domaine d'authentification (realm). Deux fichiers structurent l'ensemble, tous deux répliqués par pmxcfs. /etc/pve/user.cfg stocke les attributs des utilisateurs : prénom, nom, courriel, groupes, expiration, activé/désactivé, clés 2FA — jamais les mots de passe.

/etc/pve/domains.cfg déclare les realms. Les mots de passe du realm Proxmox, eux, sont hachés en SHA-256 (Secure Hash Algorithm, empreinte de 256 bits) dans /etc/pve/priv/shadow.cfg.

Proxmox VE prend en charge cinq types de realms :

Realm Où sont vérifiées les identités Usage typique
Linux PAM Comptes du système Linux de chaque nœud (adduser) Administrateurs ayant déjà un compte shell sur le serveur. Présent par défaut, non supprimable.
Proxmox VE Authentication Server Base interne à Proxmox (shadow.cfg, SHA-256) Le plus simple : utilisateurs créés et gérés entièrement depuis Proxmox, sans compte Linux. À préférer pour déléguer.
LDAP Annuaire LDAP externe (ex. OpenLDAP) Parc d'utilisateurs déjà centralisé en LDAP.
Active Directory Annuaire AD (LDAP sous le capot) Environnements Windows/AD.
OpenID Connect Fournisseur d'identité externe (OAuth 2.0) Authentification déléguée / SSO (Single Sign-On, connexion unique).

La distinction entre @pam et @pve mérite d'être soulignée. Un utilisateur @pam existe dans le système Linux — sa création dans Proxmox ne fait que l'autoriser à se connecter à l'interface.

Un utilisateur @pve n'existe que dans Proxmox — il n'a pas de compte Linux sur le serveur. Pour la plupart des opérations de formation ou de délégation, les utilisateurs @pve sont préférables car ils sont totalement sous le contrôle de Proxmox.

Erreur fréquente — connexion impossible avec un utilisateur PAM : vous créez un utilisateur monuser@pam dans Proxmox. Mais le compte Linux correspondant n'existe pas sur le serveur Debian, ou son mot de passe ne correspond pas.

La tentative de connexion retourne alors une erreur d'authentification PAM. Proxmox ne crée pas le compte Linux — il vérifie uniquement l'authentification PAM pour un compte qui doit déjà exister.

Datacenter → Permissions → Users : root et toto en realm pam ; la fenêtre Error affiche change password failed: user 'toto' does not exist (500)

L'écran Datacenter → Permissions → Users, au moment précis où l'erreur tombe : change password failed: user 'toto' does not exist (500). Sur le lab (Proxmox VE 9.2.21), après avoir déclaré toto@pam sans créer de compte Linux toto.

Le message paraît absurde — l'utilisateur toto est pourtant visible dans la liste, juste au-dessus. C'est tout l'intérêt de cette capture.

  • Lisez la colonne Realm. toto est en pam, comme root.

    Or un compte @pam n'existe pas dans Proxmox : Proxmox ne fait que déléguer l'authentification au système Linux du serveur. La ligne dans la grille dit seulement « ce compte Linux a le droit de se connecter ici » — elle ne crée aucun utilisateur.

  • Le bouton Password d'un compte @pam change le mot de passe Linux. Encore faut-il que le compte Linux existe.

    Sur le lab : pour un compte Linux créé avec useradd, puis déclaré en @pam, le changement réussit et /etc/shadow est mis à jour. Pour toto, sans compte Linux, il échoue avec le message de la capture.

  • Un compte @pve, lui, existe réellement dans la base de Proxmox. Son mot de passe est stocké par Proxmox, sans aucun compte Linux derrière.

La règle à retenir : @pam = compte Linux du serveur, créé avec useradd, mot de passe géré par Linux. @pve = compte interne à Proxmox, créé et géré entièrement depuis l'interface.

Le premier sert aux administrateurs système qui ont déjà un compte sur la machine ; le second, à tous les autres. C'est le second qu'il faut préférer pour déléguer des droits sans ouvrir de session Linux.

Administrer la machine, ou administrer Proxmox ?

La question « dans quel realm créer mon compte ? » se tranche selon ce que la personne doit pouvoir faire. Le rôle Administrator donne les mêmes droits dans l'interface quel que soit le realm ; ce qui change, c'est l'accès au système Linux du nœud.

Administrateur de la machine (@pam) Administrateur Proxmox (@pve)
Où vit le compte Dans /etc/passwd du nœud (adduser) et dans Proxmox (pveum user add …@pam) Seulement dans Proxmox (/etc/pve/user.cfg, mot de passe dans /etc/pve/priv/shadow.cfg)
Interface web et API Oui, avec le mot de passe Linux Oui, avec le mot de passe Proxmox
Commandes système (apt, réseau, /etc) Oui, dans le Shell du nœud Non
En cluster Le compte Linux est local : à créer sur chaque nœud Le compte est répliqué par pmxcfs sur tous les nœuds
Pour qui L'équipe qui exploite les serveurs Les personnes qui gèrent des VM, des sauvegardes, un projet

La règle qui en découle : un compte @pam nominatif pour chaque administrateur système, qui doit d'abord exister dans le système (adduser) avant d'être déclaré dans Proxmox. Pour tous les autres, des comptes @pve, avec des droits limités à leur périmètre (§7.3).

Ne jamais désactiver ni supprimer le compte root@pam. Il est indispensable au fonctionnement du cluster. C'est avec son mot de passe qu'un nouveau nœud s'authentifie auprès du nœud existant quand il rejoint un cluster.

C'est ensuite en root, par clé SSH, que les nœuds se parlent pour migrer une VM ou synchroniser les certificats. root@pam ne peut d'ailleurs pas être supprimé ; ses attributs (courriel, 2FA) restent modifiables, mais il conserve toujours tous les droits.

7.3 Les pools

Un pool est un regroupement nommé de VM, de conteneurs et de stockages. Une permission posée sur /pool/<nom> vaut pour tout ce que le pool contient, y compris ce qu'on y ajoutera par la suite. On délègue ainsi à une équipe « ses » machines sans les énumérer une par une.

Dans l'interface : Datacenter → Permissions → Pools pour créer le pool, puis son onglet Members pour y ranger des machines. En ligne de commande : pveum pool add <nom>, puis une permission sur /pool/<nom>.

▶ À pratiquer maintenant — Atelier 4

Créer un utilisateur et lui attribuer un rôle sur un périmètre précis. Vérifier ce qu'il voit vraiment en se connectant avec son compte. L'atelier n'utilise que des comptes @pve, internes à Proxmox : un compte @pam, lui, doit d'abord exister dans le système (adduser).

À retenir : un droit = un utilisateur (ou groupe) + un rôle (liste de privilèges) + un chemin (/, /vms/100, /pool/<nom>). L'utilisateur appartient à un realm (pam = comptes Linux, pve = comptes Proxmox).