یک شاخه پایدار جدید از کیت ابزار Flatpak 1.12 منتشر شده است که سیستمی را برای ساخت بسته های مستقل ارائه می دهد که به توزیع های لینوکس خاص متصل نیستند و در یک ظرف خاص اجرا می شوند که برنامه را از بقیه سیستم جدا می کند. پشتیبانی از اجرای بسته های Flatpak برای Arch Linux، CentOS، Debian، Fedora، Gentoo، Mageia، Linux Mint، Alt Linux و Ubuntu ارائه شده است. بسته های Flatpak در مخزن فدورا گنجانده شده اند و توسط مدیر برنامه اصلی GNOME پشتیبانی می شوند.
نوآوری های کلیدی در شعبه Flatpak 1.12:
- مدیریت بهبود یافته محیطهای sandbox تودرتو مورد استفاده در بسته flatpak با مشتری برای سرویس تحویل بازی Steam. در sandboxهای تودرتو، ایجاد سلسله مراتب مجزا از دایرکتوریهای usr و /app مجاز است که در Steam برای راهاندازی بازیها در یک کانتینر جداگانه با پارتیشن /usr خود، جدا از محیط با مشتری Steam استفاده میشود.
- همه نمونه های بسته با شناسه برنامه یکسان (app-ID) دایرکتوری های /tmp و $XDG_RUNTIME_DIR را به اشتراک می گذارند. به صورت اختیاری، با استفاده از پرچم "--allow=per-app-dev-shm"، می توانید استفاده از دایرکتوری مشترک /dev/shm را فعال کنید.
- پشتیبانی بهبودیافته برای برنامه های کاربردی Text User Interface (TUI) مانند gdb.
- اجرای سریعتر دستور "ostree prune" به ابزار build-update-repo اضافه شده است که برای کار با مخازن در حالت بایگانی بهینه شده است.
- آسیبپذیری CVE-2021-41133 در پیادهسازی مکانیزم پورتال، مرتبط با عدم مسدود شدن تماسهای سیستمی جدید مربوط به نصب پارتیشنها در قوانین seccomp، رفع شده است. این آسیبپذیری به برنامه اجازه میدهد تا یک sandbox تودرتو برای دور زدن مکانیسمهای تأیید «پورتال» که برای سازماندهی دسترسی به منابع خارج از کانتینر استفاده میشوند، ایجاد کند.
در نتیجه، یک مهاجم با انجام تماسهای سیستمی مرتبط با نصب، میتواند مکانیسم جداسازی جعبه سند را دور بزند و به محتویات محیط میزبان دسترسی کامل پیدا کند. این آسیبپذیری فقط در بستههایی قابل استفاده است که برنامههایی را با دسترسی مستقیم به سوکتهای AF_UNIX، مانند مواردی که توسط Wayland، Pipewire و pipewire-pulse استفاده میشوند، ارائه میکنند. در نسخه 1.12.0، این آسیب پذیری به طور کامل برطرف نشد، بنابراین به روز رسانی 1.12.1 به صورت داغ منتشر شد.
یادآوری می کنیم که Flatpak به توسعه دهندگان برنامه اجازه می دهد تا توزیع برنامه های خود را که در مخازن توزیع استاندارد گنجانده نشده اند را با تهیه یک ظرف جهانی بدون ایجاد مجموعه های جداگانه برای هر توزیع ساده کنند. برای کاربرانی که از امنیت آگاه هستند، Flatpak به شما امکان می دهد یک برنامه مشکوک را در یک کانتینر اجرا کنید و فقط به عملکردهای شبکه و فایل های کاربر مرتبط با برنامه دسترسی داشته باشید. برای کاربران علاقه مند به محصولات جدید، Flatpak به شما این امکان را می دهد که آخرین نسخه های آزمایشی و پایدار برنامه ها را بدون نیاز به ایجاد تغییرات در سیستم نصب کنید. به عنوان مثال، بسته های Flatpak برای LibreOffice، Midori، GIMP، Inkscape، Kdenlive، Steam، 0 AD، Visual Studio Code، VLC، Slack، Skype، Telegram Desktop، Android Studio و غیره ساخته شده اند.
برای کاهش اندازه بسته، فقط وابستگیهای خاص برنامه را شامل میشود و سیستمهای پایه و کتابخانههای گرافیکی (کتابخانههای GTK، Qt، GNOME و KDE و غیره) بهعنوان محیطهای زمان اجرا استاندارد پلاگین طراحی شدهاند. تفاوت اصلی Flatpak و Snap در این است که Snap از اجزای محیط اصلی سیستم و جداسازی مبتنی بر فراخوانی سیستم استفاده میکند، در حالی که Flatpak یک کانتینر جدا از سیستم ایجاد میکند و با مجموعههای زمان اجرا بزرگ کار میکند و بستهها را نه به عنوان وابستگی، بلکه استاندارد ارائه میکند. محیط های سیستم ones (به عنوان مثال، تمام کتابخانه های لازم برای عملکرد برنامه های GNOME یا KDE).
علاوه بر محیط استاندارد سیستم (زمان اجرا) که از طریق یک مخزن ویژه نصب شده است، وابستگی های اضافی (بسته) مورد نیاز برای عملکرد برنامه ارائه می شود. در مجموع، زمان اجرا و بسته نرم افزاری پر شدن کانتینر را تشکیل می دهند، علیرغم این واقعیت که زمان اجرا به طور جداگانه نصب می شود و به طور همزمان به چندین کانتینر متصل می شود، که به شما امکان می دهد از تکرار فایل های سیستمی رایج در کانتینرها جلوگیری کنید. یک سیستم میتواند چندین زمان اجرا (GNOME، KDE) یا چندین نسخه از یک زمان اجرا (گنوم 3.40، گنوم 3.42) را نصب کند. یک کانتینر با یک برنامه کاربردی به عنوان یک وابستگی فقط از یک اتصال به یک زمان اجرا خاص استفاده می کند، بدون اینکه بسته های جداگانه ای را که زمان اجرا را تشکیل می دهند در نظر بگیرد. تمام عناصر گم شده مستقیماً با برنامه بسته بندی می شوند. هنگامی که یک کانتینر تشکیل می شود، محتویات زمان اجرا به عنوان پارتیشن usr/ و بسته نرم افزاری در دایرکتوری /app نصب می شود.
زمان اجرا و کانتینرهای برنامه با استفاده از فناوری OSTree ساخته شده اند، که در آن تصویر به صورت اتمی از یک مخزن Git مانند به روز می شود، که اجازه می دهد تا روش های کنترل نسخه بر روی اجزای توزیع اعمال شود (به عنوان مثال، می توانید به سرعت سیستم را به یک مخزن بازگردانید. حالت قبلی). بسته های RPM با استفاده از یک لایه rpm-ostree ویژه به مخزن OSTree ترجمه می شوند. نصب و بهروزرسانی جداگانه بستهها در محیط کار پشتیبانی نمیشود؛ سیستم نه در سطح اجزای جداگانه، بلکه به طور کلی بهروزرسانی میشود و وضعیت خود را به صورت اتمی تغییر میدهد. ابزارهایی را برای اعمال بهروزرسانیها به صورت تدریجی فراهم میکند و نیازی به جایگزینی کامل تصویر با هر بهروزرسانی را از بین میبرد.
محیط ایزوله تولید شده کاملاً مستقل از توزیع مورد استفاده است و با تنظیمات مناسب بسته، به فایل ها و فرآیندهای کاربر یا سیستم اصلی دسترسی ندارد، نمی تواند مستقیماً به تجهیزات دسترسی داشته باشد، به استثنای خروجی از طریق DRI، و با زیرسیستم شبکه تماس می گیرد. خروجی گرافیک و سازماندهی ورودی با استفاده از پروتکل Wayland یا از طریق سوکت X11 Forwarding پیاده سازی می شود. تعامل با محیط خارجی بر اساس سیستم پیام رسانی DBus و یک پورتال API ویژه است.
برای جداسازی، از لایه Bubblewrap و فناوریهای مجازیسازی کانتینر لینوکس سنتی، بر اساس استفاده از cgroups، namespaces، Seccomp و SELinux استفاده میشود. PulseAudio برای خروجی صدا استفاده می شود. در این حالت می توان جداسازی را غیرفعال کرد که توسط توسعه دهندگان بسیاری از بسته های محبوب برای دسترسی کامل به سیستم فایل و تمام دستگاه های موجود در سیستم استفاده می شود. به عنوان مثال، GIMP، VSCodium، PyCharm، Octave، Inkscape، Audacity و VLC با یک حالت انزوا محدود ارائه میشوند که دسترسی کامل به فهرست اصلی را میگذارد.
اگر بستههای با دسترسی به فهرست اصلی در معرض خطر قرار گیرند، علیرغم وجود برچسب "sandboxed" در توضیحات بسته، مهاجم فقط باید فایل ~/.bashrc را تغییر دهد تا کد خود را اجرا کند. موضوع جداگانه کنترل تغییرات بسته ها و اعتماد به سازندگان بسته است که اغلب با پروژه یا توزیع های اصلی مرتبط نیستند.
منبع: opennet.ru