Selinux mode changer

О SELinux написано довольно много, но у большинства этих материалов есть два недостатка. Либо это короткие практические советы как сделать что-то конкретное, но без объяснений того как это устроено и работает. А если статья (или глава в книге) описывает теоретические вопросы, то как-то длинно и запутанно.

Поэтому я и предпринял попытку кратко и доступно описать что такое SELinux. Доступно для тех, кто еще не сталкивался с системами безопасности. В силу стремления к краткости некоторые аспекты я пропустил, для того чтобы не перегружать — в этой статье только самая суть. В частности я не буду тут описывать что из себя представляет "старая" система безопасности Linux — DAC (discretionary access control, избирательное управление доступом). Или в чем отличия между DAC, MAC и RBAC. Желающие, могут об этом почитать например в википедии.

Что такое SELinux?

SELinux (Security Enhanced Linux) это система безопасности основанная на моделях мандатного и ролевого доступа. Была разработана в начале нулевых (2000-х) годов для того, чтобы исправить недостатки традиционной системы безопасности UNIX (DAC). SELinux реализована как компонент ядра Linux начиная с версии ядра 2.6. То есть SELinux можно использовать в любом дистрибутиве Linux с ядром 2.6 или более поздним. Конечно не во всех дистрибутивах использование SELinux облегчено до максимума, но в принципе можно установить почти в любом.

В нескольких дистрибутивах SELinux устанавливается "из коробки" — это RHEL, CentOS, Fedora. Так, что для реального использования нужно только перевести SELinux в режим enforced. Еще в нескольких дистрибутивах SELinux включен в репозитарий, так что его установка дело нескольких минут — например Debian, Ubuntu.

В этих дистрибутивах SELinux устанавливается одной командой "sudo apt-get install selinux" с последующей перезагрузкой.

SELinux и DAC

SELinux работает "после" DAC. То есть операции, запрещенные в DAC не могут быть разрешены в SELinux.
Иными словами SELinux дополняет и конкретизирует действия разрешенные через DAC. При этом SELinux работает независимо от DAC.

Субъекты и объекты

Когда говорят о SELinux всегда упоминаются субъекты и объекты. То есть SELinux это разрешения и запреты которые применяются в действиях между субъектами и объектами.

Субъекты — строго говоря это пользователи, которые выполняют какие-либо операции на компьютере. Однако пользователи всегда действуют через те или иные прикладные программы. То есть человек-пользователь не может сам залезть внутрь компьютера и "своими руками" выполнить например запись в файл. Если ему нужно выполнить запись в файл, он запускает какую-либо программу. Поэтому, под субъектами чаще всего подразумеваются именно программы (процессы). Иначе говоря субъекты это те кто выполняет некие действия.

Объекты это то, над чем действия выполняются. Чаще всего под объектами подразумеваются файлы данных. Но это могут быть и устройства и даже программы. Пример:
cat /var/log/syslog | grep SELinux
в этой команде программа grep объект для программы cat. И соответственно программа cat субъект по отношению к программе grep.

Как включить или выключить SELinux

Включение или выключение SELinux выполняется командой selinuxenabled с параметром 1 (включить SELinux) или 0 (выключить SELinux). Если нужно чтобы SELinux был включен/выключен при запуске системы, тогда редактировать файл /etc/selinux/config (параметр SELinux=disable).

Режимы работы SELinux

Permissive — разрешается нарушение политики безопасности. Такие нарушения только регистрируются в системном журнале. То есть по сути SELinux не работает, а только лишь фиксирует нарушения политики безопасности.

Enforced — нарушения политики безопасности блокируются. SELinux работает полностью.

Переключение режимов работы выполняется командой setenforce с параметром 1 (включить enforced) или 0 (включить permissive). Но если нужно чтобы режим работы устанавливался сразу при загрузке системы, тогда редактировать файл /etc/selinux/config (параметр SELinux=) который может принимать одно из трех значений — permissive, enforced, disable (SELinux отключен).

