Авторские статьи

Личное знакомство с Ubuntu Snappy Core. Часть 3.


Продолжение статьи "Личное знакомство с Ubuntu Snappy Core".

Приложения.

Приложения ставятся в /apps/

Каталог Запись? Описание
/apps/<программа>/<версия>/ Нет Файлы только-для-чтения, библиотеки, файлы ресурсов и другие бинарные файлы, шедшие с приложением.
/var/lib/apps/<программа>/<версия>/ Да Доступно для записи, конфигурации или данные, не специфичные для любого пользователя.
/var/lib/apps/<программа>/<старая-версия> Нет Только-для-чтения для приложения, резервная копия.
/home/user/apps/<программа>/<версия>/ Да Доступно для записи, конфигурационные или другие данные для конкретного пользователя.
/home/user/apps/<программа>/<старая-версия>/ Нет Только-для-чтения, конфигурации или других данных конкретного пользователя, резервное копирование.

sudo snappy install hello-world

Installing hello-world
Starting download of hello-world
21.60 KB / 21.60 KB [=========================] 100.00 % 238.18 KB/s 
Done

snappy info

release: ubuntu-core/15.04/edge
architecture: amd64
frameworks: docker
apps: hello-world

Каждый snappy пакет ставится в свой каталог. Snappy пакеты никогда не перезаписывают файлы других пакетов или старые файлы своего же пакета ранней версии. Существует у каждой программы своя ссылка current, указывающая на актуальную версию данной программы.

ls -laF /apps/hello-world.canonical/

total 12
drwxr-xr-x 3 root     root     4096 Jul  3 06:28 ./
drwxr-xr-x 5 root     root     4096 Jul  3 06:28 ../
drwxr-xr-x 5 clickpkg clickpkg 4096 Jul  3 06:33 1.0.18/
lrwxrwxrwx 1 root     root        6 Jul  3 06:28 current -> 1.0.18/

Поставленная программа-пример hello-world - это набор shell скриптов, среди которых есть evil для наглядного тестирования работы системы мандатного доступа AppArmor, который ограждает каждую программу набором правил, не давая сделать то, что дают сделать права доступа в файловой системе. Evil не может записать Haha в /var/tmp/myevil.txt.

hello-world.evil

Hello Evil World!
This example demonstrates the app confinement
You should see a permission denied error next
/apps/hello-world.canonical/1.0.18/bin/evil: 9: /apps/hello-world.canonical/1.0.18/bin/evil:
cannot create /var/tmp/myevil.txt: Permission denied

Если глянуть профиля программ AppArmor по адресу /var/lib/apparmor/profiles/, то стоит отметить, что профиль делается на программу + его версия. То есть какие-либо махинации автора программы, маловерятно, что приведут к каким-то расширениям полномочий. Автор программы либо ничего не указывает в параметрах security-* в package.yaml своего snap пакета и получает дефолтные, строгие политики вместе с автоматическим одобрением в официальные репозитории ИЛИ что-то указывает своё и вызывает запрос на ручную проверку пакета.

Цели разработчиков.

Поставив в угол философию система отделена от софта, разработчики создали Snappy, который получил некоторые плюсы, но и минусы.

Плюсы:

  • Скорость. Речь идёт о скорости скачивания дельт образов и речь идёт о скорости их "установки", так как snappy не обременён полным разрешением зависимостей (full dependency resolution) в случае apt-get/deb. Современные, мощные ПК нивелируют данный плюс, но ради эксперимента попробуйте обновить Убунту на маломощном ПК. "Наслаждайтесь" установкой зависимостей от зависимостей, наблюдением за вызовами хуков и индексаторов типа update-apt-xapian-index.
  • Надёжность. Я думаю каждый хоть раз сталкивался с ситуацией, когда обновление через apt-get не закончилось успешно. Не на пустом месте родились советы типа таких:
    • попробовать переустановить пакет с установкой дефолтных настроек - sudo apt-get -o DPkg::options::=--force-confmiss --reinstall install ПАКЕТ_ПРОГРАММЫ
    • столкните ситуацию с места командами sudo apt-get install -f и sudo dpkg --configure -a

    Если у вас есть только пара машин с Убунту, то и проблема кажется не серьёзной, но для предприятий это может вылиться в катастрофу. Snappy обновляет, с возможностью отката, и это заложено в дизайн технологии.

  • Простота для сторонних разработчиков. Пакеты Snap являются полностью самодостаточными сущностями и сторонний программист не обязан отслеживать какие версии библиотек в операционной системе и есть ли они вообще. Если на ПК разработчика софт был собран и работает, то упаковать его в snap пакет с 1 файлом метаданных package.yml, который требует только 3 обязательных поля, дело 5 минут! Этот плюс неразрывно связан и был создан ради быстроты появления стороннего софта в основных репозиториях с автоматическим одобрением, так как софт будет работать в строгих рамках системы мандатного доступа AppArmor.

