Безопасный Linux : Часть 4.1. Запускаем TOMOYO Linux

1. Введение

Эта статья продолжает серию "Безопасный Linux". Первые три статьи серии (см. раздел Ресурсы) были посвящены системе AppArmor. В прошлой статье (см. раздел Ресурсы) рассказано о TOMOYO Linux – еще одном средстве обеспечения мандатного контроля доступа, однако уже удостоившегося включения в ядро Linux (начиная с версии 2.6.30). В этой статье мы затронем вопросы установки и использования TOMOYO Linux, а также рассмотрим примеры политик безопасности. Помните, что цель статьи состоит не в том, чтобы предоставить более или менее полное руководство по работе c TOMOYO Linux, а в том, чтобы дать представление о возможностях этой системы безопасности и объеме работ, необходимых для ее полноценного запуска.

2. Установка TOMOYO Linux

Как говорилось в прошлой статье, существуют две версии TOMOYO Linux: ветка 2.х включена в ядро Linux и уже используется по умолчанию в некоторых дистрибутивах (например, Mandrive 2010), и ветка 1.x, которая требует установки на уровне исправлений ядра, но является значительно более функциональной. В этой статье мы будем рассматривать работу с TOMOYO Linux из ветки 1.х (в частности, версию 1.6.8).

Несмотря на то, что система TOMOYO Linux 1.6.8 не включена в ядро, установка ее – спасибо разработчикам! – как правило, очень проста. Заходим на сайт http://tomoyo.sourceforge.jp/1.6/install.html.en и отыскиваем свой дистрибутив – для большинства наиболее популярных дистрибутивов скомпилированы бинарные модули, а значит, для установки TOMOYO Linux не потребуется никаких лишних действий. В случае дистрибутива OpenSUSE 11.1 (используемого при написании статьи), необходимо от имени пользователя root выполнить две следующие команды:root@tomoyo ~# zypper addrepo --type=YUM http://tomoyo.sourceforge.jp/repos/SUSE11.1/ ccs
root@tomoyo ~# zypper install ccs-kernel-default ccs-tools



Первая команда добавляет специальный репозитарий, а вторая устанавливает новое ядро и необходимые утилиты TOMOYO Linux.

Если же используемый вами дистрибутив не слишком распространен, то придется потратить время на перекомпиляцию ядра (подробные инструкции есть на той же странице сайта)...

Инициализация TOMOYO Linux заключается в запуске специального скрипта init_policy.sh: root@tomoyo ~# /usr/lib/ccs/init_policy.sh
Creating policy directory.
Creating manager policy.
Creating default profile.
Creating exception policy. This will take several minutes.
Creating system policy.
Creating domain policy.

Из сопроводительных сообщений несложно понять, что происходит: создаются файлы настроек по умолчанию (их можно найти в каталоге /etc/ccs).

После установки новую систему (включая ядро) необходимо активизировать. Проще всего это сделать, перезагрузив компьютер. Файлы настроек TOMOYO Linux хранятся в каталоге /etc/ccs, специальный каталог виртуальной файловой системы /proc/ccs содержит текущие (используемые) настройки, а вспомогательные утилиты – в /usr/lib/ccs:

root@tomoyo ~# ls /proc/ccs

---------------------------------------------------------

TOMOYO Linux
Во время подготовки этой статьи вышла новая версия наиболее функциональной ветки системы – TOMOYO Linux 1.7.1. Эта версия является четвертым ежегодным релизом и содержит исправления нескольких редких ошибок, одно изменение в пользу платформы Android и одно улучшение – теперь можно использовать правила рекурсивных определений каталогов.

http://sourceforge.jp/projects/tomoyo/releases/?package_id=10270).

---------------------------------------------------------

Внимательный читатель отметит, что среди инструментов TOMOYO Linux есть два скрипта инициализации: init_policy.sh и tomoyo_init_policy.sh. В официальной документации говорится, что для инициализации системы в версиях 1.x необходимо запускать скрипт init_policy.sh, а в версиях 2.x – tomoyo_init_policy.sh...

3. Запускаем TOMOYO Linux