Команда sestatus позволяется узнать текущий режим работы SELinux.

Журналирование SELinux (аудит)

  • настройка auditallow — журналировать события.
  • настройка dontaudit — не журналировать события.

Логика работы:

  • если операция allow, то она журналируется лишь в случае auditallow;
  • если операция disallow, то она НЕ журналируется лишь в случае dontaudit.

Контекст безопасности (метка, label) SELinux

Это набор данных состоящий из:

  1. типа пользователя
  2. роли
  3. типа данных или домена процесса
  4. уровней и категорий (используется только в специальных политиках MLS/MCS, в общих политиках эти значения установлены в полный доступ)

Контекст безопасности записывается в атрибуты файла (в файловой системе) и создается при установке SELinux (операция labeling).

Уже присвоенный контекст безопасности может быть впоследствии изменен — операция transition.

Если файловая система не поддерживает запись меток SELinux (как например NFS), тогда метки записываются отдельно от файлов, при этом связь между файлами и метками происходит по путям файлов. Это может привести к "разрыву" между файлом и его меткой в том случае если файл будет перемещен по другому пути (например каталог с такими файлами будет перемонтирован в другую точку монтирования).

Метка файла может оказаться неверной даже в случае если файловая система поддерживает запись таких меток, но к файлу были неправильно применены операции копирования или перемещения внутри файловой системы. Например при копировании в другую папку файл может получить метку установленную для этой папки (наследование меток), вместо той метки, которая у него была раньше. Поэтому важно правильно выполнять операции копирования и перемещения файлов при использовании SELinux.

Узнать контексты SELinux можно используя стандартные команды с ключом -Z:

  • ps -eZ ❶ gerp имя_программы] : контекст SELinux для работающих программ (или для конкретной программы).
  • ls -Z : контекст SELinux для файлов.
  • id -Z : контекст SELinux для текущего пользователя.

 

Пользователь SELinux

Это описательный тип пользователя, а не какой-то конкретный пользователь с логином и паролем. Принципиально это то же самое что и группа пользователей в "старой" системе безопасности DAC. При добавлении, в систему, каждого нового пользователя он по умолчанию (или явным образом) сопоставляется с каким-либо типом пользователя SELinux и в дальнейшем будет иметь те разрешения или запреты, которые указаны для его типа пользователя.

Роль

Перечень разрешенных действий. Возможен переход из одной роли в другую, для изменения полномочий. При этом идентичность пользователя не изменяется (в отличии от команд su/sudo). Роли не совмещаются, они заменяют одна другую.

Политика безопасности определяет допустимые переходы из одной роли в другую. То есть невозможно перейти из любой роли в любую роль. Поскольку роли всегда связаны с типами (доменами), то часто говорят не о смене ролей, а о смене домена (Domain Transition).

Типы (домены) SELinux

Также известны как SELinux sandbox. Объединяют субъекты и объекты в группы, внутри этих групп определяют разрешенные действия субъектов над объектами. Для субъектов вместо термина тип используется термин домен.
Упрощенно можно сказать так:
тип SELinux — для данных;
домен SELinux — для процессов.
В SELinux, в общих политиках, используется механизм принудительного присвоения типов — Type Enforcement. То есть каждый объект и субъект должен быть обязательно приведен к какому-либо типу (или домену).

Политика SELinux (SELinux Policy)

Совокупность всех описанных в системе соотношений пользователь — роль — тип (домен) — уровень и категория. Все типы пользователей, все роли, все типы/домены. Используется два типа политик:

  • Type Enforcment (TE) — Roles Based Access Control (RBAC). Targeted и strict — наиболее широко используемые TE — RBAC политики SELinux.
  • Bell-La Padula Model Multi-Level Security (MLS) — Multi-Category Security (MCS).

