Ubuntu 26.04: aktualizacja jądra z AppArmor psuje kontenery
Poprawka bezpieczeństwa w jądrze Ubuntu 26.04 zmienia stackowanie profili AppArmor. Kontenery odmawiają sygnałów, a gosu, PostgreSQL i pody Percona zawieszają się.

Poprawka bezpieczeństwa w jądrze Ubuntu 26.04 może nieoczekiwanie unieruchomić kontenery na produkcji. Zmiana w AppArmor sprawia, że procesy wewnątrz kontenerów dostają błąd Permission denied przy wysyłaniu sygnałów, nawet do własnych procesów z tym samym uid. Problem dotyczy m.in. Kubernetesa, k3s, RKE2 i hostów Docker.
Jak objawia się awaria
Problem wystąpi na Ubuntu 26.04 lub na jądrze z backportem z wersji 7.0.0-41+, także w buildach chmurowych, takich jak linux-aws i linux-azure. Dodatkowo parametr kernel.apparmor_restrict_unprivileged_unconfined=1 (w 26.04 domyślny) musi być włączony, a środowisko musi używać containerd lub Dockera ze standardowym profilem AppArmor.
W dzienniku jądra pojawiają się wpisy w rodzaju apparmor="DENIED" operation="signal" z peer="cri-containerd.apparmor.d//&unconfined". PostgreSQL zgłasza błąd could not signal for checkpoint: Permission denied. Z kolei gosu, a także każdy program w Go wywołujący setuid, zajmuje 100% CPU, ale usługa nie startuje i nie ma logów. Autor opisuje to na przykładzie podów PXC (Percona Operator for MySQL), które nie wstały po zmianie zasobów węzłów w klastrze Kubernetes, a potem aplikacji, która nigdy nie stała się Ready.
Przyczyna
Od lutego 2025 roku Ubuntu włącza parametr, który uniemożliwia procesowi unconfined bez CAP_MAC_OVERRIDE zwykłą zmianę profilu; nowy profil jest nakładany stosem na unconfined. Commit 08c2f7c8d4b1 (CVE-2026-90231) zamknął obejście tego ograniczenia i zaczął wymuszać stack także przy exec.
runc najpierw zrzuca capabilities, a potem wykonuje exec procesu kontenera. W efekcie każdy kontener ze standardowym profilem działa pod etykietą cri-containerd.apparmor.d//&unconfined (w Dockerze docker-default//&unconfined). Szablon profilu containerd zezwala jednak na sygnały tylko od dokładnej nazwy cri-containerd.apparmor.d, więc złożona etykieta nie pasuje i jądro odrzuca sygnały nawet między wątkami jednego kontenera.
Obejścia i chronologia
Doraźnie pomaga wyłączenie AppArmor w CR PerconaXtraDBCluster albo wysłanie sygnału z węzła jako root, po znalezieniu host-PID przez crictl inspect. Ostatnim nietkniętym jądrem jest według autora linux 7.0.0-38.38. Wersja 7.0.0-42.42 trafiła do resolute-security, więc instaluje ją też unattended-upgrades. Wersja 7.0.0-43.43 nadal ma objawy, a 7.0.0-44.44 jest w proposed. Zgłoszono błąd LP #2172422 i containerd#14485, a poprawkę profilu zaproponowano w PR #14487. Dane są nieco rozbieżne: część raportów wskazuje jako pierwszą wadliwą wersję 7.0.0-41, część sprawdzała tylko -42.
Aplikacje warte uwagi
Wybierz właściwe pola, dodaj je i trafiaj w cel. Łatwa do nauczenia, trudna do opanowania. Za darmo, dla każdego wieku.
Rozmawiaj z partnerem AI; każde zdanie wraca poprawione i wyjaśnione w Twoim języku. 9 języków, od A1 do C2.
Otwieraj komunikaty EDIFACT i X12, każdy segment objaśniony, konwersja do JSON/XML, eksport PDF i Excel. Działa lokalnie, bez wysyłania.
Wybierz dla kogo, okazję i osobowość. Wyszukiwarka czyta opisy produktów lokalnych sklepów i układa to, co pasuje. Za darmo, bez rejestracji.
Więcej z tego dnia
Zobacz wszystkie →
LINE wprowadza zaplanowane wiadomości na rok naprzód, na razie za darmo

Flipper One gotowy do startu na Kickstarterze, od 379 dolarów

Dezhurka: dyżury on-call w Telegramie po wygaszeniu Opsgenie



