Журнал «Компьютерра» № 15 от 18 апреля 2006 года
Шрифт:
Помимо комбинации из этих девяти прав доступа каждый файл может иметь дополнительные флаги: sticky-бит, специфичный для директорий, и suid-бит, применяемый для исполняемых файлов. Если пометить директорию sticky-битом, удалять файл в ней смогут только владельцы, а не все те, кто имеет права записи в эту директорию, – это необходимо в «общих директориях», где создавать и удалять файлы может любой. Suid-бит – большая головная боль системных администраторов, он нужен для повышения прав программы на время запуска.
Унаследовав от UNIX традиционную модель доступа, Linux столкнулась с давно известными проблемами безопасности. Используемый в ней дискреционный метод предоставляет
Другой большой проблемой является наличие аккаунта суперпользователя (или администратора) с очень широкими полномочиями. Как правило, под этим названием понимается уровень доступа самой системы – именно с ним работают все системные службы. В этом смысле системные приложения равны в правах, хотя на самом деле каждому из них требуется «своя» часть прав суперпользователя – обращение к сетевому интерфейсу, чтение файлов с паролями, запись сообщений в системный журнал и пр. Стоит злоумышленнику взять контроль над одной из таких служб, и он получит неограниченный доступ.
Впрочем, развитие операционных систем – процесс безостановочный. Немалую роль в достижении высокого уровня безопасности Linux сыграла открытость исходных текстов и принципы разработчиков, проповедующих использование только открытых стандартов. Вокруг Linux возникло множество проектов, предоставляющих расширенные возможности по управлению доступом. Например, ставшие стандартом де-факто встраиваемые модули аутентификации (Pluggable Authentication Modules, PAM) предоставляют гибкий, легко расширяемый механизм аутентификации пользователей.
Но в первую очередь безопасность операционной системы зависит от ее ядра. Важным этапом развития ядра Linux стало внедрение интерфейса модулей безопасности (Linux Security Modules, LSM). В рамках этого проекта многие внутренние структуры ядра были расширены специальными полями, связанными с безопасностью. В код многих системных процедур были вставлены вызовы функций управления доступом (так называемые hooks), вынесенные во внешний модуль. Иными словами, прежде чем выполнить какое-то действие, ядро обращается к модулю безопасности и выясняет, имеет ли право данный процесс выполнить данное действие. Таким образом, любой разработчик может реализовать какую-то специфичную политику безопасности.
Формализация внешнего интерфейса управления доступом позволила многим исследовательским группам реализовать свои идеи в коде для Linux. При этом серьезную роль в улучшении безопасности Linux сыграли и коммерческие компании. Например, IBM активно участвует в совершенствовании безопасности Linux и других открытых проектов. Также большая заслуга принадлежит создателям дистрибутивов – как коммерческих (в первую очередь Red Hat и Novell), так и некоммерческих (например, проект Hardened в рамках дистрибутива Gentoo).
Существует несколько серьезных проектов по расширению стандартной модели безопасности в Linux. Среди них можно выделить SELinux (Security-Enhanced Linux), RSBAC (Rule Set Base Access Control) и grsecurity. В этой статье рассматривается проект SELinux, который не только позволяет повысить уровень защищенности обычной Linux-системы, но и дает возможность реализации более сложных моделей безопасности. Во врезке рассказывается про проект RSBAC.
Защита информации всегда очень беспокоила военных. Именно в недрах министерств обороны родились первые критерии и стандарты безопасности программ и операционных систем. В числе подобных изобретений и так называемый мандатный доступ (Mandatory Access Control, MAC). Уже привычный нам
Понятие мандатного доступа часто совмещают с понятием многоуровневой системы доступа (Multilevel Security, MLS). В рамках этой модели безопасности фигурируют объекты (пассивные сущности) и субъекты (активные сущности): каждому объекту соответствует уровень секретности (например, знакомые любому слова «секретно» или «совершенно секретно»), а субъекту – уровень доступа. Обычно в таких системах присутствует и классификация информации по ее тематике. Система безопасности должна обеспечивать доступ к соответствующим уровням и классам, а также невозможность чтения более высоких уровней секретности и запись в объекты с более низким уровнем секретности (чтобы не допустить утечку информации). Этот подход реализуется в одной из самых распространенных моделей в рамках многоуровневого доступа – модели Белла-Ла Падулы (Bell-La Padula). Важной задачей при многоуровневом доступе является разработка формального механизма понижения уровня секретности документа, например по истечении срока давности.
Методы мандатного и многоуровневого доступа, широко применяемые в военных системах обработки и хранения информации, сейчас доступны создателям коммерческих и других систем, критичных к потере информации. Но за удовольствие приходится платить – требования к подготовке администраторов таких систем значительно выше, а архитекторам необходимо заранее и четко проработать политику безопасности.
Подробнее о достоинствах и недостатках системы многоуровневого доступа и мандатного метода доступа можно узнать из работы Ричарда Смита "Introduction to Multilevel Security".
SELinux – это расширение базовой модели безопасности операционной системы Linux, добавляющее механизм мандатного доступа (см. врезку). С помощью SELinux можно задать явные правила, согласно которым субъекты (пользователи и программы) должны обращаться к объектам системы (файлы и устройства). Таким образом, можно ограничить программы, прописав возможности их поведения в виде политики, и возложив ответственность за ее соблюдение на операционную систему.
SELinux входит в официальное ядро Linux начиная с версии 2.6. Систему разрабатывает Национальное агентство по безопасности США (National Security Agency, NSA) при сотрудничестве с другими исследовательскими лабораториями и коммерческими дистрибутивами Linux. Исходные тексты проекта доступны под лицензией GPL.
Мандатный доступ в SELinux реализован в рамках модели домен-тип. В этой модели каждый процесс запускается в определенном домене безопасности (то есть имеет какой-то уровень доступа), а всем ресурсам (файлам, директориям, сокетам и пр.) ставится в соответствие определенный тип (уровень секретности). Список правил, ограничивающих возможности доступа доменов к типам, и составляет политику. Он задается один раз в момент установки системы и представляет собой набор текстовых файлов, которые могут быть скомпилированы и загружены в память ядра Linux при старте системы.