Политикаtargeted — все процессы не внесенные в специальные ограниченные домены, работают в неограниченном домене unconfined_t. Таким образом осуществляется возможность выполнения процессов которые еще не описаны в политике. Но такие процессы фактически выполняются почти с административными правами. В этом слабое место политики targeted.

Политика strict — все процессы работают в специальных ограниченных доменах, в неограниченном домене unconfined_t никто не работает. Политика strict используется узкоспециально, поскольку требуется ее ручная настройка для каждого конкретного случая. Ведь процессы не описанные в этой политике просто не будут работать. Но зато эта политика обеспечивает полную защиту в рамках тех возможностей которые есть в SELinux.

Политика MLS/MCS

Специальная политика основанная на механизме мандатного доступа. Всем субъектам и объектам присваиваются уровни доступа. В дальнейшем разрешение или запрет на операцию выдается по соотношению уровней доступа у субъекта и объекта. Предмет разрешения только две операции — чтение из файла и запись в файл. Важное отличие этой схемы заключается в том, что разрешения выдаются не на файлы, а на потоки данных связанных с этими файлами.

Правило такое — поток данных не может проходить в направлении понижения уровня доступа. То есть от более высокого уровня к более низкому уровню. Это приводит, на первый взгляд, к нелогичному запрету чтения или доступа в случае если субъект и объект имеют разные уровни доступа. Например субъект с уровнем доступа "секретно" не может писать в файл с уровнем "несекретно". И этот же субъект с правом доступа "секретно" не может читать из файла с уровнем "совершенно секретно", но может писать в этот файл.

Странно?

Однако, логика тут есть, просто она другая. Если субъект, имеющий уровень "секретно", запишет данные в файл с уровнем "несекретно" то этот файл станет (потенциально) содержать данные уровня "секретно", но при этом будет доступен субъектам уровня "несекретно". То есть станет возможна утечка информации. Поэтому в MLS запись в файлы разрешена только с нижних уровней на верхние.

Эту особенность нужно понимать при присвоении меток уровней доступа.

Помимо уровней, доступ дополнительно регулируется категориями. Субъект не имеющий права доступа к категории "ВМС", не может получить доступ к данным которые имеют метку этой категории. Даже если этот субъект имеет самый высокий уровень доступа.
В контексте SELinux запись об уровнях и категориях выглядит так: "s0-s0:c0.c1023" где "s0-s0" допустимые уровни, а "c0.c1023" допустимые категории. Конкретно такая запись — "s0-s0:c0.c1023" означает высший уровень доступа к любой категории объектов.

Эта часть контекста используется только в специальных политиках MLS/MCS. В общих политиках типа targeted или strict эта часть контекста просто установлена в максимальный уровень разрешений и таким образом не влияет на доступ.

Резюме

Максимальную защиту SELinux дает когда переключен в режим enforced и при этом используется политика strict или политика MLS/MCS.

Если SELinux работает в режиме permissive, то фактически никакой защиты нет — только лишь фиксируются нарушения текущей политики.

Если SELinux переключен в режим enforced, но используется политика targeted, то защита осуществляется только применительно к "известным" программам, для которых в политике определены разрешения и запреты. "Неизвестная" программа фактически имеет административные привилегии.

P.S.

Если вы живете в г. Краснодар, для вас есть простой способ установить SELinux и научиться им пользоваться. Подробнее…

Иван Сухов, 2012 г.

Поделитесь этим сайтом с друзьями!

Если вам оказалась полезна или просто понравилась эта статья, тогда не стесняйтесь — поддержите материально автора. Это легко сделать закинув денежек на Яндекс Кошелек № 410011416229354. Или на телефон +7 918-16-26-331.

Или другими способами (с карты, с телефона)

Даже небольшая сумма может помочь написанию новых статей 🙂

Или поделитесь ссылкой на эту статью со своими друзьями.

Сопутствующие статьи

главная — Статьи — Linux, FreeBSD

Отключить SELinux в CentOS 6

Теги: Linux

SELinux, по хорошему, не надо выключать на постоянной основе. Но вполне могут быть ситуации, когда отключить его все-таки необходимо.

