ReadWritePaths= и ReadOnlyPaths=: точечные исключения изоляции
Перечисляет пути, доступные службе для записи (ReadWritePaths=) или только для чтения (ReadOnlyPaths=), поверх общих правил изоляции. InaccessiblePaths= скрывает путь полностью.
Что делает
Это правильный способ жить с ProtectSystem=strict: изоляция остаётся жёсткой, а нужные каталоги открываются по одному. Так видно, куда служба вообще пишет — это само по себе полезно знать.
Путь должен существовать на момент запуска, иначе служба падает с кодом 226/NAMESPACE. Если путь может отсутствовать, перед ним ставят дефис: тогда его отсутствие не считается ошибкой.
Где ставится. В секции [Service]. Пути перечисляются через пробел, допустимо несколько строк.
Значения
| Значение | Что происходит |
|---|---|
ReadWritePaths=/var/lib/shared | разрешить запись в путь. |
ReadWritePaths=-/var/lib/optional | путь необязателен: отсутствие не ошибка. |
ReadOnlyPaths=/etc/myapp | только чтение, даже если остальное доступно для записи. |
InaccessiblePaths=/etc/shadow | путь полностью скрыт от службы. |
Пример
Жёсткая изоляция с одним разрешённым каталогом.
[Service]
ProtectSystem=strict
ReadWritePaths=/var/lib/shared-uploads
ReadOnlyPaths=/etc/myapp
InaccessiblePaths=/home
Порядок значения не имеет: systemd собирает представление файловой системы из всех правил сразу.
Типичные ошибки
Несуществующий путь даёт код 226/NAMESPACE при запуске — самая частая ошибка с этими параметрами.
Разрешение пути не отменяет обычные права: пользователю службы всё равно нужен доступ.
В переопределении через drop-in списки дополняются, а не заменяются: чтобы заменить, сначала сбросьте значение пустой строкой.
Связанные ошибки
- status=226/NAMESPACE в systemdКод 226/NAMESPACE: не удалось настроить пространства имён монтирования, UTS или IPC. Частая причина — путь в ReadOnlyPaths= или ProtectHome=.
- Read-only file system в журнале службыСлужба не может писать: файловая система только для чтения. Разбор: параметры изоляции unit, монтирование ro, ошибки файловой системы.
- Permission denied в журнале службыОтказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
Рядом стоящие параметры
Источники
- systemd.exec(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)