status=229/SELINUX_CONTEXT в systemd
Код 229 относится к системам с SELinux: systemd не сумел выставить процессу контекст безопасности. Причина обычно в самом контексте — он указан неверно или не разрешён политикой.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Контекст из
SELinuxContext=недопустимКонтекст должен существовать в политике и быть разрешён для перехода. Произвольная строка не подойдёт.
-
Политика запрещает переход в запрошенный контекст
Даже существующий контекст требует разрешённого перехода из контекста systemd. Без правила политики переход запрещён.
-
Файл программы не размечен
Программы, установленные вручную в /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Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
SELinuxContext= недопустим- Почему происходит
- Контекст должен существовать в политике и быть разрешён для перехода. Произвольная строка не подойдёт.
- Как проверить
-
Посмотрите значение и текущий режим SELinux.
systemctl show myapp.service -p SELinuxContext getenforce sestatus
- Как исправить
- Укажите контекст, существующий в политике, или уберите параметр — тогда контекст определит политика по пути к программе.
- Почему происходит
- Даже существующий контекст требует разрешённого перехода из контекста 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
- Почему происходит
- Программы, установленные вручную в /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 (Ubuntu 24.04)
Проверено на системе с SELinux в режиме enforcing и произвольной строкой в SELinuxContext=.