Centos 8 selinux настройка

Обновлено: 07.07.2024

SELinux добавляет к системе дополнительный уровень безопасности, позволяя администраторам и пользователям контролировать доступ к объектам на основе правил политики.

Правила политики SELinux определяют, как процессы и пользователи взаимодействуют друг с другом, а также как процессы и пользователи взаимодействуют с файлами. Если нет правила, явно разрешающего доступ к объекту, например, для процесса, открывающего файл, доступ запрещается.

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

По умолчанию в CentOS 8 SELinux включен и находится в принудительном режиме. Настоятельно рекомендуется держать SELinux в принудительном режиме. Однако иногда это может мешать работе какого-либо приложения, и вам необходимо установить его в разрешающий режим или полностью отключить.

В этом руководстве мы объясним, как отключить SELinux в CentOS 8.

Подготовка

Только пользователь root или пользователь с привилегиями sudo может изменить режим SELinux.

Проверка режима SELinux

Используйте команду sestatus чтобы проверить статус и режим, в котором работает SELinux:

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

Изменение режима SELinux на разрешающий

Когда он включен, SELinux может находиться в принудительном или разрешающем режиме. Вы можете временно изменить режим с целевого на разрешающий с помощью следующей команды:

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

Чтобы навсегда установить разрешающий режим SELinux, выполните следующие действия:

Откройте файл /etc/selinux/config и установите для мода SELINUX значение permissive :

Сохраните файл и запустите команду setenforce 0 чтобы изменить режим SELinux для текущего сеанса:

Отключение SELinux

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

Выполните следующие шаги, чтобы навсегда отключить SELinux в вашей системе CentOS 8:

Откройте файл /etc/selinux/config и измените значение SELINUX на disabled :

Сохраните файл и перезагрузите систему:

Когда система загружается, используйте команду sestatus чтобы убедиться, что SELinux отключен:

Результат должен выглядеть так:

Выводы

Чтобы узнать больше о мощных функциях SELinux, посетите руководство по CentOS SELinux .

Что такое SELinux?

В операционную систему при помощи SELinux внедряется, так называемая, мандатная модель управления доступом (Mandatory Access Control), сокращённо MAC. Данная модель управления представляет собой способ разграничения контроля доступа с определённым набором привилегий. В дистрибутиве Linux MAC реализована поверх того, что мы называем моделью избирательного управления доступом (Discretionary Access Control), сокращённо DAC.

Другими словами, SELinux позволяет произвести точную настройку требований контроля доступа, с помощью которой определяется степень влияния пользователя на описанный настройкой процесс. Это в полной мере может предотвратить получение злоумышленником доступа ко всем объектам и процессам системы.

Чтобы понять работу системы, мы произведём настройку конфигурации SELinux на сервере, работающем на операционной системе CentOS Stream.

Установка SELinux

В этом разделе мы установим различные пакеты, используемые в SELinux. Они призваны помочь в создании, управлении и анализе политик SELinux. Сначала необходимо проверить, какие пакеты уже установлены в вашей системе:

Если ваша CentOS Stream развёрнута только что, то в системе должны быть установлены следующие пакеты:

Инсталлированные пакеты SELinux

Теперь, необходимо запустить установку следующих пакетов и их зависимостей:

Данная инсталляция содержит следующие пакеты:

Состояния SELinux

В нём значение переменной SELINUX измените с disabled на enabled . После чего перезагрузите сервер:

После перезагрузки подключитесь к вашему VPS и проверьте статус SELinux:

Проверка статуса SELinux

Режимы SELinux

Во включенном состоянии SELinux может быть запущен в режимах enforcing и permissive .

В режиме enforcing система SELinux принуждает ОС к применению SELinux-политик и запрещает несанкционированный, с точки зрения SELinux, доступ остальным объектам и процессам. Следующей инструкцией вы можете увидеть загруженные в память системы SELinux-политики:

