1. Что такое SELinux и зачем он нужен?
SELinux (Security-Enhanced Linux) — это модуль безопасности, который усиливает традиционную модель управления правами доступа, добавляя концепцию мандатного контроля. Он позволяет администратору настроить более строгие ограничения для пользователей и даже процессов, чтобы минимизировать потенциальный ущерб от возможных атак.
В чём его уникальность?
Представьте, что ваша система — это дом. Традиционные права доступа (rwx для пользователя, группы и остальных) — это как ключи от замков на дверях. Но что, если кто-то взломает дверь? SELinux становится второй линией обороны, усиливая защиту с помощью правил поведения: "Эй, даже если ты внутри, в ванную комнату заходить нельзя!"
Основные задачи SELinux:
- Защита от несанкционированного доступа для процессов и файлов.
- Снижение ущерба от атак, даже если процесс был взломан.
- Принципы "защиты по умолчанию" (всё запрещено, кроме разрешённого).
Режимы работы SELinux
SELinux может работать в трёх режимах:
- Enforcing — активен, применяет политику безопасности и блокирует нарушающие процессы.
- Permissive — только записывает нарушения в журналы, но не блокирует действия.
- Disabled — полностью отключён
SELinux в режиме enforcing напоминает строгого старшего брата для вашей системы. Permissive — это младший брат, который только жалуется, но ничего не делает.
2. Проверка статуса SELinux
Для начала давайте посмотрим, активен ли SELinux и в каком режиме он работает. Для этого есть несколько удобных команд.
Команда getenforce
Эта команда просто скажет вам, какой режим сейчас используется: Enforcing, Permissive, или Disabled.
$ getenforce
Enforcing
Если вывод Disabled, то SELinux отключён — и это значит, что для включения вам придётся немного поработать, но об этом позже.
Команда sestatus
Более полный отчёт о статусе SELinux можно получить с помощью этой команды. Она покажет текущее состояние, активный режим и используемую политику.
$ sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Здесь вы можете увидеть:
- enabled/disabled — включён ли SELinux.
- current mode — активный режим (enforcing, permissive).
- loaded policy name — какая политика загружена. Например, "targeted" означает, что SELinux применяет контроль только к ключевым процессам.
3. Переключение режимов SELinux
Чтобы изменить текущий режим работы SELinux, используется команда setenforce.
Переключение в permissive-режим
Если вы хотите временно "ослабить поводок" SELinux, можно включить permissive-режим.
$ sudo setenforce 0
Теперь SELinux будет только фиксировать нарушения, но не блокировать их. Вы можете проверить новую настройку с помощью команды getenforce:
$ getenforce
Permissive
Переключение обратно в enforcing-режим
Когда вы захотите снова включить строгий контроль, выполните:
$ sudo setenforce 1
И, конечно, проверьте результат:
$ getenforce
Enforcing
Это изменение применяется на лету, но только до следующей перезагрузки системы.
4. Включение SELinux
Если SELinux был отключён, нужно внести изменения в конфигурационный файл. SELinux управляется через файл /etc/selinux/config.
Проверка текущего конфигурационного файла
Давайте посмотрим, что там настроено. Используйте любой текстовый редактор, например nano:
$ sudo nano /etc/selinux/config
Вы увидите что-то вроде:
# This file controls the state of SELinux on the system.
SELINUX=disabled
SELINUXTYPE=targeted
Переключение SELinux в активное состояние
Чтобы включить SELinux, измените строку SELINUX=disabled на SELINUX=enforcing или SELINUX=permissive.
Вот пример файла после изменений:
# This file controls the state of SELinux on the system.
SELINUX=enforcing
SELINUXTYPE=targeted
После редактирования сохраните файл и перезапустите систему:
$ sudo reboot
После перезагрузки вы можете проверить статус с помощью sestatus, чтобы убедиться, что SELinux активен.
5. Разбор контекстов SELinux
Что такое контексты?
Контексты — это метки, которые SELinux использует для управления доступом. У каждого файла, процесса и пользователя есть свой контекст.
Вы можете посмотреть контексты файлов с помощью команды ls -Z. Вот пример:
$ ls -Z /var/www/html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
Что это значит?
- unconfinedu — пользователь SELinux.
- objectr — тип объекта.
- httpdsyscontent_t — тип доступа (в данном случае связано с веб-сервером).
- s0 — уровень безопасности.
Изменение контекста
Если SELinux препятствует работе вашего приложения, возможно, нужно изменить контекст файла. Используйте команду chcon:
$ sudo chcon -t httpd_sys_content_t /var/www/html/index.html
Эта команда временно изменяет тип контекста файла. Однако после перезагрузки изменения могут пропасть, поэтому для постоянных настроек лучше модифицировать политику SELinux (об этом позже).
6. Пример работы с SELinux
Давайте разберём пример. Вы администратор сервера, который хочет развернуть веб-сервер, но SELinux блокирует доступ к файлам в каталоге /var/www/html.
Шаги:
Проверьте статус SELinux:
$ sestatusУбедитесь, что SELinux включен и работает в enforcing-режиме.
Посмотрите контексты файлов:
$ ls -Z /var/www/htmlЕсли контекст неправильный, измените его:
$ sudo chcon -t httpd_sys_content_t /var/www/html/*Проверьте работу веб-сервера.
7. Типичные ошибки и проблемы
SELinux отключён, и вы не замечаете этого. Всегда проверяйте статус с помощью
sestatus. Многие администраторы забывают включить SELinux после установки системы."Почему мой сервис не работает?" SELinux блокирует доступ. Используйте
audit.logдля анализа:$ sudo cat /var/log/audit/audit.log | grep deniedНе сохраняются изменения контекста. Используйте не
chcon, а команды для постоянных изменений, такие какsemanage.
Изучение SELinux похоже на подготовку к марафону: поначалу может быть сложно, но со временем вы поймёте, как этот инструмент может значительно повысить безопасность системы. Используйте эти знания, чтобы быть тем админом, которого не пробьёт даже самый продвинутый хакер.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