Вопрос или проблема
Я пытаюсь настроить 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 и подтвердить его статус, однако возникли проблемы с применением контекстов файлов.
Проблема
-
Отсутствие политики под
/etc/selinux/targeted
: Вы установили политику запоминающей способности, однако она располагается в/etc/selinux/refpolicy
, что является источником вашей первой проблемы. -
Символическая ссылка не решает проблему: Создание символической ссылки на новейшую политику не решило проблему с отсутствием контекстов, так как
restorecon
не может применять контексты правильно без инфраструктуры, связанной с конкретной политикой. -
Отсутствие прав на изменение контекста: Использование
chcon
возвращает ошибку "operation not permitted", что может указывать на отсутствие надлежащих прав или функциональности в текущей настройке SELinux.
Решения и рекомендации
-
Проверьте совместимость с ядром: Убедитесь, что ваш дистрибутив поддерживает SELinux на уровне ядра. Для этого нужно компилировать ядро с соответствующими параметрами. Проверьте наличие скомпилированной поддержки SELinux в вашем ядре с помощью команды:
grep SELINUX /boot/config-$(uname -r)
-
Установка и настройка политики: Поскольку вы используете SELinux без конкретной поддержки дистрибутива, может иметь смысл загрузить полный пакет политик, например, от Fedora или из открытых источников, адаптировать его к вашему окружению и установить его. Так, вы получите необходимые файлы под
/etc/selinux/targeted
. -
Создание файлов контекста: Если у вас есть доступ к
semanage
, используйте его для определения контекстов файлов. Если библиотек Python нет, попробуйте скомпилировать и установить их из исходных кодов. -
Проверка атрибутов файловой системы: Убедитесь, что у вас включены расширенные атрибуты файловой системы. Для этого выполните команду:
sudo mount -o remount,acl /
-
Проверка SELinux в журнале: Для получения дополнительной информации используйте
auditd
. Это поможет вам отслеживать события SELinux и разбираться в проблемах. Убедитесь, что аудирование включено:setsebool -P alsa_admin_enable 1
-
Дебаггинг: Убедитесь, что вы используете диагностические параметры ядра, такие как
selinux=1
иenforcing=1
, но также проверьте параметры для диагностики SELinux, например, установивSELINUX=permissive
в конфигурации SELinux. -
Пересоздание контекстов файлов вручную: В случае необходимости можно попробовать пересоздать контексты вручную для конкретных директорий и файлов с помощью:
chcon -R -t <desired_type> /path/to/directory
Заключение
Ваш случай показывает, как сложно настраивать SELinux без глубокой интеграции в дистрибутив, но с правильным подходом и некоторыми доработками, вы сможете решить эти проблемы. Обратите внимание на правильность ваших настроек и наличие необходимых библиотек, а также проконсультируйтесь с документацией SELinux и сопровождающими ресурсами для получения информации о политике и контекстах. Удачи в ваших экспериментах с SELinux!