SELinux

Поделись знанием:
Перейти к: навигация, поиск
SELinux

Графический интерфейс администрирования SELinux в Fedora 8
Тип

Безопасность

Операционная система

Компонент ядра Linux

Первый выпуск

1998

SELinuxSELinuxК:Программное обеспечение, разработанное в 1998 году

SELinux (англ. Security-Enhanced Linux — Linux с улучшенной безопасностью) — реализация системы принудительного контроля доступа, которая может работать параллельно с классической избирательной системой контроля доступа. Входит в стандартное ядро Linux. Также для функционирования SELinux требуются модифицированные версии некоторых утилит (ps, ls и других), которые обеспечивают поддержку новых функций ядра, и поддержка со стороны файловой системы.

Оставаясь в рамках избирательной системы контроля доступа, операционная система имеет фундаментальное ограничение в плане разделения доступа процессов к ресурсам — доступ к ресурсам основывается на правах доступа пользователя. Это классические права rwx на трех уровнях — владелец, группа-владелец и остальные.

В SELinux права доступа определяются самой системой при помощи специально определенных политик. Политики работают на уровне системных вызовов и применяются самим ядром (но можно реализовать и на уровне приложения). SELinux действует после классической модели безопасности Linux. Иными словами, через SELinux нельзя разрешить то, что запрещено через права доступа пользователей или групп. Политики описываются при помощи специального гибкого языка описания правил доступа. В большинстве случаев правила SELinux «прозрачны» для приложений, и не требуется никакой их модификации. В состав некоторых дистрибутивов входят готовые политики, в которых права могут определяться на основе совпадения типов процесса (субъекта) и файла (объекта) — это основной механизм SELinux. Две других формы контроля доступа — доступ на основе ролей и на основе многоуровневой системы безопасности. Например, «ДСП», «секретно», «совершенно секретно», «ОВ».

Самый простой для работы и поддержки с точки зрения поддержки тип политики — так называемая «целевая» политика, разработанная в рамках проекта Fedora. В рамках политики описано более 200 процессов, которые могут выполняться в операционной системе. Все, что не описано «целевой» политикой, выполняется в домене (с типом) unconfined_t. Процессы, работающие в этом домене, не защищаются SELinux. Таким образом, все сторонние пользовательские приложения будут без всяких проблем работать в системе с «целевой» политикой в рамках классических разрешений избирательной системы контроля доступа.

Кроме «целевой» политики, в состав некоторых дистрибутивов входит политика с многоуровневой моделью безопасности (с поддержкой модели Белла — Лападулы).

Третий вариант политики — «строгий». Тут действует принцип «что не разрешено, то запрещено» (принцип наименьших прав). Политика основывается на Reference Policy от компании Tresys.

SELinux был разработан Агентством национальной безопасности США, и затем его исходные коды были представлены для скачивания.

SELinux включён в состав ядра Linux (начиная с версии 2.6).





Основные понятия

  • Домен — это некоторый набор действий, которые может производить один процесс. Главным образом это действия, необходимые процессу для выполнения определенной задачи.
  • Роль — это совокупность нескольких доменов.
  • Контекст безопасности — это совокупность всех атрибутов, которые связаны с объектами и субъектами.
  • Политика безопасности — это набор заданных правил, который регулирует взаимодействие ролей, доменов.

Обзор LSM

LSM (англ. Linux Security Modules — модули безопасности Linux) представляют собой реализацию в виде подгружаемых модулей ядра. В первую очередь, LSM применяются для поддержки контроля доступа. Сами по себе LSM не обеспечивают систему какой-то дополнительной безопасностью, а лишь являются неким интерфейсом для её поддержки. Система LSM обеспечивает реализацию функций перехватчиков, которые хранятся в структуре политик безопасности, охватывающей основные операции, защиту которых необходимо обеспечить. Контроль доступа в систему осуществляется благодаря настроенным политикам.

Методы управления доступом