Вариант 1: отключить совсем

nano /etc/selinux/config

SELINUX=disabled

Требуется перезагрузка:

shutdown -r now

Вариант 2: отключить временно (после перезагрузки изменения исчезнут)

Проверить текущее значение (1 — вкл., 0 — выкл.

или Permissive)

cat /selinux/enforce

Проверить также можно с помощью команды:

# getenforce
Enforcing

Возможные возвращаемые значения: Enforcing, Permissive, Disabled.

Выключить SELinux:

echo 0 > /selinux/enforce

Включить SELinux:

echo 1 > /selinux/enforce

Если вы отключали SELinux на постоянной основе, то этот вариант не сработает, т.к. такого файла (/selinux/enforce) просто не будет. В этом случае надо будет по вар. 1 отредактировать файл/etc/selinux/config и установить:


SELINUX=enforcing

После чего перезагрузить компьютер.

Вариант 3: отключить временно (разновидность вар. 2)

setenforce 0

Но лучше все же не отключать SELinux.

Авторизуйтесь для добавления комментариев!

Агентство национальной безопасности США (NSA) выпустило специальную версию мобильной операционной системы Android с повышенным уровнем безопасности под названием SE Android.

По заявлению спецслужб, новая платформа предоставляет и исполняет самые жесткие политики в отношении контроля доступа по сравнению со стандартными политиками Android.

Платформа SE Android вобрала в себя результаты проведенных NSA исследований в области обязательных инструментов контроля доступа – эти исследования были частью запущенного еще в 2000 году проекта по созданию защищенной Linux-платформы. Платформы SE Linux стала набором специальных модулей ядра Linux для обеспечения повышенной безопасности и других инструментов для жесткого ограничения доступа приложений и пользователей к различным ресурсам. Со временем многие компоненты SE Linux с низкоуровневыми модификациями вошли в состав официального ядра Linux, а также были перенесены на платформы Solaris и FreeBSD.

Еще в прошлом году на конференции Linux Security Summit агентство NSA заявило о своих планах по переносу наработок из SE Linux в платформу Android. Первая версия SE Android увидела свет 6 января 2012 года. Одно из главных направлений в разработке SE Android связано с улучшением модели безопасности приложений в Android, которая изначально создана на базе стандартного контроля доступа DAC в системах Linux. В модели DAC приложение, запущенное конкретным пользователем системы, получает доступ ко всем файлам и ресурсам, доступным для этого пользователя.

В отличие от модели DAC спецслужбы применили модель MAC сначала в SE Linux, а теперь и в SE Android – согласно этой модели ресурсы, доступные приложению, можно ограничить соответствующей политикой независимо от прав пользователя в системе. В результате платформу SE Android можно использовать для доступа к привилегированным сервисам и ограничивать возможный ущерб от использования уязвимостей в системе.

Многие утилиты для взлома Android, включая GingerBreak, Exploid или RageAgainstTheCage, нацелены на использование уязвимостей в системных службах Android. Например, утилита GingerBreak использует скрытые возможности службы «vold», запускаемой с правами суперпользователя для работы с томами. Платформа SE Android может эффективно блокировать утилиты типа GingerBreak на шести разных стадиях взлома, в зависимости от состава включенных политик.

К сожалению, установка операционной системы SE Android на устройства выполняется гораздо сложнее, чем у других нестандартных вариантов Android, поскольку проект SE Android пока не публикует готовых сборок – вам придется собирать и устанавливать систему самостоятельно. Для сборки понадобится сначала загрузить и собрать открытый вариант системы AOSP (Android Open Source Project), а затем синхронизировать сборку AOSP с ветками git-репозитария SE Android, чтобы применить к коду все исправления и модификации. Теоретически, в этой задаче могут помочь подробные инструкции, опубликованные на сайте проекта SE Android.