В режиме permissive SELinux не блокирует доступ к объектам, не имеющим разрешений от политик SELinux. Вместо этого, система регистрирует любые отказы в доступе, используя /var/log/audit/audit.log .

Проверить, в каком режиме SELinux функционирует сейчас, можно командой:

Проверка режима SELinux

Переключаться между режимами можно, используя команду setenforce:

Также, режим permissive можно активировать при помощи инструкции:

Активированный режим виден при выводе набора текущих настроек командой sestatus .

Контекст SELinux

А теперь посмотрите, как выглядит контекст этого каталога:

Контекст домашнего каталога

Для корневого каталога системы контекст будет выглядеть примерно так:

Контекст корневого каталога

Мы видим, что содержимое контекста для каждого файла или каталога описано следующим синтаксисом:

А вот, как будет выглядеть в нашей системе контекст для процесса systemd , например:

Контекст процесса - Введение в SELinux под CentOS Stream

Логичекие параметры SELinux

Включение и выключение логических позиций в SELinux может производиться без пересборки политик SELinux.

Во-первых, вы можете увидеть список логических переменных при помощи команды getsebool -a . Для вывода этого списка используйте фильтр grep :

Вывод логических параметров с фильтром httpd_can - Введение в SELinux под CentOS Stream

Проверить изменения можно при помощи предыдущей инструкции:

Вывод логических параметров с фильтром httpd_can - Введение в SELinux под CentOS Stream

Заключение


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

1. Введение

SELinux (SELinux) — это система принудительного контроля доступа, реализованная на уровне ядра. Впервые эта система появилась в четвертой версии CentOS, а в 5 и 6 версии реализация была существенно дополнена и улучшена. Эти улучшения позволили SELinux стать универсальной системой, способной эффективно решать массу актуальных задач. Стоит помнить, что классическая система прав Unix применяется первой, и управление перейдет к SELinux только в том случае, если эта первичная проверка будет успешно пройдена.

1.1 Некоторые актуальные задачи.

Для того, чтобы понять, в чем состоит практическая ценность SELinux, рассмотрим несколько примеров, когда стандартная система контроля доступа недостаточна. Если SELinux отключен, то вам доступна только классическая дискреционная система контроля доступа, которая включает в себя DAC (избирательное управление доступом) или ACL(списки контроля доступа). То есть речь идет о манипулировании правами на запись, чтение и исполнение на уровне пользователей и групп пользователей, чего в некоторых случаях может быть совершенно недостаточно. Например:

— Администратор не может в полной мере контролировать действия пользователя. Например, пользователь вполне способен дать всем остальным пользователям права на чтение собственных конфиденциальных файлов, таких как ключи SSH.

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

— Процессы наследуют права пользователя, который их запустил. Например, зараженная трояном версия браузера Firefox в состоянии читать SSH-ключи пользователя, хотя не имеет для того никаких оснований.

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

1.1.1 Основные термины, использующиеся в SELinux:

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

Роль — список доменов, которые могут быть применены. Если какого-то домена нет в списке доменов какой-то роли, то действия из этого домена не могут быть применены.

Тип — набор действий, которые допустимы по отношения к объекту. Тип отличается от домена тем, что он может применяться к пайпам, каталогам и файлам, в то время как домен применяется к процессам.

Контекст безопасности — все атрибуты SELinux — роли, типы и домены.

1.2 Решение проблем традиционной модели безопасности.


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

— Создание и настройка списка программ, которые могут читать ssh-ключи.

— Предотвращение несанкционированного доступа к данным через mail-клиент.

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

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

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

Enforcing: Режим по-умолчанию. При выборе этого режима все действия, которые каким-то образом нарушают текущую политику безопасности, будут блокироваться, а попытка нарушения будет зафиксирована в журнале.

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

Disabled: Полное отключение системы принудительного контроля доступа.

