ProtectHome= в systemd: закрыть домашние каталоги от службы
Делает домашние каталоги недоступными для службы: пустыми или доступными только для чтения. Служба видит их не так, как остальная система.
Что делает
Серверной службе домашние каталоги обычно не нужны, а доступ к ним — лишний риск. Параметр закрывает /home, /root и /run/user одним движением.
Ловушка возникает, когда сайт или данные лежат в домашнем каталоге пользователя — так часто делают на небольших серверах. Тогда параметр ломает работу службы, и в журнале появляются сообщения об отсутствующих файлах: каталог для службы пуст.
Где ставится. В секции [Service].
Значения
| Значение | Что происходит |
|---|---|
no | по умолчанию: доступ обычный. |
yes | каталоги недоступны. |
read-only | доступны только для чтения. |
tmpfs | подменяются пустой временной файловой системой. |
По умолчанию: no
Пример
Служба, которой домашние каталоги не нужны.
[Service]
ProtectHome=yes
ProtectSystem=strict
StateDirectory=myapp
Если данные службы лежат в /home, этот параметр их скроет. Данные стоит перенести в /var/lib через StateDirectory=.
Типичные ошибки
Сайт или данные в домашнем каталоге становятся недоступны: служба сообщает, что файлов нет.
WorkingDirectory= в домашнем каталоге вместе с этим параметром даёт код 200/CHDIR.
Значение read-only не мешает чтению, но ломает запись — ошибка проявится позже, при первой попытке записи.
Связанные ошибки
- status=226/NAMESPACE в systemdКод 226/NAMESPACE: не удалось настроить пространства имён монтирования, UTS или IPC. Частая причина — путь в ReadOnlyPaths= или ProtectHome=.
- No such file or directory в журнале службыСлужба не находит файл или каталог. Разбор: путь, момент запуска, изоляция unit-файла, символические ссылки, приватный /tmp.
- nginx 403 Forbidden и Permission denied на файлы сайтаnginx отдаёт 403: нет прав на файлы сайта, закрыт каталог по пути, мешает SELinux или AppArmor, нет индексного файла.
Рядом стоящие параметры
Где важен на практике
Источники
- systemd.exec(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)