Прежде чем опробовать TOMOYO Linux в действии, необходимо изрядно потрудиться... Дело в том, что разработчики не предоставляют «стандартных» политик безопасности, как это делается в случае AppArmor. Администраторам для каждой рабочей системы нужно самостоятельно создавать файлы политик, используя «режим обучения». На сайте http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/?v=policy-sample предоставлены примеры файлов политик безопасности для ряда дистрибутивов, однако разработчики настоятельно рекомендуют не использовать их как стандартные политики (и это правильно – политики безопасности не производят впечатления хорошо сделанных...). Каждая система индивидуальна, поэтому файлы политик рекомендуется создавать для каждой системы в отдельности.

Однако если вы хотите быстро ознакомиться с возможностями TOMOYO Linux, избежав необходимости изучать принципы работы этой системы и пропустив все промежуточные этапы, воспользуйтесь LiveCD (более подробная информация – во врезке).

3.1. Профили безопасности

Следующий этап на пути к запуску системы безопасности – это настройка профилей безопасности. В список возможностей TOMOYO Linux входит не только обеспечение мандатного контроля доступа к файлам, но и целый ряд других управляющих параметров. Не все они могут понадобиться, поэтому те, что не кажутся вам полезными, можно отключить. В таблице 1 представлены доступные параметры управления TOMOYO Linux.

---------------------------------------------------------

Live TOMOYO Linux
Благодаря технологии LiveCD, вам не нужно рисковать рабочей системой, чтобы познакомиться с характеристиками новой технологии – достаточно взять любезно подготовленный разработчиками LiveCD. Настроенную работоспособную систему можно будет опробовать на любом компьютере, имеющем подходящие аппаратные характеристики. Это касается и TOMOYO Linux.

---------------------------------------------------------

Таблица 1. Параметры управления TOMOYO Linux

Имя параметра Назначение Значение по умолчанию Диапазон значений

Как видно из таблицы, большая часть параметров принимает одно из значений disabled/learning/permissive/enforcing. Производимый при этом эффект описывается в таблице 2.

Таблица 2. Эффект параметров

Профили безопасности (таблица 3) нужно записать в файл /etc/ccs/profile.conf (на самом деле они там уже есть, при необходимости в них можно внести изменения). Всего в нем может содержаться до 256 различных профилей безопасности. Каждый из этих профилей, в свою очередь, может иметь различные наборы значений параметров управления. Профили безопасности нумеруются (соответственно числами от 0 до 255) и затем могут назначаться конкретным программам (согласно областям видимости, об этом читайте ниже).

Таблица 3. Пример профилей безопасности
0-COMMENT=----- All Disabled -----
1-COMMENT=----- FILE and NETWORK with Learning Mode -----
1-MAC_FOR_FILE=learning
1-MAC_FOR_NETWORK=learning
2-COMMENT=----- FILE and NETWORK with Permissive Mode -----
2-MAC_FOR_FILE=permissive
2-MAC_FOR_NETWORK=permissive
3-COMMENT=----- Enforcing mode -----
3-MAC_FOR_FILE=enforcing
3-MAC_FOR_NETWORK=enforcing
3-MAC_FOR_ARGV0=enforcing
3-MAC_FOR_ENV=enforcing
3-MAC_FOR_NETWORK=enforcing
3-MAX_GRANT_LOG=0

В этом примере задано четыре профиля – при профиле 0 TOMOYO Linux де-факто не работает (смотрите на значения по умолчанию), профиль 1 является обучающим, профиль 2 – разрешающим, а профиль 3 – запрещающим.

При необходимости внесения изменений в профили достаточно отредактировать файл /etc/ccs/profile.conf и перезагрузить политики безопасности командой/usr/sbin/ccs-loadpolicy p

Профили безопасности, используемые в текущий момент, можно просмотреть в специальном файле виртуальной файловой системы /proc:cat /proc/ccs/profile

При желании можно создать несколько различных профилей. Переключаться между ними можно, указывая имя профиля при загрузке (в параметрах ядра). Например, загружаем профиль /etc/ccs/profile-<имя>.conf:CCS=<имя>

3.2. Область видимости (история запуска процесса)

Как уже говорилось в прошлой статье, TOMOYO Linux осуществляет разграничение доступа на основе области видимости (domain). Непосредственно с областью видимости связано понятие истории запуска процесса; в терминах самой системы безопасности – это Process Invocation History (PIH). Обсудим это подробнее.

Выполните следующую команду:root@tomoyo ~# more /proc/ccs/.domain_status

