logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

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
doc:autres:vm:lxc:mode-utilisateur [09/12/2015 20:33]
captnfab [FAQ / Problèmes rencontrés]
doc:autres:vm:lxc:mode-utilisateur [03/11/2016 15:33]
bendia [Utilisation de LXC en mode utilisateur non-privilégié] Mise à jour des tags de suivi
Ligne 4: Ligne 4:
   * Niveau requis : {{tag>​avisé}}   * Niveau requis : {{tag>​avisé}}
   * Commentaires : //Des conteneurs sécurisés.//​   * Commentaires : //Des conteneurs sécurisés.//​
-  * Suivi : {{tag>en-chantier à-tester}}+  * Suivi : {{tag>}}
     * Création par [[user>​captnfab]] 09/12/2015     * Création par [[user>​captnfab]] 09/12/2015
     * Testé par captnfab le 09/12/2015     * Testé par captnfab le 09/12/2015
Ligne 15: Ligne 15:
 ===== Introduction ===== ===== Introduction =====
  
-Si vos conteneurs LXC doivent contenir des serveurs sensibles aux attaques, vous ne voudriez pas qu'un serveur compromis compromette tout le reste du système. Ne pas donner les privilèges super-utilisateur au conteneur permet ​d'​éviter cela.+Si vos conteneurs LXC doivent contenir des serveurs sensibles aux attaques, vous ne voudriez pas qu'un serveur compromis compromette tout le reste du système. Ne pas donner les privilèges super-utilisateur au conteneur permet ​de limiter ce risque.
  
 ===== Installation ===== ===== Installation =====
Ligne 38: Ligne 38:
 <code root>​adduser --disabled-password lxcuser-test</​code>​ <code root>​adduser --disabled-password lxcuser-test</​code>​
  
-<note info>​L'​option ''​--disabled-password''​ n'est pas obligatoire,​ elle permet simplement de s'​assurer que la connexion par mot de passe est impossible via ssh.</​note>​+<note info>​L'​option ''​%%-%%-disabled-password''​ n'est pas obligatoire,​ elle permet simplement de s'​assurer que la connexion par mot de passe est impossible via ssh.</​note>​
 <note important>​Comme vous devrez vous connecter à cet utilisateur via ssh, je vous conseille de créer dès maintenant une paire de clefs via ssh-keygen, et de rajouter la clef publique aux clefs autorisées pour cet utilisateur.</​note>​ <note important>​Comme vous devrez vous connecter à cet utilisateur via ssh, je vous conseille de créer dès maintenant une paire de clefs via ssh-keygen, et de rajouter la clef publique aux clefs autorisées pour cet utilisateur.</​note>​
  
Ligne 62: Ligne 62:
 === Affectation des sous-{u,​g}id à l'​utilisateur === === Affectation des sous-{u,​g}id à l'​utilisateur ===
 Nous allouons alors les sous-uid et sous-gid à l'​utilisateur test via la commande (**à modifier en fonction de vos propres ''/​etc/​sub{u,​g}id''​ !**) : Nous allouons alors les sous-uid et sous-gid à l'​utilisateur test via la commande (**à modifier en fonction de vos propres ''/​etc/​sub{u,​g}id''​ !**) :
-<code root>​usermod lxcuser-test --add-sub-uids ​624288:689823 --add-sub-gids ​624288:689823</​code>​+<code root>​usermod lxcuser-test --add-subuids ​624288-689823 --add-subgids ​624288-689823</​code>​
  
 ==== Création et configuration de l'​accès au pont réseau ==== ==== Création et configuration de l'​accès au pont réseau ====
Ligne 93: Ligne 93:
 echo 1 > /​proc/​sys/​kernel/​unprivileged_userns_clone echo 1 > /​proc/​sys/​kernel/​unprivileged_userns_clone
  
