Содержание


Безопасный Linux

Часть 4.1. Запускаем TOMOYO Linux

Comments

Серия контента:

Этот контент является частью # из серии # статей: Безопасный Linux

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Безопасный 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
domain_policy.confmanager.confsystem_policy.conf
exception_policy.confprofile.conf
root@tomoyo ~# ls /proc/ccs
domain_policygrant_logmeminfoqueryself_domainversion
exception_policymanagerprofilereject_logsystem_policy
root@tomoyo ~# ls /usr/lib/ccs
ccs-auditdccstreeeditpolicyloadpolicypatternizesetlevel
ccs-querydcheckpolicyfindtempmake_aliasREADME.ccssetprofile
ccstoolsCOPYING.ccsinit_policy.shmiscrealpathsortpolicy
ccstools.confdomainmatchld-watchpathmatchsavepolicytomoyo_init_policy.sh

Внимательный читатель отметит, что среди инструментов 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.

Таблица 1. Параметры управления TOMOYO Linux
Имя параметраНазначениеЗначение по умолчаниюДиапазон значений
COMMENTКомментарий, используется для описания содержимого профиля.Текстовая строка
MAC_FOR_FILEОбеспечение мандатного контроля доступа к файлам.disableddisabled/learning/permissive/enforcing
MAC_FOR_ARGV0Проверка передаваемых процессу параметров (argv[0])disableddisabled/learning/permissive/enforcing
MAC_FOR_ENVКонтроль используемых переменных окружения.disableddisabled/learning/permissive/enforcing
MAC_FOR_CAPABILITY::Обеспечение мандатного контроля доступа к POSIX-возможностям. Существует 31 тип возможностей, каждую из которых можно включать/отключать по отдельности.disableddisabled/learning/permissive/enforcing
MAC_FOR_NETWORKОбеспечение мандатного контроля доступа к сетевым адресам и портам.disableddisabled/learning/permissive/enforcing
MAC_FOR_SIGNALОбеспечение мандатного контроля доступа к сигналам.disableddisabled/learning/permissive/enforcing
DENY_CONCEAL_MOUNTЗапрет запросов монтирования, которые скрывают существующие точки монтирования.disableddisabled/learning/permissive/enforcing
RESTRICT_CHROOTВключение ограничений для каталогов chrootdisableddisabled/learning/permissive/enforcing
RESTRICT_MOUNTОграничение на параметры монтирования.disableddisabled/learning/permissive/enforcing
RESTRICT_UNMOUNTЗапрет запросов размонтирования для определенных каталогов.disableddisabled/learning/permissive/enforcing
RESTRICT_PIVOT_ROOTОграничения для каталогов pivot_rootdisableddisabled/learning/permissive/enforcing
RESTRICT_AUTOBINDЗапрет выбора определенного локального номера порта, когда происходит автоматическое зеркалирование локального порта.disableddisabled/enabled
MAX_ACCEPT_ENTRYОграничение максимального числа записей ACL, которые автоматически добавляются в режиме обучения.2048Целое не отрицательное число
MAX_GRANT_LOGОграничение максимального числа запросов доступа, которые не нарушают политику безопасности.1024Целое не отрицательное число
MAX_REJECT_LOGОграничение максимального числа запросов доступа, нарушающих политику безопасности.1024Целое не отрицательное число
TOMOYO_VERBOSEСброс сообщений о нарушениях политики безопасности в syslogenableddisabled/enabled
SLEEP_PERIODОпределяет, на какой срок блокируется (засыпает) процесс, нарушивший политику безопасности, находящуюся в принудительном режиме, в десятых долях секунд.0Целое не отрицательное число

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

