การเปิดตัว Bottlerocket 1.3 ซึ่งเป็นการจำหน่ายตามภาชนะที่แยกได้

มีการเผยแพร่การแจกจ่าย Bottlerocket 1.3.0 Linux ซึ่งพัฒนาโดยมีส่วนร่วมของ Amazon เพื่อเรียกใช้คอนเทนเนอร์แยกอย่างมีประสิทธิภาพและปลอดภัย ชุดเครื่องมือและส่วนประกอบการควบคุมของการแจกจ่ายเขียนขึ้นใน Rust และเผยแพร่ภายใต้ใบอนุญาต MIT และ Apache 2.0 รองรับการเรียกใช้ Bottlerocket บนคลัสเตอร์ Amazon ECS, VMware และ AWS EKS Kubernetes รวมถึงการสร้างบิลด์และรุ่นแบบกำหนดเองที่อนุญาตให้มีเครื่องมือการประสานและรันไทม์ที่แตกต่างกันสำหรับคอนเทนเนอร์

การกระจายให้อิมเมจระบบที่แบ่งแยกไม่ได้และอัปเดตโดยอัตโนมัติซึ่งรวมถึงเคอร์เนล Linux และสภาพแวดล้อมระบบขั้นต่ำที่มีเฉพาะส่วนประกอบที่จำเป็นในการรันคอนเทนเนอร์ สภาพแวดล้อมประกอบด้วยตัวจัดการระบบ systemd, ไลบรารี Glibc, เครื่องมือบิลด์ Buildroot, bootloader ของ GRUB, ตัวกำหนดค่าเครือข่ายที่ชั่วร้าย, รันไทม์คอนเทนเนอร์แบบแยกคอนเทนเนอร์, แพลตฟอร์ม Kubernetes container orchestration, aws-iam-authenticator และตัวแทน Amazon ECS .

เครื่องมือการจัดการคอนเทนเนอร์มาในคอนเทนเนอร์การจัดการแยกต่างหากที่เปิดใช้งานตามค่าเริ่มต้นและจัดการผ่าน API และ AWS SSM Agent อิมเมจพื้นฐานไม่มีเชลล์คำสั่ง เซิร์ฟเวอร์ SSH และภาษาที่ตีความ (เช่น ไม่มี Python หรือ Perl) - เครื่องมือการดูแลระบบและการดีบักจะถูกย้ายไปยังคอนเทนเนอร์บริการแยกต่างหาก ซึ่งถูกปิดใช้งานตามค่าเริ่มต้น

ข้อแตกต่างที่สำคัญจากการกระจายที่คล้ายคลึงกัน เช่น Fedora CoreOS, CentOS/Red Hat Atomic Host คือการมุ่งเน้นหลักในการให้ความปลอดภัยสูงสุดในบริบทของการเสริมความแข็งแกร่งในการป้องกันระบบจากภัยคุกคามที่เป็นไปได้ การใช้ประโยชน์จากช่องโหว่ในส่วนประกอบระบบปฏิบัติการที่ซับซ้อน และเพิ่มการแยกคอนเทนเนอร์ คอนเทนเนอร์ถูกสร้างขึ้นโดยใช้กลไกปกติของเคอร์เนล Linux - 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) และป้องกันการล้นของสแต็กผ่านการแทนที่ป้ายกำกับ canary สำหรับแพ็กเกจที่เขียนใน 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 และพลูโตแล้ว
  • คุณสามารถรีสตาร์ทคอนเทนเนอร์ได้หลังจากเปลี่ยนการตั้งค่าแล้ว
  • เพิ่มการรองรับอินสแตนซ์ Amazon 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 ใช้การตั้งค่า cgroup runtime.slice และ system.slice

ที่มา: opennet.ru

เพิ่มความคิดเห็น