-for u in $LXCUSERS do+for u in $LXCUSERS 
 +do
   cgm create all $u   cgm create all $u
   cgm chown all $u $(id -u $u) $(id -g $u)   cgm chown all $u $(id -u $u) $(id -g $u)
Ligne 113: Ligne 114:
  
 <code root>​chmod a+x /​usr/​local/​sbin/​prepare-lxc-cgroups <code root>​chmod a+x /​usr/​local/​sbin/​prepare-lxc-cgroups
-systemctl enable /​etc/​systemd/​system/​lxc-cgroups.service</​code>​+systemctl enable /​etc/​systemd/​system/​lxc-cgroups.service 
 +systemctl start lxc-cgroups</​code>​
 ===== Création du conteneur ===== ===== Création du conteneur =====
  
Ligne 143: Ligne 145:
 <code root>​lxc-create -t debian -n test -- -d debian <code root>​lxc-create -t debian -n test -- -d debian
 mv /​var/​lib/​lxc/​test ~lxcuser-test/​.local/​share/​lxc/​ mv /​var/​lib/​lxc/​test ~lxcuser-test/​.local/​share/​lxc/​
-chown lxcuser-test ~lxcuser-test/​.local/​share/​lxc/​test{,/​*}+chown lxcuser-test~lxcuser-test/​.local/​share/​lxc/​test{,/​config,/​fstab}
 find ~lxcuser-test/​.local/​share/​lxc/​test/​rootfs/​ -exec sh -c 'chown $(echo $(stat -c %u "​{}"​)+624288 | bc):$(echo $(stat -c %g "​{}"​)+624288 | bc) "​{}"'​ \; find ~lxcuser-test/​.local/​share/​lxc/​test/​rootfs/​ -exec sh -c 'chown $(echo $(stat -c %u "​{}"​)+624288 | bc):$(echo $(stat -c %g "​{}"​)+624288 | bc) "​{}"'​ \;
 </​code>​ </​code>​
 En remplaçant 624288 par les numéro initiaux des plages de sous-uid/​gid respectifs de votre user. En remplaçant 624288 par les numéro initiaux des plages de sous-uid/​gid respectifs de votre user.
 +
 +===== Configuration du conteneur =====
 +
 +Le fichier de configuration ''​~/​.local/​share/​lxc/​test/​config''​ doit ressembler à ça :
 +<code ini ~/​.local/​share/​lxc/​test/​config>​
 +# For additional config options, please look at lxc.container.conf(5)
 +
 +# Distribution configuration
 +lxc.include = /​usr/​share/​lxc/​config/​debian.common.conf
 +lxc.include = /​usr/​share/​lxc/​config/​debian.userns.conf
 +lxc.arch = x86_64
 +
 +lxc.autodev = 0
 +
 +# Container specific configuration
 +lxc.id_map = u 0 624288 65536
 +lxc.id_map = g 0 624288 65536
 +lxc.rootfs = /​home/​lxcuser-test/​.local/​share/​lxc/​test/​rootfs
 +#lxc.mount = /​home/​lxcuser-test/​.local/​share/​lxc/​test/​fstab
 +lxc.utsname = test
 +
 +# Network configuration
 +lxc.network.type = veth
 +lxc.network.flags = up
 +lxc.network.link = lxcbr0
 +#​lxc.network.hwaddr = 00:​16:​3e:​xx:​xx:​xx</​code>​
 +
 +<note warning>​Si vous avez utilisé la méthode « root » pour créer le conteneur, il vous faudra compléter votre fichier.
 +  * Vérifier les ''​lxc.id_map''​ et le include de ''​debian.userns.conf''​.
 +  * Les chemins ''​lxc.rootfs''​ et éventuellement ''​lxc.mount''​ doivent être les bons (si vous avez déplacé le dossier du conteneur dans votre home…)
 +  * Les options ''​lxc.network.''​* doivent être cohérentes avec ce qui a été indiqué dans ''/​etc/​lxc/​lxc-usernet''​ :
 +<​code>​lxcuser-test veth lxcbr0 1</​code>​
 +</​note>​
 +
 +Les droits des dossiers doivent ressembler à cela :
 +<code user>ls -lhd /​home{,/​lxcuser-test{,/​.local{,/​share{,/​lxc{,/​test}}}}}</​code>​
 +<​code>​drwxr-xr-x 5 root    root    4,0K déc.  17 00:07 /home
 +drwxr-xr-x 3 lxcuser lxcuser 4,0K déc.  17 00:56 /​home/​lxcuser-test
 +drwxr-xr-x 3 lxcuser lxcuser 4,0K déc.  17 00:56 /​home/​lxcuser-test/​.local
 +drwxr-xr-x 3 lxcuser lxcuser 4,0K déc.  19 13:49 /​home/​lxcuser-test/​.local/​share
 +drwxr-xr-x 3 lxcuser lxcuser 4,0K déc.  19 13:53 /​home/​lxcuser-test/​.local/​share/​lxc
 +drwxrwx--x 3 lxcuser lxcuser 4,0K déc.  19 13:51 /​home/​lxcuser-test/​.local/​share/​lxc/​test</​code>​
 +(Le o+x est le point crucial ici.)
 +
 +<code user>ls -lh /​home/​lxcuser-test/​.local/​share/​lxc/​test</​code>​
 +<​code>​total 8,0K
 +-rw-r--r-- ​ 1 lxcuser lxcuser ​ 488 déc.  19 13:51 config
 +-rw-r--r-- ​ 1 lxcuser lxcuser ​   0 déc.  19 13:51 fstab
 +drwxr-xr-x 22 624288 624288 ​  4,0K déc.  19 13:51 rootfs</​code>​
 +(Vérifier les propriétaires suivant ses propres sous-uid/​sous-gid.)
 ===== Utilisation du conteneur ===== ===== Utilisation du conteneur =====
  
