Ізольовані десктоп‑додатки — це менше ризиків, коли трапляються вразливості або ламаються залежності. У Linux для цього є перевірене комбо: Bubblewrap як легковажний контейнеризатор і Flatpak як зручна платформа доставки та політик доступу. Сьогодні покажу, як увімкнути надійне сандбоксування, звузити дозволи до розумного мінімуму та налаштувати автооновлення. Поїхали! 🔐

Що таке Bubblewrap і Flatpak коротко

Bubblewrap (bwrap) — це інструмент, який запускає процес у власних просторах імен Linux (namespaces) з ізольованою файловою системою. Він дуже легкий і саме його використовує Flatpak під капотом. Flatpak додає зверху менеджмент пакетів, рунтаймів і чіткі політики доступу: до файлової системи, мережі, графічних сесій (Wayland/X11), пристроїв тощо. У результаті ви отримуєте комфорт інсталяції з Flathub і сильну ізоляцію без зайвої магії.

Як зробити: базова інсталяція та політики

1) Встановлення інструментів

Почнімо з інсталяції через термінал Linux і підключення Flathub.

# Debian/Ubuntu
sudo apt update
sudo apt install -y bubblewrap flatpak xdg-desktop-portal xdg-desktop-portal-gtk

# Fedora
sudo dnf install -y bubblewrap flatpak xdg-desktop-portal xdg-desktop-portal-gtk

# Arch/Manjaro
sudo pacman -S --needed bubblewrap flatpak xdg-desktop-portal xdg-desktop-portal-gtk

# Додати Flathub
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

# Приклад інсталяції застосунку
flatpak install -y flathub org.gimp.GIMP

Після цього більшість GUI‑застосунків з Flathub уже працюють у пісочниці Bubblewrap через Flatpak і використовують портали (xdg-desktop-portal) для безпечного доступу до файлів, камери тощо.

2) Ручний сандбокс із Bubblewrap (CLI‑приклад)

Якщо треба швидко «зажати» довільний процес, можна скористатися bwrap напряму. Нижче приклад, що створює тимчасове середовище без доступу до вашого $HOME і з окремим /tmp:

bwrap \
  --unshare-ipc --unshare-pid --unshare-uts \
  --ro-bind /usr /usr \
  --ro-bind /bin /bin \
  --ro-bind /lib /lib \
  --ro-bind /lib64 /lib64 \
  --dev /dev \
  --proc /proc \
  --tmpfs /tmp \
  --dir /home \
  --chdir / \
  /usr/bin/bash -c 'id; ls -la /home; touch /tmp/sandboxtest; echo OK'

Додайте --unshare-net, щоб відрізати мережу. Для повноцінних GUI‑програм вручну доведеться ще прокидати сокети Wayland/X11 і портали — це незручно. Саме тому для десктопів краще одразу брати Flatpak.

3) Політики Flatpak: перевірити й звузити

Flatpak дає прозорі дозволи «що бачить» і «до чого має доступ» ваш застосунок. Подивіться поточні політики:

flatpak info --show-permissions org.gimp.GIMP

Звужуємо доступ крок за кроком:

# Заборонити доступ до всього $HOME
flatpak override --nofilesystem=home org.gimp.GIMP

# Дозволити лише читання каталогу Картинки через портал
flatpak override --filesystem=xdg-pictures:ro org.gimp.GIMP

# Вимкнути доступ до ssh-agent сокету
flatpak override --nosocket=ssh-auth org.gimp.GIMP

# Дозволити апаратне прискорення (DRI), але без повного доступу до /dev
flatpak override --device=dri org.gimp.GIMP

# Повністю відрізати мережу, якщо це офлайновий інструмент
flatpak override --unshare=network org.gimp.GIMP

# Скинути перевизначення до дефолтів, якщо щось зламали
flatpak override --reset org.gimp.GIMP

Порада: за можливості покладайтеся на портали (FileChooser, Camera, Screenshot) — так безпечніше й прогнозованіше. Це якраз сильна сторона Flatpak у порівнянні з голим Bubblewrap або «snap та flatpak» у загальних дискусіях про дистрибуцію пакунків.

4) Автоматичне оновлення Flatpak

Оновлювати пакунки важливо так само, як і робити оновлення Linux загалом. Автоматизуємо це за допомогою користувацького systemd timer (це чиста автоматизація задач без складних скриптів):

mkdir -p ~/.config/systemd/user

