След две години и половина разработка, новата стабилна версия на инструментариума Flatpak 1.16 е публикувана, предоставяйки система за изграждане на самостоятелни пакети, които не са свързани с конкретни дистрибуции на Linux и работят в специален контейнер, изолиращ приложението от останалата част на системата. Поддръжката за изпълнение на Flatpak пакети е осигурена за Fedora, CentOS, Debian, Arch Linux, Gentoo, Linux Mint, Alt Linux и Ubuntu. Flatpak пакетите са включени в репозитория на Fedora и се поддържат в стандартните приложения за управление GNOME и KDE.
Ключови нововъведения в Flatpak 1.16:
- Преходът към системата за изграждане Meson е реализиран. Поддръжката за изграждане с помощта на инструмента Autotools е прекратена. За изграждането на Flatpak сега е необходимо наличието на Python в системата, поне версия 3.5.
- Реализиран е споделен достъп до gssproxy сокета, който позволява използването на удостоверяване чрез Kerberos в приложенията, работещи в режим на песъчарна изолация.
- При създаването на сокет за Wayland е включено разширението security-context, чрез което композитният сървър може да идентифицира и ограничава приложения, стартирани в режим на песъчарна изолация. Добавена е опция "—socket=inherit-wayland-socket" за наследяване на съществуващ сокет за Wayland.
- След инсталиране или актуализиране на приложенията, автоматично се подновява конфигурацията на сесийната шина D-Bus, за да се улови новите D-Bus услуги, експортирани от приложенията.
- На дистрибуциите е предоставена възможността да определят репозиториите с Flatpak пакети, използвайки каталога "/usr/share/flatpak/remotes.d", освен "/etc/flatpak/remotes.d".
- Работата по разделянето на големите файлове с изходен код на малки модули е извършена.
- Добавена е опция "—device=input" за достъп до устройства за въвеждане през /dev/input.
- За изолация на приложенията е използвана новата версия на инструмента bubblewrap 0.11. В дистрибуциите, компилиращи Flatpak, използващи системен изпълним файл bwrap, е необходимо наличието на поне версия bubblewrap 0.11. Подобрена е защитата от създаване на вложени пространства с идентификатори на потребителите (user namespace) в sandbox средите.
- Настройката на допълнителни езици е опростена. Осигурено е определянето на езици на базата на информацията за потребителите, предоставяна от DBus услугата AccountsService.
- На приложения, които използват вложена sandbox изолация, например, базирани на движка WebKit, е позволено да използват протокола AT-SPI за взаимодействие с екранни четци. Добавена е опцията «flatpak run —a11y-own-name» за избиране на шина, през която се осъществява достъпът до средства за хора с увреждания.
- При изпълнение на командата «flatpak run -vv », се осигурява показването на всички приложими параметри на sandbox изолацията.
- Добавена е опцията «—device=usb», както и параметрите «—usb» и «—no-usb» за управление на достъпа на приложението до USB устройства.
- Добавена е поддръжка на фреймуърка KCompletion, използван за автоматично допълване на търсещи ключове в KDE.
- Добавени са променливи на средата «FLATPAK_DATA_DIR» и «FLATPAK_DOWNLOAD_TMPDIR» за презаписване на каталогите за данни ( /usr/share/flatpak ) и временно изтеглените файлове ( /var/tmp ).
- Добавен е изход на escape последователности за показване на напредъка на операциите в терминалните емулатори.
Напомняме, че Flatpak опростява разпространението на приложения, които не са включени в стандартните хранилища на дистрибуциите, чрез подготовка на един универсален контейнер, който освобождава разработчиците от необходимостта да създават отделни сборки за всяка дистрибуция. На потребителите, които се интересуват от сигурността, Flatpak дава възможност да стартират съмнителни приложения в контейнер, предоставяйки селективен достъп само до необходимите мрежови функции и файлове на потребителя. На потребителите, които се интересуват от новини, Flatpak позволява инсталирането на най-новите тестови и стабилни версии на приложения без необходимост от промяна в системата. Например, Flatpak пакети се събират за LibreOffice, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Telegram Desktop, Android Studio и т.н.
За намаляване на размера на пакета се включват само специфичните за приложението зависимости. Основните системни и графични библиотеки (GTK, Qt, библиотеки GNOME и KDE и т.н.) се предоставят под формата на добавяеми стандартни runtime среди. Ключовата разлика между Flatpak и Snap е, че Snap използва компоненти от основната система и изолация, основана на филтриране на системни повици, докато Flatpak създава контейнер, отделен от системата, и оперира с големи набори от runtime, предоставяйки като зависимости не пакети, а стандартни системни среди (например, всички библиотеки, необходими за работата на програми GNOME или KDE).
В допълнение към стандартната системна среда (runtime), която се инсталира чрез специален репозиторий, се предоставят допълнителни зависимости (bundle), необходими за работата на приложението. В сумата "runtime" и "bundle" образуват съдържанието на контейнера, като "runtime" се инсталира отделно и се свързва с няколко контейнера, което позволява избягването на дублиране на общи системни файлове за контейнерите.
В една система могат да бъдат инсталирани няколко различни «runtime» (GNOME, KDE) или няколко версии на едно «runtime» (GNOME 46, GNOME 47). Контейнерът с приложението като зависимост използва връзката само към определен «runtime», без да отчита отделните пакети, съставляващи избрания «runtime». Всички липсващи елементи се опаковат непосредствено заедно с приложението. При създаването на контейнера съдържанието на «runtime» се монтира като дял /usr, а «bundle» се монтира в директория /app.
Начинът на изграждане на „runtime“ и контейнерите на приложенията се реализира с помощта на технологията OSTree, при която образът се обновява атомарно от Git-подобно хранилище, позволяващо прилагане на методи за контрол на версиите на компонентите на дистрибуцията (например, бързо връщане на системата в предишно състояние). RPM пакетите се трансформират в репозиторий OSTree с помощта на прослойка rpm-ostree.
Изборното инсталиране и обновление на пакети в работната среда не се поддържа — системата се обновява не на ниво отделни компоненти, а изцяло, атомарно променяйки своето състояние. Предоставят се средства за инкрементално прилагане на обновления, които освобождават от необходимостта от пълна замяна на образа при всяко обновление.
Изолирана среда, създадена напълно независимо от използваното разпространение и при подходящи настройки на пакета, няма достъп до файловете и процесите на потребителя или основната система, и не може да взаимодейства пряко с хардуера, освен чрез изхода чрез DRI. Изходът на графиката и организирането на входа се реализират чрез протокола Wayland или чрез пробив на сокета X11. Взаимодействието с външната среда е изградена чрез системата за обмен на съобщения DBus и специално API Portals.
За изолацията се използва слой Bubblewrap и традиционните за Linux технологии на контейнерна виртуализация, базиран на използването на cgroups, имена на пространства (namespaces), Seccomp и SELinux. За изхода на звука се използва PulseAudio или PipeWire. При създаването на пакета, изолацията може да бъде деактивирана, което разработчиците на много популярни пакети използват, за да получат пълен достъп до файловата система и всички устройства в системата.
Например, пакети като GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity и VLC се предоставят с ограничен режим на изолация, който оставя пълен достъп до домашната директория. В случай на компрометиране на пакети с достъп до домашната директория, независимо от наличието на етикет „sandboxed“ в описанието на пакета, на атакуващия му е достатъчно да промени файла ~/.bashrc. Отделен въпрос е контролът върху измененията на пакетите и доверието в пакетните строители, които често не са свързани с основния проект или разпространенията.
Източник: opennet.ru