Вы увидите что-то подобное этому:0 <kernel>
0 <kernel> /sbin/modprobe
0 <kernel> /sbin/init
0 <kernel> /sbin/init /bin/sh
0 <kernel> /etc/init.d/boot
0 <kernel> /etc/init.d/boot /sbin/showconsole
0 <kernel> /etc/init.d/boot /bin/stty
0 <kernel> /etc/init.d/boot /bin/mount
0 <kernel> /etc/init.d/boot /bin/cp


В файле /proc/ccs/.domain_status описывается текущий набор процессов и назначенных им профилей. Так, в первом столбце в приведенном выше примере указан номер профиля (0, что соответствует – см. таблицу 3 – отключению TOMOYO Linux). То, что следует далее – это и есть история запуска процесса или область видимости. Всякая область видимости начинается с ключевого слова <kernel>, непосредственно за которым следует процесс, запущенный ядром. Если этот процесс запустил какой-то новый процесс, то «потомок» записывается следом в строке.

Например, область видимости, включающая только ядро – "<kernel>", процесс /sbin/init, запущенный ядром – "<kernel> /sbin/init", область видимости /etc/rc.d/rc, запущенная процессом /sbin/init, – "<kernel> /sbin/init /etc/rc.d/rc".

Насколько велика эта последовательность, зависит от того, сколько (пра)родителей имеет запущенный процесс. В итоге, область видимости – это последовательность от ключевого слова <kernel> до последнего запущенного процесса. Для каждого процесса (не обязательно конечного) из области видимости определяется история запуска процесса – это последовательность от ключевого слова <kernel> до непосредственного родителя процесса.

3.3. Привязывание профилей к областям видимости

Для назначения какого-либо профиля конкретной области видимости используется команда ccs-setprofile. Например, команда/usr/sbin/ccs-setprofile 2 '<kernel> /sbin/init'

устанавливает профиль 2 для области видимости <kernel> /sbin/init.

Как правило, требуется рекурсивное привязывание профилей. Для этого служит ключ -r. Команда/usr/sbin/ccs-setprofile -r 0 '<kernel>'

установит, что для всех областей видимости необходимо использовать профиль 0. Также/usr/sbin/ccs-setprofile -r 1 '<kernel> /sbin/init'

«привяжет» к профилю 1 все области видимости, начинающиеся с <kernel> /sbin/init.

Замечание. Если в процессе назначения профилей выяснилось, что система стала неработоспособной (бывает и такое), то нужно передать ядру при загрузке параметр CCS=disabled – это отключит систему TOMOYO Linux.

3.4. Глобальные настройки

В отличие от AppArmor, в TOMOYO Linux настройки делятся по файлам не по отношению к программам, а по функциональности, которую они несут. Один из таких файлов – /etc/ccs/exception_policy.conf, содержащий глобальные настройки системы. Здесь прописываются как правила, действующие на все программы, так и глобальные разрешения/запреты. Например, можно запретить удаление лог-файлов, разрешить всем процессам чтение некоторых системных файлов и т.д.

Доступные параметры глобальных настроек представлены в таблице 4.

Таблица 4. Параметры глобальных настроек TOMOYO Linux

Текущие (действующие) настройки можно просмотреть в файле /proc/ccs/exception_policy.

3.5. Алгоритм создания нового профиля

Более подробное описание алгоритма создания нового профиля программы можно найти на официальном сайте TOMOYO Linux (см. раздел Ресурсы). Здесь будет представлено лишь краткое руководство.

Алгоритм создания нового профиля для приложения состоит из следующих четырех шагов.
Создание области видимости.

Создайте области видимости для программы. Это может быть единая область видимости <kernel> <путь к программе> либо варианты, зависящие от истории запуска.
Сбор данных о действиях в программе.

Переведите TOMOYO Linux в режим обучения для требуемых областей видимости и «погоняйте» программу по штатным действиям. Затем просмотрите лог-файлы в поисках сообщений, начинающихся с «TOMOYO-WARNING:» – здесь кандидаты на включение в правила.
Тестовое использование.

Переведите TOMOYO Linux в разрешающий режим для требуемых областей видимости. Если в процессе работы с программой в лог-файлах не появились сообщения, начинающиеся с «TOMOYO-WARNING:», это значит, что политика безопасности не ограничивает необходимые для работы программы операции.
Переведите TOMOYO Linux в запрещающий режим для требуемых областей видимости.

Нет необходимости в единовременном создании всеобъемлющей структуры политик безопасности для всех приложений. Вы можете постепенно добавлять ограничения на приложения и даже при необходимости отключать ограничивающий режим.

