Настройка SELinux в дистрибутиве без специальной поддержки, контексты файлов не могут быть установлены.

Вопрос или проблема

Я пытаюсь настроить SELinux на минимальных дистрибутивах, которые не поддерживают его явно, но предоставляют некоторые пакеты для желающих попробовать его настроить. Я избегаю дистрибутивов на базе systemd, таких как Void, Artix, Devuan и подобных. Это не проблема XY, цель здесь – сделать SELinux рабочим с нуля, скажем, для удовольствия. То, что я описываю ниже, было моим общим опытом на всех.

Эти дистрибутивы предоставляют основные утилиты политики и какую-то версию библиотек selinux, но никаких политик или чего-либо подобного.

На данный момент я добрался до точки, где sestatus сообщает, что selinux включен и применяется. Я загружаюсь с параметрами selinux=1 и enforcing=1, и все в порядке.

Сначала у меня не было политики, поэтому я скачал эталонную политику и смог ее установить.

sestatus показал политику как целевую, и когда я пытался выполнить restorecon -r /, он жаловался, что нет политики в /etc/selinux/targeted, и, если быть честным, ее действительно не было. Эталонная политика устанавливается в /etc/selinux/refpolicy.

Так что я подумал, может быть, просто может быть, выполнение ln -s /etc/selinux/refpolicy /etc/selinux/targeted решит проблему. restorecon не выдал ошибок, но контексты файлов не устанавливались, даже после перезагрузки.

Смотря на некоторую документацию, похоже, что selinux должен автоматически применять политики в зависимости от типа файловой системы, так что моя единственная раздела ext4 не должна вызывать проблем. Расширенные атрибуты включены, так что это тоже не должно быть проблемой.

Используя GNU coreutils, скомпилированные с поддержкой selinux, выполнение ls -laZ показывает знаки вопроса там, где я ожидал увидеть по крайней мере unconfined_t или что-то подобное.

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

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

Когда я пытаюсь использовать semanage, который является программой на Python, я получаю ошибку, что selinux невозможно импортировать. Судя по всему, существуют привязки Python для SELinux, но они не предоставляются основным проектом selinux, а создаются дистрибутивами – у Debian, Gentoo и Fedora, похоже, есть такие пакеты.

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

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

На данный момент я не уверен, что попробовать дальше, особенно поскольку так мало информации возвращается через dmesg и так мало документации доступно онлайн. Опция ядра SELINUX_DEBUG не кажется предоставляющей больше информации через dmesg, и я предполагаю, что она была бы полезна при написании программ на c или c++ каким-то образом.

Что еще я могу попробовать, чтобы установить контексты файлов SELinux на минимальном дистри butиве без поддержки selinux?

Ответ или решение

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

Ситуация

Вы пытаетесь настроить SELinux на минималистских дистрибутивах, таких как Void, Artix и Devuan, которые не предоставляют готовую политику, но содержат некоторые пакеты для экспериментов с SELinux. Вы уже смогли включить SELinux и подтвердить его статус, однако возникли проблемы с применением контекстов файлов.

Проблема

  1. Отсутствие политики под /etc/selinux/targeted: Вы установили политику запоминающей способности, однако она располагается в /etc/selinux/refpolicy, что является источником вашей первой проблемы.

  2. Символическая ссылка не решает проблему: Создание символической ссылки на новейшую политику не решило проблему с отсутствием контекстов, так как restorecon не может применять контексты правильно без инфраструктуры, связанной с конкретной политикой.

  3. Отсутствие прав на изменение контекста: Использование chcon возвращает ошибку "operation not permitted", что может указывать на отсутствие надлежащих прав или функциональности в текущей настройке SELinux.

Решения и рекомендации

  1. Проверьте совместимость с ядром: Убедитесь, что ваш дистрибутив поддерживает SELinux на уровне ядра. Для этого нужно компилировать ядро с соответствующими параметрами. Проверьте наличие скомпилированной поддержки SELinux в вашем ядре с помощью команды:

    grep SELINUX /boot/config-$(uname -r)
  2. Установка и настройка политики: Поскольку вы используете SELinux без конкретной поддержки дистрибутива, может иметь смысл загрузить полный пакет политик, например, от Fedora или из открытых источников, адаптировать его к вашему окружению и установить его. Так, вы получите необходимые файлы под /etc/selinux/targeted.

  3. Создание файлов контекста: Если у вас есть доступ к semanage, используйте его для определения контекстов файлов. Если библиотек Python нет, попробуйте скомпилировать и установить их из исходных кодов.

  4. Проверка атрибутов файловой системы: Убедитесь, что у вас включены расширенные атрибуты файловой системы. Для этого выполните команду:

    sudo mount -o remount,acl /
  5. Проверка SELinux в журнале: Для получения дополнительной информации используйте auditd. Это поможет вам отслеживать события SELinux и разбираться в проблемах. Убедитесь, что аудирование включено:

    setsebool -P alsa_admin_enable 1
  6. Дебаггинг: Убедитесь, что вы используете диагностические параметры ядра, такие как selinux=1 и enforcing=1, но также проверьте параметры для диагностики SELinux, например, установив SELINUX=permissive в конфигурации SELinux.

  7. Пересоздание контекстов файлов вручную: В случае необходимости можно попробовать пересоздать контексты вручную для конкретных директорий и файлов с помощью:

    chcon -R -t <desired_type> /path/to/directory

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...