انتشار توزیع لینوکس Bottlerocket 1.3.0 منتشر شده است که با مشارکت آمازون برای راه اندازی کارآمد و ایمن کانتینرهای ایزوله توسعه یافته است. ابزارها و اجزای کنترل توزیع به زبان Rust نوشته شده و تحت مجوز MIT و Apache 2.0 توزیع شده اند. از اجرای Bottlerocket در آمازون ECS، VMware و خوشههای AWS EKS Kubernetes پشتیبانی میکند و همچنین ساختها و نسخههای سفارشی ایجاد میکند که امکان استفاده از ابزارهای مختلف هماهنگسازی و زمان اجرا را برای کانتینرها فراهم میکند.
این توزیع یک تصویر سیستم غیرقابل تقسیم بهروزرسانی اتمی و خودکار ارائه میکند که شامل هسته لینوکس و یک محیط حداقل سیستم است، که فقط شامل اجزای لازم برای اجرای کانتینرها میشود. این محیط شامل سیستم مدیر سیستم، کتابخانه Glibc، ابزار ساخت Buildroot، بارگذار بوت GRUB، پیکربندی شبکه بد، زمان اجرای کانتینر برای کانتینرهای ایزوله، پلت فرم هماهنگ سازی کانتینر Kubernetes، aws-iam-authenticator و آمازون است. عامل ECS.
ابزارهای ارکستراسیون کانتینر در یک محفظه مدیریت جداگانه قرار می گیرند که به طور پیش فرض فعال است و از طریق API و AWS SSM Agent مدیریت می شود. تصویر پایه فاقد پوسته فرمان، سرور SSH و زبان های تفسیر شده است (به عنوان مثال، بدون پایتون یا پرل) - ابزارهای مدیریتی و ابزارهای اشکال زدایی در یک ظرف سرویس جداگانه قرار می گیرند که به طور پیش فرض غیرفعال است.
تفاوت اصلی با توزیعهای مشابه مانند Fedora CoreOS، CentOS/Red Hat Atomic Host تمرکز اصلی بر ارائه حداکثر امنیت در زمینه تقویت حفاظت از سیستم در برابر تهدیدات احتمالی است، که بهرهبرداری از آسیبپذیریها در اجزای سیستمعامل و افزایش جداسازی کانتینر را دشوارتر میکند. . کانتینرها با استفاده از مکانیزم های استاندارد هسته لینوکس - cgroups، namespaces و seccomp ایجاد می شوند. برای جداسازی بیشتر، توزیع از SELinux در حالت "اجرا" استفاده می کند.
پارتیشن ریشه فقط خواندنی است و پارتیشن تنظیمات /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» اضافه میشوند. فعال -محافظت".
در نسخه جدید:
- آسیبپذیریهای رفع شده در ابزارهای داکر و زمان اجرا (CVE-2021-41089، CVE-2021-41091، CVE-2021-41092، CVE-2021-41103) مربوط به تنظیم نادرست حقوق دسترسی، که به کاربران غیرمجاز اجازه میدهد تا فراتر از حقوق دسترسی باشند. دایرکتوری و اجرای برنامه های خارجی
- پشتیبانی IPv6 به kubelet و pluto اضافه شده است.
- امکان راه اندازی مجدد کانتینر پس از تغییر تنظیمات آن وجود دارد.
- پشتیبانی از نمونه های آمازون EC2 M6i به بسته eni-max-pods اضافه شده است.
- Open-vm-tools پشتیبانی از فیلترهای دستگاه را بر اساس جعبه ابزار Cilium اضافه کرده است.
- برای پلت فرم x86_64، یک حالت بوت هیبریدی (با پشتیبانی از EFI و BIOS) اجرا شده است.
- نسخه های بسته و وابستگی های به روز شده برای زبان Rust.
- پشتیبانی از نوع توزیع aws-k8s-1.17 مبتنی بر Kubernetes 1.17 متوقف شده است. توصیه می شود از نسخه aws-k8s-1.21 با پشتیبانی از Kubernetes 1.21 استفاده کنید. انواع k8s از تنظیمات runtime.slice و system.slice cgroup استفاده می کنند.
منبع: opennet.ru