Files
pzmanager/deploy/pzmanager.service
mrleo1nidandClaude Opus 5 08908bede8
CI / test (push) Successful in 20s
Release / release (push) Successful in 26s
Кнопка обновления не работала из-за NoNewPrivileges в юните
Панель показывала команду для терминала вместо кнопок обновления и
перезапуска, потому что sudo из неё не запускался вовсе: NoNewPrivileges
запрещает процессу и его потомкам повышать привилегии. Механизм с
sudoers, ради которого всё и делалось, был при этом мёртв.

Убрал эту опцию из юнита, оставив комментарий, почему её здесь быть не
должно. Ограничение прав никуда не делось: в sudoers сервисному
пользователю разрешена ровно одна команда, pzmanager-admin.

Заодно описание релиза перестало показываться сырой разметкой. Раздел
про установку в работающей панели ни к чему, поэтому берётся только
список изменений; блок прокручивается сам, не утягивая страницу, а рядом
появилась ссылка на полное описание.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-05 01:49:02 +03:00

37 lines
1.4 KiB
Desktop File

[Unit]
Description=PZ Manager — веб-панель сервера Project Zomboid
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=pzserver
Group=pzserver
WorkingDirectory=/opt/pzmanager
ExecStart=/usr/local/bin/pzmanager serve --config /opt/pzmanager/config.yaml
Restart=on-failure
RestartSec=5
# Менеджер сам останавливает игровой сервер по SIGTERM: сначала отправляет
# команду quit (мир сохраняется), потом добивает процесс. Дадим ему время.
KillSignal=SIGTERM
KillMode=mixed
TimeoutStopSec=300
# Всё своё панель держит в /opt/pzmanager, домашние каталоги ей не нужны.
#
# NoNewPrivileges здесь намеренно не выставлен: он запрещает процессу и его
# потомкам повышать привилегии, а значит ломает sudo — и вместе с ним кнопки
# обновления и перезапуска панели. Прикрытием служит sudoers: сервисному
# пользователю разрешена ровно одна команда, pzmanager-admin.
PrivateTmp=true
ProtectSystem=full
ProtectHome=true
ReadWritePaths=/opt/pzmanager
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target