cat > ~/.config/systemd/user/flatpak-update.service <<'EOF'
[Unit]
Description=Update Flatpaks

[Service]
Type=oneshot
ExecStart=/usr/bin/flatpak update -y --noninteractive
EOF

cat > ~/.config/systemd/user/flatpak-update.timer <<'EOF'
[Unit]
Description=Run Flatpak update daily

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
EOF

systemctl --user daemon-reload
systemctl --user enable --now flatpak-update.timer
systemctl --user list-timers | grep flatpak

Не любите systemd? Можна використати cron:

crontab -e
# додайте рядок:
0 3 * * * flatpak update -y --noninteractive

Альтернативи та комплементарні підходи

  • Firejail: простий сандбокс із готовими профілями. Команда на кшталт firejail --private firefox швидко відтинає HOME і кеші.
  • systemd sandboxing: запуск через systemd-run із PrivateTmp, ProtectHome, ProtectSystem, але це більше про системні сервіси.
  • Snap: альтернативний формат з confinement і AppArmor. У статті зосереджуємось на Flatpak, але порівнювати «snap та flatpak» корисно для вибору під ваш робочий процес.

GUI‑спосіб: Flathub + Flatseal

Якщо ви хочете керувати дозволами без консольних прапорців — ставте Flatseal (через Flathub). Він показує всі політики застосунків у зручному GUI і дозволяє вмикати/вимикати доступ до мережі, камер, каталогів і сокетів одним кліком ✨

flatpak install -y flathub com.github.tchx84.Flatseal

Також GNOME Software та KDE Discover уміють шукати пакунки з Flathub і оновлювати їх, тож можна майже не відкривати термінал.

FAQ

Чому застосунок «не бачить» мої файли?

Бо Flatpak за замовчуванням обмежує доступ до $HOME. Діліться файлами через портали (кнопка «Відкрити файл/папку») або дозвольте потрібні каталоги: flatpak override --filesystem=xdg-documents.

Зник інтернет у застосунку після тюнінгу політик

Ймовірно, ви вимкнули мережу: --unshare=network. Поверніть мережу: flatpak override --share=network <app-id>.

Не працює відкриття файлів/скріншотів у Flatpak‑апці

Перевірте наявність і активний бекенд порталу: xdg-desktop-portal + xdg-desktop-portal-gtk (або kde). Перелогіньтеся, щоб портали піднялись коректно.

Гальмує графіка або немає GPU‑прискорення

Спробуйте --device=dri замість надто широкого --device=all. Для Flatpak‑драйверів на NVIDIA ставте відповідні runtime‑пакунки з Flathub (org.freedesktop.Platform.GL).

Де лежать конфіги й кеш Flatpak‑апок?

У ~/.var/app/<app-id>. Звільнити місце допоможе: flatpak uninstall --unused.

Чи безпечно, що bubblewrap інколи setuid?

На деяких дистрибутивах bwrap використовує setuid‑обгортку, якщо заборонені непривілейовані user namespaces. Пакет підтримується дистрибутивом; важливо оновлювати систему і сам Bubblewrap.

Як порівняти Flatpak зі Snap у плані безпеки?

Обидва пропонують сильну ізоляцію. Flatpak робить акцент на xdg‑портали, рунтайми і прозорі політики; Snap — на confinement через AppArmor і централізований магазин. Оберіть те, що краще інтегрується у вашу систему.

Чи можна оновлювати Flatpak офлайн?

Так, попередньо завантажте оновлення: flatpak update --appstream --noninteractive, а потім застосуйте, коли буде зручно. Для автозадач використовуйте systemd timers або cron.

Порада від Kernelka

Тримайте політики якомога вужчими: дозволяйте лише те, чого реально потребує застосунок сьогодні. Створіть whitelist‑доступ до окремих XDG‑каталогів, а решту відкривайте через портали — це зручно і безпечно. І так, час від часу перевіряйте свої overrides, бо «тимчасово» часто стає «назавжди» 🙂

Підсумок

  • Bubblewrap дає базовий, швидкий сандбокс; Flatpak додає керовані політики й портали.
  • Налаштовуйте дозволи через flatpak override або зручно в Flatseal.
  • Вмикайте автооновлення Flatpak через systemd timer або cron.
  • Для разових CLI‑запусків підійде чистий bwrap; для GUI — краще Flatpak.
  • Перевіряйте портали і рунтайми, щоб уникати «дивних» багів доступу.