Библиотека сайта rus-linux.net
Запускаем приложения в "песочнице" с помощью SELinux
Оригинал: "Run Applications in Secure Sandboxes with SELinux"Автор: Joe 'Zonker' Brockmeier
Дата публикации: 17 November 2010
Перевод: Н.Ромоданов
Дата перевода: декабрь 2010 г.
Есть приложение, которое вы хотите запустить, но не хотите давать ему полный доступ к остальной части вашей системы.
Воспользуйтесь утилитой sandbox
системы SELinux. С помощью нескольких довольно простых действий, вы можете так ограничить возможности приложения, что ему не будет дан полный доступ к вашей системе.
Я должен признаться, что я не всегда был большим поклонником SELinux. Синтаксис команд этого фреймворка, скажем так, менее дружественный для пользователей. На самом деле, ограничение прав может быть абсолютно антисоциально. Как бы там не было, SELinux может оказаться весьма полезным, если вы готовы преодолеть синтаксис команд и сложность. На самом деле, синтаксис команд, запускающих приложения в песочнице, не так уж ужасен, и после использования песочницы в течение некоторого времени, я заинтересовался более полной проверкой SELinux с тем, чтобы увидеть, насколько эта система (и ее инструменты) продвинулись вперед после того, как я в последний раз имел с ней дело.
Вы можете использовать утилиту sandbox
для запуска приложения в
"песочнице" системы SELinux, которая ограничивает чтение и запись стандартных входных (stdin
) и выходных (stdout
) потоков, а также ограничивает работу с другими дескрипторами файлов, передаваемыми в командную строку.
Если проще: возможности приложений, работающих в песочнице, очень ограничены и им не разрешено читать или записывать файлы, если это явно не указано. Если явно не указано, то они также не имеют доступа к сети и так далее.
Попробуем песочницу SELinux
Во-первых, я делаю это в системе Fedora 14. Если вы работаете в более ранней версии системы или на другом дистрибутиве с SELinux, вполне возможно, что синтаксис команд будет другим и будет слегка отличаться от того, что здесь показано. Если вы пользуетесь Ubuntu или OpenSUSE, либо другими дистрибутивами, в которых по умолчанию SELinux отсутствует, то вам, возможно, придется немного повозиться с тем, чтобы запустить SELinux, но это выходит за рамки данной статьи.
Давайте начнем с простого приложения. Допустим, вы хотите в песочнице с помощью Vim отредактировать файл. Выполните команду sandbox vi
имяфайла. Обратите внимание, что когда вы в Vim попытаетесь отредактировать файл, вы получите ошибку, сообщающую "permission denied" ("доступ запрещен"). Это происходит потому, что в SELinux не было явно указано, что надо дать Vim разрешение на доступ к этому файлу.
Теперь попробуйте команду sandbox vi -i имяфайла
. Вы продвинулись немного дальше, но ошибки все еще будут, т. к. по умолчанию Vim делает записи в файл подкачки (.имяфайла.swp
) и записывает последовательность действий в файл info. Теперь, поведение приложения довольно доброжелательное и у нас с нем действительно нет проблем, поскольку действует правило, что когда приложение запускается в песочнице SELinux, то это означает, что вы не хотите, чтобы приложение делало что-нибудь неожиданное.
Рис. Предупреждение, выдаваемое SELinux
Итак, урок первый: песочница очень эффективна. А второй урок? Все должно указываться достаточно конкретно, поскольку SELinux очень строг относительно того, что он разрешает делать, а что — не разрешает.
Прежде, чем показать, как правильно это сделать, давайте попробуем еще один вариант: попробуйте из Vim набрать Ctrl-z
для того, чтобы перейти в оболочку. Что случится? Если вы работаете в Vim внутри терминала, открытого на рабочем столе, в верхнем правом углу вы увидите уведомление о нарушении безопасности, выданное SELinux. Щелкните по иконке SELinux, и вы перейдете в удобное диалоговое окно, в котором вы узнаете о том, что было предупреждение,
и что приложение-нарушитель пыталось сделать. В случае, приведенном на рис.1, это было
предупреждение о "сигнале" — редактор Vim попытался послать сигнал в оболочку, что не допускается.
Делаем все правильно
Теперь, давайте снова запустим Vim, но с большим числом параметров. Во-первых, создайте директорий tmp
и директорий sehome
в вашем домашнем каталоге или где-нибудь в другом удобном месте. Обратите внимание, что поскольку вам не разрешено использовать общий директорий /tmp
, вам придется создать директорий tmp
в другом месте. Строго говоря, обращений к директорию tmp
происходить не должно, но я на всякий случай предпочитаю создать директорий tmp
в моем домашнем каталоге. Теперь, когда у вас есть дополнительные директории, наберите следующее:
sandbox -M -H sehome/ -T tmp/ vi
Теперь вы можете читать и создавать файлы, которые находятся в директории sehome
, а Vim может создавать свои временные файлы и не будет остановлен SELinux. Но, вы все еще не можете в Vim использовать команду Ctrl-z
для того, чтобы перейти в оболочку.
Еще, что вы могли заметить — в песочнице все происходит немного медленнее. SELinux действительно несколько повышает загрузку системы, немного - но это заметно.
Запускаем Firefox в песочнице
В частности, вы заметите снижение скорости работы с более сложными приложениями с графическим интерфейсом. Но вы можете захотеть запускать в песочнице такие приложения, как Firefox, если вы очень беспокоитесь за безопасность и конфиденциальность.
Сейчас Firefox относительно бесполезен без доступа к сети. Хорошо, что у вас есть такой тип песочницы, который позволяет использовать браузер для доступа в сеть. Чтобы открыть сессию работы с Firefox , вы необходимо набрать следующую команду:
sandbox -X -H sehome -T tmp -t sandbox_web_t firefox
В этой команде вы добавили: параметр -X
, который сообщает SELinux следующее: "Эй, мне нужна песочница X", и параметр, указывающий тип песочницы (-t
), который определяет набор политик, относящихся к сервису (например, сети), который нужен для нормальной работы Firefox.
SELinux запускает Firefox в ограниченной сессии, которая не имеет доступа к остальной части системы. Сюда же относится сессия X. Firefox будет работать в специальном вложенном экземпляре сервера X (Xephyr), и вы не сможете даже делать копии и вставки в сессию Firefox из других приложений. Но это также означает, что для Firefox запрещено читать в вашей системе любые другие файлы и что песочница также изолирует от вредоносных веб-страниц или атак на такие плагины, как Flash.
Заключение
Это, конечно, только верхушка айсберга. C песочницей SELinux вы можете делать довольно много. Если вы сможете понять, что хотите сделать в песочнице, вы наверняка сможете это сделать. Мы не затронули несколько еще более продвинутых возможностей, например, помещение в песочницу конкретных плагинов Firefox или задание в песочнице конкретных ограничений на использование ресурсов.
Если вы используете системы Fedora, Red Hat Enterprise Linux, CentOS, или другой дистрибутив, в котором есть SELinux, вам обязательно нужно проверить функциональность, обеспечиваемую песочницей. Заинтересованы ли вы в советах или руководствах по SELinux? Мы в ближайшем будущем расскажем еще больше об этой системе, а также расскажем о фреймворке AppArmor.