Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
lxc [Le 23/12/2018, 20:02]
176.10.99.200 [Iptables (utilisation basique) et bridge]
lxc [Le 06/05/2022, 01:30]
scaph [Restauration de votre backup via tar]
Ligne 18: Ligne 18:
 ===== Création de notre premier container LXC (root) ===== ===== Création de notre premier container LXC (root) =====
 <note warning>​Attention,​ bien que vos processus soient isolés de votre [[wpfr>​Hôte_(informatique)|machine hôte]], via ce procédé, votre container [[apt>​lxc|LXC]] nécessitera d'​utiliser [[:​sudo|sudo]] pour être fonctionnel. Si vous avez une faille de sécurité dans votre container, une [[wp>​Privilege_escalation|escalade des privilèges]] peut être intenté sur votre container, pour accéder à votre [[wpfr>​Hôte_(informatique)|machine hôte]]. L'​utilisation de [[:​sudo|sudo]] pourrait donc compromettre votre [[wpfr>​Hôte_(informatique)|système hôte]] !.</​note>​ <note warning>​Attention,​ bien que vos processus soient isolés de votre [[wpfr>​Hôte_(informatique)|machine hôte]], via ce procédé, votre container [[apt>​lxc|LXC]] nécessitera d'​utiliser [[:​sudo|sudo]] pour être fonctionnel. Si vous avez une faille de sécurité dans votre container, une [[wp>​Privilege_escalation|escalade des privilèges]] peut être intenté sur votre container, pour accéder à votre [[wpfr>​Hôte_(informatique)|machine hôte]]. L'​utilisation de [[:​sudo|sudo]] pourrait donc compromettre votre [[wpfr>​Hôte_(informatique)|système hôte]] !.</​note>​
 +
  
 Pour créer un container avec pour nom((Option -n.)) **container_xenial**,​ pour la distribution((Option -d.)) **Ubuntu**, sous la release((Option -r.)) **Xenial**, ayant une architecture((Option -a.)) **amd64**, nous utiliserons cette commande : Pour créer un container avec pour nom((Option -n.)) **container_xenial**,​ pour la distribution((Option -d.)) **Ubuntu**, sous la release((Option -r.)) **Xenial**, ayant une architecture((Option -a.)) **amd64**, nous utiliserons cette commande :
Ligne 55: Ligne 56:
  
 <code bash>​sudo lxc-ls --fancy</​code>​ <code bash>​sudo lxc-ls --fancy</​code>​
-<code bash>​beaver@home:~$ sudo lxc-ls --fancy+<code bash>​beaver@mysweethome:~$ sudo lxc-ls --fancy
      ​NAME ​        ​STATE ​ AUTOSTART GROUPS IPV4      IPV6       ​NAME ​        ​STATE ​ AUTOSTART GROUPS IPV4      IPV6 
 container_xenial STOPPED ​    ​0 ​      ​- ​  ​10.0.3.58 ​  - container_xenial STOPPED ​    ​0 ​      ​- ​  ​10.0.3.58 ​  -
  
-beaver@home:~$ cat /​etc/​lxc/​default.conf ​+beaver@mysweethome:~$ cat /​etc/​lxc/​default.conf ​
 lxc.network.type = veth lxc.network.type = veth
 lxc.network.link = lxcbr0 lxc.network.link = lxcbr0
Ligne 65: Ligne 66:
 lxc.network.hwaddr = 00:​16:​3e:​xx:​xx:​xx lxc.network.hwaddr = 00:​16:​3e:​xx:​xx:​xx
  
-beaver@home:~$ dpkg -l bridge-utils+beaver@mysweethome:~$ dpkg -l bridge-utils
 Souhait=inconnU/​Installé/​suppRimé/​Purgé/​H=à garder Souhait=inconnU/​Installé/​suppRimé/​Purgé/​H=à garder
 | État=Non/​Installé/​fichier-Config/​dépaqUeté/​échec-conFig/​H=semi-installé/​W=attend-traitement-déclenchements | État=Non/​Installé/​fichier-Config/​dépaqUeté/​échec-conFig/​H=semi-installé/​W=attend-traitement-déclenchements
