Outils pour utilisateurs

Outils du site


lxc

Différences

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

Lien vers cette vue comparative

lxc [2017/06/20 13:14] (Version actuelle)
Ligne 1: Ligne 1:
 +{{tag> sysadmin hadoly veille virtualisation }}
 +
 +Lxc et les autres mécanismes de container n'​apporte aucune sécurité supplémentaire si aucun système de contrôle d'​accès (type [[:​selinux]]) n'est pas en place. Il n'est pas possible d'​implémenter les container non privilégiés sur fedora /centos - il manque trop de prérequis.
 +
 +https://​major.io/​2014/​04/​21/​launch-secure-lxc-containers-on-fedora-20-using-selinux-and-svirt/​
 +===== Containers LXC =====
 +
 +==== Procédure de création d'un container sur gelatine ====
 +
 +  - Cloner le container modèle: lxc-clone 0model NOUVEAUNOM
 +  - Récupérer l'​adresse mac du nouveau container (grep hwaddr /​srv/​lxc/​NOUVEAUNOM/​config)
 +  - Attribuer une ip à cette adresse mac dans /​etc/​dnsmasq.d/​lxc et /etc/hosts
 +  - Lancer le container (lxc-start -dn NOUVEAUNOM)
 +  - (Il est possible de récupérer l'​adresse ip du container via //lxc-info -n NOUVEAUNOM)//​
 +
 +
 +==== Biblio / sources ====
 +
 +https://​www.stgraber.org/​2014/​01/​17/​lxc-1-0-unprivileged-containers/​
 +
 +https://​linuxcontainers.org/​lxc/​getting-started/​
 +
 +Guide d'​installation manuel ici :
 +
 +https://​www.flockport.com/​install/​
 +
 +ne pas créer le script de création du bridge, mais simplement une nouvelle
 +interface.
 +
 +<​code>​yum install lxc lxc-templates bridge-utils
 +</​code>​
 +
 +Rajouter le fichier de configuration [[:​dnsmasq]] suivant et activer / lancer le
 +service:
 +<​code>​
 +cat /​etc/​dnsmasq.d/​lxc.conf ​
 +dhcp-range=10.0.3.2,​10.0.3.254
 +bind-interfaces
 +listen-address=10.0.0.1
 +user=nobody
 +group=nobody
 +dhcp-leasefile=/​var/​run/​lxc-dnsmasq.lease
 +</​code>​
 +
 +Pour lancer un container en mode "​daemon"​ :
 +<​code>​
 +lxc-start --name foo --logfile /​var/​log/​lxc/​foo.log --daemon
 +</​code>​
 +
 +=== lier un répertoire ===
 +
 +rajouter une entrée dans la configuration:​
 +<​code>​
 +lxc.mount.entry /var/www var/www none bind 0 0
 +</​code>​
 +
 +**attention** le point de montage doit être un chemine **relatif**
 +
 +=== Utiliser libvirt ===
 +
 +installer libvirt-daemon et libvirt-daemon-driver-lxc
 +
 +systemctl start libvirtd
 +
 +=== Sortir de la console ===
 +
 +Impossible avec un container lancé en //​foreground//​
 +
 +Sinon c'est le raccourci Crl+a+q
 +
 +
 +=== Créer un container à partir d'un modèle ===
 +
 +C'est simple tant qu'on ne fait pas de cross-platform (par ex cette manip ne marche pas sur Fedora):
 +<​code>​
 +lxc-create -n c7 -t download -- -r 7 -d centos -a amd64
 +</​code>​
 +
 +il suffit ensuite de définir le mot de passe de l'​administrateur
 +
 +=== Changer le mot de passe root ===
 +<​code>​
 +chroot /​var/​lib/​lxc/​CONTAINERNAME/​rootfs passwd
 +</​code>​
 +
 +=== Cloner un container ===
 +
 +Le container d'​origine doit être à l'​arrêt
 +
 +lxc-clone source original
 +
 +=== Divers ===
 +
 +sur gelatine, centos7 ça manque de réactivité,​ car le processus systemd-journal est au taquet. Ok après redémarrage du processus.
 +
 +Pas possible de corriger le bug malgré utilisation de //fedora// common template par défaut ni positionnement de lxc.kms à 0
 +
 +Dans la conf du container, on a fait un include du modèle //fedora// à la place du //centos// qui n'est apparemment pas au point.
 +
 +À l'​issue de l'​installation de httpd : pas de /var/www ni de /var/log. C'est
 +parce que l'​install bute sur une limitation: il faut commenter la ligne 
 +lxc.cap.drop = setfcap dans le fichier //
 +/​usr/​share/​lxc/​config/​fedora.common.conf //
 +
 +
 +==== container non privilégié ====
 +
 +Le saint-Graal nécessitant des prérequis difficile à trouver sur centos.
 +
 +étape 1 : container non privilégié lancé en root.
 +
 +Il suffit normalement de créer des infos de mapping dans /etc/subuid et
 +/​etc/​subgid:​
 +
 +<​code>​
 +cat /etc/sub?id
 +root:​100000:​65536
 +root:​100000:​65536
 +</​code>​
 +
 +et de rendre le répertoire /​var/​lib/​lxc/​NAME/​rootfs accessible à l'​utilisateur 100000
 +
 +on obtient une erreur relative à la console au démarrage du container.
 +
 +En désactivant dans la conf la directive autodev, on va un peu plus loin, le
 +container démarre mais freeze car incapable de monter /dev/ et /sys :
 +<​code>​
 +lxc-start -Fn foo
 +Failed to mount devtmpfs at /dev: Operation not permitted
 +Failed to mount cgroup at /​sys/​fs/​cgroup/​systemd:​ Operation not permitted
 +[!!!!!!] Failed to mount API filesystems,​ freezing.
 +</​code>​
 +
 +==== Bugs ====
 +
 +systemd-journal eating 100% cpu
 +
 +cause: le container a été lancé avec //​lxc.kmsg//​ à 1, ce qui a entrainé la création d'un lien symbolique entre /​dev/​console et /dev/kmsg. journald va boucler dessus et partir en live.
 +
 +solution: il faut désactiver lxc.kmsg et supprimer le lien symbolique /​var/​lib/​lxc/​CONTAINER/​rootfs.dev/​kmsg
 +
 +==== Vérification ====
 +
 +Pour tester avec [[:nagios]] nrpe:
 +<​code>​
 +#! /bin/bash
 +. /​usr/​lib64/​nagios/​plugins/​utils.sh || exit 3
 +
 +R=$(lxc-ls --active -1 |grep -q $1)
 +case $? in
 +(0)
 +MESSAGE="​Container $1 is running"​
 +STATUS="​OK"​
 +;;
 +(1)
 +MESSAGE="​Container $1 not running"​
 +STATUS="​CRITICAL"​
 +;;
 +(*)
 +MESSAGE="​Status unknown"​
 +STATUS="​UNKNOWN"​
 +;;
 +esac
 +
 +RET=$(eval "echo \$STATE_$STATUS"​)
 +echo $MESSAGE
 +exit $RET
 +Killed by signal 1.
 +</​code>​
 +# vim: set filetype=dokuwiki:​
  
lxc.txt · Dernière modification: 2017/06/20 13:14 (modification externe)