SystemdDoctor
служба не работает selinux изоляция права

status=229/SELINUX_CONTEXT в systemd

Код 229 относится к системам с SELinux: systemd не сумел выставить процессу контекст безопасности. Причина обычно в самом контексте — он указан неверно или не разрешён политикой.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Контекст из SELinuxContext= недопустим

    Контекст должен существовать в политике и быть разрешён для перехода. Произвольная строка не подойдёт.

  2. Политика запрещает переход в запрошенный контекст

    Даже существующий контекст требует разрешённого перехода из контекста systemd. Без правила политики переход запрещён.

  3. Файл программы не размечен

    Программы, установленные вручную в /usr/local или /opt, часто получают общий тип. Политика не знает, в какой контекст переводить службу.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Показывает шаг SELINUX_CONTEXT и причину.

journalctl -xeu myapp.service --no-pager -n 20

Отказы SELinux в журнале аудита: там видно, какой именно переход запрещён.

sudo ausearch -m avc -ts recent | tail -30

Режим SELinux: в permissive отказы только записываются, и причина падения окажется другой.

getenforce

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Контекст из SELinuxContext= недопустим
Почему происходит
Контекст должен существовать в политике и быть разрешён для перехода. Произвольная строка не подойдёт.
Как проверить
Посмотрите значение и текущий режим SELinux.
systemctl show myapp.service -p SELinuxContext
getenforce
sestatus
Как исправить
Укажите контекст, существующий в политике, или уберите параметр — тогда контекст определит политика по пути к программе.
2. Политика запрещает переход в запрошенный контекст
Почему происходит
Даже существующий контекст требует разрешённого перехода из контекста systemd. Без правила политики переход запрещён.
Как проверить
Поищите отказы в журнале аудита.
sudo ausearch -m avc -ts recent | tail -20
Как исправить
Добавьте правило политики для перехода либо разметьте программу нужным типом через semanage и restorecon.
sudo semanage fcontext -a -t myapp_exec_t "/usr/local/bin/myapp"
sudo restorecon -v /usr/local/bin/myapp
3. Файл программы не размечен
Почему происходит
Программы, установленные вручную в /usr/local или /opt, часто получают общий тип. Политика не знает, в какой контекст переводить службу.
Как проверить
Посмотрите метку файла.
ls -Z /usr/local/bin/myapp
Как исправить
Разметьте файл подходящим типом и восстановите контексты по каталогу.

Пример вывода

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

× myapp.service - My application
     Active: failed (Result: exit-code) since Mon 2026-09-14 22:48:16 MSK; 1s ago
    Process: 23400 ExecStart=/usr/local/bin/myapp (code=exited, status=229/SELINUX_CONTEXT)

systemd[23400]: myapp.service: Failed at step SELINUX_CONTEXT spawning /usr/local/bin/myapp: Invalid argument

Связанные ошибки

  • status=231/APPARMOR в systemd Код 231/APPARMOR: не удалось подготовить смену профиля AppArmor из AppArmorProfile=. Обычно профиль не загружен.
  • Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
  • status=236/SMACK_PROCESS_LABEL в systemd Код 236/SMACK_PROCESS_LABEL: не удалось выставить метку SMACK процессу службы. Встречается на системах со SMACK.
  • Operation not permitted в журнале службы Операция запрещена: не хватает возможностей процесса, мешает seccomp или модуль безопасности. Отличие от Permission denied.
  • Read-only file system в журнале службы Служба не может писать: файловая система только для чтения. Разбор: параметры изоляции unit, монтирование ro, ошибки файловой системы.
  • SELinux: avc denied в журнале аудита SELinux запретил операцию службе: как прочитать запись аудита, найти метку и исправить без отключения защиты.
  • status=209/STDOUT в systemd Код 209/STDOUT: systemd не смог настроить стандартный вывод службы. Чаще всего виноват путь в StandardOutput=append: или file:.
  • status=210/CHROOT в systemd Код 210/CHROOT: не удалось сменить корневой каталог из RootDirectory= или подключить образ RootImage=.

Источники

  • systemd.exec(5)
    229 EXIT_SELINUX_CONTEXT: не удалось определить или сменить контекст SELinux.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Проверено на системе с SELinux в режиме enforcing и произвольной строкой в SELinuxContext=.
    собственная проверка, systemd 255
    сверено 15 сентября 2026