SystemD Service Hardening
systemd-харднинг: кратко и по делу
sudo systemd-analyze security показывает «красную» таблицу рисков.
sudo systemd-analyze security имя.service — детально по конкретному юниту.
Колонка Exposure — главный ориентир: чем выше значение, тем больше прав можно отнять.
Как править
sudo systemctl edit имя.serviceсоздаст override-файл.- Параметры пишутся в секции
[Service](или[Container]для quadlet). - Сервис не стартует — значит убрал нужное, возвращай.
Часто используемые директивы
| Директива | Что делает |
|---|---|
NoNewPrivileges=true |
запрет setuid/setgid |
PrivateTmp=true |
изолированный /tmp |
ProtectSystem=strict |
корень только read-only |
ProtectHome=true |
/home, /root недоступны |
ReadWritePaths=/var/lib/app |
белый список для записи |
CapabilityBoundingSet=CAP_NET_BIND_SERVICE |
только нужные capability |
SystemCallFilter=@system-service |
разрешённый набор сисколлов |
RestrictAddressFamilies=AF_INET AF_INET6 |
только нужные семейства сокетов |
MemoryDenyWriteExecute=true |
блок W^X |
LockPersonality=true |
запрет смены personality() |
RestrictRealtime=true |
нельзя захватывать realtime-приоритеты |
UMask=0077 |
файлы создаются 600 |
RemoveIPC=true |
чистит SysV IPC при выходе |
Пример override
[Service]
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/myapp
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
SystemCallFilter=@system-service
RestrictAddressFamilies=AF_INET AF_INET6
MemoryDenyWriteExecute=true
LockPersonality=true
RestrictRealtime=true
UMask=0077
RemoveIPC=true
Проверь: sudo systemctl daemon-reload && sudo systemctl restart имя.service.
Это не серебряная пуля; подгоняй под каждый сервис и смотри логи.
Комментарии (85)
- Предложена утилита shh, которая по логам strace автоматически подбирает параметры hardening для systemd-сервисов.
- Комментаторы отмечают, что дистрибутивы не включают жёсткие настройки по умолчанию: боятся сломать edge-case’ы и получить поток баг-репортов.
- Обсуждается идея общего репозитория с готовыми «жёсткими» unit-файлами для популярных сервисов.
- Утилита systemd-analyze security и встроенный механизм credentials systemd названы полезными инструментами повышения безопасности.
- Несколько человек поправили: правильное написание — «systemd», а не «SystemD».
Комментарии (54)
A really good accompaniment to this is Carruth's "C++, bounds checking, performance, and compilers" [1]:> ... strong belief that bounds checks couldn’t realistically be made cheap enough to enable by default. However, so far they are looking very affordable. From the above post,