Upload
gnosek
View
7.701
Download
3
Embed Size (px)
DESCRIPTION
Slajdy z prezentacji o LXC z Dni Wolnego Oprogramowania w Bielsku-Białej
Citation preview
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
LXC – kontener pingwinów
Grzegorz Nosek,MegiTeam
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Wirtualizacja w kilku słowach
„Mam jeden komputer a chcę kilka”
• taniej niż kilka maszyn• lepsze wykorzystanie sprzętu• lepsza izolacja niż wszystko w jednym systemie
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Wirtualizacja w kilku słowach
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Wirtualizacja w kilku słowach
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Wirtualizacja w kilku słowach
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
LXC
LinuX Containers• Namespaces – wirtualizacja• CGroups – przydzielanie zasobów• LXC – narzędzia userspace'owe
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Namespaces
● drzewiasta struktura, osobna dla każdego rodzaju namespace'ów
● każdy proces ma przypisany zestaw● init_pid_ns, init_net_ns itp.
● manipulacje wymagają CAP_SYS_ADMIN
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Namespaces
● clone()● nowy proces, nowe namespace'y
● unshare() (od 2.6.16)● ten sam proces, nowe namespace'y
● setns() (od 3.2)● ten sam proces, istniejące namespace'y
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Namespaces
● FS namespace (CLONE_NEWNS)● własne drzewo katalogów● pam_namespace (np. prywatny /tmp)● w połączeniu z pivot_root lepszy chroot() niż
chroot()
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Namespaces
● PID namespace (CLONE_NEWPID)● własne ID procesów● własny init (pid=1)● więcej niż jeden pid na proces
– pid w każdym pidns od głównego do obecnego● strace ich nie lubi
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Namespaces
● user namespace (CLONE_NEWUSER)● uid1 == uid2?● capabilities
– ptrace, kill, itp.● VFS
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Namespaces
● net namespace (CLONE_NEWNET)● własne interfejsy sieciowe● interfejsy fizyczne● macvlan● veth
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Namespaces
● IPC namespace (CLONE_NEWIPC)● własna pamięć dzielona SYSV
● UTS namespace (CLONE_NEWUTS)● własna nazwa hosta
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● cgroupfs● mkdir, rmdir● echo $$ > .../tasks
– w dowolnym momencie
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● podsystemy montowane wspólnie lub osobno
● maksymalnie jedna dla każdego podsystemu
● zagnieżdżone grupy dziedziczą ograniczenia grup nadrzędnych
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● cpuset● podzbiór CPU dla procesów z danej grupy● „dedykowany rdzeń dla MySQLa”
● cpuacct● rozliczanie czasu CPU
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● cpu● sprawiedliwy przydział czasu procesora
– niedawny „magic patch”● limitowanie czasu procesora
– „CFS bandwidth control”– ograniczenie przydzielonego czasu procesora nawet
jeżeli są wolne zasoby
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● memory● ograniczenie pamięci fizycznej● ograniczenie przestrzeni wymiany● ograniczenie pamięci jądra (w drodze)● caveat emptor
– bardzo wrażliwy obszar jądra– nisko latające OOM killery
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● net_cls● oznacza wychodzący ruch sieciowy klasami tc
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● devices● ogranicza dostęp do poszczególnych urządzeń
– osobno odczyt, zapis, mknod
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● blkio● rozliczanie i limitowanie I/O do dysków● proporcjonalne (max. n% całego I/O)● stałe (max. n IOPS, max. n bajtów/sek.)● osobno dla każdego urządzenia
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● freezer● podobny efekt do kill -STOP całej grupy● jeden z klocków koniecznych do checkpoint-
restore i migracji na żywo
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● perf_event● perf: monitorowanie wydajności całego systemu● ograniczenie do wskazanej grupy● hic sunt leones
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
LXC
● zestaw narzędzi integrujących namespace'y i cgroups
● szablony dla popularnych dystrybucji● odpowiednik vzctl i util-vserver
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
LXC
● lxc-create -n testlxc -t debian● lxc-debian● lxc-fedora● lxc-ubuntu● (...)● lxc-busybox● lxc-sshd
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Kolorowe klocki raz jeszcze
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
LXC
● lxc-sshd● /dev, /lib, /bin, /usr, /sbin dzielone z
gospodarzem● reszta niewidoczna z poziomu kontenera
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
LXC
● dla LXC wirtualizacja sieci jest opcjonalna, pozostałe są obowiązkowe
● nic nie stoi na przeszkodzie, aby samemu poskładać namespace'y
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
LXC
● lxc-unshare● najbardziej bezpośrednie narzędzie● tworzy namespace'y i tyle
● pam_namespace● tylko FS namespace
● systemd● PrivateNetwork=yes● InaccessibleDirectories itp.
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
● niekompletna izolacja● sysfs● capabilities (SYS_REBOOT)● LSM (SELinux, Smack)● quoty● urządzenia (devpts zamiast /dev/tty*)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
root@precise1:~# lxc-unshare -s PID /bin/bash
root@precise1:~# echo $$
1
root@precise1:~# readlink /proc/$$/exe
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
root@precise1:~# lxc-unshare -s PID /bin/bash
root@precise1:~# echo $$
1
root@precise1:~# readlink /proc/$$/exe
/sbin/init
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
root@precise1:~# lxc-unshare -s 'PID|MOUNT' /bin/bash
root@precise1:~# umount /proc && mount /proc
root@precise1:~# readlink /proc/$$/exe
/bin/bash
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
root@precise1:~# mkdir /sys/fs/cgroup/blkio/slow
root@precise1:~# echo $$ > /sys/fs/cgroup/blkio/slow/tasks
root@precise1:~# echo '253:0 1000000' > /sys/fs/cgroup/blkio/slow/blkio.throttle.write_bps_device
root@precise1:~# dd if=/dev/zero of=zero bs=1M count=500 && rm zero
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 6.12093 s, 85.7 MB/s
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
root@precise1:~# dd if=/dev/zero of=zero bs=1M count=500 oflag=sync && rm zero
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 528.348 s, 992 kB/s
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
root@precise1:~# echo '253:0 1000000' > /sys/fs/cgroup/blkio/blkio.throttle.write_bps_device
root@precise1:~# dd if=/dev/zero of=zero bs=1M count=500 && rm zero
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 377.854 s, 1.4 MB/s
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
# http://blog.bofh.it/debian/id_413
lxc$ cat <<END > /tmp/evil-helper
#!/bin/sh
echo 'hi!' >> /tmp/evil-helper.log
END
lxc$ chmod +x /tmp/evil-helper
lxc# mkdir /sys
lxc# mount -t sysfs sysfs /sys
lxc# echo /var/lib/lxc/test/rootfs/tmp/evil-helper > /sys/kernel/uevent_helper
lxc# echo change > /sys/class/mem/null/uevent
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
● http://bit.ly/ytouBe – dyskusja o bezpieczeństwie LXC
● https://wiki.ubuntu.com/LxcSecurity
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Porównanie
OpenVZ Linux-VServer
LXC
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
That's all, folks!
Pytania?