unit.примерыPythonNode.jsJavaType и RestartЗащита службы

Защита службы: минимальный набор

Несколько строк в [Service] ограничивают, что сможет сделать взломанное приложение.

[Unit]
Description=Приложение с ограничениями

[Service]
Type=simple
User=app
ExecStart=/opt/app/bin/app
StateDirectory=app
NoNewPrivileges=yes
PrivateTmp=yes
PrivateDevices=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/log/app
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
RestrictSUIDSGID=yes

[Install]
WantedBy=multi-user.target
ПараметрЧто даёт
ProtectSystem=strictВся файловая система только для чтения, кроме /dev, /proc, /sys и явно разрешённых путей
ReadWritePaths=Где всё-таки можно писать. Путь должен существовать
StateDirectory=appsystemd сам создаст /var/lib/app с владельцем-пользователем службы и разрешит запись
ProtectHome=yesКаталоги /home, /root не видны
PrivateTmp=yesСвой /tmp, чужие временные файлы не видны
NoNewPrivileges=yesПроцесс не получит новых прав через setuid-файлы
PrivateDevices=yesНет доступа к физическим устройствам

Проверить, насколько служба закрыта

systemd-analyze security app.service

Команда выставит оценку от 0 (закрыта) до 10 (открыта) и перечислит, что ещё можно включить. Включайте по одному параметру и проверяйте, что служба работает.

Если путь из ReadWritePaths= не существует, служба не запустится с кодом 226 — почему так и как найти виноватый параметр.

Готовые unit-файлы для своих приложений. Синтаксис примеров проверен systemd-analyze verify на systemd 255. Обновлено 2026-11-04.