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 से जुड़े CVE-2026-90231 के फिक्स के बाद कंटेनरों के भीतर सिग्नल भेजना "Permission denied" के साथ नाकाम हो रहा है। नतीजा यह कि gosu, PostgreSQL और Percona के पॉड ठीक से शुरू नहीं हो पा रहे।

किन सिस्टम पर असर

समस्या Ubuntu 26.04 या 7.0.0-41+ से बैकपोर्ट वाले कर्नल पर दिखती है, जिनमें linux-aws और linux-azure जैसे क्लाउड बिल्ड भी शामिल हैं। शर्त यह है कि kernel.apparmor_restrict_unprivileged_unconfined=1 सेट हो, जो 26.04 में डिफ़ॉल्ट है, और containerd या Docker स्टैंडर्ड AppArmor प्रोफाइल के साथ चल रहा हो। यानी लगभग हर Kubernetes, k3s, RKE2 या Docker होस्ट।

लक्षण साफ हैं: कंटेनर में समान uid और बंद seccomp के बावजूद kill ऑपरेशन अस्वीकृत होता है। gosu 100% CPU पर घूमता रहता है, पर सर्विस शुरू नहीं होती और लॉग खाली रहते हैं। PostgreSQL "could not signal for checkpoint: Permission denied" दिखाता है, और कर्नल लॉग में peer="cri-containerd.apparmor.d//&unconfined" वाली DENIED एंट्री मिलती है।

कारण क्या है

यह पैरामीटर फरवरी 2025 से Ubuntu में है और बिना CAP_MAC_OVERRIDE वाले unconfined प्रोसेस को प्रोफाइल बदलने के बजाय उसे unconfined के ऊपर स्टैक करता है। कमिट 08c2f7c8d4b1 ने इस पाबंदी की एक बाईपास राह बंद की और exec के समय भी जबरन स्टैकिंग लागू कर दी। runc पहले capabilities हटाता है, फिर exec करता है, इसलिए हर कंटेनर cri-containerd.apparmor.d//&unconfined लेबल के तहत चलता है (Docker में docker-default//&unconfined)।

containerd के प्रोफाइल टेम्पलेट में signal (receive) और ptrace के नियम केवल सटीक नाम peer=cri-containerd.apparmor.d के लिए हैं। संयुक्त लेबल इनसे मेल नहीं खाता, इसलिए कर्नल एक ही कंटेनर के प्रोसेसों और थ्रेड के बीच भी सिग्नल रोक देता है। Go में setuid इसी वजह से sched_yield लूप में फँस जाता है।

समयरेखा और उपाय

7.0.0-38.38 आख़िरी अप्रभावित कर्नल बताया गया है। 7.0.0-42.42 resolute-updates में आया और उसी दिन LP #2172422 तथा containerd#14485 खुले; बाद में यह resolute-security में पहुँचा, जिससे unattended-upgrades ने इसे अपने आप इंस्टॉल किया और नोड रीबूट के बाद पहली गड़बड़ियाँ दिखीं। 7.0.0-43.43 में भी लक्षण बने रहे, जबकि 7.0.0-44.44 proposed में है। रिपोर्टों में थोड़ा मतभेद है: कुछ पहला ख़राब संस्करण -41 बताती हैं, कुछ ने केवल -42 जाँचा।

अस्थायी उपाय के तौर पर Percona CR में AppArmor हटाया गया, या नोड से root के रूप में host-PID ढूँढकर (crictl inspect) सिग्नल भेजा गया। containerd प्रोफाइल के लिए फिक्स PR #14487 प्रस्तावित है।

देखने लायक ऐप्स

SUMO: नंबर पज़ल

सही खाने चुनें, जोड़ें, लक्ष्य तक पहुँचें। सीखना आसान, महारत मुश्किल। मुफ़्त, हर उम्र के लिए।

Dialo: बोलकर भाषाएँ सीखें

AI बातचीत साथी से बात करें; हर वाक्य सुधरकर आपकी भाषा में समझाया हुआ लौटता है। 9 भाषाएँ, A1 से C2 तक।

giftdetect: मिनटों में सही तोहफ़ा

चुनें किसके लिए, किस मौके पर और कैसा स्वभाव। सर्च इंजन स्थानीय दुकानों के उत्पाद विवरण पढ़कर सबसे उपयुक्त विकल्प ऊपर रखता है। मुफ़्त, बिना साइन-अप।

टैग:ubuntuapparmorkubernetescontainerdlinux kerneldocker

इसी दिन की और ख़बरें

सभी देखें →

और पढ़ें:: सॉफ़्टवेयर

सभी देखें →