Osegi
Yazılım·2 dk okuma

Ubuntu 26.04 çekirdek güncellemesi AppArmor ile konteynerleri bozuyor

Ubuntu 26.04 çekirdeğindeki güvenlik yaması AppArmor profil yığınlamasını değiştirdi. Konteynerlerde sinyaller reddediliyor; gosu, PostgreSQL ve Percona podları takılıyor.

Server rack with terminal output showing AppArmor denied signal errors from a container running on an Ubuntu host.
Görsel: Хабр

Ubuntu 26.04 çekirdeğindeki bir güvenlik yaması, üretim ortamlarındaki konteynerleri beklenmedik biçimde çalışmaz hale getirebiliyor. AppArmor'daki değişiklik nedeniyle konteyner içindeki süreçler, aynı uid'e sahip kendi süreçlerine bile sinyal gönderirken Permission denied hatası alıyor. Sorun Kubernetes, k3s, RKE2 ve Docker sunucularını kapsıyor.

Sorun nasıl ortaya çıkıyor

Etkilenen ortam, Ubuntu 26.04 veya 7.0.0-41+ sürümünden backport alan çekirdekler; linux-aws ve linux-azure gibi bulut derlemeleri de dahil. Ayrıca kernel.apparmor_restrict_unprivileged_unconfined=1 ayarı (26.04'te varsayılan) açık olmalı ve containerd ya da Docker standart AppArmor profiliyle çalışmalı.

Çekirdek günlüğünde apparmor="DENIED" operation="signal" ve peer="cri-containerd.apparmor.d//&unconfined" gibi kayıtlar görülüyor. PostgreSQL could not signal for checkpoint: Permission denied hatası veriyor. gosu ve setuid çağıran her Go programı ise %100 CPU kullanıyor, ancak servis başlamıyor ve log üretilmiyor. Yazar durumu, Kubernetes kümesinde düğüm kaynakları değiştirildikten sonra ayağa kalkmayan PXC (Percona Operator for MySQL) podları ve ardından hiç Ready olmayan bir uygulama üzerinden anlatıyor.

Neden oluyor

Ubuntu'da Şubat 2025'ten beri etkin olan parametre, CAP_MAC_OVERRIDE yetkisi olmayan unconfined bir sürecin profil değiştirmesini engelliyor; yeni profil unconfined'in üzerine yığın olarak ekleniyor. 08c2f7c8d4b1 numaralı commit (CVE-2026-90231) bu kısıtın aşılmasını kapattı ve exec sırasında da zorunlu yığınlamayı uygulamaya başladı.

runc önce capability'leri bırakıyor, sonra konteyner sürecini exec ediyor. Sonuçta standart profili kullanan her konteyner cri-containerd.apparmor.d//&unconfined etiketiyle çalışıyor (Docker'da docker-default//&unconfined). containerd profil şablonu ise sinyallere yalnızca tam olarak cri-containerd.apparmor.d adından izin veriyor. Bileşik etiket bu kurala uymadığından çekirdek, aynı konteynerdeki süreçler ve iş parçacıkları arasındaki sinyalleri bile reddediyor.

Geçici çözümler ve takvim

Hızlı çözüm olarak PerconaXtraDBCluster CR'sinde AppArmor kapatılabiliyor; alternatif olarak crictl inspect ile host-PID bulunup sinyal düğümden root olarak gönderilebiliyor. Yazara göre etkilenmeyen son çekirdek linux 7.0.0-38.38. 7.0.0-42.42 resolute-security'ye girdi ve unattended-upgrades de bunu kuruyor. 7.0.0-43.43'te belirtiler sürüyor, 7.0.0-44.44 ise proposed aşamasında. LP #2172422 ve containerd#14485 açıldı, profil düzeltmesi için PR #14487 önerildi. Veriler arasında küçük bir tutarsızlık var: bazı raporlar ilk hatalı sürümü 7.0.0-41 olarak gösteriyor, bazıları yalnızca -42'yi denedi.

Göz atmaya değer uygulamalar

SUMO: sayı bulmacası

Doğru kareleri seçin, toplayın, hedefe ulaşın. Öğrenmesi kolay, ustalaşması zor. Ücretsiz, her yaşa uygun.

Dialo: konuşarak dil öğrenin

Yapay zekâ sohbet partneriyle konuşun; her cümleniz düzeltilip kendi dilinizde açıklanarak geri gelsin. 9 dil, A1'den C2'ye.

Etiketler:ubuntuapparmorkubernetescontainerdlinux kerneldocker

Aynı günden diğer haberler

Tümünü gör →

Daha fazla: Yazılım

Tümünü gör →