-<code user>​cgm ​modepid ​all $USER $$+<note warning>​Ne vous loguez pas en tant que ''​lxcuser-test''​ via **su** ou **sudo**, la suite ne fonctionnera pas. Vous devez impérativement vous connecter via ''​ssh''​ ou directement sur un ''​getty''​. En effet, cgm et lxc-start s'​appuient sur les sessions PAM, qui ne sont pas créées via su ou sudo… 
 +</​note>​ 
 +<code user>​cgm ​movepid ​all $USER $$
 lxc-start -n test -d</​code>​ lxc-start -n test -d</​code>​
  
Ligne 156: Ligne 210:
 Messages d'​erreur rencontrés en lançant les différentes commandes du tuto, ou encore journalctl -xe Messages d'​erreur rencontrés en lançant les différentes commandes du tuto, ou encore journalctl -xe
  
-  * ''​lxc_container:​ Failed to chown /​dev/​pts/​X''​+  * ''​lxc_container:​ Failed to chown /dev/pts/X'',​ ''​lxc_start - start.c:​lxc_init:​445 - Failed to shift tty into container''​
 Vérifier que le paquet ''​uidmap''​ est bien installé Vérifier que le paquet ''​uidmap''​ est bien installé
 Vérifier que ''/​proc/​sys/​kernel/​unprivileged_userns_clone''​ et ''/​sys/​fs/​cgroup/​cpuset/​cgroup.clone_children''​ sont bien à ''​1''​ Vérifier que ''/​proc/​sys/​kernel/​unprivileged_userns_clone''​ et ''/​sys/​fs/​cgroup/​cpuset/​cgroup.clone_children''​ sont bien à ''​1''​
  
