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

status=210/CHROOT в systemd

Код 210/CHROOT появляется при работе с RootDirectory= и RootImage=: systemd не смог сменить корень процесса. Либо каталога нет, либо это не каталог, либо не хватает прав, либо образ не удалось подключить.

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

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

  1. Каталог из RootDirectory= не существует или не является каталогом

    Смена корня возможна только в существующий каталог. Опечатка в пути или указание файла дают отказ сразу.

  2. Внутри нового корня нет самой программы

    После смены корня путь из ExecStart= отсчитывается уже внутри него. Программа снаружи корня становится недоступной, и следом обычно приходит 203/EXEC — но при недостатке прав ошибка возникает раньше, на самом chroot.

  3. Недостаточно прав для смены корня

    Операция требует CAP_SYS_CHROOT. Служба, отказавшаяся от возможностей, или служба пользователя сменить корень не может.

  4. Образ из RootImage= не подключается

    Образ повреждён, не той файловой системы, зашифрован или отсутствует нужный модуль ядра. В журнале рядом обычно есть сообщение о неудачном подключении.

Диагностика

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

Показывает шаг CHROOT и причину: нет каталога, отказ в доступе, неудачное подключение образа.

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

Все три параметра, от которых зависит этот шаг.

systemctl show myapp.service -p RootDirectory -p RootImage -p CapabilityBoundingSet

Решение

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

1. Каталог из RootDirectory= не существует или не является каталогом
Почему происходит
Смена корня возможна только в существующий каталог. Опечатка в пути или указание файла дают отказ сразу.
Как проверить
Проверьте путь.
systemctl show myapp.service -p RootDirectory
ls -ld /srv/chroot/myapp
Как исправить
Создайте каталог и разложите в нём минимальное окружение: программу, библиотеки, /etc/resolv.conf при необходимости сети.
2. Внутри нового корня нет самой программы
Почему происходит
После смены корня путь из ExecStart= отсчитывается уже внутри него. Программа снаружи корня становится недоступной, и следом обычно приходит 203/EXEC — но при недостатке прав ошибка возникает раньше, на самом chroot.
Как проверить
Проверьте наличие файла внутри нового корня.
ls -l /srv/chroot/myapp/usr/local/bin/myapp
Как исправить
Скопируйте программу и её библиотеки внутрь корня. Список библиотек покажет ldd.
ldd /usr/local/bin/myapp
3. Недостаточно прав для смены корня
Почему происходит
Операция требует CAP_SYS_CHROOT. Служба, отказавшаяся от возможностей, или служба пользователя сменить корень не может.
Как проверить
Посмотрите набор возможностей и способ запуска.
systemctl show myapp.service -p CapabilityBoundingSet -p User -p DynamicUser
Как исправить
Оставьте CAP_SYS_CHROOT в наборе возможностей или используйте вместо chroot более современные средства изоляции: ProtectSystem=, PrivateTmp=, BindPaths=, RootImage= c нужными правами.
4. Образ из RootImage= не подключается
Почему происходит
Образ повреждён, не той файловой системы, зашифрован или отсутствует нужный модуль ядра. В журнале рядом обычно есть сообщение о неудачном подключении.
Как проверить
Проверьте файл образа и попробуйте подключить его вручную.
systemctl show myapp.service -p RootImage
sudo systemd-dissect /var/lib/machines/myapp.raw
Как исправить
Пересоберите образ или укажите нужные параметры в RootImageOptions=.

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

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

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

systemd[14001]: myapp.service: Failed at step CHROOT spawning /usr/local/bin/myapp: No such file or directory

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

  • status=203/EXEC в systemd Код 203/EXEC означает, что systemd не смог выполнить программу из ExecStart=. Разбор причин: путь, права, интерпретатор, синтаксис оболочки.
  • status=226/NAMESPACE в systemd Код 226/NAMESPACE: не удалось настроить пространства имён монтирования, UTS или IPC. Частая причина — путь в ReadOnlyPaths= или ProtectHome=.
  • status=218/CAPABILITIES в systemd Код 218/CAPABILITIES: не удалось применить набор возможностей процесса из CapabilityBoundingSet= или AmbientCapabilities=.
  • Operation not permitted в журнале службы Операция запрещена: не хватает возможностей процесса, мешает seccomp или модуль безопасности. Отличие от Permission denied.
  • Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
  • Read-only file system в журнале службы Служба не может писать: файловая система только для чтения. Разбор: параметры изоляции unit, монтирование ro, ошибки файловой системы.
  • status=209/STDOUT в systemd Код 209/STDOUT: systemd не смог настроить стандартный вывод службы. Чаще всего виноват путь в StandardOutput=append: или file:.
  • status=229/SELINUX_CONTEXT в systemd Код 229/SELINUX_CONTEXT: не удалось определить или сменить контекст SELinux для процесса службы.

Источники

  • systemd.exec(5)
    210 EXIT_CHROOT: не удалось сменить корневой каталог, см. RootDirectory= и RootImage=.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено на несуществующем RootDirectory и на unit без CAP_SYS_CHROOT.
    собственная проверка, systemd 255
    сверено 15 сентября 2026