- Введение в SELinux для начинающих
- Изменение режимов Selinux
- Настройка Selinux
- Мониторинг логов
- Настройка политик Selinux
- 1. Booleans
- 2. Маркировка и контекст
- 3. Создание локальных политик
- Что такое SELinux? Настройка, включение и отключение
- Изменение режима SELinux
- Политики SELinux
- Работа политики SELinux
- Изменение переключателей SELinux
- Заключение
Введение в SELinux для начинающих
Оригинал: Beginner’s guide to SELinux
Автор: SHUSAIN
Дата публикации: 5 ноября 2018 года
Перевод: А. Кривошей
Дата перевода: июль 2019 г.
SELinux или Security Enhanced Linux — это усовершенствованный механизм контроля доступа, разработанный американским Агентством Национальной Безопасности (АНБ) для предотвращения злонамеренных вторжений и взлома. Он реализует MAC (Mandatory Access Control) поверх уже существующего DAC (Discretionary Access Control), то есть разрешения на чтение, запись, выполнение.
Он имеет три разных режима работы:
1. Enforcing: запрещает доступ на основе правил политик.
2. Permissive: регистрирует нарушения политик, но не запрещает доступ, который был бы запрещен в режиме Enforcing.
3. Disabled: полностью отключает Selinux.
Конфигурационный файл по умолчанию для изменения этих режимов: /etc/selinux/config.
Изменение режимов Selinux
Чтобы узнать текущий режим, выполните:
Чтобы изменить режим на permissive, выполните следующую команду:
или для смены режима permissive на enforcing, выполните:
Если вам нужно полностью отключить selinux, это можно сделать только из конфигурационного файла:
Измените поле SELINUX следующим образом:
Настройка Selinux
Каждый файл или процесс помечен контекстом SELinux, который содержит дополнительную информацию, такую как пользователь SELinux, роль, тип и т. д. Если вы впервые включаете Selinux, то сначала нам нужно исправить контекст и метки. Этот процесс исправления меток и контекста известен как «Перемаркировка» (Relabeling). Чтобы начать перемаркировку, сначала перейдите в конфигурационный файл и измените режим на permissive.
Как только установлен режим «permissive», мы создадим пустой скрытый файл с именем «autorelabel» в каталоге /.
Теперь перезагрузите компьютер
Примечание: мы используем режим ‘permissive’ для перемаркировки, поскольку использование режима enforcing во время проведения «перемаркировки» может привести к сбою системы.
Не беспокойтесь, если во время загрузки система застрянет в каком-то файле, перемаркировка займет некоторое время. После завершения перемаркировки и загрузки вашей системы вы можете перейти к конфигурационному файлу и установить режим «enforcing», а также выполнить команду:
Вы успешно включили SELinux на своем компьютере.
Мониторинг логов
Возможно, у вас возникли ошибки во время перемаркировки или могут возникать ошибки при работе системы. Чтобы проверить, работает ли ваш Selinux должным образом и не блокирует ли он доступ к какому-либо порту, приложению и т. д., мы должны отслеживать журналы. Файл журнала для Selinux — /var/log/audit/audit.log, но вам не нужно читать все, чтобы проверить ошибки. Мы можем использовать утилиту «audit2why» для проверки ошибок в журналах, выполнив:
Мы получим ошибки в качестве вывода. Если все в порядке, вывода не будет.
Настройка политик Selinux
Политика Selinux — это набор правил, которыми руководствуется механизм безопасности Selinux. Политика определяет набор правил для конкретной среды. Здесь мы научимся изменять политики, чтобы разрешить доступ к нашим запрещенным сервисам.
1. Booleans
Booleans позволяет нам вносить изменения в часть политики во время выполнения без необходимости знания написания политики. Это позволяет вносить изменения без необходимости перезагрузки или перекомпиляции политики SELinux.
Допустим, мы хотим предоставить общий доступ к домашнему каталогу нашего пользователя по FTP на чтение и запись, и мы уже поделились им, но, пытаясь получить к ним доступ, мы его не видим. Это связано с тем, что политика SElinux запрещает FTP-серверу читать и писать в домашнем каталоге пользователя. Нам нужно изменить политику, чтобы ftp мог обращаться к домашним каталогам, для этого мы посмотрим, есть ли какие-либо логические значения, доступные для выполнения этого, с помощью команды:
Она выдаст список всех доступных логических значений с их текущим состоянием (включено или выключено) и описанием. Вы можете уточнить поиск, добавив «grep», чтобы найти результаты, связанные только с ftp
Среди прочих вы увидите следующий Boolean:
Это правило позволяет ftp читать и писать в домашнюю директорию пользователя.
Оно выключено, поэтому мы включим этот Boolean с помощью команды setsebool:
Теперь наш демон ftp сможет получить доступ к домашнему каталогу пользователя.
Примечание: вы также можете получить список доступных логических значений, запустив команду «getsebool -a», но она не будет отображать описание Boolean.
2. Маркировка и контекст
Это наиболее распространенный способ реализации Selinuxpolicy на нашем сервере. Каждый файл, папка, процесс, порт помечены контекстом SELinux:
— для файлов/папок, метки хранятся как расширенные атрибуты в файловой системе и могут быть просмотрены с помощью команды:
— для процессов и портов маркировкой управляет ядро, и мы можем увидеть эти метки с помощью команд:
Теперь давайте рассмотрим пример, чтобы понять метки и контекст в деталях. Допустим, у нас есть веб-сервер, который в качестве каталога документов использует /home/dan/html/, а не /var/www/html/, SElinux сочтет это нарушением политики, и вы не сможете просматривать вашу веб-страницу. Это происходит потому, что мы не установили контекст безопасности, связанный с HTML-файлами. Чтобы проверить контекст безопасности по умолчанию для HTML-файла, используйте следующую команду:
-rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/
Здесь мы получили httpd_sys_content_t в качестве контекста для html-файлов. Нам нужно установить этот контекст безопасности для нашего текущего каталога, который имеет текущий контекст:
-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/
Другая команда для проверки контекста безопасности файла/каталога:
Мы также будем использовать «semanage» для изменения контекста, как только мы найдем правильный контекст безопасности. Чтобы изменить контекст /home/ dan/html, выполните следующие команды:
Как только контекст был изменен с помощью «semange», restorecon загрузит контекст по умолчанию для файлов и каталогов. Наш веб-сервер теперь сможет читать файлы из папки /home/dan/html, поскольку контекст безопасности для этой папки был изменен на «httpd_sys_content_t».
3. Создание локальных политик
Может возникнуть ситуация, когда вышеуказанные методы бесполезны, и вы получаете ошибки (avc/denials) в audit.log. Когда возникает такая проблема, нам нужно создать локальную политику для ее разрешения. Вы можете просмотреть все ошибки с помощью audit2why, как было указано выше.
Как только мы увидели ошибки, мы можем создать локальную политику для их устранения. Когда, например, мы получаем ошибку, связанную с httpd (apache) или smbd (samba), мы создадим для нее политику:
Здесь http_policy & smb_policy — это названия локальных политик, которые мы создали. Теперь нам нужно только загрузить эти созданные локальные политики в текущую политику SElinux, это может быть сделано с помощью следующих команд:
Наши локальные политики были загружены, и мы не должны теперь видеть никаких ошибок в audit.log.
Подробнее о selinux вы можете узнать из следующих статей на нашем сайте:
Источник
Что такое SELinux? Настройка, включение и отключение
SELinux, или Security Enhanced Linux, — это продвинутый механизм управления доступом, разработанный Агентством национальной безопасности (АНБ) США для предотвращения злонамеренных вторжений. Он реализует мандатную модель управления доступом (MAC — Mandatory Access control) в дополнение к уже существующей в Linux дискреционной модели (DAC — Discretionary Access Control), то есть разрешениям на чтение, запись, выполнение.
У SELinux есть три режима работы:
1. Enforcing — ограничение доступа в соответствии с политикой. Запрещено все, что не разрешено в явном виде. Режим по умолчанию.
2. Permissive — ведёт лог действий, нарушающих политику, которые в режиме enforcing были бы запрещены, но не запрещает сами действия.
3. Disabled — полное отключение SELinux.
Изменение режима SELinux
Файл конфигурации по умолчанию, где можно изменять режим работы — /etc/selinux/config.
Чтобы узнать текущий режим работы, нужно выполнить следующую команду (для работы с SELinux необходимы root-привилегии, поэтому здесь и далее приводятся команды для root-пользователя):
Изменение режима работы на permissive:
и наоборот, на enforcing:
Полностью отключить SELinux можно только через файл конфигурации. Откройте его любым текстовым редактором
и измените параметр SELINUX на disabled:
После чего перезагрузите систему
Политики SELinux
В основе структуры безопасности SELinux лежат политики. Политика — это набор правил, определяющих ограничения и права доступа для всего, что есть в системе. Под “всем” в данном случае понимаются пользователи, роли, процессы и файлы. Политика определяет связь этих категорий друг с другом.
Для понимания политик необходимо понимание базовых терминов. Политика SELinux определяет доступ пользователей к ролям, доступ ролей к доменам и доступ доменов к типам. Разберём значение этих терминов.
Пользователи
В SELinux есть набор предварительно заданных пользователей. Каждая стандартная учётная запись пользователя Linux соответствует одному или нескольким пользователям SELinux.
В Linux пользователи запускают процессы. Это может быть пользователь ivan, открывший документ в редакторе vi (учётная запись ivan запускает процесс vi) или служебная учётная запись, запустившая демон httpd. В SELinux процесс (демон или запущенная программа) называется субъектом.
Роли
Роль определяет, какие пользователи могут осуществлять доступ к заданному процессу. Роли не тождественны группам, они больше похожи на фильтры: пользователь может принадлежать к роли в любое время, если роль это позволяет. Определение роли в политике безопасности SELinux задаёт пользователей, имеющих доступ к этой роли. Роли используются потому, что один из элементов SELinux реализует ролевую модель управления доступом (RBAC — Role Based Access Control).
Субъекты и объекты
Субъект — это процесс, который может потенциально влиять на объект.
Объектом в SELinux называется все, над чем можно выполнять какие-либо действия. Это может быть файл, директория, порт, tcp-сокет, курсор, X-сервер. Действия, которые субъект может выполнить над объектом, являются разрешениями субъекта.
Домены
Домен — это контекст, в котором может работать субъект SELinux (процесс). Этот контекст представляет собой как бы оболочку вокруг субъекта, которая сообщает процессу, что он может и не может делать. Например, домен определяет, какие файлы, директории, ссылки, устройства или порты доступны для субъекта.
Типы
Тип — это контекст для файла, который устанавливает предназначение файла. Например, контекст файла может указывать, что это веб-страница, или что файл находится в директории /etc, или что владелец этого файла — конкретный пользователь. В терминах SELinux контекст файла называется его типом.
Политика SELinux определяет доступ пользователей к ролям, доступ ролей к доменам и доступ доменов к типам. Сначала пользователь должен быть авторизован для получения роли, затем роль должна быть авторизована для доступа к доменам. Домен, в свою очередь, может осуществлять доступ только к определенным типам файлов.
Механизм, при котором процесс, запущенный в определенном домене, может осуществлять только определенные действия над определенными типами объектов, называется принудительным присвоением типов (Type Enforcement — TE).
Работа политики SELinux
Политика SELinux не заменяет традиционную дискреционную модель управления доступом (DAC). Если правило DAC запрещает пользователю доступ к файлу, правила политики SELinux не будут применяться, потому что первая линия обороны уже заблокировала доступ. SELinux начинает работать уже после DAC.
При запуске системы с SELinux политика загружается в память. Она имеет модульный формат, аналогично загружаемым модулям ядра. И точно так же как и модули ядра, модули политики можно динамически загружать и выгружать из памяти в ходе работы. SELinux ведёт список загруженных модулей (policy store), имя которого можно увидеть при помощи команды sestatus. Команда semodule -l выводит список модулей, загруженных память в данный момент:
Результат будет выглядеть примерно следующим образом:
Команду semodule можно использовать для множества других задач: установки, удаления, перезагрузки, обновления, включения и выключения модулей политики SELinux. Бинарные файлы модулей в большинстве случаев входят в состав пакетов SELinux. Они имеют расширение .pp. Просмотреть их список можно следующей командой:
Можно заметить, что файлы связаны с различными приложениями:
Файлы .pp не читаемы для человека. При загрузке системы модули политик объединяются в так называемую активную политику, которая затем загружается в память. Бинарная версия этой загруженной политики находится в директории /etc/selinux/targeted/policy.
Следующая команда показывает активную политику:
Изменение переключателей SELinux
Несмотря на то, что прочитать файлы модулей политики невозможно, есть простой способ их настройки. Она осуществляется при помощи булевых переключателей SELinux (boolean).
Чтобы разобраться, как они работают, запустим команду semanage с опцией boolean:
Если у вас будет ошибка
То нужно установить policycoreutils-python
Теперь запускаем semanage с опцией boolean
semanage boolean -l | less
Будет выведен список различных переключателей, которые можно включить или выключить, краткое описание их функций и текущее состояние:
Первый пункт в этом списке позволяет демону FTP осуществлять доступ к домашним директориям пользователей. В данный момент переключатель выключен (off), то есть доступ запрещен.
Для изменения значений используется команда setsebool. В качестве примера давайте разрешим анонимный доступ FTP на запись. Проверим состояние переключателя командой getsebool:
Она покажет, что в данный момент переключатель выключен:
Изменим значение переключателя и включим его:
Снова проверим состояние переключателя, оно должно поменяться:
Изменение переключателей является временным, при перезагрузке они вернутся к старым значениям. Чтобы закрепить изменения, нужно запустить команду setsebool с опцией -P.
Теперь после перезагрузки изменения не потеряются
Заключение
Мы рассмотрели базовые принципы работы SELinux, включение системы и режимы её работы, показали пример обеспечения безопасности системы. Также была разобрана работа политики безопасности и ее настройка при помощи булевых переключателей. Более подробную информацию о SELinux можно найти в соответствующих man-страницах.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник