Модули защиты.
Метки: LSM | root
Четверг, 18 июня 2009 г.
Просмотров: 5757
Возможности root'a
Начиная с версии ядра 2.1, Linux разделяет всю мощь пользователя root на набор маленьких действий, называемых возможностями (capabilities). Каждая возможность представляет какой-то отдельный аспект власти пользователя root (например, CAP_CHOWN - возможность изменения владельца файла). Потому что возможности дискретны, надо предоставить процессу отдельные возможности - все или ни одной.
На данный момент Linux поддерживает 28 возможностей, 7 из которых соответствуют POSIX-стандарту. Полный список возможностей приведен в файле /usr/include/linux/capability.h. Рассмотрим самые интересные из них:
- CAP_CHOWN — возможность изменять владельца файла.
- CAP_KILL — возможность отправлять сигналы процессам, принадлежащим другим пользователям.
- CAP_NET_BIND_SERVICE — возможность привязки к привилегированному порту (от 0 до 1024).
- CAP_SYS_ADMIN — возможность перезагружать систему.
- CAP_SYS_MODULE — возможность загружать или выгружать модули ядра.
- CAP_SYS_RESOURCE — возможность манипуляции системными часами.
В Linux 2.2 и 2.4 возможности конфигурируются пакетом leap. Утилиты из данного пакета позволяют устанавливать и получать возможности запущенных процессов, но этот метод использовался мало. В Linux 2.6 возможности используются программистами, а не администраторами.
Модули защиты (Linux Security Modules, LSM).
Тема управления доступом и укрепления системы получила огромное внимание со стороны Linux-разработчиков. Но из-за отсутствия централизованной координации в конце концов получилось, что у каждого проекта защиты был свой патч для ядра, часто несовместимый с другими патчами.
В прошлом Линус Торвальдс категорически отвергал все эти патчи, но в 2001 г. в ответ на технологию SELinux, представленную NSA (агентство национальной безопасности) на Саммите Ядра Линукс (Linux Kernel Summit), он отметил, что для включения в ядро он будет обсуждать более обширную систему безопасности. Так появился проект LSM (Linux Security Modules).
Цель LSM - дать возможность разработчикам систем защиты общий (единый) интерфейс для реализации проектов, основанных на ядре. Реализация такой системы позволит меньше зависеть от ядра и не будет требовать его пересборки, как в случае с патчами. Все LSM-модули используют стандартный интерфейс для взаимодействия с ядром, который не будет изменяться с выходом следующего релиза (не версии) ядра.
Проект начал разрабатывать WireX (создатель дистрибутива Immunix) и сейчас поддерживается разработчиками проектов Immunix, SELiunx, SGI и Janus. LSM-патчи для ядра 2.4 общедоступны нa http://lsm.immunix.org. В Linux 2.6 поддержка LSM обеспечивается по умолчанию (ее надо только включить). Для данного в меню Security Options включите опцию Enable Different Security Models (CONFIG_SECURITY).
Как же работает LSM? LSM изменяет ядро пятью способами:
- Поля безопасности (Opaque Security Fields) - LSM добавляет дополнительные поля во многие структуры ядра, включая те, которые связаны с доступом к файлам, сокетам, процессам и файловой системе. Модуль безопасности использует эти поля для связи информации, относящейся к безопасности, с конкретным объектом. Больше никаких действий не выполняется: LSM предоставляет только структуру.
- Добавление обработчиков безопасности (Insertion of Security Hooks) - обработчики добавляются в разные части ядра. Это позволяет модулю безопасности перехватить системный вызов и, если надо, блокировать его.
- Системные вызовы безопасности (Security System Calls) - LSM реализует один общий системный вызов безопасности, а конкретный модуль решает, как ему реализовать этот системный вызов.
- Регистрация модулей - для загрузки модуля безопасности необходимо, чтобы он был зарегистрирован в LSM. Чтобы упростить задачу, регистрация происходит по принципу цепочки. LSM «знает» только один модуль - первичный, для загрузки второго модуля он должен быть зарегистрирован в первый, третий модуль регистрируется во втором и т.д. Получается как бы цепочка модулей.
- Возможности - одна из целей LSM - это перемещение поддержки существующих возможностей ядра в отдельный модуль безопасности. Это позволяет отключить функцию, если она не нужна.
Как отсюда видно, LSM предоставляет только структуру для реализации системы безопасности, воплощением же самой системы занимаются модули. Это снимает проблему несовместимости между патчами отдельных разработчиков: LSM - один для всех, а модули будут разными у каждого разработчика.