Как защитить серверы Linux с помощью SELinux?

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

icon strelka icons icons

узнай больше на курсе

Онлайн-курс по Linux
Освой терминал, службы и администрирование Linux: 2 месяца онлайн, практика на своём сервере и сертификат. Открой программу.
Подробнее о курсе
Полный курс по сетевым технологиям
Разберись в TCP/IP, коммутации и маршрутизации с нуля: 2 месяца онлайн, лабы и сертификат. Открой программу и выбери свой тариф.
Подробнее о курсе
DevOps-инженер с нуля
Освой Linux, Docker, Kubernetes и CI/CD и собери свой пайплайн: 4 месяца онлайн, практика и сертификат. Смотри программу и тарифы.
Подробнее о курсе

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

Что такое SELinux?

SELinux был разработан АНБ (Агентством национальной безопасности). Цель его создания – выполнение правительственных задач в области обеспечения безопасности.

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

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

Как работать с SELinux?

SELinux по умолчанию является частью большинства дистрибутивов Linux. В этой статье я буду работать с Fedora.

Только учтите, что для того, чтобы работать с SELinux, вам потребуются права доступа привилегированного (root) или суперпользователя (sudo).

Файл конфигурации SELinux располагается здесь: /etc/sysconfig/selinux. Давайте взглянем на его содержимое:

Режимы SELinux

Файл конфигурации SELinux

Внутри файла конфигурации вы можете выбрать любой из режимов:

  1. Enforced – этот режим включен по умолчанию, фильтры завязаны на определенных политиках.
  2. Permissive – политики не используются, но все попытки получения доступа записываются в лог-файлы. Этот режим полезен при устранении неисправностей.
  3. Disabled – SELinux полностью отключен. Лучше всего такой режим не выбирать, так как ваша система будет под угрозой. Кроме того, возврат к режиму Enforced может создать некоторые несоответствия.

Вы можете проверить текущий режим SELinux с помощью следующих команд:

  1. getenforce
  2. sestatus

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

  1. sudo setenforce 0 – устанавливает режим Permissive для текущего сеанса
  2. sudo setenforce 1 – устанавливает режим Enforced для текущего сеанса

Политики SELinux

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

Политики SELinux

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

Как управлять политиками SELinux с помощью логических переключателей

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

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

Для начала выведем список всех переключателей, характерных для httpd: getsebool -a | grep httpd.

Здесь флаг -a перечисляет все логические переключатели.

image-80

Список логических переключателей

Теперь давайте выберем и изменим переключатель, который мы выделили желтым цветом в коде выше:

getsebool httpd_can_connect_ftp

Установим значение на «разрешено» (on).

setsebool -P httpd_can_connect_ftp 1

Вот что происходит в команде выше:

  • флаг -P нужен для того, что изменение сохранилось даже после перезагрузки
  • 1 включает логический переключатель

Теперь, когда вы запросите список снова, значение будет установлено на «разрешено».

image-81

Значение логического переключателя – «on»

Структура SELinux

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

Устранение неисправностей и журналы SELinux

SELinux создает очень подробные журналы для каждой попытки получения доступа. Журналы можно найти здесь: /var/log/audit.

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

Как включать и отключать SELinux?

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

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

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

  1. Измените режим с Enforced на Permissive.
  2. Измените режим с Permissive на Disabled.

Заключение

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

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

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
icon strelka icons icons

узнай больше на курсе

Онлайн-курс по Linux
Освой терминал, службы и администрирование Linux: 2 месяца онлайн, практика на своём сервере и сертификат. Открой программу.
Подробнее о курсе
Полный курс по сетевым технологиям
Разберись в TCP/IP, коммутации и маршрутизации с нуля: 2 месяца онлайн, лабы и сертификат. Открой программу и выбери свой тариф.
Подробнее о курсе
DevOps-инженер с нуля
Освой Linux, Docker, Kubernetes и CI/CD и собери свой пайплайн: 4 месяца онлайн, практика и сертификат. Смотри программу и тарифы.
Подробнее о курсе
Python программист с нуля
Напиши первый код и собери проекты на Python: 4 месяца онлайн в своём темпе, практика и сертификат. Смотри программу и тарифы.
Подробнее о курсе
Онлайн-курс по кибербезопасности
Научись защищать сети и данные и разбирать атаки: 2 месяца онлайн, практика в лабах и сертификат. Открой программу и тарифы.
Подробнее о курсе
Онлайн-курс по сетевой безопасности
Научись защищать сеть: firewall, VPN, сегментация и мониторинг. 2 месяца онлайн, практика и сертификат. Смотри программу курса.
Подробнее о курсе
Еще по теме:
Разбираем 7 ключевых принципов Linux, которые помогают новичкам перестать бороться с системой и начать понимать, как она на самом деле работает.
Узнайте про 5 полезных Linux - команд: tldr, timeout, ncdu, fd и trash, которые упрощают жизнь при работе в CLI
Что позволяет называть один API как REST API, а другой нет? Сейчас попробуем разложить все по полочкам, чтобы ты на собесе жидко не споткнулся о такую, казалось бы, простую тему.
Узнайте, как работают сетевые порты в Linux, какие бывают типы портов, и как управлять ими с помощью команд netstat, ss, ufw и iptables
Рассказываем, как появился nginx, его отличия от apache, для чего нужен nginx и какие у него преимущества
ОСЕННИЕ СКИДКИ
30%
40%
50%
До конца акции: 30 дней 24 : 59 : 59