Как предотвратить блокировку пользовательской службы systemd при загрузке SElinux?

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

SElinux предотвращает запуск моего пользовательского сервиса через systemd при загрузке.

MESSAGE=SELinux предотвращает доступ systemd к файлу custom.service

перед перезагрузкой

[root@box opt]# systemctl daemon-reload
[root@box opt]# systemctl enable --now custom
[root@box opt]# systemctl status custom.service
● custom.service - foo
   Loaded: загружен (/opt/foo/bar/systemd/custom.service; включено; настройка поставщика: отключена)
   Active: активен (работает) с Пт 2022-10-07 12:18:27 EDT; 1мин 28с назад
...
...

после перезагрузки

[root@box opt]# systemctl status custom.service
Единица custom.service не найдена.

Я отключил selinux и перезагрузил, но это не помогло. Затем я изменил пользователя selinux, роль и тип файла сервиса и снова попробовал перезагрузиться.

[root@box opt]# chcon -R -u unconfined_u -r object_r -t systemd_unit_file_t foo/bar/systemd/

Все еще ничего… Затем я заметил, что символическая ссылка, которую я поместил в /etc/systemd/system, показывала ? для secontext. То же самое происходит, если я cp файл сервиса в директорию /etc/systemd/system.

[root@box opt]# ls -Z /etc/systemd/system/custom.service
? /etc/systemd/system/custom.service

Кто-нибудь знает, что нужно сделать, чтобы это исправить?

Кратко – SElinux предотвращает чтение systemd включенной пользовательской единицы systemd, несмотря на то что selinux отключен.

Нашел решение.

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

Теперь я отключил selinux и перезагрузил, и все, похоже, работает. Все еще не совсем понимаю, почему secontext имеет значение, если selinux отключен.

# ls -Z теперь показывает правильный контекст
[root@box ~]$ ls -Z /etc/systemd/system/custom.service
system_u:object_r:systemd_unit_file_t:s0 /etc/systemd/system/custom.service

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

Как предотвратить блокировку пользовательского сервиса systemd в SELinux при загрузке

SELinux (Security-Enhanced Linux) – мощный механизм безопасности, который контролирует доступ к ресурсам на уровне ядра. Если вы сталкиваетесь с проблемой, когда пользовательский сервис systemd блокируется при запуске, важно понять, как правильно настроить конфигурацию SELinux для корректной работы вашего сервиса.

Шаги для решения проблемы с SELinux

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

    getenforce

    Значение "Enforcing" означает, что SELinux активно применяет правила, что может блокировать ваши сервисы.

  2. Перевод SELinux в режим Permissive:
    Замечания от SELinux будут заполнять журнал, но не блокировать доступ:

    setenforce 0

    Это временно отключит строгие меры безопасности, позволяя вам диагностировать проблему.

  3. Используйте команду audit2allow:
    Если ваш сервис по-прежнему блокируется, проверьте логи SELinux:

    ausearch -m avc -ts recent

    Создайте новый модуль политики:

    ausearch -c 'systemd' --raw | audit2allow -M mypol
    semodule -i mypol.pp
  4. Изменение контекста SELinux для файла службы:
    Убедитесь, что контекст файла службы правильный:

    chcon -t systemd_unit_file_t /etc/systemd/system/custom.service

    Проверьте контекст:

    ls -Z /etc/systemd/system/custom.service
  5. Убедитесь, что служба включена:
    Активируйте вашу службу:

    systemctl daemon-reload
    systemctl enable --now custom.service
  6. Проверка после перезагрузки:
    Перезагрузите систему и проверьте статус службы:

    systemctl status custom.service

Общее недопонимание контекста SELinux

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

Заключение

Лучший подход к решению этой проблемы – использовать режим “Permissive” SELinux при отладке, настраивая правильные контексты для файлов служб и периодически проверяя журналы SELinux на предмет ошибок. Правильное применение SELinux значительно повышает безопасность системы и может предотвратить потенциальные угрозы.

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

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

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