Большинство операционных систем обладают средствами и методами управления доступом, которые в свою очередь определяют, может ли некий объект на уровне операционной системы (пользователь или программа) получить доступ к определенному ресурсу. Используются следующие методы управления доступом:

  • Дискреционный контроль доступа (англ. Discretionary Access Control, DAC). Данный метод реализует ограничение доступа к объектам на основе групп, к которым они принадлежат. В Linux, в основе этого метода, лежит стандартная модель контроля доступа к файлам. Права доступа определены для следующих категорий: пользователь (владелец файла), группа (все пользователи, которые являются членами группы), другие (все пользователи, которые не являются ни владельцами файла, ни членами группы). Причем к каждой из групп предоставляются следующие права: права на запись, на чтение и на исполнение.
  • Мандатное управление доступом (англ. Mandatory Access Control, MAC). Главным образом суть этого метода заключается в установлении определенных прав доступа субъекта к определенным объектам. В ОС реализовано следующее: программа обладает только теми возможностями, которые необходимы ей для выполнения своих задач, и не более того. Данный метод имеет преимущество в сравнении с предыдущим; если в программе будет обнаружена уязвимость, то возможности её доступа будут весьма ограничены.
  • Контроль доступа на основе ролей (англ. Role-Based Access Control, RBAC). Права доступа реализованы в виде ролей, выдаваемых системой безопасности. Роли представляют собой определенные полномочия на выполнение конкретных действий группой субъектов над объектами в системе. Данная политика является улучшением дискреционного контроля доступа.

Внутренняя архитектура SELinux

В самом начале своего появления SELinux была реализована в виде патча. В данном случае было непросто настраивать политику безопасности. С появлением механизмов LSM, настройка и управление безопасностью значительно упростились (политика и механизмы усиления безопасности были разделены), SELinux была реализована в виде подгружаемых модулей ядра. Перед доступом к внутренним объектам операционной системы производится изменение кода ядра. Это реализуется при помощи специальных функций (перехватчиков системных вызовов), так называемых функций «хуков» (англ. hook functions). Функции-перехватчики хранятся в некоторой структуре данных, их целью является выполнение определенных действий по обеспечению безопасности, основанных на заранее установленной политике. Сам модуль включает в себя шесть главных компонентов: сервер безопасности; кэш вектора доступа (англ. Access Vector Cache, AVC); таблицы сетевых интерфейсов; код сигнала сетевого уведомления; свою виртуальную файловую систему (selinuxfs) и реализацию функций-перехватчиков.

  • Кэш вектора доступа используется для кэширования вычисленных результатов (хранения готовых решений управления доступом), полученных из сервера безопасности. Нужно это для того, чтобы минимизировать накладные расходы на производительность со стороны механизмов безопасности SELinux. Интерфейс кэша вектора доступа для сервера безопасности определен в заголовочном файле include/avc_ss.h.
  • Таблица сетевых интерфейсов отображает сетевые устройства в контексты безопасности. Поддержка отдельных таблиц необходима ввиду того, что поле безопасности сетевых устройств было исключено из проекта. Сетевые устройства добавляются в таблицу, когда впервые оказываются в поле видимости функций-перехватчиков (засекаются ими) и удаляются из неё, когда устройство настраивается или перезагружается политика безопасности в связи с перенастройкой. Это возможно благодаря callback-функциям, которые регистрируют изменения конфигурации устройства и перезагрузку политик безопасности. Код таблицы сетевых интерфейсов можно найти в файле netif.c.
  • Код события сетевого уведомления позволяет модулю SELinux уведомлять процессы операционной системы в случае, когда политика безопасности была перезагружена. Эти уведомления используются пространством пользователя для поддержки совместимости с ядром. Этот механизм возможен благодаря библиотеке SELinux. Код события сетевого уведомления можно найти в файле netlink.c.
  • Псевдофайловая система SELinux экспортирует API-функции политики сервера безопасности в процессы операционной системы. Изначально API-функции ядра SELinux были разделены на три компонента (атрибуты процесса, файловые атрибуты, политика API) как часть изменений для внесения в версию ядра Linux 2.6. Также SELinux предоставляет поддержку политики API вызовов. Все три компонента API нового ядра инкапсулированы в библиотеку API SELinux (libselinux). Код псевдофайловой системы можно найти в файле selinuxfs.c.
  • Реализация функций перехватчиков управляет информационной безопасностью связанной с внутренними объектами ядра и реализацией контроля доступа SELinux для каждой операции внутри ядра. Функции перехватчики вызывают сервер безопасности и кэш вектора доступа для получения решений политики безопасности и применения этих решений для маркировки по каким-либо признакам и контроля объектов ядра. Код этих функций перехватчиков расположен в файле hooks.c, а структуры данных, связанные с внутренними объектами, определены в файле include/objsec.h.

