Conteneurs LXC : privilégiés, non privilégiés, bind mounts¶
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).
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 (
mpsurlocal-zfsouceph-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/,/etcou/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
chownvers 100000+UID ou un mappinglxc.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=1sur un cluster : la migration est refusée ; avecshared=1mais 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¶
-
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=1sont sauvegardés. Le répertoire source doit être sauvegardé séparément. -
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).
-
Pourquoi déconseiller Docker dans un LXC ?
Réponse
Il demande
keyctletnesting, 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. -
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.