SystemdDoctor
ProtectSystem= [Service]

ProtectSystem= в systemd: системные каталоги только для чтения

Делает системные каталоги недоступными для записи внутри пространства имён службы. Права на диске не меняются — меняется представление файловой системы, которое видит служба.

Что делает

Это одна из самых заметных по эффекту защит: служба физически не может испортить систему, даже будучи скомпрометированной. Обратная сторона — запись в /etc и /var, которую служба считала нормальной, перестаёт работать, и появляется ошибка о файловой системе только для чтения.

Правильный способ разрешить нужное — не ослаблять защиту целиком, а открыть конкретный путь через ReadWritePaths= или использовать каталоги службы: StateDirectory=, LogsDirectory=, CacheDirectory= всегда доступны для записи.

Где ставится. В секции [Service].

Значения

ЗначениеЧто происходит
noпо умолчанию: ограничений нет.
yes/usr и /boot доступны только для чтения.
fullто же плюс /etc.
strictвся файловая система только для чтения, кроме /dev, /proc, /sys и явно разрешённых путей.

По умолчанию: no

Пример

Жёсткая изоляция с точечным разрешением записи.

[Service]
ProtectSystem=strict
ProtectHome=yes
StateDirectory=myapp
ReadWritePaths=/var/lib/shared-data
ExecStart=/usr/local/bin/myapp

Каталог из StateDirectory= разрешать не нужно: systemd делает его доступным для записи сам.

Типичные ошибки

Служба, пишущая в /etc или /var без разрешения пути, получает ошибку «read-only file system».

Путь в ReadWritePaths=, которого не существует, приводит к коду 226/NAMESPACE при запуске.

В контейнере без нужных прав построить пространство имён нельзя, и жёсткая изоляция ломает запуск целиком.

Запись вывода в файл через StandardOutput=append: тоже попадает под запрет: путь нужно разрешить.

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

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

Рядом стоящие параметры

Источники

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