-  * ''​pam_unix(sudo:​auth):​ conversation failed''​''​pam_unix(sudo:​auth):​ auth could not identify password for [lxcuser-test]''​+  ​* ''​lxc_container:​ failed to clone (0x20000011):​ Operation not permitted''​ 
 +Vérifier que le fichier de config ''​~lxcuser-test/​.local/​share/​lxc/​test/​config''​ contient bien des mappings de sous-uid/​sous-gid corrects (exemple) :​ 
 +<​code>​lxc.id_map = u 0 820896 65536 
 +lxc.id_map = g 0 820896 65536 
 +</​code>​ 
 + 
 + 
 +  ​* ''​pam_unix(sudo:​auth):​ conversation failed'' ​ou ''​pam_unix(sudo:​auth):​ auth could not identify password for [lxcuser-test]''​ ou ''​lxc-start:​ Permission denied - failed to create directory '/​run/​user/​1000/​lxc/' ​''​
 Vérifier que l'on s'est bien connecté en tant que lxcuser-test via PAM (par exemple via ssh et non-pas par su/sudo) Vérifier que l'on s'est bien connecté en tant que lxcuser-test via PAM (par exemple via ssh et non-pas par su/sudo)
  
Ligne 182: Ligne 243:
 Muh ? Visiblement,​ problème avec une version cgmanager trop récente (stretch/​sid et non jessie) Muh ? Visiblement,​ problème avec une version cgmanager trop récente (stretch/​sid et non jessie)
  
-  * ''​lxc_start - failed to create the configured network''​ +  * ''​Quota reached'', ​''​lxc_start - failed to create the configured network''​ 
-Vérifier que le mode de connexion renseigné dans ''/​etc/​lxc/​lxc-usernet''​ existe bien.+Vérifier que le mode de connexion renseigné dans ''/​etc/​lxc/​lxc-usernet''​ existe bien, et que c'est bien celui indiqué dans ''​~lxcuser-test/​.local/​share/​lxc/​test/​config''​. 
 + 
 +  * Vérifier que tous les dossiers parents du dossier ''​rootfs''​ sont bien exécutables par Others (ou au moins par le min de la plage de sous-uid correspondante). 
 +  * Vérifier que le fichier ''​~lxcuser-test/​.local/​share/​lxc/​test/​config''​ contient bien la ligne ''​lxc.autodev = 0''​ 
 + 
 +  * ''​lxc_container:​ No such file or directory - failed to get real path for '/​var/​lib/​lxc/​test/​rootfs''​ 
 +Vérifier que le path du rootfs indiqué dans ''​~lxcuser-test/​.local/​share/​lxc/​test/​config''​ est bien celui contenant le rootfs du conteneur, donc a priori ''​~lxcuser-test/​.local/​share/​lxc/​test/​rootfs''​ 
 + 
 +  * ''​lxc_container:​ Error setting devices.deny to a for test''​ ou ''​lxc_container:​ failed to setup the devices cgroup for '​test'​ ''​ 
 +Vérifier que le fichier ''​~lxcuser-test/​.local/​share/​lxc/​test/​config''​ contient bien la ligne 
 +<​code>​lxc.include = /​usr/​share/​lxc/​config/​debian.userns.conf</​code>​ 
 +===== Sources ===== 
 + 
 +  * https://​www.mail-archive.com/​lxc-devel@lists.linuxcontainers.org/​msg01660.html 
 +  * https://​www.stgraber.org/​2014/​01/​17/​lxc-1-0-unprivileged-containers/​ 
 +  * http://​unix.stackexchange.com/​questions/​170998/​how-to-create-user-cgroups-with-systemd 
 +  * http://​www.linuxquestions.org/​questions/​linux-kernel-70/​lxc-unprivileged-container-in-debian-jessie-cgroups-permissions-4175540174/​ 
 +  * http://​www.equiscentrico.com.ar/​2015/​05/​unprivileged-lxc-en-debian-jessie.html
doc/autres/vm/lxc/mode-utilisateur.txt · Dernière modification: 18/11/2020 20:51 par captnfab

Pied de page des forums

Propulsé par FluxBB