Защита службы: минимальный набор
Несколько строк в [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=app | systemd сам создаст /var/lib/app с владельцем-пользователем службы и разрешит запись |
ProtectHome=yes | Каталоги /home, /root не видны |
PrivateTmp=yes | Свой /tmp, чужие временные файлы не видны |
NoNewPrivileges=yes | Процесс не получит новых прав через setuid-файлы |
PrivateDevices=yes | Нет доступа к физическим устройствам |
Проверить, насколько служба закрыта
systemd-analyze security app.service
Команда выставит оценку от 0 (закрыта) до 10 (открыта) и перечислит, что ещё можно включить. Включайте по одному параметру и проверяйте, что служба работает.
Если путь из ReadWritePaths= не существует, служба не запустится с кодом 226 —
почему так и как найти виноватый параметр.