Red Hat System Administration II 8.2

Глава 5. Управление SELinux

Аннотация

Цель Защита и управление параметрами безопасности сервера с помощью SELinux
Задачи
  • Описание способа защиты ресурсов с помощью SELinux и применения принудительного режима

  • Контроль взаимодействия процессов с файлом путем настройки контекста SELinux для этого файла

  • Настройка переключателей SELinux, разрешающих изменение политики среды выполнения для различных сценариев доступа

  • Изучение сообщений log-файла SELinux и устранение проблем, связанных с отказами SELinux AVC

Разделы
  • Изменение принудительного режима SELinux (и упражнение)

  • Управление контекстом файлов SELinux (и упражнение)

  • Настройка политики SELinux с помощью переключателей (и упражнение)

  • Изучение и устранение проблем SELinux (и упражнение)

Лабораторная работа

Управление SELinux

Изменение принудительного режима SELinux

Задачи

После завершения этого раздела вы сможете:

  • объяснить, как SELinux защищает ресурсы;

  • изменить текущий режим SELinux в системе;

  • задать режим SELinux по умолчанию.

Как SELinux защищает ресурсы

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

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

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

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

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

Зачем использовать SELinux?

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

В SELinux есть три режима.

  • Принудительный (Enforcing): SELinux принудительно применяет правила контроля доступа. Обычно в этом режиме работают компьютеры.

  • Разрешительный (Permissive): подсистема SELinux активна, но вместо принудительного применения правил контроля доступа она записывает предупреждения для нарушенных правил. Этот режим используется в основном для тестирования и устранения проблем.

  • Отключено (Disabled): подсистема SELinux полностью отключена, нарушения SELinux игнорируются и даже не регистрируются. Настоятельно рекомендуется не использовать этот режим!

Основные концепции безопасности SELinux

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

Чтобы разрешить анонимный доступ к веб-серверу, необходимо открыть порты брандмауэра. Однако это даст злоумышленникам возможность скомпрометировать систему через уязвимости. Если им удастся скомпрометировать процесс веб-сервера, они получат его разрешения, в частности разрешения пользователя apache и группы apache. У этого пользователя и этой группы есть разрешение на чтение корневой папки документов /var/www/html. У них также есть доступ к /tmp, /var/tmp и любым другим файлам и каталогам, открытым для записи.

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

Контекст SELinux состоит из нескольких полей: пользователь, роль, тип и чувствительность. Целевая политика, то есть политика по умолчанию, включенная в Red Hat Enterprise Linux, использует для своих правил третье поле — тип. Имена типов обычно заканчиваются на _t.

Рисунок 5.1: Контекст файла SELinux

Имя типа для веб-сервера — httpd_t. Имя типа для файлов и каталогов, расположенных в /var/www/html, — httpd_sys_content_t. Контекст для файлов и каталогов, расположенных в /tmp и /var/tmp, — tmp_t. Имя типа для портов веб-сервера — http_port_t.

Имя типа для Apache ― httpd_t. Существует правило политики, разрешающее Apache доступ к файлам и каталогам с типом httpd_sys_content_t. По умолчанию файлы в /var/www/html и других каталогах веб-сервера имеют тип httpd_sys_content_t. Разрешающее правило для файлов, расположенных в /tmp и /var/tmp, в политике отсутствует, поэтому доступ не разрешен. Если подсистема SELinux работает, злоумышленник, взломавший процесс веб-сервера, не сможет получить доступ к каталогу /tmp.

Сервер MariaDB имеет тип mysqld_t. По умолчанию файлы в каталоге /data/mysql имеют тип mysqld_db_t. Этот тип предоставляет MariaDB доступ к этим файлам, но запрещает доступ к другим службам, таким как веб-служба Apache.

Рисунок 5.2: Доступ при использовании SELinux

Многие команды, работающие с файлами, принимают опцию -Z, которая позволяет отобразить или задать контекст SELinux. Например, использовать опцию -Z для отображения или установки контекста SELinux можно в командах ps, ls, cp и mkdir.

[root@host ~]# ps axZ
LABEL                             PID TTY      STAT   TIME COMMAND
system_u:system_r:init_t:s0         1 ?        Ss     0:09 /usr/lib/systemd/...
system_u:system_r:kernel_t:s0       2 ?        S      0:00 [kthreadd]
system_u:system_r:kernel_t:s0       3 ?        S      0:00 [ksoftirqd/0]
...output omitted...
[root@host ~]# systemctl start httpd
[root@host ~]# ps -ZC httpd
LABEL                             PID TTY          TIME CMD
system_u:system_r:httpd_t:s0     1608 ?        00:00:05 httpd
system_u:system_r:httpd_t:s0     1609 ?        00:00:00 httpd
...output omitted...
[root@host ~]# ls -Z /home
drwx------. root    root    system_u:object_r:lost_found_t:s0 lost+found
drwx------. student student unconfined_u:object_r:user_home_dir_t:s0 student
drwx------. visitor visitor unconfined_u:object_r:user_home_dir_t:s0 visitor
[root@host ~]# ls -Z /var/www
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons

Изменение текущего режима SELinux

Подсистема SELinux предоставляет утилиты для отображения и изменения режимов. Определить текущий режим SELinux можно с помощью команды getenforce. Задать другой режим SELinux можно с помощью команды setenforce.

[user@host ~]# getenforce
Enforcing
[user@host ~]# setenforce
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]
[user@host ~]# setenforce 0
[user@host ~]# getenforce
Permissive
[user@host ~]# setenforce Enforcing
[user@host ~]# getenforce
Enforcing

Задать режим SELinux также можно во время начальной загрузки системы, передав соответствующий параметр ядру. Аргумент ядра enforcing=0 загружает систему в разрешающем режиме; значение enforcing=1 устанавливает принудительный режим. Кроме того, можно полностью отключить SELinux, передав ядру параметр selinux=0. Значение selinux=1 включает SELinux.

Установка режима SELinux по умолчанию

С помощью файла /etc/selinux/config можно задать постоянную конфигурацию SELinux. В приведенном ниже примере (конфигурация по умолчанию) файл конфигурации переводит SELinux в режим enforcing. В комментариях также показаны другие допустимые значения: permissive и disabled.

# 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 - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes
#               are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Система считывает этот файл во время загрузки и настраивает SELinux соответствующим образом. Аргументы ядра (selinux=0|1 и enforcing=0|1) переопределяют эту конфигурацию.

Ссылки

Man-страницы getenforce(8), setenforce(8) и selinux_config(5)