Alban’s blog

April 22, 2005

Linux VServer Project

Filed under: Uncategorized — alban @ 12:20 am

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:

  1. isoler le système de fichiers: comme chroot
  2. 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
  3. 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.
  4. limiter les droits de root: utile pour empêcher le root d’un vserver de devenir root de l’hôte.
  5. 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é

  1. Prendre linux-2.6.11.6 sur http://www.kernel.org
  2. Prendre vs1.9.5 patch sur http://linux-vserver.org/
  3. Compiler le noyau:
   make xconfig && make && make modules_install && make install && reboot

Installation des outils en espace utilisateur

  1. 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:

  1. iptables sur l’hôte
  2. 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

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress