Linux VServer Project
Linux-vserver est un projet qui vous permet de faire tourner Linux dans Linux. Chaque vserver possède sa propre distribution Linux, ses logiciels installés, ses utilisateurs… tout comme un chroot.
Mais les vservers sont plus qu’un changement de la racine du système de fichiers: c’est un changement du contexte de sécurité.
/usr/sbin/chcontext remplace /usr/sbin/chroot et permet de changer de contexte de sécurité. Faites un “/usr/sbin/chcontext xterm” et “ps aux” dans le nouvel xterm. Vous ne verrez que les processus appartenant au nouveau contexte de sécurité:
# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 12947 0.0 0.5 5476 2592 pts/1 S 23:43 0:00 xterm root 12948 0.0 0.2 2672 1492 pts/2 Ss 23:43 0:00 bash root 12994 0.0 0.1 2560 848 pts/2 R+ 23:46 0:00 ps aux
Un contexte de sécurité peut:
- isoler le système de fichiers: comme chroot
- isoler le réseau: chaque contexte peut avoir sa propre adresse IP grace à l’IP Aliasing et à des restrictions d’accès sur les autres interfaces
- avoir ses propres points de montage grâce aux namespaces: un montage peut être en lecture/écriture dans un contexte de sécurité, en lecture seule dans un autre, et non monté dans un autre.
- limiter les droits de root: utile pour empêcher le root d’un vserver de devenir root de l’hôte.
- limiter l’accès à /proc. Chaque vserver voit des informations différents dans /proc.
Un vserver est composé d’une arborescence dans /var/lib/vservers/<nom_du_vserver> et de sa configuration dans /etc/vservers/<nom_du_vserver>. Il est donc facilement déplacable d’une machine hôte à une autre en déplacant ces deux répertoires.
Le script /usr/sbin/vserver permet de démarrer, d’arrêter ou d’entrer dans un vserver. Pour démarrer un vserver, tous les scripts d’initialisation SysV de la distribution du vserver vont être démarrés (si la distribution utilise SysV). Dans un vserver Debian, la commande pstree donne:
$ pstree ?---atd |-cron |-inetd |-sshd-sshd-sshd-bash-pstree |-syslogd
Notez qu’il n’y a pas de processus init: celui-ci appartient à l’hôte et il est donc caché ici.
Voici comment j’ai installé un vserver:
Installation du noyau patché
- Prendre linux-2.6.11.6 sur http://www.kernel.org
- Prendre vs1.9.5 patch sur http://linux-vserver.org/
- Compiler le noyau:
make xconfig && make && make modules_install && make install && reboot
Installation des outils en espace utilisateur
- apt-get install util-vserver
Construire un nouveau vserver
vserver vserver04 build -m debootstrap \ --hostname vserver04 --netdev eth0 \ --interface 10.0.0.104/24 --context 104 \ -- -d sarge -m ftp://ftp2.fr.debian.org/debian
Démarrer le nouveau vserver
echo "default" > /etc/vservers/<nom_du_vserver>/apps/init/mark /etc/init.d/vservers-default start vserver vserver04 enter #Entrer dans le vserver
Configurer le NAT et l’accès à votre serveur SSH
Pour que votre vserver ait accès au réseau et pour pouvoir se loguer par SSH sur votre vserver depuis l’extérieur, il faut configurer:
- iptables sur l’hôte
- les interfaces du vserver
Iptables sur l’hôte
Iptables se configure uniquement sur l’hôte. On ne peut pas configurer iptables dans un vserver.
# Accepter les connexions entrantes sur le port 10422 $IPT -A INPUT -p tcp --dport 10422 -i eth0 -j ACCEPT # Pour que mon vserver ait accès à internet via un snat $IPT -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j SNAT --to-source $PUBLIC_IP # Pour que l'internet ait accès au sshd de mon vserver via une redirection de port dnat $IPT -t nat -A PREROUTING -p tcp --dport 10422 -i eth0 -j DNAT --to-destination 10.0.0.104:10422
Les interfaces du vserver
La configuration se trouve dans /etc/vserver/<nom_du_vserver>/interfaces/ Voir par exemple ma configuration
Liens utiles
- Site officiel
- The configuration files (conseil: avec Mozilla, choisir la feuille de style boring dans le menu Affichage)
- IRC: irc.oftc.net #vserver