1. LXC – kontener pingwinów
Grzegorz Nosek,
MegiTeam
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
2. 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
3. Wirtualizacja w kilku słowach
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
4. Wirtualizacja w kilku słowach
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
5. Wirtualizacja w kilku słowach
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
6. LXC
LinuX Containers
• Namespaces – wirtualizacja
• CGroups – przydzielanie zasobów
• LXC – narzędzia userspace'owe
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
7. 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
8. 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
9. 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
10. 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
11. Namespaces
● user namespace (CLONE_NEWUSER)
● uid1 == uid2?
● capabilities
– ptrace, kill, itp.
● VFS
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
12. Namespaces
● net namespace (CLONE_NEWNET)
● własne interfejsy sieciowe
● interfejsy fizyczne
● macvlan
● veth
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
13. 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
14. CGroups
● cgroupfs
● mkdir, rmdir
● echo $$ > .../tasks
– w dowolnym momencie
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
15. 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
16. 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
17. 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
19. 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
20. CGroups
● net_cls
● oznacza wychodzący ruch sieciowy klasami tc
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
21. CGroups
● devices
● ogranicza dostęp do poszczególnych urządzeń
– osobno odczyt, zapis, mknod
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
22. 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
23. 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
24. 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
25. 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
27. Kolorowe klocki raz jeszcze
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
28. 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
29. 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
30. 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
31. 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
32. 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
33. 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
34. 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
35. 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
36. 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
37. 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
38. 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
39. 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
40. Porównanie
OpenVZ Linux-VServer
LXC
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
41. That's all, folks!
Pytania?
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012