Существующие стратегии по обеспечению безопасности в контейнерах
Опубликовано 18.8.2015 13:42 пользователем Peter Lemenkov
Наш коллега, инженер Rackspace, Major Hayden, также известный, как человек с самым прекрасным в мире резюме, объявил в своем блоге о выходе статьи, в которой он попытался просуммировать существующие подходы к обеспечению безопасности в контейнерах. Автор понимает, что три десятка страниц, это не тот объем, с которым можно претендовать на всеобъемлющее научное исследование, но как старт для более дотошных исследователей - вполне пойдет.
Читайте, присылайте критику.
Читайте, присылайте критику.
Очередная обучалка по журналированию в systemd
Опубликовано 18.8.2015 13:22 пользователем Peter Lemenkov
Все больше и больше появляется материалов по systemd! Вот, на днях на известном ресурсе Хабрахабр появилась обучалочка по управлению журналированием в systemd:
Управление логгированием в systemd tutorialСистемное администрирование*, Блог компании Селектел
Демон инициализации systemd де-факто уже стал стандартом в современных Linux-системах. На него перешли многие популярные дистрибутивы: Debian, RHEL/CentOS, Ubuntu (начиная с версии 15.04). В systemd используется принципиально иной (по сравнению с традиционным инструментом syslog) подход к логгированию.
В его основе лежит централизация: специализированный компонент journal cобирает все системные сообщения (сообщения ядра, различных служб и приложений). При этом специально настраивать отправку логов не нужно: приложения могут просто писать в stdout и stderr, a journal сохранит эти сообщения автоматически. Работа в таком режиме возможна и с Upstart, но он сохраняет все логи в отдельный файл, тогда как systemd сохраняет их в бинарной базе, что существенно упрощает систематизацию и поиск.
Хранение логов в бинарных файлах также позволяет избежать сложностей с использованием парсеров для разных видов логов. При необходимости логи можно без проблем переконвертировать в другие форматы (более подробно об этом будет рассказано ниже).
Journal может работать как совместно с syslog, так и полностью заменить его.
Для просмотра логов используется утилита journalctl. Об особенностях и тонкостях работы с ней мы расскажем в этой статье.
Установка времени
Одним из существенных недостатков syslog является сохранение записей без учёта часового пояса. В journal этот недостаток устранён: для логгируемых событий можно указывать как местное время, так и универсальное координированное время (UTC). Установка времени осуществляется с помощью утилиты timedatectl.
Просмотреть список часовых поясов можно при помощи команды:
$ timedatectl list-timezones
Установка нужного часового пояса осуществляется так:
$ timedatectl set-timezone <часовой пояс>
По завершении установки будет нелишним убедиться в том, что всё сделано правильно:
$ timedatectl status Local time: Thu 2015-07-30 11:24:15 MSK Universal time: Thu 2015-07-30 08:24:15 UTC RTC time: Thu 2015-07-30 08:24:15 Time zone: Europe/Moscow (MSK, +0300) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a
В самой первой строке (Local time) должны быть показаны точное текущее время и дата.
Journalctl: просмотр логов
Для просмотра логов используется утилита journalctl.
Если ввести команду journalсtl без каких-либо аргументов, на консоль будет выведен огромный список:
-- Logs begin at Wed 2015-07-29 17:12:48 MSK, end at Thu 2015-07-30 11:24:15 MSK. -- Jul 29 17:12:48 host-10-13-37-10 systemd-journal[181]: Runtime journal is using 4.0M (max allowed 20.0M, trying to leave 30.0M free of 195.9M available → current limit 20.0M). Jul 29 17:12:48 host-10-13-37-10 systemd-journal[181]: Runtime journal is using 4.0M (max allowed 20.0M, trying to leave 30.0M free of 195.9M available → current limit 20.0M). Jul 29 17:12:48 host-10-13-37-10 kernel: Initializing cgroup subsys cpuset Jul 29 17:12:48 host-10-13-37-10 kernel: Initializing cgroup subsys cpu Jul 29 17:12:48 host-10-13-37-10 kernel: Initializing cgroup subsys cpuacct Jul 29 17:12:48 host-10-13-37-10 kernel: Linux version 3.16.0-4-amd64 ([email protected]) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian 3.16.7-ckt11-1+deb8u2 (2015-07-17) Jul 29 17:12:48 host-10-13-37-10 kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-amd64 root=UUID=b67ea972-1877-4c5b-a328-29fc0d6c7bc4 ro console=tty1 console=ttyS0 video=640x480 consoleblank=0 panic=15 c
Здесь мы привели лишь небольшой его фрагмент; на самом деле он включает гигантское количество записей.
Фильтрация логов
У утилиты journalctl есть опции, с помощью которых можно осуществлять фильтрацию логов и быстро извлекать из них нужную информацию.
Просмотр логов с момента текущей загрузки
С помощью опции -b можно просмотреть все логи, собранные с момента последней загрузки системы:
$ journalctl -b
Просмотр логов предыдущих сессий
С помощью journalctl можно просматривать информацию о предыдущих сессиях работы в системе — в некоторых случаях это бывает полезным.
Следует, однако, учитывать, что сохранение информации о предыдущих сессиях поддерживается по умолчанию не во всех дистрибутивах Linux. Иногда его требуется активировать
Для этого нужно открыть конфигурационный файл journald.conf, найти в нём раздел [Journal] и изменить значение параметра storage на persistent:
$ sudo nano /etc/systemd/journald.conf ... [Journal] Storage=persistent
Просмотреть список предыдущих загрузок можно с помощью команды:
$ journalctl --list-boots 0 9346310348bc4edea250555dc046b30c Thu 2015-07-30 12:39:49 MSK—Thu 2015-07-30 12:39:59 MSK
Её вывод состоит из четырёх колонок. В первой из них указывается порядковый номер загрузки, во второй — её ID, в третьей — дата и время. Чтобы просмотреть лог для конкретной загрузки, можно использовать идентификаторы как из первой, так и из второй колонки:
$ journalctl -b 0
или
$ journalctl -b 9346310348bc4edea250555dc046b30c
Фильтрация по дате и времени
В journalctl имеется также возможность просмотра логов за определённые периоды времени. Для этого используются опции —since и —until. Предположим, нам нужно просмотреть логи начиная с 17 часов 15 минут 20 июля 2015 года. Для этого потребуется будет выполнить команду:
$ journalctl --since "2015-07-20 17:15:00"
Если с опцией since не будет указано никакой даты, на консоль будут выведены логи начиная с текущей даты. Если дата указана, но при этом не указано время, будет применено значений времени по умолчанию — «00:00:00». Секунды также указывать не обязательно (в этом случае применяется значение по умолчанию — 00).
Можно воспользоваться и вот такими человекопонятными конструкциями:
$ journalctl ---since yesterday $ journalctl --since 09:00 --until now $ journalctl --since 10:00 --until "1 hour ago"
Фильтрация по приложениям и службам
Для просмотра логов конкретного приложения или службы используется опция -u, например:
$ journalctl -u nginx.service
Приведённая команда выведет на консоль логи веб-сервера nginx.
Нередко возникает необходимость просмотреть логи какой-либо службы за определённый период времени. Это можно сделать при помощи команды вида:
$ journalctl -u nginx.service --since yesterday
C опцией -u также используется фильтрация по дате и времени, например:
$ journalctl -u nginx.service -u php-fpm.service —since today
Благодаря этому можно отслеживать взаимодействие различных служб и получать информацию, которую нельзя было бы получить при отслеживании соответствующих процессов по отдельности.
Фильтрация по процессам, пользователям и группам
Просмотреть логи для какого-либо процесса можно, указав в команде journalctl его идентификационный номер (PID), например:
$ journalctl _PID=381
Для просмотра логов процессов, запущенных от имени определённого пользователя или группы, используются фильтры _UID и _GID соответственно. Предположим, у нас имеется веб-сервер, запущенный от имени пользователя www-data. Определим сначала ID этого пользователя:
$id -u www-data 33
Теперь можно просмотреть логи всех процессов, запущенных от имени этого пользователя:
$ journalctl _UID=33
Вывести на консоль список пользователей, о которых имеются записи в логах, можно так:
$ journalctl -F _UID
Для просмотра аналогичного списка пользовательских групп используется команда:
$ journalctl -F _GUID
С командной journalctl можно использовать и другие фильтры. Просмотреть список всех доступных фильтров можно, выполнив команду
$ man systemd.journal-fields
Фильтрация по пути
Просмотреть логи для какого-либо процесса также можно, указав путь к нему, например:
$ journalctl /usr/bin/docker
Иногда таким способом можно получить более подробную информацию (например, просмотреть записи для всех дочерних процессов).
Просмотр сообщений ядра
Для просмотра сообщений ядра используется опция -k или −−dmesg:
$ journalctl -k
Приведённая команда покажет все сообщения ядра для текущей загрузки. Чтобы просмотреть сообщения ядра для предыдущих сессий, нужно воспользоваться опцией -b и указать один из идентификаторов сессии (порядковый номер в списке или ID):
$ journalctl -k -b -2
Фильтрация сообщений по уровню ошибки
Во время диагностики и исправления неполадок в системе нередко требуется просмотреть логи и выяснить, есть ли в них сообщения о критических ошибках. Специально для этого в journalctl предусмотрена возможность фильтрации по уровню ошибки. Просмотреть сообщения обо всех ошибках, имевших место в системе, можно с помощью опции -p:
$ journalctl -p err -b
Приведённая команда покажет все сообщения об ошибках, имевших место в системе.
Эти сообщения можно фильтровать по уровню. В journal используется такая же классификация уровней ошибок, как и в syslog:
- 0 — EMERG (система неработоспособна);
- 1 — ALERT (требуется немедленное вмешательство);
- 2 — CRIT (критическое состояние);
- 3 — ERR (ошибка);
- 4 — WARNING (предупреждение);
- 5 — NOTICE (всё нормально, но следует обратить внимание);
- 6 — INFO (информационное сообщение);
- 7 —DEBUG (отложенная печать).
Коды уровней ошибок указываются после опции -p.
Запись логов в стандартный вывод
По умолчанию journalctl использует для вывода сообщений логов внешнюю утилиту less. В этом случае к ним невозможно применять стандартные утилиты для обработки текстовых данных (например, grep). Эта проблема легко решается: достаточно воспользоваться опцией −−no-pager, и все сообщения будут записываться в стандартный вывод:
$ journalctl --no-pager
После этого их можно будет передать другим утилитам для дальнейшей обработки или сохранить в текстовом файле.
Выбор формата вывода
C помощью опции -o можно преобразовывать данные логов в различные форматы, что облегчает их парсинг и дальнейшую обработку, например:
$ journalctl -u nginx.service -o json { "__CURSOR" : "s=13a21661cf4948289c63075db6c25c00;i=116f1;b=81b58db8fd9046ab9f847ddb82a2fa2d;m=19f0daa;t=50e33c33587ae;x=e307daadb4858635", "__REALTIME_TIMESTAMP" : "1422990364739502", "__MONOTONIC_TIMESTAMP" : "27200938", "_BOOT_ID" : "81b58db8fd9046ab9f847ddb82a2fa2d", "PRIORITY" : "6", "_UID" : "0", "_GID" : "0", "_CAP_EFFECTIVE" : "3fffffffff", "_MACHINE_ID" : "752737531a9d1a9c1e3cb52a4ab967ee", "_HOSTNAME" : "desktop", "SYSLOG_FACILITY" : "3", "CODE_FILE" : "src/core/unit.c", "CODE_LINE" : "1402", "CODE_FUNCTION" : "unit_status_log_starting_stopping_reloading", "SYSLOG_IDENTIFIER" : "systemd", "MESSAGE_ID" : "7d4958e842da4a758f6c1cdc7b36dcc5", "_TRANSPORT" : "journal", "_PID" : "1", "_COMM" : "systemd", "_EXE" : "/usr/lib/systemd/systemd", "_CMDLINE" : "/usr/lib/systemd/systemd", "_SYSTEMD_CGROUP" : "/", "UNIT" : "nginx.service", "MESSAGE" : "Starting A high performance web server and a reverse proxy server...", "_SOURCE_REALTIME_TIMESTAMP" : "1422990364737973" }
Объект json можно представить в более структурированном и человекочитаемом виде, указав формат json-pretty или json-sse:
$ journalctl -u nginx.service -o json-pretty { "__CURSOR" : "s=13a21661cf4948289c63075db6c25c00;i=116f1;b=81b58db8fd9046ab9f847ddb82a2fa2d;m=19f0daa;t=50e33c33587ae;x=e307daadb4858635", "__REALTIME_TIMESTAMP" : "1422990364739502", "__MONOTONIC_TIMESTAMP" : "27200938", "_BOOT_ID" : "81b58db8fd9046ab9f847ddb82a2fa2d", "PRIORITY" : "6", "_UID" : "0", "_GID" : "0", "_CAP_EFFECTIVE" : "3fffffffff", "_MACHINE_ID" : "752737531a9d1a9c1e3cb52a4ab967ee", "_HOSTNAME" : "desktop", "SYSLOG_FACILITY" : "3", "CODE_FILE" : "src/core/unit.c", "CODE_LINE" : "1402", "CODE_FUNCTION" : "unit_status_log_starting_stopping_reloading", "SYSLOG_IDENTIFIER" : "systemd", "MESSAGE_ID" : "7d4958e842da4a758f6c1cdc7b36dcc5", "_TRANSPORT" : "journal", "_PID" : "1", "_COMM" : "systemd", "_EXE" : "/usr/lib/systemd/systemd", "_CMDLINE" : "/usr/lib/systemd/systemd", "_SYSTEMD_CGROUP" : "/", "UNIT" : "nginx.service", "MESSAGE" : "Starting A high performance web server and a reverse proxy server...", "_SOURCE_REALTIME_TIMESTAMP" : "1422990364737973" }
Помимо JSON данные логов могут быть преобразованы в следующие форматы:
- cat — только сообщения из логов без служебных полей;
- export — бинарный формат, подходит для экспорта или резервного копирования логов;
- short — формат вывода syslog;
- short-iso — формат вывода syslog с метками времени в формате ISO 8601;
- short-monotonic — формат вывода syslog c метками монотонного времени (monotonic timestamp);
- short-precise — формат вывода syslog с метками точного времени (время событий указывается с точностью до микросекунд);
- verbose — максимально подробный формат представления данных (включает даже те поля, которые в других форматах не отображаются).
Просмотр информации о недавних событиях
Опция -n используется для просмотра информации о недавних событиях в системе:
$ journalctl -n
По умолчанию на консоль выводится информация о последних 10 событиях. С опцией -n можно указать необходимое число событий:
$ journalctl -n 20
Просмотр логов в режиме реального времени
Сообщения из логов можно просматривать не только в виде сохранённых файлов, но и в режиме реального времени. Для этого используется опция -f:
$ journalctl -f
Управление логгированием
Определение текущего объёма логов
Со временем объём логов растёт, и они занимают всё больше места на жёстком диске. Узнать объём имеющихся на текущий момент логов можно с помощью команды:
$ journalctl --disk-usage Journals take up 16.0M on disk.
Ротация логов
Настройка ротации логов осуществляется с помощью опций −−vacuum-size и −−vacuum-time.
Первая из них устанавливает предельно допустимый размер для хранимых на диске логов (в нашем примере — 1 ГБ):
$ sudo journalctl --vacuum-size=1G
Как только объём логов превысит указанную цифру, лишние файлы будут автоматические удалены.
Аналогичным образом работает опция −−vacuum-time. Она устанавливает для логов срок хранения, по истечении которого они будут автоматически удалены:
$ sudo journalctl --vacuum-time=1years
Настройка ротации логов в конфигурационном файле
Настройки ротации логов можно также прописать в конфигурационном файле /еtc/systemd/journald.conf, который включает в числе прочих следующие параметры:
- SystemMaxUse= максимальный объём, который логи могут занимать на диске;
- SystemKeepFree= объём свободного места, которое должно оставаться на диске после сохранения логов;
- SystemMaxFileSize= объём файла лога, по достижении которого он должен быть удален с диска;
- RuntimeMaxUse= максимальный объём, который логи могут занимать в файловой системе /run;
- RuntimeKeepFree= объём свободного места, которое должно оставаться в файловой системе /run после сохранения логов;
- RuntimeMaxFileSize= объём файла лога, по достижении которого он должен быть удален из файловой системы /run.
Централизованное хранение логов
Одной из самых распространённых задач в работе системного администратора является настройка сбора логов с нескольких машин с последующим помещением в централизованное хранилище.
В systemd предусмотрены специальные компоненты для решения этой задачи: systemd-journal-remote, systemd-journal-upload и systemd-journal-gatewayd.
С помощью команды systemd-journal-remote можно принимать логи с удалённых хостов и сохранять их (на каждом их этих хостов должен быть запущен демон systemd-journal-gatewayd), например:
$ systemd-journal-remote −−url https://some.host:19531/
В результате выполнения приведённой команды логи с хоста some.host будут сохранены в директории var/log/journal/some.host/remote-some~host.journal.
С помощью команды systemd-journal-remote можно также складывать имеющиеся на локальной машине логи в отдельную директорию, например:
$ journalctl -o export | systemd-journal-remote -o /tmp/dir -
Команда systemd-journal-upload используется для загрузки логов с локальной машины в удалённое хранилище:
$ systemd-journal-upload --url https://some.host:19531/
Как видно из приведённых примеров, «родные» утилиты systemd для поддержки централизованного логгирования просты и удобны в работе. Но они, к сожалению, пока что включены далеко не во все дистрибутивы, а только в Fedora и ArchLinux.
Пользователи других дистрибутивов пока что приходится передавать логи в syslog или rsyslog, которые затем пересылают их по сети. Ещё одно решение проблемы централизованного логгирования было предложено разработчиками утилиты journal2gelf, включённой в официальный репозиторий systemd: вывод journalсtl в формате JSON конвертируется в формат GELF, а затем передаётся приложению для сбора и анализа логов Graylog. Решение не очень удобное, но ничего лучше в текущей ситуации придумать нельзя. Остаётся только ждать, когда «родные» компоненты будут добавлены во все дистрибутивы.
Заключение
Как видно из проделанного рассмотрения, systemd journal представляет собой гибкий и удобный инструмент для сбора системных данных и данных приложений. Высокого уровня гибкости и удобства удалось добиться, во-первых, благодаря централизованному подходу к логгированию, а во-вторых — благодаря автоматической записи в логи подробных метаданных. С помощью journalctl можно просматривать логи, получая необходимую информацию для анализа работы и отладки различных системных компонентов.
Если у вас есть вопросы и дополнения — добро пожаловать в комментарии. Разговор о systemd и его компонентах будет продолжен в следующих публикациях.
Читателей, которые по тем или иным причином не могут оставлять комментарии здесь, приглашаем в наш блог.
Новости о Docker
Опубликовано 17.8.2015 10:35 пользователем Peter Lemenkov
Наконец-то в Docker внедрили верификацию образов. Не так много и понадобилось времени, кстати. Ни на что не намекая, предположим, что на подходе зависимости между образами докера, как в RPM.
Помимо этого, в версии 1.8 появилась фича "копировать файл из хоста в контейнер". Не то, чтобы нас, пользователей контейнеров, управляемых systemd, и виртуалок, к которым есть libguestfs, это сильно удивило. Нас больше заинтересовало то, что все эти "новинки" всерьез называются новинками.
Вообще, пользователи Docker зачастую не очень понимают, что такое "контейнеры", что такое "докер" и многие другие вещи. Для них порекомендуем ознакомиться с короткой тематической хаутушкой, которая может помочь расставить все на свои места. Docker, сам по себе, это такой "mc" для контейнеров, и некоторые считают, что как и mc, так и в Docker ничего, кроме лишней сущности, нет. Есть даже шуточная (или не очень?) попытка реализовать Docker в менее 1000 строчек на Bash. Конечно, одним systemd-nspawn вместо Docker обойтись не получится - нужно управление сетью, нужны средства развертывания образов, нужен хотя-бы простейший менеджер задач в кластере, но и для Docker необходимы дополнительные средства. Например, послушайте любопытное выступление Александра Тарасова, инженера Альфа-банка:
Какое у вас сложилось впечатление о развитости и интегрированности компонентов инфраструктуры для Docker?
Вообще, про Docker сейчас интереснее читать не статьи, а читательские комментарии к ним, вот тут, например. Похоже, что мы проходим первый пик известной кривой, и пользователи уже сформировали список желаний. При всем уважении к мнению и опыту команды Iron.io с их колоссальными числами реально работающих контейнеров, у Docker есть хорошо видимые проблемы - особенно обратите внимание на файловую систему, журналирование и безопасность. Мы уверены, что эти проблемы преодолимы, и не факт что в каких-то реальных конфигурациях они обязательно вылезут, но в других решениях эти проблемы уже устранены, и это просто надо знать, прежде чем делать выбор.
К счастью, все контейнерные технологии на самом деле базируются на одних и тех же существующих механизмах ядра, и унификация инструментов гораздо выше, чем считают некоторые. Например, развернув контейнер с помощью Docker вы сможете управлять им из systemd, который давно уже умеет напрямую импортировать образы Docker. Но прогресс прогрессирует прогрессирующе, и Open Container Format, о котором вы уже слышали, скоро сделает ненужным и экспортирование - все контейнеры будут одинаковыми. Пока утрясаются управленческие моменты, но уже есть инициативы по стандартизации все больших и больших областей, например, сети для контейнеров (но это пока секрет!).
Само собой, мы тоже используем Docker сами и помогаем другим. Пару-тройку недель назад наш коллега, Dan Horák, наконец-то собрал Docker для архитектуры s390x. Использовался gcc-go, т.к. референсный golang почти никакие нестандартные архитектуры не поддерживает. Напомним, первые эксперименты по сборке чего-то реального с gcc-go начались в апреле 2015го.
Помимо этого, в версии 1.8 появилась фича "копировать файл из хоста в контейнер". Не то, чтобы нас, пользователей контейнеров, управляемых systemd, и виртуалок, к которым есть libguestfs, это сильно удивило. Нас больше заинтересовало то, что все эти "новинки" всерьез называются новинками.
Вообще, пользователи Docker зачастую не очень понимают, что такое "контейнеры", что такое "докер" и многие другие вещи. Для них порекомендуем ознакомиться с короткой тематической хаутушкой, которая может помочь расставить все на свои места. Docker, сам по себе, это такой "mc" для контейнеров, и некоторые считают, что как и mc, так и в Docker ничего, кроме лишней сущности, нет. Есть даже шуточная (или не очень?) попытка реализовать Docker в менее 1000 строчек на Bash. Конечно, одним systemd-nspawn вместо Docker обойтись не получится - нужно управление сетью, нужны средства развертывания образов, нужен хотя-бы простейший менеджер задач в кластере, но и для Docker необходимы дополнительные средства. Например, послушайте любопытное выступление Александра Тарасова, инженера Альфа-банка:
Какое у вас сложилось впечатление о развитости и интегрированности компонентов инфраструктуры для Docker?
Вообще, про Docker сейчас интереснее читать не статьи, а читательские комментарии к ним, вот тут, например. Похоже, что мы проходим первый пик известной кривой, и пользователи уже сформировали список желаний. При всем уважении к мнению и опыту команды Iron.io с их колоссальными числами реально работающих контейнеров, у Docker есть хорошо видимые проблемы - особенно обратите внимание на файловую систему, журналирование и безопасность. Мы уверены, что эти проблемы преодолимы, и не факт что в каких-то реальных конфигурациях они обязательно вылезут, но в других решениях эти проблемы уже устранены, и это просто надо знать, прежде чем делать выбор.
К счастью, все контейнерные технологии на самом деле базируются на одних и тех же существующих механизмах ядра, и унификация инструментов гораздо выше, чем считают некоторые. Например, развернув контейнер с помощью Docker вы сможете управлять им из systemd, который давно уже умеет напрямую импортировать образы Docker. Но прогресс прогрессирует прогрессирующе, и Open Container Format, о котором вы уже слышали, скоро сделает ненужным и экспортирование - все контейнеры будут одинаковыми. Пока утрясаются управленческие моменты, но уже есть инициативы по стандартизации все больших и больших областей, например, сети для контейнеров (но это пока секрет!).
Само собой, мы тоже используем Docker сами и помогаем другим. Пару-тройку недель назад наш коллега, Dan Horák, наконец-то собрал Docker для архитектуры s390x. Использовался gcc-go, т.к. референсный golang почти никакие нестандартные архитектуры не поддерживает. Напомним, первые эксперименты по сборке чего-то реального с gcc-go начались в апреле 2015го.
Тестовый день Fedora 23 - NetworkManager
Опубликовано 14.8.2015 09:22 пользователем Peter Lemenkov
Мы только-только собираемся устроить Fedora 22 Release Picnic, а уже начались тестовые дни для Fedora 23. Одним из первых будет тестовый день NetworkManager, запланированный на 20 августа.
Вы уже знаете, что с Fedora 22 мы перешли на NetworkManager 1.x.x. В версии 1.0.0 он стал тоньше (меньше зависимостей), его DHCP-клиент стал быстрее (код, взятый из systemd и connman), он стал лучше сосуществовать с уже сконфигурированными устройствами, статическими интерфейсами, и предустановленными маршрутами. К счастью, особо крупных проблем не нашлось. Тем не менее, последовало уже два багфикс-релиза. Сначала вышел NetworkManager 1.0.2, в котором среди прочих исправлена ошибка, с которой только что столкнулись разработчики systemd-networkd - если на устройстве исчезает питание (выдернули и воткнули кабель, или глюк ядра), то не стоит сразу же сбрасывать настройки и запускать DHCPклиент по новой). Затем вышел NetworkManager 1.0.4. Сейчас на подходе уже версия 1.0.6, и вот ее-то и будем проверять.
Вы уже знаете, что с Fedora 22 мы перешли на NetworkManager 1.x.x. В версии 1.0.0 он стал тоньше (меньше зависимостей), его DHCP-клиент стал быстрее (код, взятый из systemd и connman), он стал лучше сосуществовать с уже сконфигурированными устройствами, статическими интерфейсами, и предустановленными маршрутами. К счастью, особо крупных проблем не нашлось. Тем не менее, последовало уже два багфикс-релиза. Сначала вышел NetworkManager 1.0.2, в котором среди прочих исправлена ошибка, с которой только что столкнулись разработчики systemd-networkd - если на устройстве исчезает питание (выдернули и воткнули кабель, или глюк ядра), то не стоит сразу же сбрасывать настройки и запускать DHCPклиент по новой). Затем вышел NetworkManager 1.0.4. Сейчас на подходе уже версия 1.0.6, и вот ее-то и будем проверять.
В Fedora одобрили включение EC-криптографии с алгоритмом secp256k1!
Опубликовано 13.8.2015 16:03 пользователем Peter Lemenkov
Почти два года прошло с тех пор, как в Fedora вновь отключили шифрование на базе эллиптической кривой secp256k1, и вот, наконец-то ситуация сдвинулась с мертвой точки. Ждем активизацию работы по включению ПО для работы с Bitcoin!
Dave Jones вновь меняет работу.
Опубликовано 12.8.2015 13:43 пользователем Peter Lemenkov
Когда Dave Jones объявил в декабре 2014, что он уходит из Red Hat, многие гадали, кому это так повезло? Оказалось, что это был Akamai. К сожалению, по сравнению с невероятной открытостью рабочего процесса в Red Hat, и его полной ориентацией на открытые инструменты, стандарты, и код, в Akamai оказалось все совсем не так. Например, Dave пишет, что в Akamai используется peforce! Не, ну это как вообще?
Помучавшишь несколько месяцев в Akamai, Dave решил уйти в Facebook. Желаем удачи на новом месте!
Помучавшишь несколько месяцев в Akamai, Dave решил уйти в Facebook. Желаем удачи на новом месте!
Вышел Qemu 2.4
Опубликовано 12.8.2015 13:28 пользователем Peter Lemenkov
Наконец-то вышел Qemu 2.4. В большом списке изменений хотелось бы выделить поддержку VirtIO GPU, разработанного нашим коллегой David Airlie, горячее удаление памяти, улучшение в зеркалировании блочных устройств. Одновременно выпустили багфикс-релиз Qemu 2.3.1.
Вообще, несмотря на взрывной рост интереса к контейнерам, отметим, что старый конь борозды не испортит. Учитывая пока что нерешенные проблемы с безопасностью контейнеров, особенно в маргинальных дистрибутивах, без SELinux, у виртуализации будет своя ниша. Конечно, конкуренция решений тут лишь обостряется. Большие игроки медленно решаются что-то менять, но если решаются, то бесповоротно. Вы уже могли слышать, что пару месяцев назад Linode решил уйти с Xen на KVM (причем, отметьте, они утверждают, что KVM-виртуалки заметно быстрее Xen-виртуалок), но впереди еще миграция еще больших размеров, которую мы пока что ждем.
Итак, виртуализация не собирается уходить, и уже понятно, что завоевала некую стабильную долю среди всех решений. Де-факто стандартом для новинок становится Qemu, на котором смело экспериментируют. Например, Intel уже несколько месяцев, как анонсировала проект Clear Containers, в рамках которого ведется научно-исследовательская работа по оптимизации виртуальной машины с Linux-системой для запуска контейнеров. Они обнаружили неисследованное поле для оптимизации - загрузка и инициализация виртуальной машины. Т.к. Qemu декларирует поддержку операционных систем в общем случае, то по умолчанию загрузка виртуалки не сильно отличается от загрузки персоналки с Windows 95. Тот же 16-битный BIOS вместо UEFI, те же процедуры инициализации. А почему бы не изменить эту часть, выбросив поддержку операционных систем из 1980х и 1990х годов? После экспериментов с пересборкой Qemu и разработкой специального firmware, Paolo Bonzini официально объявил о выходе qboot, специальном firmware и инструкции для пересборки Qemu, позволявшим запустить исполнение виртуальной машины через 40 миллисекунд, вместо обычных 500-700. Дальше, конечно, время тратится на запуск ядра, initrd, init-процесс, но полсекунды сэкономить получилось!
Анонс qboot вызвал оживленное обсуждение. Понятно, что кое-чего при таких результатах еще нет, да и Paolo признался, что разработал прототип за 24 часа, и понятно, что SeaBIOS можно тоже подсушить, но 200 миллисекунд в SeaBIOS против 20 в qboot, это заметная разница. Можно ожидать, что qboot как таковый, использоваться будет незначительно - уж слишком это изменение инвазивно со своим требованием пересборки Qemu, но определенно стоит ожидать оптимизаций в SeaBIOS и возможно в Coreboot.
Вообще, несмотря на взрывной рост интереса к контейнерам, отметим, что старый конь борозды не испортит. Учитывая пока что нерешенные проблемы с безопасностью контейнеров, особенно в маргинальных дистрибутивах, без SELinux, у виртуализации будет своя ниша. Конечно, конкуренция решений тут лишь обостряется. Большие игроки медленно решаются что-то менять, но если решаются, то бесповоротно. Вы уже могли слышать, что пару месяцев назад Linode решил уйти с Xen на KVM (причем, отметьте, они утверждают, что KVM-виртуалки заметно быстрее Xen-виртуалок), но впереди еще миграция еще больших размеров, которую мы пока что ждем.
Итак, виртуализация не собирается уходить, и уже понятно, что завоевала некую стабильную долю среди всех решений. Де-факто стандартом для новинок становится Qemu, на котором смело экспериментируют. Например, Intel уже несколько месяцев, как анонсировала проект Clear Containers, в рамках которого ведется научно-исследовательская работа по оптимизации виртуальной машины с Linux-системой для запуска контейнеров. Они обнаружили неисследованное поле для оптимизации - загрузка и инициализация виртуальной машины. Т.к. Qemu декларирует поддержку операционных систем в общем случае, то по умолчанию загрузка виртуалки не сильно отличается от загрузки персоналки с Windows 95. Тот же 16-битный BIOS вместо UEFI, те же процедуры инициализации. А почему бы не изменить эту часть, выбросив поддержку операционных систем из 1980х и 1990х годов? После экспериментов с пересборкой Qemu и разработкой специального firmware, Paolo Bonzini официально объявил о выходе qboot, специальном firmware и инструкции для пересборки Qemu, позволявшим запустить исполнение виртуальной машины через 40 миллисекунд, вместо обычных 500-700. Дальше, конечно, время тратится на запуск ядра, initrd, init-процесс, но полсекунды сэкономить получилось!
Анонс qboot вызвал оживленное обсуждение. Понятно, что кое-чего при таких результатах еще нет, да и Paolo признался, что разработал прототип за 24 часа, и понятно, что SeaBIOS можно тоже подсушить, но 200 миллисекунд в SeaBIOS против 20 в qboot, это заметная разница. Можно ожидать, что qboot как таковый, использоваться будет незначительно - уж слишком это изменение инвазивно со своим требованием пересборки Qemu, но определенно стоит ожидать оптимизаций в SeaBIOS и возможно в Coreboot.
Dan Walsh о том, почему SELinux не защищает Firefox
Опубликовано 12.8.2015 11:05 пользователем Peter Lemenkov
Dan решил объяснить, почему SELinux не смог бы предотвратить недавнюю уязвимость в Firefox. К сожалению, как пишет в своем блоге Dan, проблема гораздо серьезней.
Для начала, Firefox пока вынужден общаться с устаревшей и небезопасной системой X11, и, например, хотя возможность заблокировать извне процесс от получения информации о нажатых клавишах (т.е. от работы кейлоггером) есть, но применив ее Dan обнаружил, что очень много ПО перестало работать. Также любое ПО может снимать скриншоты экрана, или обладать доступом к буферу обмена (в Wayland, спроектированном с учетом современных требований, это будет исправлено).
Еще одна проблема, это доступ к файлам в домашней директории. В ряде случаев бывает, что пользователь, например, переопределяет папки для сохранения загруженных файлов, и поэтому белый список ввести не получится. Ввести не белые, а ченые списки (например, запретить Firefox доступ к ~/.ssh) тоже не сработает, т.к. есть варианты работы с аутентификацией по ssh-ключу.
Проблемой безопасности является и доступ к D-Bus, к камере, к микрофону, к GPS и т.п. - запрещать это на уровне SELinux нельзя. Непросто и написать правила для приложений-хелперов. Например, если Firefox запустит LibreOffice для открытия документа, то в каком пространстве SELinux нужно запустить LO? В пространстве Firefox или в своем?
Самым простым было ограничение возможностей у дополнений Firefox. Конечно, пришлось ввести дополнительные флаги SELinux для полного отключения ограничений для ряда популярных приложений - на случай, если им потребуется дополнительные права. Хотя, конечно, лучше проприетарные плагины вовсе не использовать.
В ближайшем будущем, благодаря Alex Larsson, который разрабатывает новый стандарт распространения и работы с десктопными приложениями, эти проблемы будут решены. Каждое приложение будет работать в своем контейнере, с ограничениями SELinux, и под Wayland. Почти все проблемы, благодаря этой связке, будут решены. Примерно так и работают приложения в Android, благодаря SEAndroid, о котором мы вам рассказывали.
Кстати, если вы почему-то не используете Fedora, то требуйте от мэйнтейнеров вашего дистрибутива включать SELinux - на его использование будет завязано все больше и больше ПО.
Раз уж заговорили о безопасности, то стоит отметить, что в Fedora наши коллеги относятся к ней очень тщательно. Ну, по крайней мере, мы стараемся. Например, много вопросов было от переключавшихся с других дистрибутивов, почему у нас не работает добавление пользователя в группу "docker". В ряде других дистрибутивов после добавления пользователя в эту группу, ему позволяется запускать контейнеры, а у нас ему нужно поднять свои привилегии до суперпользователя с помощью su или sudo. Проблема в том, что если разрешить пользователю запускать произвольные контейнеры, он сумеет получить полный доступ к файловой системе от суперпользователя. Т.е. добавив его в группу docker мы фактически даем ему право выполнять sudo без пароля. И т.к. в Docker журналирование событий крайне убогое (как и много чего еще), то это рассматривается, как дыра в безопасности. Dan Walsh решил завести специальный тикет с объяснением на GitHub, чтобы не повторяться вновь и вновь. Конечно, лучше бы вам вообще не использовать Docker для контейнеров, т.к. systemd и сопутствующее ПО предоставляют гораздо больше возможностей для этого.
Для начала, Firefox пока вынужден общаться с устаревшей и небезопасной системой X11, и, например, хотя возможность заблокировать извне процесс от получения информации о нажатых клавишах (т.е. от работы кейлоггером) есть, но применив ее Dan обнаружил, что очень много ПО перестало работать. Также любое ПО может снимать скриншоты экрана, или обладать доступом к буферу обмена (в Wayland, спроектированном с учетом современных требований, это будет исправлено).
Еще одна проблема, это доступ к файлам в домашней директории. В ряде случаев бывает, что пользователь, например, переопределяет папки для сохранения загруженных файлов, и поэтому белый список ввести не получится. Ввести не белые, а ченые списки (например, запретить Firefox доступ к ~/.ssh) тоже не сработает, т.к. есть варианты работы с аутентификацией по ssh-ключу.
Проблемой безопасности является и доступ к D-Bus, к камере, к микрофону, к GPS и т.п. - запрещать это на уровне SELinux нельзя. Непросто и написать правила для приложений-хелперов. Например, если Firefox запустит LibreOffice для открытия документа, то в каком пространстве SELinux нужно запустить LO? В пространстве Firefox или в своем?
Самым простым было ограничение возможностей у дополнений Firefox. Конечно, пришлось ввести дополнительные флаги SELinux для полного отключения ограничений для ряда популярных приложений - на случай, если им потребуется дополнительные права. Хотя, конечно, лучше проприетарные плагины вовсе не использовать.
В ближайшем будущем, благодаря Alex Larsson, который разрабатывает новый стандарт распространения и работы с десктопными приложениями, эти проблемы будут решены. Каждое приложение будет работать в своем контейнере, с ограничениями SELinux, и под Wayland. Почти все проблемы, благодаря этой связке, будут решены. Примерно так и работают приложения в Android, благодаря SEAndroid, о котором мы вам рассказывали.
Кстати, если вы почему-то не используете Fedora, то требуйте от мэйнтейнеров вашего дистрибутива включать SELinux - на его использование будет завязано все больше и больше ПО.
Раз уж заговорили о безопасности, то стоит отметить, что в Fedora наши коллеги относятся к ней очень тщательно. Ну, по крайней мере, мы стараемся. Например, много вопросов было от переключавшихся с других дистрибутивов, почему у нас не работает добавление пользователя в группу "docker". В ряде других дистрибутивов после добавления пользователя в эту группу, ему позволяется запускать контейнеры, а у нас ему нужно поднять свои привилегии до суперпользователя с помощью su или sudo. Проблема в том, что если разрешить пользователю запускать произвольные контейнеры, он сумеет получить полный доступ к файловой системе от суперпользователя. Т.е. добавив его в группу docker мы фактически даем ему право выполнять sudo без пароля. И т.к. в Docker журналирование событий крайне убогое (как и много чего еще), то это рассматривается, как дыра в безопасности. Dan Walsh решил завести специальный тикет с объяснением на GitHub, чтобы не повторяться вновь и вновь. Конечно, лучше бы вам вообще не использовать Docker для контейнеров, т.к. systemd и сопутствующее ПО предоставляют гораздо больше возможностей для этого.
А зачем нам 32-битные системы?
Опубликовано 11.8.2015 13:57 пользователем Peter Lemenkov
В рамках проекта CentOS объявили о создании рабочей группы по сборке для неосновных архитектур. Уже собрали CentOS для AArch64 и более-менее идет работа по сборке для POWER BE, так что есть что показать!
А вот в Fedora обсуждают диаметрально противоположную инициативу - не перевести ли 32-битный x86 в категорию вторичных платформ (это первый шаг на скорое выкидывание за ненадобностью). Нет, ну а правда - у всех уже давно 64-битные компьютеры, и если 32-битные ARM-машинки еще есть, то какой смысл в сборке для 32-битных Intel-совместимых машин?
Обсуждение пока ни к чему не привело, но идея уже посеяна. Интересно, что одновременно с упрощением букета поддерживаемых систем, не так давно появилась инициатива по упрощению сборки Fedora для неподдерживаемых систем. Ну мало ли - вдруг кто-нибудь захочет собрать Fedora для Эльбруса или Байкала.
А вот в Fedora обсуждают диаметрально противоположную инициативу - не перевести ли 32-битный x86 в категорию вторичных платформ (это первый шаг на скорое выкидывание за ненадобностью). Нет, ну а правда - у всех уже давно 64-битные компьютеры, и если 32-битные ARM-машинки еще есть, то какой смысл в сборке для 32-битных Intel-совместимых машин?
Обсуждение пока ни к чему не привело, но идея уже посеяна. Интересно, что одновременно с упрощением букета поддерживаемых систем, не так давно появилась инициатива по упрощению сборки Fedora для неподдерживаемых систем. Ну мало ли - вдруг кто-нибудь захочет собрать Fedora для Эльбруса или Байкала.
Oded Gabbay присоединяется к Red Hat
Опубликовано 11.8.2015 13:45 пользователем Peter Lemenkov
К команде Red Hat и к проекту Fedora присоединился еще один широко известный в узких кругах разработчик - Oded Gabbay. Раньше он работал в AMD над драйвером для архитектуры HSA. Он объявил, что будет работать над улучшением графического стека для POWER-архитектуры. Помимо этого он еще и действующий разработчик и release manager библиотеки pixman, мэйнтейнером которой он будет в Fedora.
Страницы
- « первая
- ‹ предыдущая
- …
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- …
- следующая ›
- последняя »