Выпуск Bottlerocket 1.3, дыстрыбутыва на базе ізаляваных кантэйнераў

Апублікаваны выпуск Linux-дыстрыбутыва Bottlerocket 1.3.0, які развіваецца пры ўдзеле кампаніі Amazon для эфектыўнага і бяспечнага запуску ізаляваных кантэйнераў. Інструментарый і кіравальныя кампаненты дыстрыбутыва напісаны на мове Rust і распаўсюджваюцца пад ліцэнзіямі MIT і Apache 2.0. Падтрымліваецца запуск Bottlerocket у кластарах Amazon ECS, VMware і AWS EKS Kubernetes, а таксама стварэнне адвольных зборак і рэдакцый, якія дапускаюць ужыванне розных прылад аркестроўкі і runtime для кантэйнераў.

Дыстрыбутыў падае атамарна і аўтаматычна які абнаўляецца непадзельная сістэмная выява, улучальны ядро ​​Linux і мінімальнае сістэмнае асяроддзе, улучальныя толькі кампаненты, неабходныя для запуску кантэйнераў. У асяроддзі задзейнічаны сістэмны мэнэджар systemd, бібліятэка Glibc, зборачны інструментар Buildroot, загрузнік GRUB, канфігуратар сеткі wicked, runtime для ізаляваных кантэйнераў containerd, платформа аркестроўкі кантэйнераў Kubernetes, аўтэнтыфікатар aws-iam-authenticator і агент Amazon.

Інструменты для аркестроўкі кантэйнераў пастаўляюцца ў асобным кіраўніку кантэйнера, які ўключаецца па змаўчанні і кіруецца праз API і AWS SSM Agent. У базавай выяве адсутнічае камандная абалонка, сервер SSH і інтэрпрэтаваныя мовы (напрыклад, няма Python ці Perl) — сродкі для адміністратара і адладкавыя прылады вынесеныя ў асобны службовы кантэйнер, які па змаўчанні адключаны.

Ключавым адрозненнем ад падобных дыстрыбутываў, такіх як Fedora CoreOS, CentOS/Red Hat Atomic Host з'яўляецца першасная арыентацыя на падаванне максімальнай бяспекі ў кантэксце ўзмацнення абароны сістэмы ад магчымых пагроз, ускладненні эксплуатацыі ўразлівасцяў у кампанентах АС і падвышэнні ізаляцыі кантэйнераў. Кантэйнеры ствараюцца пры дапамозе штатных механізмаў ядра Linux - cgroups, прастор імёнаў і seccomp. Для дадатковай ізаляцыі ў дыстрыбутыве ўжываецца SELinux у рэжыме "enforcing".

Каранёвая частка мантуецца ў рэжыме толькі для чытання, а частка з наладамі /etc мантуецца ў tmpfs і аднаўляе зыходны стан пасля перазапуску. Прамая змена файлаў у каталогу /etc, такіх як /etc/resolv.conf і /etc/containerd/config.toml, не падтрымліваецца - для сталага захавання налад варта выкарыстоўваць API або выносіць функцыянальнасць у асобныя кантэйнеры. Для крыптаграфічнай верыфікацыі цэласнасці каранёвай часткі задзейнічаны модуль dm-verity, а ў выпадку выяўлення спробы мадыфікацыі дадзеных на ўзроўні блокавай прылады сістэма перазагружаецца.

Большасць сістэмных кампанентаў напісаны на мове Rust, які прадстаўляе сродкі для бяспечнай працы з памяццю, якія дазваляюць пазбегнуць уразлівасцяў, выкліканых зваротам да вобласці памяці пасля яе вызвалення, разнайменаваннем нулявых паказальнікаў і выхадам за межы буфера. Пры зборцы па змаўчанні ўжываюцца рэжымы кампіляцыі «enable-default-pie» і enable-default-ssp для ўключэння рандомизации адраснай прасторы выкананых файлаў (PIE) і абароны ад перапаўнення стэка праз падстаноўку канарэчных пазнак. Для пакетаў, напісаных на мове C/C++, дадаткова ўключаюцца сцягі "-Wall", "-Werror=format-security", "-Wp,-D_FORTIFY_SOURCE=2", "-Wp,-D_GLIBCXX_ASSERTIONS" і "-fstack-clash -protection».

У новым выпуску:

  • Ухіленыя ўразлівасці ў прылады docker і runtime containerd (CVE-2021-41089, CVE-2021-41091, CVE-2021-41092, CVE-2021-41103), злучаныя з некарэктнай усталёўкай правоў доступу, што дазваляла неприви і выканаць знешнія праграмы.
  • У kubelet і pluto дададзена падтрымка IPv6.
  • Дана магчымасць перазапуску кантэйнера пасля змены яго налад.
  • У пакет eni-max-pods дададзена падтрымка інстансаў Amazon EC2 M6i.
  • У open-vm-tools дададзена падтрымка фільтраў прылад, рэалізаваная на базе інструментара Cilium.
  • Для платформы x86_64 рэалізаваны гібрыдны рэжым загрузкі (з падтрымкай EFI і BIOS).
  • Абноўлены версіі пакетаў і залежнасці для мовы Rust.
  • Спынена падтрымка варыянту дыстрыбутыва aws-k8s-1.17 на базе Kubernetes 1.17. Рэкамендавана выкарыстоўваць варыянт aws-k8s-1.21 з падтрымкай Kubernetes 1.21. У варыянтах k8s задзейнічаны налады cgroup runtime.slice і system.slice.

Крыніца: opennet.ru

Дадаць каментар