Служба читала /etc/shadow, потому что работала от root. Первое ограничение — сменить пользователя.
Файл юнита без строки User= systemd запускает от root: процесс получает все права в системе. lab-preview нужен только каталог отчётов, поэтому для неё заводят отдельную учётную запись без входа (sudo useradd -r -s /usr/sbin/nologin preview, useradd) и указывают её в юните:
Эту строку не пишут в файл пакета в /usr/lib/systemd/system — его перезапишет обновление. Её кладут в drop-in /etc/systemd/system/<юнит>.d/<имя>.conf, как ты поднимал лимит в уроке о лимитах, и перечитываешь настройки: sudo systemctl daemon-reload, затем sudo systemctl restart <юнит>. Новый процесс пойдёт от указанного пользователя.
Есть и запись «на один запуск»: DynamicUser=yes systemd заводит временного пользователя на время работы службы и убирает после. Удобно, когда службе не нужно владеть файлами на диске между запусками.
Запусти lab-preview от preview
В drop-in службы lab-preview задай ей пользователя preview (запись уже заведена) так, чтобы правка пережила обновление пакета, и дай новому процессу этого пользователя. Файл юнита в /usr/lib/systemd/system не меняй.
Цели · 0 из 2
- Задать User=preview в drop-in поверх файла пакета ещё не выполнена
- Перезапустить службу от нового пользователя ещё не выполнена