Вы можете посмотреть текущий режим и другие настройки SELinux (а в случае необходимости и изменить его) при помощи специального GUI-инструмента, доступного в меню «Администрирование» (system-config-selinux). Если же вы привыкли работать в консоли, то можете посмотреть текущий статус командой sestatus.

Также вы можете узнать статус SELinux при помощи команды getenforce.
Команда «setenforce» позволяет быстро переключаться между режимами Enforcing и Permissive, изменения вступают в силу без перезагрузки. Но если вы включаете или отключаете SELinux, требуется перезагрузка, ведь нужно заново устанавливать метки безопасности в файловой системе.
Для того, чтобы выбрать режим по-умолчанию, который будет применяться при каждой загрузке системы, задайте значение строки 'SELINUX=' в файле /etc/selinux/config, задав один из режимов — 'enforcing', 'permissive' или 'disabled'. Например: 'SELINUX=permissive'.

3. Политики SELinux

Как отмечалось ранее, SELinux по-умолчанию работает в режиме Enforcing, когда любые действия, кроме разрешенных, автоматически блокируются, каждая программа, пользователь или сервис обладают только теми привилегиями, которые необходимы им для функционирования, но не более того. Это довольно жесткая политика, которая обладает как плюсами — наибольший уровень информационной безопасности, так и минусами — конфигурирование системы в таком режиме сопряжено с большими трудозатратами системных администраторов, к тому же, велик риск того, что пользователи столкнутся с ограничением доступа, если захотят использовать систему хоть сколько-нибудь нетривиальным образом. Такой подход допустим в Enterprise-секторе, но неприемлем на компьютерах конечных пользователей. Многие администраторы просто отключают SELinux на рабочих станциях, чтобы не сталкиваться с подобными проблемами.


4. Контроль доступа в SELinux

SELinux предоставляет следующие модели управления доступом:

Type Enforcement (TE): основной механизм контроля доступа, используемый в целевых политиках. Позволяет детально, на самом низком уровне управлять разрешениями. Самый гибкий, но и самый трудоемкий для системного администратора механизм.

Role-Based Access Control (RBAC): в этой модели права доступа реализуются в качестве ролей. Ролью называется разрешения на выполнение определенных действий одним или несколькими элементами системы над другими частями системы. По-сути, RBAC является дальнейшим развитием TE.

Multi-Level Security (MLS): многоуровневая модель безопасности, в которой всем объектам системы присваивается определенный уровень доступа. Разрешение или запрет доступа определяется только соотношением этих уровней.

Все процессы и файлы в рамках SELinux имеют контекст безопасности.
Давайте посмотрим на контекст на практике, подробно рассмотрев стартовую страницу веб-сервера Apache, находящуюся по адресу /var/www/html/index.html

Ну а теперь давайте посмотрим на контекст безопасности файла в нашем домашнем каталоге:

5. Устранение проблем SELinux

Рано или поздно происходит ситуация, когда вы сталкиваетесь с ситуацией, когда SELinux запрещает вам доступ к чему-то. Есть несколько основных причин отказа доступа:

— Неправильно маркированный файл.
— Процесс работает в неправильном контексте
— Ошибка в политике. Процесс требует доступ к файлу, который не был учтен при создании политики.
— Попытка вторжения.

5.1 Изменение меток контекста безопасности файлов.

Команда «chcon» позволяет изменяет контекст SELinux для файлов или каталогов точно таким же образом, как команды «chown» и «chmod» позволяют менять владельца файла или права доступа к нему в рамках стандартной системы контроля доступа.


Рассмотрим несколько примеров.
Предположим, что в системе установлен веб-сервер Apache и нам необходимо изменить папку, в которой хранятся сайты (по-умолчанию это /var/www/html/) на, допустим, /html/ и создать в этом каталоге файл index.html.


Не обязательно вручную обрабатывать каждый файл и каждый каталог, можно просто воспользоваться опцией рекурсивного обхода каталога -R:

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