Ligne 83: Ligne 84:
 On vérifie l'​état de notre container : On vérifie l'​état de notre container :
  
-<code bash>​beaver@home:~$ sudo lxc-ls --fancy+<code bash>​beaver@mysweethome:~$ sudo lxc-ls --fancy
   NAME            STATE  AUTOSTART GROUPS IPV4      IPV6    NAME            STATE  AUTOSTART GROUPS IPV4      IPV6 
 container_xenial RUNNING ​  ​0 ​       -   ​10.0.3.58 ​   -  ​ container_xenial RUNNING ​  ​0 ​       -   ​10.0.3.58 ​   -  ​
Ligne 104: Ligne 105:
 </​code>​ </​code>​
  
-<code bash>​beaver@home:~$ ssh ubuntu@10.0.3.58 ​+<code bash>​beaver@mysweethome:~$ ssh ubuntu@10.0.3.58 ​
 ubuntu@10.0.3.58 password: mot de passe **ubuntu** par défaut. ubuntu@10.0.3.58 password: mot de passe **ubuntu** par défaut.
 Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-130-generic x86_64) Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-130-generic x86_64)
Ligne 126: Ligne 127:
  
 <code bash> <code bash>
-beaver@home:~$ sudo lxc-console -n container_xenial +beaver@mysweethome:~$ sudo lxc-console -n container_xenial 
-[sudo] Mot de passe de beaver +[sudo] Mot de passe de beaver ​
 Connected to tty 1 Connected to tty 1
 Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself
Ligne 169: Ligne 170:
 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>​
  
Ligne 263: Ligne 264:
 <code bash> <code bash>
  
-beaver@home:~$ lxc-create -t download -n container_unprivileged -- -d ubuntu -r xenial -a amd64+beaver@mysweethome:~$ lxc-create -t download -n container_unprivileged -- -d ubuntu -r xenial -a amd64
 Using image from local cache Using image from local cache
 Unpacking the rootfs Unpacking the rootfs
Ligne 279: Ligne 280:
 <code bash>​lxc-ls --fancy</​code>​ <code bash>​lxc-ls --fancy</​code>​
  
-<code bash>​beaver@home:~$ lxc-ls --fancy+<code bash>​beaver@mysweethome:~$ lxc-ls --fancy
 NAME                   ​STATE ​  ​AUTOSTART GROUPS IPV4      IPV6  NAME                   ​STATE ​  ​AUTOSTART GROUPS IPV4      IPV6 
 container_unprivileged STOPPED 0         ​- ​     10.0.3.58 -  container_unprivileged STOPPED 0         ​- ​     10.0.3.58 - 
 </​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'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>​
Ligne 339: Ligne 340:
  
 <code bash> <code bash>
-beaver@home:~$ lxc-console -n container_unprivileged+beaver@mysweethome:~$ lxc-console -n container_unprivileged
 Connected to tty 1 Connected to tty 1
 Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself
Ligne 421: Ligne 422:
 <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'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>​
Ligne 431: Ligne 432:
 === 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>​
Ligne 456: Ligne 457:
 <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'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>​
Ligne 477: Ligne 478:
 <code bash>​sudo((container unprivileged ou non ?)) lxc-snapshot -n nom_de_mon_container</​code>​ <code bash>​sudo((container unprivileged ou non ?)) lxc-snapshot -n nom_de_mon_container</​code>​
  
-<code bash>​beaver@home:~$ sudo lxc-snapshot -n container_xenial+<code bash>​beaver@mysweethome:~$ sudo lxc-snapshot -n container_xenial
 lxc-snapshot:​ lxccontainer.c:​ do_lxcapi_snapshot:​ 3405 Snapshot of directory-backed container requested. lxc-snapshot:​ lxccontainer.c:​ do_lxcapi_snapshot:​ 3405 Snapshot of directory-backed container requested.
 lxc-snapshot:​ lxccontainer.c:​ do_lxcapi_snapshot:​ 3406 Making a copy-clone. ​ If you do want snapshots, then lxc-snapshot:​ lxccontainer.c:​ do_lxcapi_snapshot:​ 3406 Making a copy-clone. ​ If you do want snapshots, then
