Личный блог Suvan`a.

Работая и играя с Linux... И что из этого иногда получается.

Модули защиты.

Рубрика: Безопасность -> Управление доступом
Метки: |
Четверг, 18 июня 2009 г.
Просмотров: 5574

Возможности 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 - один для всех, а модули будут разными у каждого разра­ботчика.