Outils pour utilisateurs

Outils du site


lxc

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

  1. Cloner le container modèle: lxc-clone 0model NOUVEAUNOM
  2. Récupérer l'adresse mac du nouveau container (grep hwaddr /srv/lxc/NOUVEAUNOM/config)
  3. Attribuer une ip à cette adresse mac dans /etc/dnsmasq.d/lxc et /etc/hosts
  4. Lancer le container (lxc-start -dn NOUVEAUNOM)
  5. (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.

yum install lxc lxc-templates bridge-utils

Rajouter le fichier de configuration dnsmasq suivant et activer / lancer le service:

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

Pour lancer un container en mode “daemon” :

lxc-start --name foo --logfile /var/log/lxc/foo.log --daemon

lier un répertoire

rajouter une entrée dans la configuration:

lxc.mount.entry /var/www var/www none bind 0 0

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):

lxc-create -n c7 -t download -- -r 7 -d centos -a amd64

il suffit ensuite de définir le mot de passe de l'administrateur

Changer le mot de passe root

chroot /var/lib/lxc/CONTAINERNAME/rootfs passwd

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:

cat /etc/sub?id
root:100000:65536
root:100000:65536

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 :

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.

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:

#! /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.

# vim: set filetype=dokuwiki:

lxc.txt · Dernière modification: 2017/06/20 13:14 (modification externe)