SystemdDoctor
SystemCallFilter= [Service]

SystemCallFilter=: фильтр системных вызовов службы

Ограничивает системные вызовы, доступные процессам службы. Вызов вне списка либо завершает процесс сигналом, либо возвращает ошибку — в зависимости от настройки.

Что делает

Списки удобно задавать не поимённо, а готовыми наборами: @system-service покрывает обычные потребности службы, @network-io — работу с сетью, @privileged — привилегированные вызовы (его обычно исключают). Наборы перечисляет systemd-analyze syscall-filter.

Важное следствие: фильтр действует всё время работы, а не только при запуске. Служба может благополучно стартовать и упасть через часы, когда дойдёт до редкой операции. Признак — завершение сигналом SYS и запись audit в журнале ядра.

Где ставится. В секции [Service]. Часто вместе с SystemCallErrorNumber=.

Значения

ЗначениеЧто происходит
@system-serviceбазовый набор для обычных служб.
~@privileged @obsoleteтильда означает запрет перечисленного вместо разрешения.
@system-service @keyringбазовый набор плюс работа со связкой ключей.

Пример

Типичный фильтр для прикладной службы.

[Service]
SystemCallFilter=@system-service
SystemCallFilter=~@privileged @resources
SystemCallErrorNumber=EPERM
SystemCallArchitectures=native

С SystemCallErrorNumber=EPERM запрещённый вызов вернёт ошибку вместо завершения процесса. Это заметно облегчает разбор при подборе фильтра.

Типичные ошибки

Служба падает не при запуске, а позже, при первом запрещённом вызове: сигнал SYS и запись audit в журнале ядра.

Неизвестное имя вызова или набора даёт код 228/SECCOMP при запуске.

Слишком узкий фильтр ломает редкие операции: пересборку индекса, работу с ключами, отправку сигналов.

На ядре без seccomp и в части контейнеров фильтр применить нельзя.

Связанные ошибки

  • status=228/SECCOMP в systemdКод 228/SECCOMP: не удалось применить фильтр системных вызовов из SystemCallFilter=. Причины: неизвестное имя вызова, отсутствие поддержки в ядре.
  • signal=SYS (status=31/SYS) в systemdПроцесс службы убит сигналом SYS: фильтр системных вызовов запретил вызов. Как найти запрещённый вызов и исправить SystemCallFilter.
  • status=244/BPF в systemdКод 244/BPF: не удалось применить ограничения через BPF, например RestrictFileSystems=. В man-странице systemd этот код указан неверно.

Рядом стоящие параметры

Где важен на практике

Источники

  • systemd.exec(5) официальная документация
    сверено 15 сентября 2026
  • systemd-analyze(1) официальная документация
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04) собственная проверка
    сверено 15 сентября 2026