Таблица 2. Эффект параметров
Значение параметраПроизводимый эффект
disabledПараметр отключен. Работает как при немодифицированном ядре.
learningРежим обучения. Запросы процесса не отклоняются, даже если они противоречат политике безопасности. Запрос автоматически добавляется к политике безопасности.
permissiveРазрешающий режим. Запросы процесса не отклоняются, даже если они противоречат политике безопасности. Запросы не добавляются к политике безопасности.
enforcingЗапрещающий режим. Все запросы процесса, противоречащие политике безопасности, отклоняются.

Профили безопасности (таблица 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
ПараметрОписание и примеры
1aggregatorЭта опция логически объединяет несколько программ, чтобы TOMOYO Linux применял к ним одни и те же правила. Например,
aggregator /usr/bin/tac /bin/cat
2initialize_domainУказывает на необходимость смены области видимости при запуске программы. Формат команды следующий:
  1. initialize_domain <путь к программе>
  2. initialize_domain <путь к программе> from <область видимости>
  3. initialize_domain <путь к программе> from <заключительная часть области видимости>

В первом случае новая область видимости инициализируется при старте программы вне зависимости от ее истории запуска. Во втором – при достижении некоторой области видимости. В третьем – при совпадении части области видимости.

Например,

initialize_domain /bin/cat

создаст область видимости <kernel> /bin/cat и будет применять правила, указанные для этой области видимости при запуске программы cat.

initialize_domain /bin/cat from <kernel> /usr/sbin/sshd /bin/bash /bin/cat

действует только при запуске программы cat через удаленный доступ по ssh.

Наконец, правило

initialize_domain /bin/cat from /bin/bash /bin/cat

создаст новую область видимости только при запуске cat из оболочки bash.

3no_initialize_domainИспользуется для отмены эффекта, установленного директивой initialize_domain. Имеет тот же формат команды и обратный эффект.
4keep_domainИспользуется для сохранения области видимости при запуске программы. Формат директивы тот же, что и для initialize_domain, но добавляется возможность
keep_domain <заключительная часть области видимости>

Директива используется для сокращения числа областей видимости и, соответственно, снижения объемов используемых ресурсов.
5no_keep_domainИспользуется для отмены эффекта, установленного директивой keep_domain. Имеет тот же формат команды и обратный эффект.
6file_patternДиректива используется для упрощения процесса настройки правил безопасности. Имеет эффект только при включении обучающего режима при доступе к файлам (MAC_FOR_FILE learning). Файлы группируются согласно указанному шаблону.
7path_groupГруппирует файлы по указанному пути. Например, указав директиву
path_group HOME-DIR-FILE /home/user/\*

можно дать доступ на чтение сразу ко всем файлам в каталоге пользователя:
allow_read @HOME-DIR-FILE
8address_groupЭффект аналогичен директиве path_group, но применяется для группировки сетевых адресов:
address_group local-address 192.168.0.0-192.168.255.255 
allow_network TCP accept @local-address 1024-65535
9allow_readПредоставляет права на чтение файлов. Используется для сокращения размеров политик; полезно, например, для выдачи всем программам разрешения на чтение библиотек GLIBC.
10allow_envПредоставляет права на передачу переменных окружения, таких как, например, PATH и HOME.
11deny_rewriteЗапрет на перезапись файла. Полезно, например, при работе с лог-файлами.
12aliasРазрешает запуск программ с помощью символических ссылок.

Пример. /sbin/pidof является символической ссылкой для /sbin/killall5, следовательно, запущенная программа pidof будет использовать область видимости killall5.

Указав директиву

alias /sbin/killall5 /sbin/pidof

вы запустите программу /sbin/pidof в своей области видимости (а не в области видимости /sbin/killall5).

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

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

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

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

  1. Создание области видимости.

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

  2. Сбор данных о действиях в программе.

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

  3. Тестовое использование.

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

  4. Переведите 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».


Ресурсы для скачивания


Похожие темы


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Open source, Linux
ArticleID=642270
ArticleTitle=Безопасный Linux: Часть 4.1. Запускаем TOMOYO Linux
publish-date=03182011