Title: "chroot mal anders" -- VServer 2.0 Author: Karsten Horsmann Date: Sep 07 2005 ******************************************** Viel Spass - Fragen werden gern beantwortet! Vserver - was ist das? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * VServer steht für eine Erweiterung des Linux Kernels um einige neue Systemaufrufe. * Somit sind Virtuelle Server auf Basis von Betriebssystemen möglich. * Im Gegensatz zu UML und XEN nutzt VServer nur einen Kernel. * Performance ist somit genauso wie auf einen nicht virtuellen Server (im Gegensatz zu anderen VM Lösungen) * Um Dienste wie dns, http, smb, smtp usw. zu trennen, wäre ein VServer Gast pro Dienst denkbar * Absicherung von VServer gegenüber Host * VServer Patch ist nicht an eine Plattform (i386) gebunden - funktioniert unter i386, amd64, ppc, ppc64, sparc usw. * UML und XEN sind nur weitere Architekturen - VServer läuft auch innerhalb eines UML - VServer wird schon auf XEN portiert Sourcen holen ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Wir benötigen - die Quellen des 2.6er Kernels - den VServer 2.0 Patch für den Kernel - die Utils von Enrico Scholz * Ich habe das mal kurz vorbereitet .--------------------------- | $ cd /usr/src | $ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.12.4.tar.bz2 | $ wget | http://www.13thfloor.at/vserver/s_rel26/v2.0/patch-2.6.12.4-vs2.0.diff.bz2 | $ wget | http://www.13thfloor.at/vserver/s_rel26/v2.0/util-vserver-0.30.208.tar.bz2 | $ tar xfj linux-2.6.12.4.tar.bz2 | $ tar xfj util-vserver-0.30.208.tar.bz2 | $ rm linux | $ ln -s linux-2.6.12.4 linux | $ `--------------------------- Sourcen patchen ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Vanilla Kernel patchen .--------------------------- | $ cd linux | $ bzcat ../patch-2.6.12.4-vs2.0.diff.bz2 | patch -p1 | $ `--------------------------- * Abgelehnte Dateien finden .--------------------------- | $ find ./ -name *.rej | $ `--------------------------- Kernel konfigurieren ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Den Kernel ein wenig justieren .--------------------------- | $ make menuconfig | $ `--------------------------- * Das jeweilige Dateisystem sollte mit "extended attributes" übersetzt werden * Die VServer Optionen im Kernel aktivieren .--------------------------- | Linux VServer ---> | [*] Enable Legacy Kernel API | [ ] Show a Legacy Version ID | [ ] Disable Legacy Networking Kernel API | [*] Enable Proc Security | [*] Enable Hard CPU Limits | [*] Limit the IDLE task | Persistent Inode Context Tagging (Disabled) ---> | [ ] Tag NFSD User Auth and Files | [ ] VServer Debugging Code `--------------------------- VServer Host vorbereiten ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * VServer Kernel installieren * Vserver Userspacetools installieren * VServer Verzeichnis mit der chroot-barrier versehen setattr --barrier /var/lib/vservers * Debian Sarge, da gibbes doch schon was ... - util-vserver - tools for Virtual private servers and context switching Leider veraltet - vserver-debiantools - Tools to manage debian virtual servers Diente früher zum VServer-Guest erstellen in VServer 2.0 nicht notwendig. VServer Gast Erzeugen ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Es ist keine "normale" Systeminstallation möglich * Implementierung einiger in util-vserver: - apt-rpm für Fedora/RH vserver - debootstrap für Debian vserver - skeleton für Basis Verzeichnisstruktur + Konfiguration * Wir lernen den Befehl vserver kennen - VServername/Hostname lugh - (optional aber wichtig) einmalige Contextnummer 42 - Debootstrap dient zum erstellen - das Interface eth0 soll genutzt werden - die IP-Adresse 192.168.0.208/24 verwenden - (optional) lugh als eth Alias - Ich möchte Sarge haben - Als Spiegel soll mein APT-Proxy herhalten * So schauts aus .--------------------------- | $ sudo vserver lugh build -m debootstrap --hostname lugh \ | --context 42 --interface lugh=eth0:192.168.0.208/24 -- -d sarge \ | -m http://stargate:9999/debian `--------------------------- VServer Guest erstellen ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Das dauert circa 3 Minuten (auf P3 733MHZ) * Anmerkung: das mach ich jetzt mal live * Zum Kopieren und Pusten $ sudo vserver lugh build -m debootstrap --hostname lugh \ --context 42 --interface lugh=eth0:192.168.0.208/24 -- -d sarge \ -m http://stargate:9999/debian VServer Tools ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Was läuft hier? .--------------------------- | $ sudo vserver-stat | CTX PROC VSZ RSS userTIME sysTIME UPTIME NAME | 0 42 95.1M 22.7M 8m06s70 2m50s11 2d00h37 root server | 49152 25 221.9M 57.9M 2m21s10 0m17s43 2d00h36 stargate `--------------------------- * Wie starte ich den neuen VServer lugh? .--------------------------- | $ sudo vserver lugh start `--------------------------- lugh startet ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Was sagt vserver-stat dazu? .--------------------------- | $ sudo vserver-stat | CTX PROC VSZ RSS userTIME sysTIME UPTIME NAME | 0 42 95.1M 22.7M 8m06s70 2m50s11 2d00h37 root server | 49152 25 221.9M 57.9M 2m21s10 0m17s43 2d00h36 stargate | 42 5 11.1M 3.9M 0m00s00 0m00s00 8m22s30 lugh `--------------------------- VServer beenden ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Wie beendete ich einen VServer? .--------------------------- | $ vserver lugh stop | Stopping periodic command scheduler: cron. | Stopping MTA: exim4. | Stopping internet superserver: inetd. | Saving the System Clock time to the Hardware Clock... | hwclock is unable to get I/O port access: the iopl(3) call failed. | Hardware Clock updated to Wed Aug 10 10:20:19 UTC 2005. | Stopping deferred execution scheduler: atd. | Stopping kernel log daemon: klogd. | Stopping system log daemon: syslogd. | Sending all processes the TERM signal...done. | Sending all processes the KILL signal...done. | Saving random seed...done. | Unmounting remote and non-toplevel virtual filesystems...done. | Deconfiguring network interfaces...done. | Cleaning up ifupdown...done. | Deactivating swap...umount: none: not found | umount: /tmp: must be superuser to umount | Not superuser. | done. | Unmounting local filesystems...umount: none: not found | umount: /tmp: must be superuser to umount | umount: /dev/hdv1: not found | umount: /: not mounted | done. | mount: permission denied | Rebooting... ifdown: shutdown eth0: Permission denied | ifdown: shutdown eth0: Permission denied | ifdown: shutdown eth0: Permission denied `--------------------------- Vserver Bedienung ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * vserver lugh enter - Ermöglicht das chrooten in den VServer lugh * deb-Packet iproute --> using 'ip addr ls' instead of the ancient ifconfig you will _see_ the configured (and allowed) ips ... * Den VServer lugh löschen .--------------------------- | $ sudo rm -rf /etc/vservers/lugh/ | $ sudo rm -rf /var/lib/vservers/lugh/ `--------------------------- Dienste anpassen ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Samba Daemonen nur an die VServer IP binden bind interfaces only = yes interfaces = 192.168.0.208/24 * SSH Daemon auf dem Host anpassen ListenAddress 192.168.0.33 Quellen ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Erläuterung zu VServer, Xen und UML http://de.wikipedia.org/wiki/Vserver http://de.wikipedia.org/wiki/Xen http://de.wikipedia.org/wiki/User_Mode_Linux * VServer Wiki Seite, Herbert Pötzl (Kernel), Enrico Scholz (util-vserver) http://linux-vserver.org/ http://linux-vserver.org/Documentation http://www.13thfloor.at/vserver/s_rel26/v2.0/ http://www.13thfloor.at/~ensc/util-vserver/files/doc/virtual-servers.pdf util-vserver http://www.nongnu.org/util-vserver #vserver auf oftc.net