Аннотация
Описание способа защиты ресурсов с помощью SELinux и применения принудительного режима
Контроль взаимодействия процессов с файлом путем настройки контекста SELinux для этого файла
Настройка переключателей SELinux, разрешающих изменение политики среды выполнения для различных сценариев доступа
Изучение сообщений log-файла SELinux и устранение проблем, связанных с отказами SELinux AVC
Изменение принудительного режима SELinux (и упражнение)
Управление контекстом файлов SELinux (и упражнение)
Настройка политики SELinux с помощью переключателей (и упражнение)
Изучение и устранение проблем SELinux (и упражнение)
Управление SELinux
После завершения этого раздела вы сможете:
объяснить, как SELinux защищает ресурсы;
изменить текущий режим SELinux в системе;
задать режим SELinux по умолчанию.
SELinux — это важная функция безопасности Linux. Она обеспечивает детализированный контроль доступа к файлам и другим ресурсам. Процессам разрешен доступ только к ресурсам, указанным в соответствующей политике или параметрах переключателей SELinux.
Файловые разрешения определяют, у каких пользователей или групп пользователей есть доступ к тем или иным файлам. Однако пользователь, которому предоставлено разрешение на чтение или запись файла, может использовать этот файл как угодно, что чревато проблемами.
Например, если структурированный файл данных предназначен для редактирования только в соответствующей программе, при наличии разрешения на запись он может быть открыт и изменен в других редакторах, что может привести к его повреждению.
Файловые разрешения не могут помешать ненадлежащему использованию файлов. Они предназначены для управления не тем, как используется файл, а тем, кому разрешено читать, редактировать или запускать файл.
SELinux состоит из наборов политик, определяемых разработчиками приложений. Эти политики точно объявляют, какие именно действия и способы доступа возможны и разрешены для каждого двоичного исполняемого файла, файла конфигурации и файла данных, которые используются приложением. Такой подход называется целевой политикой (targeted), так как одна политика регулирует действия одного приложения. Политики объявляют стандартные метки, которые назначаются отдельным программам, файлам и сетевым портам.
Не все проблемы безопасности можно предсказать. SELinux применяет набор правил доступа, предотвращающих влияние уязвимости в одном приложении на другие приложения и базовую систему. Подсистема SELinux обеспечивает дополнительный уровень безопасности, но новым пользователям может быть сложно в ней разобраться. Изучение SELinux может занять некоторое время, но зато вы сможете быть уверены, что уязвимость в одной части системы не распространится на другие части. Если SELinux плохо работает с определенной подсистемой, вы можете отключить принудительный режим для этой конкретной службы, пока не найдете решение проблемы.
В SELinux есть три режима.
Принудительный (Enforcing): SELinux принудительно применяет правила контроля доступа. Обычно в этом режиме работают компьютеры.
Разрешительный (Permissive): подсистема SELinux активна, но вместо принудительного применения правил контроля доступа она записывает предупреждения для нарушенных правил. Этот режим используется в основном для тестирования и устранения проблем.
Отключено (Disabled): подсистема SELinux полностью отключена, нарушения SELinux игнорируются и даже не регистрируются. Настоятельно рекомендуется не использовать этот режим!
SELinux (Security Enhanced Linux) — это дополнительный уровень безопасности системы. Основная цель SELinux — защитить данные пользователя от скомпрометированных системных служб. Большинство администраторов Linux знакомы со стандартной моделью безопасности на основе разрешений пользователей, групп и остальных. Такую модель называют дискретным управлением доступом. SELinux предоставляет дополнительный уровень безопасности на основе объектов, который контролируется более сложными правилами. Такую модель называют мандатным управлением доступом.
Чтобы разрешить анонимный доступ к веб-серверу, необходимо открыть порты брандмауэра. Однако это даст злоумышленникам возможность скомпрометировать систему через уязвимости. Если им удастся скомпрометировать процесс веб-сервера, они получат его разрешения, в частности разрешения пользователя apache и группы apache. У этого пользователя и этой группы есть разрешение на чтение корневой папки документов /var/www/html. У них также есть доступ к /tmp, /var/tmp и любым другим файлам и каталогам, открытым для записи.
apache
/var/www/html
/tmp
/var/tmp
SELinux — это набор правил безопасности, которые определяют, какие процессы могут получить доступ к тем или иным файлам, каталогам и портам. У каждого файла, процесса, каталога и порта есть специальная метка безопасности ― контекст SELinux. Контекст — это имя, используемое политикой SELinux для определения того, может ли процесс получить доступ к файлу, каталогу или порту. По умолчанию политика не разрешает взаимодействовать с объектом, если явное правило не предоставляет к нему доступ. Если разрешающего правила нет, доступ не предоставляется.
Контекст SELinux состоит из нескольких полей: пользователь, роль, тип и чувствительность. Целевая политика, то есть политика по умолчанию, включенная в Red Hat Enterprise Linux, использует для своих правил третье поле — тип. Имена типов обычно заканчиваются на _t.
пользователь
роль
тип
чувствительность
_t
Имя типа для веб-сервера — httpd_t. Имя типа для файлов и каталогов, расположенных в /var/www/html, — httpd_sys_content_t. Контекст для файлов и каталогов, расположенных в /tmp и /var/tmp, — tmp_t. Имя типа для портов веб-сервера — http_port_t.
httpd_t
httpd_sys_content_t
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.
MariaDB
mysqld_t
/data/mysql
mysqld_db_t
Многие команды, работающие с файлами, принимают опцию -Z, которая позволяет отобразить или задать контекст SELinux. Например, использовать опцию -Z для отображения или установки контекста SELinux можно в командах ps, ls, cp и mkdir.
-Z
[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
[root@host ~]#
ps axZ
systemctl start httpd
ps -ZC httpd
ls -Z /home
ls -Z /var/www
Подсистема 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
[user@host ~]#
getenforce
setenforce
setenforce 0
setenforce Enforcing
Задать режим SELinux также можно во время начальной загрузки системы, передав соответствующий параметр ядру. Аргумент ядра enforcing=0 загружает систему в разрешающем режиме; значение enforcing=1 устанавливает принудительный режим. Кроме того, можно полностью отключить SELinux, передав ядру параметр selinux=0. Значение selinux=1 включает SELinux.
С помощью файла /etc/selinux/config можно задать постоянную конфигурацию SELinux. В приведенном ниже примере (конфигурация по умолчанию) файл конфигурации переводит SELinux в режим enforcing. В комментариях также показаны другие допустимые значения: permissive и disabled.
/etc/selinux/config
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=enforcing
SELINUXTYPE=targeted
Система считывает этот файл во время загрузки и настраивает SELinux соответствующим образом. Аргументы ядра (selinux=0|1 и enforcing=0|1) переопределяют эту конфигурацию.
selinux=0|1
enforcing=0|1
Man-страницы getenforce(8), setenforce(8) и selinux_config(5)