Продолжение статьи "Личное знакомство с 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, который получил некоторые плюсы, но и минусы.
Плюсы:
sudo apt-get -o DPkg::options::=--force-confmiss --reinstall install ПАКЕТ_ПРОГРАММЫ
sudo apt-get install -f
и sudo dpkg --configure -a
Если у вас есть только пара машин с Убунту, то и проблема кажется не серьёзной, но для предприятий это может вылиться в катастрофу. Snappy обновляет, с возможностью отката, и это заложено в дизайн технологии.
Минусы:
snappy update
обновил систему, но при перезагрузке не смог загрузиться с другого раздела, на котором был обновлённый образ, и после вынужденного reset загрузил предыдущий, работоспособный образ. Вы только вдумайтесь! Софт из под пера программистов даже с ошибками показывает как сама технология этому противостоит.
Как происходят попытки проверить какой образ новее и при этом работоспособный, вы найдёте в разделе Updating the System по словам snappy_mode из try в regular. Через день я получил возможность обновиться до ещё более нового образа, он оказался рабочий и перезагрузка "выбрала" его. Только что написанная система не бросает меня на пол пути. Или обновляет или откатывает. Это круто!
В "обычной" Убунту (и в других линуксах) seccomp так же есть, но не является неотъемлемой частью и находится рядом, как пристяжная лошадь. В сухом остатке получается, что обычная Убунту обладает профилями AppArmor для программ, но профиля в обязательном режиме enforce ТОЛЬКО для системных программ. И это понятно, так как профиля AppArmor для сторонних программ кто-то должен делать. Snappy в своём дизайне использует для программ обязательный для них режим enforce AppArmor + фильтры seccomp. Snappy похож больше на темницу для программ и поэтому мне стал понятен восторг зарубежных пользователей, которые часто дают Snappy эпитет - bulletproof, то есть пуленепробиваемый.
Предыдущая часть статьи "Личное знакомство с Ubuntu Snappy Core. Часть 2."
Snappy
Первый в мире 100 гигабитный коммутатор с Ubuntu Snappy Core.
Zabbix и Ubuntu Snappy Core.
Intel IoT Gateway и Ubuntu Snappy.
Структура Snappy пакета.
Модель транзакционного обновления Snappy.