3.6. Дополнительные возможности TOMOYO Linux

Напоследок кратко перечислим другие возможности TOMOYO Linux, которые во многом и определяют лидерство этой системы обеспечения мандатного контроля доступа среди подобных систем безопасности, основывающих свой контроль на пути к файлам.

Уведомление о нарушениях

TOMOYO Linux позволяет настраивать уведомления о случаях нарушения какими-то программами установленных политик безопасности. Это полезно не только в случае параноидального отношения к безопасности, но и для получения более удобной возможности настройки правил – например, для реагирования на ошибки, возникающие на компьютере другого пользователя.

Запишите в файл настроек службы cron следующую команду для отправки сообщений на ваш электронный почтовый адрес: 00 * * * * root /usr/lib/ccs/misc/ccs-notifyd 0 'mail root@domain.ru'

Редактор политик безопасности

Для упрощения работы с политиками безопасности разработчиками TOMOYO Linux был создан специальный редактор, который запускается командой /usr/sbin/ccs-editpolicy. Он дает более удобный и наглядный способ редактирования правил.

Шаблоны

Для уменьшения размеров правил удобно использовать шаблоны. Доступны все основные символы подстановки, например:allow_read /tmp/*

разрешает обращение на чтение ко всем файлам в каталоге /tmp.

Условные правила

Одно из самых больших преимуществ TOMOYO Linux перед AppArmor – это наличие условных правил. Запретить вход пользователя root по ssh, ограничить каким-то пользователям доступ к конкретным программам и Internet-сайтам – наиболее простой способ реализации всего этого основан на условных правилах. Например:allow_read /etc/passwd if task.uid=0
allow_network TCP connect 10.0.0.1 80

Интересная возможность связана с передачей информации между правилами. Вот пример, где запуск оболочки bash разрешается только доверенным компьютерам:allow_network TCP accept @TRUSTED_HOSTS 1024-65535 ; set task.state[0]=1
allow_execute /bin/bash if task.state[0]=1

Обработчик исполнения

В случае, если процесс пытается запустить программу, запрещенную политикой безопасности, можно уведомить пользователя о нарушении. Например, для оболочки bash укажите следующий параметр в политиках безопасности: denied_execute_handler /usr/sbin/notification


Здесь программа notification может быть простым скриптом, выводящим что-то типа «Использование программы запрещено политикой безопасности!».

Если для проверки на возможность запуска программы необходимы большие возможности, чем предоставляет TOMOYO Linux, то можно использовать собственный обработчик (например, антивирус). Для этого нужно указать в политике безопасности директиву execute_handler /usr/sbin/checking

Наказание за нарушение правил

Процесс, нарушивший политику безопасности, можно «наказать сном». Для этого в используемом профиле нужно установить необходимое значение параметра SLEEP_PERIOD.

Заключение

TOMOYO Linux идет в авангарде систем безопасности, обеспечивающих мандатный контроль доступа на основе путей к файлам (или, в англоязычной терминологии, «path-name based Mandatory Access Control»). Это подтверждается и тем, что система была включена в ядро Linux.

К сожалению, размер статьи не позволяет предоставить подробное руководство по работе с TOMOYO Linux (да и сама серия статей «Безопасный Linux» предназначена не для этого). Однако вы можете обратиться за недостающей информацией на официальный сайт (см. раздел Ресурсы) и даже протестировать систему безопасности при помощи специальных LiveCD (см. раздел Ресурсы).

Сейчас основные усилия разработчиков TOMOYO Linux направлены на ликвидацию функциональных различий между двумя параллельными ветками системы (а значит, полным ходом идет доработка подсистемы Linux Security Modules), а также на дальнейшую адаптацию системы под мобильную платформу Android. Не забывают разработчики и про наиболее функциональную версию (недавно вышел очередной релиз – см. врезку).

Однако при всех достоинствах (path-name based) TOMOYO Linux и AppArmor, существует множество сторонников другого подхода – ограничения контроля доступа на основе меток объектов. Ярким представителем этого подхода является SELinux (разработка Национального агентства безопасности США). Подробнее о принципах и отличиях двух подходов, а также о SELinux будет рассказано в следующих статьях серии «Безопасный Linux».

http://www.ibm.com/developerworks/ru/library/l-apparmor-4.1/

Обновлено: 13.03.2015