Возможности

  • Разные политики в зависимости от поставленных задач
  • Четкая реализация политик
  • Поддержка приложений, запрашивающих политику и исполнение контроля доступа этих приложений (для примера, задача, запущенная в cron, с корректным контекстом)
  • Независимые специфичные политики и интернациональные языковые политики SELinux
  • Независимые специфичные форматы меток безопасности и их содержание
  • Индивидуальные метки и рычаги управления для объектов ядра и сервисов (демонов)
  • Кэширование доступных решений для эффективности
  • Возможность изменения политик
  • Различные меры для защищенности целостности системы и конфиденциальности данных
  • Очень гибкие политики
  • Управление процессом инициализации, наследование прав, запуск программ
  • Управление файловыми системами, папками, файлами и открытыми дескрипторами
  • Управление сокетами, сообщениями (ядра и системы) и сетевыми интерфейсами

Реализации

SELinux доступен с коммерческой поддержкой как часть Red Hat Enterprise Linux начиная с версии 4.

В сообществе поддерживаемые дистрибутивы Linux:

  1. CentOS
  2. Debian
  3. ArchLinux
  4. Fedora Core начиная с версии 2
  5. Hardened Gentoo
  6. openSUSE начиная c версии 11.1
  7. Ubuntu
  8. ROSA
  9. ALT Linux СПТ 6

Другие системы

SELinux представляет один из нескольких возможных подходов к ограничению действий, выполняемых установленным ПО.

Система AppArmor делает примерно то же самое, что и SELinux. Одно важное различие между этими системами — способ идентификации объектов файловой системы: AppArmor использует полный путь, а SELinux — индексный дескриптор. Это значит, что, например, недоступный файл может быть доступен с AppArmor через жёсткую ссылку. С SELinux доступ через эту же жёсткую ссылку будет запрещён. С другой стороны, недоступные данные могут стать доступными, когда приложение обновляет файл, перезаписывая его (это метод используется довольно часто). AppArmor в этом случае будет продолжать отказывать в доступе к данным, так как полный путь к файлу остаётся неизменным. В обоих случаях политика по умолчанию «no access» позволяет избежать этих проблем.

См. также

Напишите отзыв о статье "SELinux"

Литература

  • [www.ibm.com/developerworks/ru/library/linux/l-selinux/ Анатомия SELinux. Архитектура и реализация] developerWorks,Тим Джонс, 23.10.2008
  • [www.xakep.ru/post/56714/default.asp SELinux: бронежилет для корпоративного пингвина] Журнал Хакер

Ссылки

  • [www.TrustedBSD.org/sebsd.html SEBSD]
  • [www.TrustedBSD.org/sedarwin.html SEDarwin]
  • [www.nsa.gov/research/selinux/docs.shtml SELinux by NSA] Наиболее полная информация о проекте SELinux
  • [selinuxproject.org/page/Main_Page Документация для пользователей и разработчиков] (selinuxproject.org)
  • [wiki.debian.org/SELinux/ SELinux в Debian]
  • [www.gentoo.org/proj/en/hardened/selinux/selinux-handbook.xml?part=2&chap=2 Configurating SELinux for your needs]
  • [docs.fedoraproject.org/ru-RU/Fedora/13/html/Security-Enhanced_Linux/index.html Linux с улучшенной безопасностью. Руководство Пользователя] (рус) Документация к Fedora Linux

Отрывок, характеризующий SELinux

