Какие задачи решает SELinux
- Принудительный контроль доступа: модель «всё запрещено, кроме явно разрешённого» для процессов, файлов, сокетов и портов. [parallels.nsu](http://parallels.nsu.ru/~fat/Linuxppt/Selinux.pdf)
- Снижение ущерба от взлома: даже если httpd или sshd взломан, его домен (httpd_t, sshd_t и т.п.) имеет право работать только с ограниченным набором типов ресурсов. [statuser](https://statuser.cloud/blog/chto-takoe-selinux-i-kak-pravilno-nastroit-konteksty-bezopasnosti)
- Разделение обязанностей и ролей: отдельные роли и домены для служб, админов, пользователей, контейнеров. [ru.wikipedia](https://ru.wikipedia.org/wiki/SELinux)
- Централизуемая политика: админ меняет политику (policy modules, booleans), а не лезет в код приложений. [habr](https://habr.com/ru/companies/kingservers/articles/209644/)
- Аудит безопасности: все нарушения политики логируются в auditd, есть инструменты анализа (ausearch, sealert). [parallels.nsu](http://parallels.nsu.ru/~fat/Linuxppt/Selinux.pdf)
Простой пример: httpd_t может читать только файлы типа httpd_sys_content_t, обычно это /var/www/html, и не может по ошибке или при взломе прочитать, скажем, /etc/shadow. [statuser](https://statuser.cloud/blog/chto-takoe-selinux-i-kak-pravilno-nastroit-konteksty-bezopasnosti)
Базовая модель реализации
- MAC поверх DAC: сначала проходят обычные Unix‑проверки (uid/gid/mode), потом дополнительная проверка по политике SELinux. [ru.wikipedia](https://ru.wikipedia.org/wiki/SELinux)
- Контексты безопасности: каждый объект и процесс имеет контекст вида
user:role:type:level, напримерsystem_u:object_r:httpd_sys_content_t:s0. [hertzog.pages.debian](https://hertzog.pages.debian.net/debian-handbook/ru-RU/sect.selinux.html) - Типо‑ориентированный контроль (TE): основное решение «можно/нельзя» принимается по связке домен процесса (type процесса) и type объекта. [habr](https://habr.com/ru/companies/kingservers/articles/209644/)
- Политики: набор правил allow/deny, переходов типов (type transition), атрибутов и booleans, компилируемый в бинарный модуль для ядра. [habr](https://habr.com/ru/companies/otus/articles/459598/)
- Режимы работы:
- enforcing — политика применяется, запрещённые действия блокируются;
- permissive — только логируются нарушения;
- disabled — механизм выключен. [ya](https://ya.ru/neurum/c/tehnologii/q/chto_takoe_selinux_i_kak_ego_nastroit_v_linux_436d86cb)
Ядро при каждом системном вызове, затрагивающем защищаемый объект (open, bind, connect и т.д.), спрашивает SELinux‑LSM, который сверяется с активной политикой. [statuser](https://statuser.cloud/blog/chto-takoe-selinux-i-kak-pravilno-nastroit-konteksty-bezopasnosti)
Практические элементы реализации
- Управляющие команды и статус:
- getenforce / setenforce — текущий режим;
- sestatus — подробный статус и активная политика. [redos.red-soft](https://redos.red-soft.ru/base/redos-7_3/7_3-security/7_3-selinux/7_3-selinux_doc/)
- Работа с контекстами:
- ls -Z, ps -Z — просмотр;
- chcon — разовое изменение контекста;
- restorecon — восстановление контекста по политике;
- semanage fcontext — прописать правило для путей, чтобы тип назначался автоматически. [unixtutorial](https://www.unixtutorial.ru/reference/selinux)
- Настройка политик:
- seboolean / semanage boolean -l — включение/выключение дополнительных возможностей (например, httpd_enable_homedirs);
- создание собственных модулей политики для нестандартных сервисов. [habr](https://habr.com/ru/companies/otus/articles/484896/)
- Диагностика:
- auditd: /var/log/audit/audit.log;
- ausearch -m AVC* и dmesg с фильтром type=1300/1400;
- sealert для человекочитаемых подсказок по устранению проблем. [parallels.nsu](http://parallels.nsu.ru/~fat/Linuxppt/Selinux.pdf)
Типичная админская рутина: перевести систему или конкретный хост в permissive, воспроизвести ошибку, собрать AVC‑логи, сгенерировать/доработать модуль политики, включить его и вернуть enforcing. [habr](https://habr.com/ru/companies/otus/articles/484896/)
Типичный use‑case: веб‑сервер
- Файлам под DocumentRoot ставится тип httpd_sys_content_t, CGI/скриптам — httpd_sys_script_exec_t и т.п. [redos.red-soft](https://redos.red-soft.ru/base/redos-7_3/7_3-security/7_3-selinux/7_3-selinux_doc/)
- Процесс httpd_t может:
- читать httpd_sys_content_t;
- выполнять httpd_sys_script_exec_t;
- не может читать файлы других типов, даже если Unix‑права это позволяют. [parallels.nsu](http://parallels.nsu.ru/~fat/Linuxppt/Selinux.pdf)
- Доступ к homedirs, network‑исходящим соединениям, доступ к базе и т.п. регулируется через соответствующие booleans и правила. [habr](https://habr.com/ru/companies/kingservers/articles/209644/)
В результате компрометация PHP‑приложения с правами httpd_t не даёт нападающему полный root на хост, а только доступ к строго ограниченному набору объектов. [statuser](https://statuser.cloud/blog/chto-takoe-selinux-i-kak-pravilno-nastroit-konteksty-bezopasnosti)
***
[file-name 000374_2026-06-12_14-50-51.txt]