Aller au contenu

Conteneurs LXC : privilégiés, non privilégiés, bind mounts

Day 1 · DéployerNiveau 2 · OpérerCoursRédigé · à valider en lab

Un conteneur LXC partage le noyau de l'hôte : il démarre en une seconde et consomme peu, mais il isole moins qu'une VM. En production, utilisez uniquement des conteneurs non privilégiés (le défaut), et réservez les bind mounts aux cas maîtrisés, car leur contenu n'est pas sauvegardé.

Notions clés

Privilégié ou non privilégié

Non privilégié (défaut) Privilégié
root du conteneur Mappé vers un UID non privilégié de l'hôte (100000) root du conteneur = root de l'hôte
Sécurité Une évasion donne un utilisateur sans droits sur l'hôte Considéré comme non sûr par le projet LXC ; une évasion n'est pas traitée comme une CVE
Accès aux fichiers de l'hôte Droits à ajuster (décalage d'UID) Direct
Usage MSP Systématique Interdit sauf dérogation écrite

Le décalage d'UID : l'utilisateur root (UID 0) du conteneur apparaît sur l'hôte comme UID 100000, l'UID 1000 comme 101000. Un fichier de l'hôte appartenant à 1000 sera vu nobody dans le conteneur.

Points de montage

Type Syntaxe Sauvegardé par vzdump Snapshot / réplication
Volume géré mp0: local-zfs:subvol-102-disk-1,mp=/data,size=50G Oui si backup=1 Oui
Bind mount mp0: /mnt/bindmounts/partage,mp=/data Non Non
Périphérique mp0: /dev/sdb1,mp=/data Non Non

Options utiles : ro=1 (lecture seule), backup=1 (volumes uniquement), shared=1 (déclare le montage présent sur tous les nœuds, sans le partager), replicate=0 (exclure de la réplication ZFS).

pct set 102 -mp0 /mnt/bindmounts/partage,mp=/data
pct set 102 -mp1 local-zfs:50,mp=/srv,backup=1

Features

Feature Rôle Avis MSP
nesting=1 Expose procfs/sysfs ; nécessaire à systemd récent Activé par défaut à la création via la GUI pour les conteneurs non privilégiés
keyctl=1 Appel système keyctl, requis par Docker Préférer une VM pour Docker
fuse=1 Systèmes de fichiers FUSE Déconseillé (risque de blocage au gel)
mount=nfs;cifs Montages réseau dans le conteneur Déconseillé : un NFS bloqué peut figer des E/S de l'hôte

LXC ou VM ?

flowchart TD
    A[Nouveau service] --> B{Noyau ou OS différent<br/>de Linux hôte ?}
    B -->|Oui : Windows, BSD, module noyau| VM[VM KVM]
    B -->|Non| C{Docker / Kubernetes,<br/>exposition Internet,<br/>multi-tenant ?}
    C -->|Oui| VM
    C -->|Non| D{Migration à chaud requise ?}
    D -->|Oui| VM
    D -->|Non| CT[Conteneur LXC non privilégié]

Les conteneurs ne migrent pas à chaud : pct migrate 102 pve02 --restart arrête le conteneur, le déplace et le redémarre. Les images OCI (PVE 9.1 et suivants, aperçu technologique) se convertissent en conteneur LXC, mais ne remplacent pas un hôte Docker.

Commandes courantes

Commande Effet
pct enter 102 Shell root dans le conteneur
pct config 102 Afficher la configuration
pct set 102 -memory 2048 Modifier la RAM (à chaud)
pct move-volume 102 mp0 ceph-vm Déplacer un volume
pct migrate 102 pve02 --restart Migration avec redémarrage

Recommandations MSP

  • Conteneurs non privilégiés uniquement ; cochez Unprivileged container (coché par défaut) et ne le décochez pas.
  • Données dans des volumes gérés (mp sur local-zfs ou ceph-vm) plutôt qu'en bind mount : elles sont sauvegardées par PBS et répliquées.
  • Bind mount indispensable : répertoire dédié sous /mnt/bindmounts/, jamais /, /etc ou /var, sans lien symbolique dans le chemin, et sauvegarde du répertoire source prévue à part (proxmox-backup-client).
  • Docker : dans une VM, pas dans un LXC.

Pièges vus en support

  • Restauration PBS d'un conteneur : les données du bind mount n'y sont pas, elles n'ont jamais été sauvegardées.
  • Conteneur converti en privilégié « pour régler un problème de droits » sur un bind mount : la vraie solution est un chown vers 100000+UID ou un mapping lxc.idmap.
  • Montage NFS dans le conteneur : le serveur NFS tombe, le conteneur et des processus de l'hôte restent bloqués en état D.
  • Bind mount sans shared=1 sur un cluster : la migration est refusée ; avec shared=1 mais répertoire absent sur la cible : le conteneur ne démarre pas.
  • Ancien conteneur (systemd < 231) : plus supporté sous PVE 9 (cgroup v1 supprimé), il ne démarre plus.

Testez-vous

  1. Le contenu d'un bind mount est-il inclus dans une sauvegarde vzdump vers pbs-local ?

    Réponse

    Non. Seuls les volumes gérés par Proxmox avec backup=1 sont sauvegardés. Le répertoire source doit être sauvegardé séparément.

  2. Un fichier appartient à l'UID 1000 sur l'hôte. Quel UID doit-il avoir pour appartenir à l'utilisateur 1000 d'un conteneur non privilégié standard ?

    Réponse

    101000 (100000 + 1000).

  3. Pourquoi déconseiller Docker dans un LXC ?

    Réponse

    Il demande keyctl et nesting, partage le noyau de l'hôte, et casse régulièrement lors des mises à jour du noyau ou de LXC. Une VM offre une isolation et un support plus fiables.

  4. Comment déplacer un conteneur en marche vers pve02 ?

    Réponse

    pct migrate 102 pve02 --restart : le conteneur est arrêté, migré puis redémarré. La migration à chaud n'existe pas pour LXC.

Pour aller plus loin