– Михайла Иванович! – закричал старый князь архитектору, который, занявшись жарким, надеялся, что про него забыли. – Я вам говорил, что Бонапарте великий тактик? Вон и он говорит.
– Как же, ваше сиятельство, – отвечал архитектор.
Князь опять засмеялся своим холодным смехом.
– Бонапарте в рубашке родился. Солдаты у него прекрасные. Да и на первых он на немцев напал. А немцев только ленивый не бил. С тех пор как мир стоит, немцев все били. А они никого. Только друг друга. Он на них свою славу сделал.
И князь начал разбирать все ошибки, которые, по его понятиям, делал Бонапарте во всех своих войнах и даже в государственных делах. Сын не возражал, но видно было, что какие бы доводы ему ни представляли, он так же мало способен был изменить свое мнение, как и старый князь. Князь Андрей слушал, удерживаясь от возражений и невольно удивляясь, как мог этот старый человек, сидя столько лет один безвыездно в деревне, в таких подробностях и с такою тонкостью знать и обсуживать все военные и политические обстоятельства Европы последних годов.
– Ты думаешь, я, старик, не понимаю настоящего положения дел? – заключил он. – А мне оно вот где! Я ночи не сплю. Ну, где же этот великий полководец твой то, где он показал себя?
– Это длинно было бы, – отвечал сын.
– Ступай же ты к Буонапарте своему. M lle Bourienne, voila encore un admirateur de votre goujat d'empereur! [вот еще поклонник вашего холопского императора…] – закричал он отличным французским языком.
– Vous savez, que je ne suis pas bonapartiste, mon prince. [Вы знаете, князь, что я не бонапартистка.]
– «Dieu sait quand reviendra»… [Бог знает, вернется когда!] – пропел князь фальшиво, еще фальшивее засмеялся и вышел из за стола.
Маленькая княгиня во всё время спора и остального обеда молчала и испуганно поглядывала то на княжну Марью, то на свекра. Когда они вышли из за стола, она взяла за руку золовку и отозвала ее в другую комнату.
– Сomme c'est un homme d'esprit votre pere, – сказала она, – c'est a cause de cela peut etre qu'il me fait peur. [Какой умный человек ваш батюшка. Может быть, от этого то я и боюсь его.]
– Ax, он так добр! – сказала княжна.


