Osegi
البرمجيات·2 دقائق قراءة

تحديث نواة Ubuntu 26.04 يعطل الحاويات بسبب تغيير في AppArmor

تغيّر تصحيح أمني في نواة Ubuntu 26.04 طريقة تكديس ملفات AppArmor، فترفض الحاويات الإشارات وتتجمد أدوات مثل gosu وPostgreSQL وحاويات Percona.

Server rack with terminal output showing AppArmor denied signal errors from a container running on an Ubuntu host.
الصورة: Хабр

قد يؤدي تصحيح أمني في نواة Ubuntu 26.04 إلى تعطيل بيئات الإنتاج التي تعتمد على الحاويات بشكل مفاجئ. فبسبب تغيير في AppArmor، تتلقى العمليات داخل الحاوية الخطأ Permission denied عند إرسال إشارات، حتى إلى عملياتها الخاصة التي تحمل المعرّف uid نفسه. وتشمل المشكلة Kubernetes وk3s وRKE2 ومضيفات Docker.

كيف يظهر العطل

تظهر المشكلة على Ubuntu 26.04 أو على أي نواة تتضمن الإصلاح المنقول من الإصدار 7.0.0-41 وما بعده، بما في ذلك إصدارات السحابة مثل linux-aws وlinux-azure. ويشترط ذلك أيضاً تفعيل الخيار kernel.apparmor_restrict_unprivileged_unconfined=1 (وهو الافتراضي في 26.04)، واستخدام containerd أو Docker مع ملف AppArmor القياسي.

تسجّل النواة رسائل من نوع apparmor="DENIED" operation="signal" مع peer="cri-containerd.apparmor.d//&unconfined". ويعرض PostgreSQL الخطأ could not signal for checkpoint: Permission denied، بينما تستهلك gosu وأي برنامج Go يستدعي setuid كامل المعالج بنسبة 100% دون أن تبدأ الخدمة ودون سجلات. ويروي الكاتب حالة تعذّر فيها إقلاع حاويات PXC (Percona Operator for MySQL) بعد تغيير موارد العقد في عنقود Kubernetes، ثم لم يصل التطبيق إلى حالة Ready.

السبب

فعّلت Ubuntu منذ فبراير 2025 معاملاً يمنع أي عملية unconfined لا تملك CAP_MAC_OVERRIDE من تبديل ملفها مباشرة، فيُكدَّس الملف الجديد فوق unconfined. وقد سدّ الإيداع 08c2f7c8d4b1 (CVE-2026-90231) ثغرة التحايل على هذا القيد، وصار يفرض التكديس عند exec أيضاً.

يُسقط runc الصلاحيات (capabilities) أولاً ثم ينفّذ exec لعملية الحاوية. والنتيجة أن كل حاوية بالملف القياسي تعمل بالوسم cri-containerd.apparmor.d//&unconfined (وفي Docker: docker-default//&unconfined). أما قالب ملف containerd فيسمح بالإشارات فقط من الاسم الدقيق cri-containerd.apparmor.d، فلا ينطبق عليه الوسم المركّب، وترفض النواة أي إشارة بين العمليات والخيوط داخل الحاوية نفسها.

الحلول المؤقتة والجدول الزمني

يمكن مؤقتاً تعطيل AppArmor في CR الخاص بـ PerconaXtraDBCluster، أو إرسال الإشارة من العقدة بصلاحية root بعد إيجاد host-PID عبر crictl inspect. ووفق الكاتب، فإن آخر نواة غير متأثرة هي linux 7.0.0-38.38. وقد وصلت 7.0.0-42.42 إلى resolute-security فصار unattended-upgrades يثبّتها، وتستمر الأعراض في 7.0.0-43.43، بينما 7.0.0-44.44 في proposed. فُتحت التذكرتان LP #2172422 وcontainerd#14485، واقتُرح إصلاح الملف في PR #14487. وثمة تباين بسيط في البيانات: بعض التقارير تعدّ 7.0.0-41 أول إصدار معيب، وبعضها اختبر -42 فقط.

تطبيقات تستحق النظر

SUMO: لغز الأرقام

اختر المربعات الصحيحة واجمعها وحقّق الهدف. سهل التعلم، صعب الإتقان. مجاني، لجميع الأعمار.

الوسوم:ubuntuapparmorkubernetescontainerdlinux kerneldocker

المزيد من هذا اليوم

عرض الكل →

المزيد في: البرمجيات

عرض الكل →