Ligne 487: Ligne 488:
  
 <code bash>​sudo((container unprivileged ou non?)) lxc-snapshot -L -n nom_de_mon_container</​code>​ <code bash>​sudo((container unprivileged ou non?)) lxc-snapshot -L -n nom_de_mon_container</​code>​
-<code bash>​beaver@home:~$ sudo lxc-snapshot -L -n container_xenial+<code bash>​beaver@mysweethome:~$ sudo lxc-snapshot -L -n container_xenial
 snap0 (/​var/​lib/​lxc/​container_xenial/​snaps) 2018:07:28 10:25:48 snap0 (/​var/​lib/​lxc/​container_xenial/​snaps) 2018:07:28 10:25:48
 </​code>​ </​code>​
Ligne 494: Ligne 495:
  
 <code bash>​sudo((container unprivileged ou non?)) lxc-snapshot -r snapX -n nom_de_mon_container</​code>​ <code bash>​sudo((container unprivileged ou non?)) lxc-snapshot -r snapX -n nom_de_mon_container</​code>​
- 
-===== Iptables (utilisation basique) et bridge ===== 
- 
-Vous trouverez ici, une esquisse d'un script [[:​iptables]],​ pour faire fonctionner votre container LXC. Il est bien entendu à ajouter aux règles que **vous avez déjà**, et à exécuter depuis votre [[wpfr>​Hôte_(informatique)|machine hôte]] !. Cette esquisse est surtout utile si vous avez **un [[wpfr>​Pare-feu_(informatique)|firewall]] d'​actif**((8-).)),​ sinon((m(:​-X.)),​ vous devez juste activer le port forwarding((echo 1 > /​proc/​sys/​net/​ipv4/​ip_forward)),​ et **configurer le fichier lxc-net comme ci-bas**. Nous noterons aussi, que nous pouvons encore être plus restrictif, mais cette configuration semble adéquate pour un [[wpfr>​Luser|profane]]((Et c'est pas péjoratif ce script est qu'une ébauche.)). 
- 
-Nous devons aussi, absolument [[:​installation_logiciel|installer le package]] [[apt>​dnsmasq-base]],​ qui est, logiquement déjà installé sur votre machine. Et ensuite configurer LXC pour qu'il utilise la technologie [[wpfr>​Pont_(réseau)|bridge]]. 
- 
-Veuillez [[:​tutoriel:​comment_modifier_un_fichier|éditer le fichier]] **/​etc/​default/​lxc-net**,​ pour avoir comme résultat final : 
- 
-<​code>​ 
-USE_LXC_BRIDGE="​true"​ 
-</​code>​ 
- 
-Nous devons ensuite redémarrer notre service **lxc-net** : 
- 
-<​code>​sudo systemctl restart lxc-net</​code>​ 
- 
-Pour vérifier que tout est ok : 
- 
-<​code>​ip -4 -o a show lxcbr0</​code>​ 
-Retournera par exemple : 
-<​code>​ 
-3: lxcbr0 ​   inet 10.0.3.1/24 scope global lxcbr0\ ​      ​valid_lft forever preferred_lft forever 
-</​code>​ 
- 
-Et voici le script [[:​iptables]] : 
- 
-<file bash iptables_lxc>​ 
-#!/bin/bash 
-## Créé par BeAvEr. 
-### Merci d'​utiliser FIXME au sein du dokuwiki francophone Ubuntu au besoin, ​ 
-### ou d'​apporter votre contribution sur ce script, ici même. 
-#### Merci de garder un aspect "​humain"​ au script. 
-##### Le tout étant d'​avoir juste les règles basiques, pour qu'un Luser/​Profane/​Néophyte,​ puisse utiliser LXC 
-##### de manière **"​relativement"​** sécurisé. ​ 
-##### (Pouvoir ping, apt-update, et cetera, et dans cet ordre là, depuis son container, pas plus). 
- 
-# Nous activons le port forwarding, pour pouvoir communiquer à l'​intérieur de notre container. 
- 
-echo 1 > /​proc/​sys/​net/​ipv4/​ip_forward 
- 
-# Règles iptables. 
-## Dans notre exemple, **veth0** est le nom de notre interface pour notre container. ​ 
-### Pour pouvoir spécifier le nom d'une interface, merci de renseigner votre fichier **config** ​ 
-### de **votre container**,​ avec l'​option -> lxc.network.name = veth0. 
- 
-#### beaver@nom_de_mon_container:​~$ ip a |grep veth 
-#### 7: veth0@if8: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc noqueue state UP group default qlen 1000 
-#### link/ether xx:​xx:​xx:​xx:​e8:​a7 brd ff:​ff:​ff:​ff:​ff:​ff link-netnsid 0 
- 
-#### beaver@nom_de_mon_container:​~$ ip a |grep eth 
-#### 5: eth0@if6: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc noqueue state UP group default qlen 1000 
-#### inet 10.0.x.x/24 brd 10.0.X.255 scope global eth0 
- 
-#### beaver@nom_de_mon_container:​~$ ip a |grep lxcbr0 
-#### 4: lxcbr0: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc noqueue state UP group default qlen 1000 
-#### inet 10.0.x.1/24 scope global lxcbr0 
- 
-#### LXC 
-iptables -A FORWARD -i veth0 -o eth0 -j ACCEPT 
-iptables -A FORWARD -i lxcbr0 -o eth0 -j ACCEPT 
-iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 
-iptables -t nat -A POSTROUTING -o lxcbr0 -j MASQUERADE 
-iptables -A FORWARD -s 10.0.3.0/24 -o eth0 -j ACCEPT 
-iptables -A FORWARD -d 10.0.3.0/24 -o lxcbr0 -j ACCEPT 
- 
-#### dnsmasq-dhcp DHCPDISCOVER(lxcbr0) 
-### sudo systemctl status lxc-net : 
-### beaver.st dnsmasq-dhcp[479]:​ DHCPDISCOVER(lxcbr0) 10.0.3.58 00:​16:​3e:​44:​f4:​05 
-### beaver.st dnsmasq-dhcp[479]:​ DHCPOFFER(lxcbr0) 10.0.3.58 00:​16:​3e:​44:​f4:​05 
-### beaver.st dnsmasq-dhcp[479]:​ DHCPREQUEST(lxcbr0) 10.0.3.58 00:​16:​3e:​44:​f4:​05 
-### beaver.st dnsmasq-dhcp[479]:​ DHCPACK(lxcbr0) 10.0.3.58 00:​16:​3e:​44:​f4:​05 nom_de_mon_container 
-### lxc-ls --fancy 
-### NAME                    STATE   ​AUTOSTART GROUPS IPV4     ​IPV6 ​ 
-### nom_de_mon_container ​  ​RUNNING ​     0        -  10.0.3.58 ​  ​- ​ 
- 
-iptables -I INPUT -i lxcbr0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT 
- 
-exit 0 
-</​file>​ 
- 
  
 ---- ----
Ligne 583: Ligne 503:
   * https://​wiki.debian.org/​EvgeniGolov/​LXC   * https://​wiki.debian.org/​EvgeniGolov/​LXC
   * https://​askubuntu.com/​questions/​340055/​lxc-container-no-outgoing-traffic   * https://​askubuntu.com/​questions/​340055/​lxc-container-no-outgoing-traffic
 +  * https://​lxc-webpanel.github.io/​
  
 ---- ----
  
 Contributeur(s):​ [[:​utilisateurs:​beaver|BeAvEr]]. Contributeur(s):​ [[:​utilisateurs:​beaver|BeAvEr]].
  • lxc.txt
  • Dernière modification: Le 11/09/2022, 12:09
  • par moths-art