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 →
Ci-dessous, les différences entre deux révisions de la page.
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 [23/12/2015 11:33] captnfab [Création du conteneur] |
||
---|---|---|---|
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 147: | Ligne 149: | ||
</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>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 $$ | + | <code user>cgm movepid all $USER $$ |
lxc-start -n test -d</code> | lxc-start -n test -d</code> | ||
Ligne 160: | Ligne 210: | ||
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 239: | ||
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 |