Князь Андрей уезжал на другой день вечером. Старый князь, не отступая от своего порядка, после обеда ушел к себе. Маленькая княгиня была у золовки. Князь Андрей, одевшись в дорожный сюртук без эполет, в отведенных ему покоях укладывался с своим камердинером. Сам осмотрев коляску и укладку чемоданов, он велел закладывать. В комнате оставались только те вещи, которые князь Андрей всегда брал с собой: шкатулка, большой серебряный погребец, два турецких пистолета и шашка, подарок отца, привезенный из под Очакова. Все эти дорожные принадлежности были в большом порядке у князя Андрея: всё было ново, чисто, в суконных чехлах, старательно завязано тесемочками.
В минуты отъезда и перемены жизни на людей, способных обдумывать свои поступки, обыкновенно находит серьезное настроение мыслей. В эти минуты обыкновенно поверяется прошедшее и делаются планы будущего. Лицо князя Андрея было очень задумчиво и нежно. Он, заложив руки назад, быстро ходил по комнате из угла в угол, глядя вперед себя, и задумчиво покачивал головой. Страшно ли ему было итти на войну, грустно ли бросить жену, – может быть, и то и другое, только, видимо, не желая, чтоб его видели в таком положении, услыхав шаги в сенях, он торопливо высвободил руки, остановился у стола, как будто увязывал чехол шкатулки, и принял свое всегдашнее, спокойное и непроницаемое выражение. Это были тяжелые шаги княжны Марьи.
– Мне сказали, что ты велел закладывать, – сказала она, запыхавшись (она, видно, бежала), – а мне так хотелось еще поговорить с тобой наедине. Бог знает, на сколько времени опять расстаемся. Ты не сердишься, что я пришла? Ты очень переменился, Андрюша, – прибавила она как бы в объяснение такого вопроса.
Она улыбнулась, произнося слово «Андрюша». Видно, ей самой было странно подумать, что этот строгий, красивый мужчина был тот самый Андрюша, худой, шаловливый мальчик, товарищ детства.
– А где Lise? – спросил он, только улыбкой отвечая на ее вопрос.
– Она так устала, что заснула у меня в комнате на диване. Ax, Andre! Que! tresor de femme vous avez, [Ax, Андрей! Какое сокровище твоя жена,] – сказала она, усаживаясь на диван против брата. – Она совершенный ребенок, такой милый, веселый ребенок. Я так ее полюбила.
Князь Андрей молчал, но княжна заметила ироническое и презрительное выражение, появившееся на его лице.
– Но надо быть снисходительным к маленьким слабостям; у кого их нет, Аndre! Ты не забудь, что она воспитана и выросла в свете. И потом ее положение теперь не розовое. Надобно входить в положение каждого. Tout comprendre, c'est tout pardonner. [Кто всё поймет, тот всё и простит.] Ты подумай, каково ей, бедняжке, после жизни, к которой она привыкла, расстаться с мужем и остаться одной в деревне и в ее положении? Это очень тяжело.
Князь Андрей улыбался, глядя на сестру, как мы улыбаемся, слушая людей, которых, нам кажется, что мы насквозь видим.
– Ты живешь в деревне и не находишь эту жизнь ужасною, – сказал он.
– Я другое дело. Что обо мне говорить! Я не желаю другой жизни, да и не могу желать, потому что не знаю никакой другой жизни. А ты подумай, Andre, для молодой и светской женщины похорониться в лучшие годы жизни в деревне, одной, потому что папенька всегда занят, а я… ты меня знаешь… как я бедна en ressources, [интересами.] для женщины, привыкшей к лучшему обществу. M lle Bourienne одна…
– Она мне очень не нравится, ваша Bourienne, – сказал князь Андрей.
– О, нет! Она очень милая и добрая,а главное – жалкая девушка.У нее никого,никого нет. По правде сказать, мне она не только не нужна, но стеснительна. Я,ты знаешь,и всегда была дикарка, а теперь еще больше. Я люблю быть одна… Mon pere [Отец] ее очень любит. Она и Михаил Иваныч – два лица, к которым он всегда ласков и добр, потому что они оба облагодетельствованы им; как говорит Стерн: «мы не столько любим людей за то добро, которое они нам сделали, сколько за то добро, которое мы им сделали». Mon pеre взял ее сиротой sur le pavе, [на мостовой,] и она очень добрая. И mon pere любит ее манеру чтения. Она по вечерам читает ему вслух. Она прекрасно читает.
– Ну, а по правде, Marie, тебе, я думаю, тяжело иногда бывает от характера отца? – вдруг спросил князь Андрей.
Княжна Марья сначала удивилась, потом испугалась этого вопроса.
– МНЕ?… Мне?!… Мне тяжело?! – сказала она.
– Он и всегда был крут; а теперь тяжел становится, я думаю, – сказал князь Андрей, видимо, нарочно, чтоб озадачить или испытать сестру, так легко отзываясь об отце.
– Ты всем хорош, Andre, но у тебя есть какая то гордость мысли, – сказала княжна, больше следуя за своим ходом мыслей, чем за ходом разговора, – и это большой грех. Разве возможно судить об отце? Да ежели бы и возможно было, какое другое чувство, кроме veneration, [глубокого уважения,] может возбудить такой человек, как mon pere? И я так довольна и счастлива с ним. Я только желала бы, чтобы вы все были счастливы, как я.
Брат недоверчиво покачал головой.
– Одно, что тяжело для меня, – я тебе по правде скажу, Andre, – это образ мыслей отца в религиозном отношении. Я не понимаю, как человек с таким огромным умом не может видеть того, что ясно, как день, и может так заблуждаться? Вот это составляет одно мое несчастие. Но и тут в последнее время я вижу тень улучшения. В последнее время его насмешки не так язвительны, и есть один монах, которого он принимал и долго говорил с ним.
– Ну, мой друг, я боюсь, что вы с монахом даром растрачиваете свой порох, – насмешливо, но ласково сказал князь Андрей.
– Аh! mon ami. [А! Друг мой.] Я только молюсь Богу и надеюсь, что Он услышит меня. Andre, – сказала она робко после минуты молчания, – у меня к тебе есть большая просьба.
– Что, мой друг?
– Нет, обещай мне, что ты не откажешь. Это тебе не будет стоить никакого труда, и ничего недостойного тебя в этом не будет. Только ты меня утешишь. Обещай, Андрюша, – сказала она, сунув руку в ридикюль и в нем держа что то, но еще не показывая, как будто то, что она держала, и составляло предмет просьбы и будто прежде получения обещания в исполнении просьбы она не могла вынуть из ридикюля это что то.
Она робко, умоляющим взглядом смотрела на брата.
– Ежели бы это и стоило мне большого труда… – как будто догадываясь, в чем было дело, отвечал князь Андрей.
– Ты, что хочешь, думай! Я знаю, ты такой же, как и mon pere. Что хочешь думай, но для меня это сделай. Сделай, пожалуйста! Его еще отец моего отца, наш дедушка, носил во всех войнах… – Она всё еще не доставала того, что держала, из ридикюля. – Так ты обещаешь мне?
– Конечно, в чем дело?
– Andre, я тебя благословлю образом, и ты обещай мне, что никогда его не будешь снимать. Обещаешь?
– Ежели он не в два пуда и шеи не оттянет… Чтобы тебе сделать удовольствие… – сказал князь Андрей, но в ту же секунду, заметив огорченное выражение, которое приняло лицо сестры при этой шутке, он раскаялся. – Очень рад, право очень рад, мой друг, – прибавил он.
– Против твоей воли Он спасет и помилует тебя и обратит тебя к Себе, потому что в Нем одном и истина и успокоение, – сказала она дрожащим от волнения голосом, с торжественным жестом держа в обеих руках перед братом овальный старинный образок Спасителя с черным ликом в серебряной ризе на серебряной цепочке мелкой работы.
Она перекрестилась, поцеловала образок и подала его Андрею.
– Пожалуйста, Andre, для меня…
Из больших глаз ее светились лучи доброго и робкого света. Глаза эти освещали всё болезненное, худое лицо и делали его прекрасным. Брат хотел взять образок, но она остановила его. Андрей понял, перекрестился и поцеловал образок. Лицо его в одно и то же время было нежно (он был тронут) и насмешливо.
– Merci, mon ami. [Благодарю, мой друг.]
Она поцеловала его в лоб и опять села на диван. Они молчали.
– Так я тебе говорила, Andre, будь добр и великодушен, каким ты всегда был. Не суди строго Lise, – начала она. – Она так мила, так добра, и положение ее очень тяжело теперь.
– Кажется, я ничего не говорил тебе, Маша, чтоб я упрекал в чем нибудь свою жену или был недоволен ею. К чему ты всё это говоришь мне?
Княжна Марья покраснела пятнами и замолчала, как будто она чувствовала себя виноватою.
– Я ничего не говорил тебе, а тебе уж говорили . И мне это грустно.
Красные пятна еще сильнее выступили на лбу, шее и щеках княжны Марьи. Она хотела сказать что то и не могла выговорить. Брат угадал: маленькая княгиня после обеда плакала, говорила, что предчувствует несчастные роды, боится их, и жаловалась на свою судьбу, на свекра и на мужа. После слёз она заснула. Князю Андрею жалко стало сестру.
– Знай одно, Маша, я ни в чем не могу упрекнуть, не упрекал и никогда не упрекну мою жену , и сам ни в чем себя не могу упрекнуть в отношении к ней; и это всегда так будет, в каких бы я ни был обстоятельствах. Но ежели ты хочешь знать правду… хочешь знать, счастлив ли я? Нет. Счастлива ли она? Нет. Отчего это? Не знаю…
Говоря это, он встал, подошел к сестре и, нагнувшись, поцеловал ее в лоб. Прекрасные глаза его светились умным и добрым, непривычным блеском, но он смотрел не на сестру, а в темноту отворенной двери, через ее голову.
– Пойдем к ней, надо проститься. Или иди одна, разбуди ее, а я сейчас приду. Петрушка! – крикнул он камердинеру, – поди сюда, убирай. Это в сиденье, это на правую сторону.
Княжна Марья встала и направилась к двери. Она остановилась.
– Andre, si vous avez. la foi, vous vous seriez adresse a Dieu, pour qu'il vous donne l'amour, que vous ne sentez pas et votre priere aurait ete exaucee. [Если бы ты имел веру, то обратился бы к Богу с молитвою, чтоб Он даровал тебе любовь, которую ты не чувствуешь, и молитва твоя была бы услышана.]
– Да, разве это! – сказал князь Андрей. – Иди, Маша, я сейчас приду.
По дороге к комнате сестры, в галлерее, соединявшей один дом с другим, князь Андрей встретил мило улыбавшуюся m lle Bourienne, уже в третий раз в этот день с восторженною и наивною улыбкой попадавшуюся ему в уединенных переходах.