Translation(s): English - Français
Debian > Debian GNU > Debian GNU/kFreeBSD > Jails
Wheezy
Un système Debian GNU/kFreeBSD complet devrait fonctionner dans un environnement jail, sur un système hôte GNU/kFreeBSD ou FreeBSD, avec quelques limitations.
Les environnements Jails fonctionnent beaucoup comme OpenVZ. Sur l'hôte, vous pouvez voir tous les processus en cours d'exécution dans tous les environnements. À l'intérieur d'un environnement jail, vous pouvez seulement voir les processus exécutés dans cet environnement.
Limitations
Sachez que certains fichiers dans /proc ou /sys, tel que /proc/mounts, n'ont pas d'espace de noms par environnement jail, ce qui peut entraîner la perte d'informations (en lecture seule) sur l'hôte ou les points de montage d'autres invités.
Certaines fonctionnalités tel que sysvipc partage un unique espace de nom avec l'hôte et les autres environnements jails, ainsi pour des raisons de sécurité, elles sont désactivées par défaut. faqueroot requiert l'activation. L'exécution de plusieurs instances de postgresql-server dans un espace de nom sysvipc partagé serait conflictuelle, et normalement ne fonctionnerait pas.
La fonctionnalité raw_sockets est normalement désactivée, pour prévenir l'usurpation d'IP depuis l'intérieur de l'environnement jail. En conséquence, l'outil ping ne fonctionnera pas correctement.
Création d'un nouvel environnement jail
JID=101 MIRROR="http://http.debian.net/debian" debootstrap \ --exclude=devd,dmidecode,isc-dhcp-client,isc-dhcp-common,kldutils,pf,vidcontrol \ wheezy /srv/jail/$JID "$MIRROR" HOSTNAME=jail$JID.example.com IP=10.1.0.$JID echo "$HOSTNAME" > /srv/jail/$JID/etc/hostname echo "$IP $HOSTNAME" >> /srv/jail/$JID/etc/hosts
L'option --exclude de debootstrap liste certains des paquets qui ne sont probablement pas utilisés dans l'environnement jail. Typiquement, le paquet devd ne fonctionnement pas dans une jail.
Assurez-vous que le fichier /etc/resolv.conf de l'environnement jail soit adapté. Si un résolveur DNS fonctionne sur le système hôte, vous devez le référencer par l'adresse IP unicast (public ou privée), tel que "nameserver 10.1.0.1" au lieu de "nameserver 127.0.0.1".
L'environnement jail n'a pas d'interface de bouclage à moins que vous en créez une.
Démarrer ou arrêter une jail
ATTENTION : Les versions antérieures de cette page Wiki n'expliquaient pas la configuration nécessaire de devfs pour restreindre l'ensemble des périphériques dans /dev. Voir les avis à-propos d'une issue similaire sur http://security.freebsd.org/advisories/FreeBSD-SA-14:07.devfs.asc
TODO: FreeBSD configure, en amont au démarrage, un jeu de 4 règles restreintes, adaptées aux environnements jails. Ce n'est pas encore packagé pour Debian GNU/kFreeBSD mais vous pouvez l'initialiser manuellement ; il vous suffit de le faire une fois par démarrage du système hôte (et non pas pour chaque création d'un environnement jail).
while read RULE ; do devfs rule -s 4 add $RULE ; done <<EOF hide path log unhide path null unhide path zero unhide path full unhide path crypto unhide path random unhide path urandom unhide path ptyp* unhide path ptyq* unhide path ptyr* unhide path ptys* unhide path ptyP* unhide path ptyQ* unhide path ptyR* unhide path ptyS* unhide path ptyl* unhide path ptym* unhide path ptyn* unhide path ptyo* unhide path ptyL* unhide path ptyM* unhide path ptyN* unhide path ptyO* unhide path ttyp* unhide path ttyq* unhide path ttyr* unhide path ttys* unhide path ttyP* unhide path ttyQ* unhide path ttyR* unhide path ttyS* unhide path ttyl* unhide path ttym* unhide path ttyn* unhide path ttyo* unhide path ttyL* unhide path ttyM* unhide path ttyN* unhide path ttyO* unhide path ptmx unhide path pts unhide path pts/* unhide path fd unhide path fd/* unhide path stdin unhide path stdout unhide path stderr unhide path ptyp* unhide user root group root EOF
FIXME: ce jeu de règles devfs casse la méthode d'allocation PTY utilisée par les chroots sous Wheezy ; les connexions ssh avertiront d'un message "PTY allocation request failed on channel 0", n'auront pas d'invite shell, et auront d'autres problèmes. Cette règle supplémentaire semble résoudre le problème (sans aucune idée du pourquoi, et sans savoir si cela est sécurisé) :
path pt* unhide
Les chroots Sid et Jessie n'ont pas besoin de cela - ils utilisent une nouvelle méthode d'allocation pty qui n'est pas affectée.
En supposant qu'une installation de debootstrap existe déjà dans /srv/jail/$JID/, voici une exemple de comment la démarrer à l'intérieur d'une jail :
JID=101 # Special filesystems are mounted, and specific device nodes made visible # in /dev, almost matching the container specification of Linux: # http://sources.debian.net/src/runc/0.0.4~dfsg-1/libcontainer/SPEC.md/?hl=70#L47 # Linux-like /proc and /sys filesystems mount -t linprocfs none /srv/jail/$JID/proc mount -t linsysfs none /srv/jail/$JID/sys # Ramdisk required for /run mount -t tmpfs none /srv/jail/$JID/run # A read-only /dev filesystem with restricted set of devices mount -t devfs none /srv/jail/$JID/dev mount -t fdescfs none /srv/jail/$JID/dev/fd # :XXX: ruleset 4 must be initialised as explained earlier in this Wiki page devfs -m /srv/jail/$JID/dev rule -s 4 applyset # Ensure the jail has the expected devices for DEVICE in null zero full random urandom tty pts ptmx shm fd stdin stdout stderr do if [ ! -e /srv/jail/$JID/dev/$DEVICE ] then echo "error: device '/dev/$DEVICE' MUST be available in the jail" exit 1 fi done # Ensure the jail only has a restricted set of devices for DEVICE in mem kmem do if [ -e /srv/jail/$JID/dev/$DEVICE ] then echo "error: device '/dev/$DEVICE' MUST NOT be available in the jail" exit 1 fi done # Compatibility symlink from /dev/shm to /run/shm ln -s /run/shm /srv/jail/$JID/dev/ # Optionally enable networking HOSTNAME=jail$JID.example.com # :XXX: this IP address *must* be assigned to one of the host's interfaces before the guest can use it IP=10.1.0.$JID mkdir -p /var/run/jail jail -J /var/run/jail/$JID.jid -c jid=$JID \ name=jail$JID \ path=/srv/jail/$JID \ host.hostname=$HOSTNAME \ ip4.addr=$IP \ allow.sysvipc=0 \ allow.raw_sockets=0 \ command=/bin/sh -- -c "/etc/init.d/rc S && /etc/init.d/rc 2"
TODO: "rc S" n'est peut-être pas nécessaire, car la plupart des réglages sont déjà effectués avant d'entrer dans l'environnement jail. Il est possible qu'openrc ou un autre système d’initialisation puisse être utilisé comme alternative aux scripts sysv-rc.
Vous souhaiterez peut-être installer et configurer les paramètres régionaux lors du premier démarrage :
apt-get install locales dpkg-reconfigure locales
Si openssh-server est installé à l'intérieur de l'environnement jail, vous devriez être capable de vous connecter en SSH, tout comme si c'était un serveur virtuel privé.
jls (pour lister les environnements jails) n'est pas encore disponible. 709225
jexec n'est pas encore disponible, mais vous pouvez probablement l'obtenir par :
# jail -m jid=$JID command=/bin/bash # cd
Un environnement jail s'arrête quand tous les processus internes sont terminés. (Dans l'environnement, la commande /etc/init.d/rc 0 ; exec kill -1 peut être une manière de forcer un arrêt ?)
Squeeze
Le paquet libjail n'est pas distribué avec Squeeze. La fonctionnalité du noyau existe depuis FreeBSD 4.x, donc elle peut fonctionner si vous pouvez créer les outils utilisateur nécessaires.