ProtectProc=
[Service]
ProtectProc= и ProcSubset=: ограничение доступа к /proc
Ограничивает, что служба видит в /proc: ProtectProc=invisible скрывает процессы других пользователей, ProcSubset=pid скрывает большинство системных файлов /proc.
Что делает
Защита разумная: прикладной службе не нужно видеть чужие процессы и командные строки, в которых иногда оказываются пароли. Но она же ломает всё, что собирает данные о системе: мониторинг, экспортёры метрик, средства диагностики.
Где ставится. В секции [Service].
Значения
| Значение | Что происходит |
|---|---|
ProtectProc=default | без ограничений (по умолчанию). |
ProtectProc=invisible | процессы других пользователей не видны. |
ProcSubset=pid | в /proc видны только каталоги процессов, системные файлы скрыты. |
По умолчанию: default
Пример
Прикладная служба без доступа к чужим процессам.
[Service]
ProtectProc=invisible
ProcSubset=pid
PrivateTmp=yes
Для служб мониторинга эти параметры задавать нельзя: они по назначению читают данные всей системы.
Типичные ошибки
Мониторинг и экспортёры метрик перестают видеть систему.
ProcSubset=pid скрывает /proc/meminfo и подобные файлы: программы, читающие их, получают ошибку.
Связанные ошибки
- Permission denied в журнале службыОтказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- No such file or directory в журнале службыСлужба не находит файл или каталог. Разбор: путь, момент запуска, изоляция unit-файла, символические ссылки, приватный /tmp.
- Экспортёр метрик не запускается: порт занятnode_exporter и подобные службы мониторинга не поднимаются из-за занятого порта 9100 или неверного адреса привязки.
Рядом стоящие параметры
Источники
- systemd.exec(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)