| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| lxc [Le 03/04/2019, 10:15] – test enregistrement doc Sp4rKy | lxc [Le 11/09/2022, 12:09] (Version actuelle) – Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) moths-art |
|---|
| ---- | ---- |
| {{ :lxd:containers.png?100nolink|}} | {{ :lxd:containers.png?100nolink|}} |
| |
| |
| ====== LXC ====== | ====== LXC ====== |
| |
| **LXC** est l'acronyme de l'anglicisme **LinuX Containers**, est un système de [[virtualisation|virtualisation]], utilisant l'isolation comme méthode de cloisonnement au niveau du système d'exploitation. Il est utilisé pour faire fonctionner des environnements Linux isolés les uns des autres dans des conteneurs partageant le même noyau. Le conteneur apporte une virtualisation de l'environnement d'exécution (processeur, mémoire vive, réseau, système de fichier…) et non pas de la machine. Pour cette raison, on parle de « conteneur » et non de « machine virtuelle ». | **LXC** est l'acronyme de l'anglicisme **LinuX Containers**, est un système de [[virtualisation|virtualisation]], utilisant l'isolation comme méthode de cloisonnement au niveau du système d'exploitation. Il est utilisé pour faire fonctionner des environnements Linux isolés les uns des autres dans des conteneurs partageant le même noyau. Le conteneur apporte une virtualisation de l'environnement d'exécution (processeur, mémoire vive, réseau, système de fichier…) et non pas de la machine. Pour cette raison, on parle de « conteneur » et non de « machine virtuelle ». |
| Veillez à ne pas confondre **LXC** et [[:LXD|LXD]], en effet, [[:LXD|LXD]] est une surcouche logicielle à **LXC**. [[:LXD|LXD]] est développé par Canonical pour simplifier la manipulation de vos conteneurs. | Veillez à ne pas confondre **LXC** et [[:LXD|LXD]], en effet, [[:LXD|LXD]] est une surcouche logicielle à **LXC**. [[:LXD|LXD]] est développé par Canonical pour simplifier la manipulation de vos conteneurs. |
| |
| <code bash>sudo lxc-stop -n container_xenial</code> | <code bash>sudo lxc-stop -n container_xenial</code> |
| |
| Et ensuite, nous passons à la destruction : | Et ensuite, nous passons à la destruction : |
| |
| <code bash>sudo lxc-destroy -n container_xenial</code> | <code bash>sudo lxc-destroy -n container_xenial</code> |
| Pour pouvoir utiliser [[apt>lxc|LXC]] sans [[sudo|sudo]], et donc par conséquent, minimiser le risque qu'un attaquant arrive à avoir accès à votre [[wpfr>Hôte_(informatique)|hôte système]] à cause de l'utilisation de [[sudo|sudo]], nous allons déjà récupérer le sub**g**id ainsi que le subg**u**id de notre utilisateur courant : | Pour pouvoir utiliser [[apt>lxc|LXC]] sans [[sudo|sudo]], et donc par conséquent, minimiser le risque qu'un attaquant arrive à avoir accès à votre [[wpfr>Hôte_(informatique)|hôte système]] à cause de l'utilisation de [[sudo|sudo]], nous allons déjà récupérer le sub**g**id ainsi que le subg**u**id de notre utilisateur courant : |
| <code bash> | <code bash> |
| cat /etc/sub{g,u}id | grep $USER | grep -h $USER /etc/sub{g,u}id |
| </code> | </code> |
| |
| </code> | </code> |
| |
| Vous noterez qu'il y'a ni mot de passe attribué, ni rien, impossible donc de se connecter à notre container **container_unprivileged** ni via la méthode [[ssh|ssh]], ni via la méthode **lxc-console**. Voici un moyen pour attribuer un mot de passe à l'utilisateur **ubuntu**. Nous allons déjà démarrer notre container fraîchement installé : | Vous noterez qu'il n'y a ni mot de passe attribué, ni rien, impossible donc de se connecter à notre container **container_unprivileged** ni via la méthode [[ssh|ssh]], ni via la méthode **lxc-console**. Voici un moyen pour attribuer un mot de passe à l'utilisateur **ubuntu**. Nous allons déjà démarrer notre container fraîchement installé : |
| |
| <code bash>lxc-start -n container_unprivileged</code> | <code bash>lxc-start -n container_unprivileged</code> |
| <code bash>lxc-stop -n container_unprivileged</code> | <code bash>lxc-stop -n container_unprivileged</code> |
| |
| Et ensuite, nous passons à la destruction : | Et ensuite, nous passons à la destruction : |
| |
| <code bash>lxc-destroy -n container_unprivileged</code> | <code bash>lxc-destroy -n container_unprivileged</code> |
| <code bash>sudo -i && cd /home/$USER/.local/lxc/nom_de_votre_container/</code> | <code bash>sudo -i && cd /home/$USER/.local/lxc/nom_de_votre_container/</code> |
| |
| Ensuite, nous utilisons la commande [[tar|tar]] avec son option **--numeric-owner**, qui est ici très importante. Elle va permettre de garder les **uid/gid** intactes lors de l'extraction. Nous utilisons aussi l'outil [[apt>gzip|gzip]] et son option **-9((--best-compression.))**, qui vous offrira, une compression maximale. | Ensuite, nous utilisons la commande [[tar|tar]] avec son option **%%--%%numeric-owner**, qui est ici très importante. Elle va permettre de garder les **uid/gid** intactes lors de l'extraction. Nous utilisons aussi l'outil [[apt>gzip|gzip]] et son option **-9((--best-compression.))**, qui vous offrira, une compression maximale. |
| |
| <code bash>GZIP=-9 tar --numeric-owner -czvf mon_container.tar.gz ./*</code> | <code bash>GZIP=-9 tar --numeric-owner -czvf mon_container.tar.gz ./*</code> |
| <code bash>tar --numeric-owner -xzvf mon_container.tar.gz</code> | <code bash>tar --numeric-owner -xzvf mon_container.tar.gz</code> |
| |
| C'est terminé, il y'a plus qu'à redémarrer **lxcfs.service**, **lxc-net.service**, **lxc.service** : | C'est terminé, il n'y a plus qu'à redémarrer **lxcfs.service**, **lxc-net.service**, **lxc.service** : |
| |
| <code bash>systemctl start lxcfs.service lxc-net.service lxc.service && exit</code> | <code bash>systemctl start lxcfs.service lxc-net.service lxc.service && exit</code> |
| === Pour une utilisation unprivileged === | === Pour une utilisation unprivileged === |
| |
| <note tip>Nous aborderons ici, que la restauration de votre backup précédemment créé. | <note tip>Nous n'aborderons ici, que la restauration de votre backup précédemment créé. |
| Pour la configuration d'un container [[apt>lxc|LXC]] **unprivileged**, merci de suivre le chapitre [[lxc#configuration_de_lxc_pour_une_utilisation_unprivileged|configuration de lxc pour une utilisation unprivileged]]. | Pour la configuration d'un container [[apt>lxc|LXC]] **unprivileged**, merci de suivre le chapitre [[lxc#configuration_de_lxc_pour_une_utilisation_unprivileged|configuration de lxc pour une utilisation unprivileged]]. |
| </note> | </note> |
| <code bash>tar --numeric-owner -xzvf mon_container.tar.gz</code> | <code bash>tar --numeric-owner -xzvf mon_container.tar.gz</code> |
| |
| C'est terminé, il y'a plus qu'à redémarrer **lxcfs.service**, **lxc-net.service**, **lxc.service** : | C'est terminé, il n'y a plus qu'à redémarrer **lxcfs.service**, **lxc-net.service**, **lxc.service** : |
| |
| <code bash>sudo systemctl start lxcfs.service lxc-net.service lxc.service</code> | <code bash>sudo systemctl start lxcfs.service lxc-net.service lxc.service</code> |