Платформа SE Android предназначается для использования в компаниях и организациях, которым по роду деятельности необходимо соблюдать жесткие политики доступа, аналогичные требованиям министерства обороны США.

Серверы Linux. Часть VII. Система контроля доступа SELinux

Оригинал: Introduction to SELinux
Автор: Paul Cobbaut
Дата публикации: 24 мая 2015 г.
Перевод: A.Панин
Дата перевода: 15 июля 2015 г.

Глава 19. Знакомство с системой контроля доступа SELinux

( или ) является набором модификаций ядра Linux, разработанных Агентством Национальной Безопасности США (NSA), с целью добавления в ядро Linux механизма для реализации различных политик безопасности. Набор модификаций SELinux был представлен в виде программного продукта с открытым исходным кодом в конце 2000-х годов. С момента выпуска версии 2.6 ядра Linux данный набор модификаций стал его частью.

Технология SELinux позволяет повысить безопасность системы! SELinux может контролировать права доступа пользователей к файлам и процессам. Даже в том случае, если в отношении файла используется команда , SELinux все еще может запретить приложениям осуществлять доступ к нему (при этом следует учесть, что права доступа UNIX проверяются в первую очередь!). SELinux удается осуществлять контроль доступа благодаря присваиванию пользователям (), которые представляют (). Администраторы систем имеют возможность установки очень строгих прав доступа, соответствующих ролям.

Поддержка технологии SELinux присутствует в новейших версиях дистрибутивов Red Hat Enterprise Linux, Debian, CentOS, Fedora и многих других.

19.1. Режимы работы SELinux

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

19.2. Журналирование событий

Убедитесь в том, что служба исполняется и активирована на этапе загрузки системы для возможности сохранения сообщений об отказах в доступе к ресурсам со стороны SELinux в файле журнала .

[root@rhel55 ~]# chkconfig —list syslog syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off

Также убедитесь в том, что служба исполняется и активирована на этапе загрузки системы, ведь она позволяет сохранять более простые для чтения сообщения в файле журнала аудита системы .

[root@rhel55 ~]# chkconfig —list auditd auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

В том случае, если упомянутые службы не активированы, выполните команды и .

[root@rhel55 ~]# service auditd status auditd (pid 1660) is running…

[root@rhel55 ~]# service syslog status syslogd (pid 1688) is running… klogd (pid 1691) is running…

После этого вы сможете узнать из файла системного журнала о том, что технология не используется.

root@deb503:~# grep -i selinux /var/log/messages Jun 25 15:59:34 deb503 kernel: [ 0.084083] SELinux: Disabled at boot.

Или используется.

root@deb503:~# grep SELinux /var/log/messages | grep -i Init Jun 25 15:09:52 deb503 kernel: [ 0.084094] SELinux: Initializing.

19.3. Активация SELinux

В дистрибутиве RHEL вы можете использовать приложения с графическим интерфейсом для активации технологии , в то время, как в дистрибутиве Debian вам придется использовать команду . Для завершения процесса активации технологии SELinux требуется перезагрузка системы.

root@deb503:~# selinux-activate Activating SE Linux Searching for GRUB installation directory … found: /boot/grub Searching for default file … found: /boot/grub/default Testing for an existing GRUB menu.lst file … found: /boot/grub/menu.lst Searching for splash image … none found, skipping … Found kernel: /boot/vmlinuz-2.6.26-2-686 Updating /boot/grub/menu.lst … done SE Linux is activated. You may need to reboot now.

19.4. Утилита getenforce

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

[root@rhel55 ~]# getenforce Permissive

Файл из виртуальной файловой системы содержит значение 1, если SELinux работает в режиме принудительного использования политик доступа или 0, если SELinux работает в разрешающем режиме.

root@fedora13 ~# cat /selinux/enforce root@fedora13 ~#

19.5. Утилита setenforce

Вы можете использовать утилиту для переключения между () и () после активации .