Минусы:

  • Занятое место. Если пакет snap несёт в себе самодостаточную программу, то множество установленных программ просто обязаны занять больше места одними и теми же библиотеками. Добавьте сюда возможность отката, то есть сохранение различных версий системы (2 штуки в 2 разделах) и софта + конфы (ограниченное только хранилищем и вашим желанием хранить их). Разработчики не только признают данный момент, типа дескать это расплата за разделение, но работают над данным вопросом. Выручить может дедупликация. Но она бывает разной. Можно воспользоваться дедупликацией на уровне файловой системы, как это делается в ZFS и BTRFS. Можно придумать механизм дедупликации библиотек на основе хеш файла и одинаковые "слить" в одну. Тут есть разные пути решения задачи и куча подводных камней, сквозь которые нужно пробраться и выбрать железно работающее решение. Сейчас рано о чём то серьёзно говорить, но разработчики взяли вопрос на карандаш.
  • Жирные snap против худеньких deb. Раз snap самодостаточная сущность, то средний snap пакет жирнее среднего deb. Дельты образов системы есть точно, а будут ли дельты snap пакетов? Как это будет реализовано? То что реализовать нужно, это точно! Иначе скорость скачивания у snappy будет в разы дольше, чем у apt-get/deb, что критично в той же мобильной сфере.


Моё итоговое мнение.

  • В целом мне очень понравилась концепция Snappy с отделением системы от софта и автоматическим переключением разделов при обновлении образа системы. Тут хочется рассказать случай во время тестирования. Я взял из всех доступных каналов (channel) - edge, alpha, beta, rc, stable - самую на-острие-атаки - edge. Edge выпускается каждый день и даже не проверяется автоматическими тестами. Так получилось, что в один из дней теста я получил ситуацию, когда snappy update обновил систему, но при перезагрузке не смог загрузиться с другого раздела, на котором был обновлённый образ, и после вынужденного reset загрузил предыдущий, работоспособный образ. Вы только вдумайтесь! Софт из под пера программистов даже с ошибками показывает как сама технология этому противостоит.

    Как происходят попытки проверить какой образ новее и при этом работоспособный, вы найдёте в разделе Updating the System по словам snappy_mode из try в regular. Через день я получил возможность обновиться до ещё более нового образа, он оказался рабочий и перезагрузка "выбрала" его. Только что написанная система не бросает меня на пол пути. Или обновляет или откатывает. Это круто!

  • Анализ установленных программ показал, что они действительно, как описано в документации, кроме работы в жёстких профилях AppArmor ограничены также фильтрами seccomp. Seccomp - это фильтры безопасного вычисления (SECure COMPuting mode). Seccomp позволяют заранее объявить какие системные вызовы будут разрешены в конкретной программе и, если она сама или кукловод-злоумышленник пытаются вызывать что-то не из белого списка, то программа будет закрыта для исключения нанесения вреда. Автору программы можно ничего не указывать и его программа будет работать с дефолтными seccomp фильтрами, но у автора есть возможность переопределить нужное ему в файле package.yaml, но тогда автоматическое одобрение вызовет запрос на ручное рассмотрение специалистом.

    В "обычной" Убунту (и в других линуксах) seccomp так же есть, но не является неотъемлемой частью и находится рядом, как пристяжная лошадь. В сухом остатке получается, что обычная Убунту обладает профилями AppArmor для программ, но профиля в обязательном режиме enforce ТОЛЬКО для системных программ. И это понятно, так как профиля AppArmor для сторонних программ кто-то должен делать. Snappy в своём дизайне использует для программ обязательный для них режим enforce AppArmor + фильтры seccomp. Snappy похож больше на темницу для программ и поэтому мне стал понятен восторг зарубежных пользователей, которые часто дают Snappy эпитет - bulletproof, то есть пуленепробиваемый.

  • Софта в пакетах snap пока мало, в виду молодости технологии, и, как показывают мировые новости, Snappy пока активно юзается разработчиками IoT, всяких дронов, владельцев маломощных Raspberry Pi и еже с ними. Если разработчики конвертнули бы из пакетов deb стек LAMP, то это было бы здорово. Без обмана, я сразу же попробовал бы внедрить у себя такое на одной из виртуальных машин для какой-либо из админских web-морд.

Предыдущая часть статьи "Личное знакомство с Ubuntu Snappy Core. Часть 2."

Snappy
Первый в мире 100 гигабитный коммутатор с Ubuntu Snappy Core.
Zabbix и Ubuntu Snappy Core.
Intel IoT Gateway и Ubuntu Snappy.
Структура Snappy пакета.
Модель транзакционного обновления Snappy.

Дата последней правки: 2023-12-28 11:00:55

RSS vasilisc.com   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта