17. سپتامبر 2026
کوبرنتیز ۱٫۳۷: noexec روی bind mount و sticky bit برای emptyDir، هنوز آلفا

پستهای قبلی ۱٫۳۷ در گوی دربارهٔ هیستوگرام بومی پرومتئوس، Memory QoS و Workload-Aware Scheduling بودند. ۱۶ سپتامبر ۲۰۲۶ Nispriha Jagan و Neeraj Krishna Gopalakrishna از Red Hat در بلاگ کوبرنتیز مسیر دیگری را باز کردند: سختکردن volume mount داخل کانتینر.
پیشفرض امروز این است که runtime و kubelet volume را بدون noexec، nosuid و nodev bind میکنند. حتی با readOnlyRootFilesystem: true، پروسهٔ compromised میتواند روی emptyDir یا PersistentVolume باینری بنویسد، chmod +x کند و اجرا کند. mountOptions روی PV هم همان لایه نیست: فلگ فایلسیستم CSI است، نه فلگ bind داخل کانتینر.
دو feature gate، دو KEP
هر دو در v1.37 آلفااند و باید روی API server و kubelet روشن شوند:
VolumeBindMountOptions(KEP-5855). فیلدbindMountOptionsرویvolumeMounts؛ مثلاً[noexec, nosuid]. روی emptyDir، PV، CSI، projected، ConfigMap و Secret کار میکند. image volume پشتیبانی نمیشود.EmptyDirVolumeMode(KEP-5502). فیلدmodeروی خودemptyDir. پیشفرض تاریخی 0777 بود؛ حالا میشود 01777 (sticky bit مثل/tmp) یا مثلاً 0750.
Auditها این شکاف را سالها نوشته بودند: issue #48912 و یافتهٔ NCC در audit امنیتی ۱٫۲۴ (NCC-E003660-7HM / issue #119627).
برای /tmp مشترک بین builder و sidecar، sticky bit یعنی فقط owner فایل (یا root) حق حذف دارد؛ یک کانتینر فایل دیگری را rm نمیکند. تأیید داخل پاد:
sh: ./test.sh: Permission denied # روی volume با noexec
rm: can't remove '/tmp/guest_file': Operation not permitted # روی 01777
چیزی که آلفا را شکننده میکند
Runtime باید فیلد CRI mount_options را advertise کند. scheduler با Node Declared Features پاد را روی نود ناسازگار نمیگذارد؛ اگر برسد kubelet reject میکند، silent degradation نیست. خود mode برای emptyDir به پشتیبانی runtime نیاز ندارد. اگر API server گیت را داشته باشد و kubelet نه، mode پذیرفته میشود و kubelet به 0777 برمیگردد.
fsGroup مجوز گروه را روی mode emptyDir override میکند — همان رفتار defaultMode برای Secret/ConfigMap. لینوکس فقط؛ روی ویندوز bindMountOptions اثر ندارد و mode skip میشود.
اگر omit کنید رفتار قدیمی میماند. این هنوز GA نیست؛ برای سیاست CIS روی writable mount، بالاخره مسیر native آمده نه initContainer با chmod.