[root@rhel55 ~]# setenforce Enforcing [root@rhel55 ~]# getenforce Enforcing [root@rhel55 ~]# setenforce Permissive [root@rhel55 ~]# getenforce Permissive

Или же вы можете просто использовать значения 0 и 1 в качестве аргументов.

[root@centos65 ~]# setenforce 1 [root@centos65 ~]# getenforce Enforcing [root@centos65 ~]# setenforce 0 [root@centos65 ~]# getenforce Permissive [root@centos65 ~]#

19.6. Утилита sestatus

Вы можете ознакомиться с текущим состоянием механизма и используемой политикой, воспользовавшись утилитой .

[root@rhel55 ~]# sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: permissive Mode from config file: permissive Policy version: 21 Policy from config file: targeted

19.7. Политика ограничения доступа

На большинстве серверов, работающих под управлением дистрибутивов от компании Red Hat, используется (). () используется лишь такими организациями, как Агентство национальной безопасности США (NSA), Федеральное бюро расследований США (FBI), Центральное разведывательное управление США (CIA), Министерство обороны США (DOD), Школа права Гарвардского университета (HLS).

Политика целевого ограничения доступа позволяет защитить тысячи процессов, при этом позволяя другим процессам быть 'неограниченными' ('unconfined') в своих возможностях (такие процессы могут выполнять любые операции).

19.8. Файл конфигурации /etc/selinux/config

Главный файл конфигурации расположен по пути . При работе в () данный файл будет выглядеть следующим образом. () также устанавливается в рамках файла конфигурации .

[root@centos65 ~]# cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing — SELinux security policy is enforced. # permissive — SELinux prints warnings instead of enforcing. # disabled — SELinux is fully disabled. SELINUX=permissive # SELINUXTYPE= type of policy in use. Possible values are: # targeted — Only targeted network daemons are protected. # strict — Full SELinux protection. SELINUXTYPE=targeted

19.9. Избирательное или мандатное управление доступом

Стандартный механизм прав доступа UNIX использует (, ) для установки прав доступа к файлам. Это означает, что пользователь, владеющий файлом, может сделать этот файл общедоступным, просто выполнив команду .

В случае задействования технологии ядро ОС будет использовать (, ), которая позволяет строго ограничить спектр действий процессов или программных потоков в отношении файлов (заменяя тем самым модель избирательного управления доступом). Ядро ОС ограничивает процессы минимальными правами доступа к ресурсам, требуемыми для их корректной работы.

Модель мандатного управления доступом SELinux предусматривает маркировку и использование типов ресурсов! Файлы, процессы и другие ресурсы маркируются в соответствии с контекстом SELinux. В случае файлов используются расширенные атрибуты, в случае процессов — внутренние механизмы ядра ОС.

В SELinux используется следующий формат маркировки:

пользователь:роль:тип:(уровень)

При использовании () задействуется лишь .

19.10. Команда ls -Z

Для того, чтобы ознакомиться с правами доступа к файлу модели избирательного управления доступом, следует использовать команду , благодаря которой будет выведена , а также о правах доступа к последнему.

Специально для вывода информации о правах доступа модели мандатного управления доступом был добавлен параметр утилиты . Из приведенного ниже вывода ясно, что значением поля типа файла из директории является .

[root@centos65 ~]# ls -Z -rw——-. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg -rw-r—r—. root root system_u:object_r:admin_home_t:s0 install.log -rw-r—r—. root root system_u:object_r:admin_home_t:s0 install.log.syslog [root@centos65 ~]# useradd -m -s /bin/bash pol [root@centos65 ~]# ls -Z /home/pol/.bashrc -rw-r—r—. pol pol unconfined_u:object_r:user_home_t:s0 /home/pol/.bashrc

19.11. Параметр -Z других утилит

Существуют и некоторые другие утилиты, поддерживающие параметр :

mkdir -Z cp -Z ps -Z netstat -Z …

Если вам понравилась статья, поделитесь ею с друзьями:


Добавить комментарий

Закрыть меню