Команда chcon: смена контекста безопасности SELinux

Введение в работу с chcon

Утилита chcon служит ключевым инструментом системного администратора при необходимости оперативной корректировки контекста безопасности (Security Context) в среде SELinux. В данном руководстве мы подробно разберем четыре практических сценария использования команды, а также рассмотрим критически важные нюансы, связанные с сохранением настроек после перезагрузки ОС и выполнением процедур восстановления.

Просмотр меток SELinux и базовый синтаксис chcon

Для безопасного проведения тестов подготовим изолированное рабочее пространство, выполнив команду создания каталога и перехода в него: mkdir -p /tmp/chcon_lab && cd /tmp/chcon_lab.

Создание рабочего каталога и переход в него

Далее инициализируем тестовый файл для дальнейших экспериментов с атрибутами безопасности с помощью команды touch web_sample.html.

Создание тестового документа web_sample.html

Текущие параметры контекста безопасности проверяются вызовом ls -Z web_sample.html.
Символ ? в выводе терминала свидетельствует о том, что механизм SELinux в текущей системе отключен (Disabled) либо объекту не присвоена соответствующая метка.
Общий формат вызова утилиты имеет следующий вид: chcon [опции] контекст имя_файла.
⚙️ [Основные ключи утилиты]

-t : задает тип контекста безопасности (Type) для целевого объекта.
-u : переопределяет идентификатор пользователя SELinux (User).
-r : корректирует назначенную роль (Role).
-R : выполняет рекурсивное применение параметров ко всем вложенным подкаталогам и файлам.
--reference : копирует параметры контекста из указанного эталонного файла.
-v : выводит подробный отчет о каждом измененном объекте в консоль.

Проверка SELinux-контекста файла web_sample.html

Практическое применение флага -t для смены типа

Создадим рабочий веб-документ и проверим структуру каталога с помощью команды mkdir -p /tmp/chcon_lab && touch /tmp/chcon_lab/index.html.

Подготовка веб-документа index.html

Чтобы веб-сервер мог беспрепятственно отдавать файл клиентам, назначим ему соответствующий тип политики SELinux через chcon -t httpd_sys_content_t /tmp/chcon_lab/index.html.

Назначение типа httpd_sys_content_t для index.html

Убедимся в успешности внесенных модификаций, запустив проверку: ls -Z /tmp/chcon_lab/index.html.
Отображение знака ? указывает на то, что режим SELinux деактивирован на системном уровне, из-за чего атрибуты контекста не регистрируются ядром.

Просмотр контекста безопасности index.html

Дублирование контекста через –reference и рекурсивная обработка (-R)

Сформируем вложенную файловую структуру с файлом стилей для тестирования групповых операций с помощью команды mkdir -p /tmp/chcon_lab/public_html && touch /tmp/chcon_lab/public_html/style.css.

Создание вложенного каталога public_html и файла style.css

Также создадим целевой файл страницы, на который будем переносить параметры, вызвав команду touch /tmp/chcon_lab/target_page.html.

Создание файла target_page.html

Выполним точное копирование контекста безопасности с эталона index.html на новый документ посредством chcon --reference=/tmp/chcon_lab/index.html /tmp/chcon_lab/target_page.html.
Использование параметра --reference исключает ошибки ручного ввода сложных строк контекста, позволяя безопасно наследовать рабочие настройки доверенных файлов.

Применение параметров образца через –reference

Для пакетного обновления прав доступа ко всей ветке файлов выполним chcon -R -t httpd_sys_content_t /tmp/chcon_lab/public_html.
Ключ -R запускает рекурсивный обход, единообразно переопределяя тип httpd_sys_content_t для каталога и всего его содержимого.

Рекурсивная модификация контекста каталога public_html

Проконтролируем результирующие атрибуты вложенных элементов с помощью подробного листинга: ls -laZ /tmp/chcon_lab/public_html.
Наличие вопросительного знака ? по-прежнему напоминает о выключенном модуле SELinux в текущей операционной среде.

Инспекция меток безопасности в каталоге public_html

Ограничения chcon и риски потери настроек

Для демонстрации работы механизма сброса контекста установим системный набор утилит SELinux, выполнив команду apt-get update -qq && apt-get install -y policycoreutils.

Установка пакета policycoreutils

Подготовим отдельный тестовый файл для проверки поведения системы при сбросе меток с помощью команды touch /tmp/chcon_lab/warning_test.txt.

Создание проверочного файла warning_test.txt

Назначим объекту временный тип контекста через chcon -t tmp_t /tmp/chcon_lab/warning_test.txt.
Принципиально важно помнить: любые изменения, внесенные через chcon, являются временными и не фиксируются в глобальной базе политик безопасности.

Временное изменение типа на tmp_t

Выполним проверку состояния файла стандартной командой ls -Z /tmp/chcon_lab/warning_test.txt.
Символ ? в консоли подтверждает неактивный статус подсистемы SELinux.

Проверка состояния warning_test.txt

Попробуем вернуть контекст к значениям по умолчанию, заданным системной политикой, с помощью restorecon -v /tmp/chcon_lab/warning_test.txt.
Поскольку chcon лишь перезаписывает расширенные атрибуты inode без регистрации в базе данных, выполнение restorecon или плановая переразметка файловой системы (autorelabel) мгновенно откатят значения к исходным; для долговременной фиксации правил следует применять инструмент semanage fcontext.

Восстановление контекста командой restorecon

Зафиксируем итоговое состояние объекта после отката с помощью ls -Z /tmp/chcon_lab/warning_test.txt.
Появление отметки ? свидетельствует о том, что функции SELinux в данной системе по-прежнему отключены.

Контроль состояния файла после restorecon

Мы подробно рассмотрели алгоритмы работы с утилитой chcon для оперативной корректировки контекста SELinux, а также разобрали потенциальные риски ее применения на серверах.
Четкое понимание различий между временным назначением меток и постоянными системными правилами позволит вам гибко и безопасно управлять правами доступа в Linux.