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

Использование snap в традиционной Убунту.


В Ubuntu 16.04 дали попробовать часть технологии Snappy - её самодостаточные пакеты snap. Любая технология вносит свою философию в работу с ней и нужно на собственной шкуре попробовать и прочувствовать.

Но начнём сначала с плохого. Не успели нам дать попробовать часть всей системы, как появились журналюги из жёлтой прессы. Они взяли грамотную техническую статью Мэтью Гаррета (Matthew Garrett), где он указал на очевидное - пока жив и используется X11 (Xorg), безопасность Snappy не реализуется в полной мере. Так создан в далёкие годы X11, что любое приложение может инжектировать ему события в потоки ввода-вывода. Сам Мэтью пишет, что такого нет в современных дисплейных серверах Mir и Wayland. Но журналюги всё "лишнее", на их взгляд, выкинули и Интернет запестрел новостями - Snappy не безопасна, Snappy атцтой.

Если для вас понятие мандатного доступа (mandatory access control, MAC) не пустой звук и вы понимаете разницу между ним и традиционным доступом (discretionary access control, DAC), то вы должны быть впечатлены. На десктопы идёт технология, где AppArmor и seccomp будут играть первую скрипку.

Пока графический бэкэнд GNOME Software, обслуживающий именно snap пакеты, идёт к нам, вынуждены использовать Терминал. Бодрое рабочее утро начинается с sudo snap find и вот там есть новейший nmap. Так как безопасность позволяет многое одобрять автоматом, то софт не задерживается на рассмотрении. Ниже снова даю видео, чтобы вы заценили масштаб трагедии. Какой версии nmap в snap пакете и какой в deb, из-за согласования с жизненным циклом ОСи.

Но дело не в версиях ПО! Хочу показать вам один маленький, но очень показательный пример. Если понимать что происходит, то впечатляет. У nmap есть параметр -iL, через который можно передать файл со списком хостов для сканирования.
nmap -iL /home/vasilisc/report.txt

Failed to open input file /home/vasilisc/report.txt for reading 
QUITTING! 

Кто по умолчанию не дал nmap, запущенному от моего имени, доступ в мою домашнюю папку? Профиля AppArmor, которые создаются для каждого ПО в snap пакетах.

Технология делает свои первые шаги. Многое не ясно, многое сделают позже. Например, взгляните как с течением времени получил новую версию nmap, а старая остаётся для возможности отката.
/snap/nmap# ls -laF

total 4
drwxr-xr-x 1 root root  22 апр 29 10:42 ./
drwxr-xr-x 1 root root  58 апр 29 10:36 ../
drwxrwxr-x 6 root root 173 апр 14 18:50 17/
drwxr-xr-x 6 root root 173 апр 25 19:06 24/
lrwxrwxrwx 1 root root   2 апр 29 10:42 current -> 24/

/snap/nmap# du -c -h -d 1 .

28M	./17
27M	./24
54M	.
54M	total

Кто-то скажет - не жирно ли столько тратить места на диске под каждую программу ради возможности отката? Думаю каждый решит для себя сам. На мой вопрос насчёт "дедупликации" пока нет внятного ответа. Сам считаю, что если btrfs и ZFS быстрее и легче вошли бы в нашу жизнь, то этот вопрос можно решить их средствами. Элегантно и технично.

Замечу из минусов, что утилита snap пока не позволяет через свой ключ remove удалить именно старую версию - типа мне она не нужна и не нужен rollback.

Кстати, многих интересует такой вопрос. Если snap пакет самодостаточная сущность, то snap пакеты в среднем жирнее deb пакетов. Вопрос адресовал разработчикам. Ответ: будет предложен механизм для разработчиков, чтобы совместно использовать огромные runtime environments. А пока каждый snap таскает с собой всё что ему нужно:
# find /snap/nmap -name "*python*"

/snap/nmap/17/local/lib/python2.7
/snap/nmap/24/local/lib/python2.7

Только не подумайте, что там весь язык Питона. Там пакеты для ZenMAP - официальный кроссплатформенный GUI для nmap.

Ещё один для меня не понятный момент. В традиционных linux дистрибутивах, свои хотелки-настройки в идеале лучше подкидывать в каталоги типа /etc/программа.d/. Подразумевается, что файл /etc/программа.conf может быть обновлён новым пакетом и чтобы не мучать вас запросом что делать с изменённым файлом, в идеале вам дают целый каталог. Эталонным примером служит apt, чей файл /etc/apt/apt.conf лучше не трогать, а добавлять требуемое следует в /etc/apt/apt.conf.d/

Как быть с конфигурациями в новом мире Snappy? Поставил snap пакет кэширующего прокси-сервера Squid.
/snap/squid3# ls -laF

total 4
drwxr-xr-x 1 root root  16 апр 29 10:36 ./
drwxr-xr-x 1 root root  58 апр 29 10:36 ../
drwxrwxr-x 9 root root 138 апр 22 19:51 3/
lrwxrwxrwx 1 root root   1 апр 29 10:36 current -> 3/

Подправил /snap/squid3/3/etc/squid/squid.conf под свои нужды. А завтра? Current будет указывать на 4 и мои настройки пойдут лесом? Я привёл сквид как пример, хотя он не часто меняет версию, а что если мысленно представить Google Chrome? У меня, по ряду причин, очень плохо с выражением мысли на английском языке и рад бы постучаться к разработчикам, но не могу =(.

Ещё минус! Пока не реализовали обновление всех snap пакетов одной командой, что-то типа apt upgrade. Сваял пока скрипт, который берёт snap list и для каждого пакета делает snap refresh.
#!/bin/bash
ROOT_UID="0"
#Check if run as root
if [ "$UID" -ne "$ROOT_UID" ] ; then
     echo "You must be root to do that!"
     exit 1
fi
snap list | awk -F" " '{if ($1 && NR>1) { system("snap refresh " $1 " 2>/dev/null") }}'

Оргвыводы
Технология Snappy делает первые шаги на десктопе. В мобильном мире софт может быть написан с помощью ограниченного набора языков и фреймворков. Обычно это Qt/QML для нативных программ и всякие JavaScript/HTML/CSS для webapp. То есть программа может "зависеть" от немногих вещей, которые не сложно представить в системе. Мир десктопа сложнее и утрясти нужно много вещей. Но это всё решаемо и осталось дождаться графического бэкэнда GNOME Software, чтобы в удобной форме стать ближе к снап-пакетам.

Предвижу, что первыми кандидатами на упаковку в snap будут программы на С/С++ без графической части, такие как nmap или squid. Сложные программные комплексы, требующие стек LAMP/LEMP нужно будет оформить во множество snap с connect'ами между ними. Думаю, это будет позже, как и графические программы, зависящие от тулкитов, DE и графического сервера. Как говорили римляне, Snappy поспешай медленно!

Моя Убунту 16.10 обладает новым GNOME Software и можно работать со snap в GUI.

Личное знакомство с Ubuntu Snappy Core. Часть 1.
Mozilla поддержит Snap пакеты.
Серия статей про Snappy от Zygmunt Krynicki.

Дата последней правки: 2016-04-30 15:06:13

RSS vasilisc.com   


Разделы

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