Для того, чтобы SELinux корректно работал даже после изменения меток файловых систем, мы можем использовать как инструменты для управления SELinux c GUI-интерфейсом, так и консольную утилиту semanage:

5.2 Восстановление контекста безопасности SELinux.

Команда «restorecon» позволяет изменить контекст безопасности на тот, который был присвоен по-умолчанию.
Снова используем в качестве примера веб-сервер Apache. Предположим, что пользователь отредактировал в своем домашнем каталоге копию файла index.html и переместил (командой mv) его в каталог, в котором храняться сайты (/var/www/html).

Следует обратить внимание, что при копировании (команда cp) контекст безопасности файла будет совпадать с контекстом каталога назначения, при перемещении же, контекст безопасности будет совпадать с контекстом источника. Конечно, мы могли бы использовать команду chcon для изменения контекста безопасности, но так как перемещенные файлы находятся сейчас в каталоге /var/www/html, мы можем просто восстановить параметры контекста для всех файлов, находящихся в этом каталоге.

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

Если же мы хотим рекурсивно обойти весь каталог и изменить контекст для всех содержащихся в нем файлов, используем следующую команду:

5.3 Изменение меток для всей файловой системы.

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

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

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

5.4 Предоставление доступа к портам.

Нередко мы хотим, чтобы сервисы, подобные Apache, имели возможность прослушивать нестандартные порты и принимать на них входящие соединения. Базовые политики SELinux позволяют получить доступ только к заранее предопределенным портам, которые жестко связаны с тем или иным сервисом. Допустим, мы хотим, чтобы Apache прослушивал 81 порт. В таком случае, нам надо добавить правило при помощи команды semanage:

Полный список портов, к которым SELinux предоставляет доступ, можно просмотреть следующим образом:

В следующей, второй части мануала, мы покажем возможность гибкой настройки политик системы.

Enhanced Security Linux или SELinux - это механизм безопасности, встроенный в ядро ​​Linux, используемый дистрибутивами на основе RHEL.

SELinux добавляет дополнительный уровень безопасности в систему, позволяя администраторам и пользователям контролировать доступ к объектам на основе правил политики.

Правила политики SELinux определяют, как процессы и пользователи взаимодействуют друг с другом, а также как процессы и пользователи взаимодействуют с файлами. Когда нет правила, явно разрешающего доступ к объекту, например, процессу, открывающему файл, доступ запрещается.

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

По умолчанию в CentOS 8 SELinux включен и находится в принудительном режиме Enforcing. Настоятельно рекомендуется поддерживать SELinux в принудительном режиме. Однако иногда это может мешать работе какого-либо приложения, и вам необходимо установить его в разрешающий режим или полностью отключить.

Только пользователь root или пользователь с привилегиями sudo может изменить режим SELinux.


Проверка режима SELinux

Используйте sestatus команду, чтобы проверить состояние и режим, в котором работает SELinux:

Вывод выше показывает, что SELinux включен и установлен в принудительный режим.

Изменение режима SELinux на Permissive

Когда SELinux включен, он может находиться в принудительном. Вы можете временно изменить режим с целевого на разрешающий с помощью следующей команды:

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

Чтобы навсегда установить режим SELinux разрешающим, выполните следующие действия:

Откройте /etc/selinux/config файл и установите SELINUX мод permissive :

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


Отключение SELinux

Вместо отключения SELinux настоятельно рекомендуется изменить режим на разрешающий. Отключайте SELinux только тогда, когда это требуется для правильного функционирования вашего приложения.

Выполните следующие действия, чтобы навсегда отключить SELinux в вашей системе CentOS 8:

Откройте /etc/selinux/config файл и измените SELINUX з начение на disabled :

Сохраните файл и перезагрузите систему:

Когда система загрузится, используйте sestatus команду, чтобы убедиться, что SELinux отключен:

Вывод должен выглядеть так:


Вывод

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

Чтобы узнать больше о мощных функциях SELinux, посетите руководство CentOS SELinux .

Читайте также: