Как правильно настроить seccomp? — 29 июля 2026 г. в 10:00:02.143
Как правильно настроить seccomp? 👋 Приветствую в мире цифровой безопасности! Seccomp работает, как фильтр между процессом и ядром Linux - если syscall не разрешён, ядро блокирует его до выполнения. Даже если атакующий получил контроль над процессом, запрещённый вызов просто не пройдёт. ⏺Два режима на практике: strict разрешает только read, write, exit и sigreturn - подходит для простых утилит. Filter режим гибкий, задаёшь точный whitelist или blacklist для конкретного приложения через BPF-фильтр. ⏺Главное правило перед написанием профиля - сначала посмотреть, что приложение реально использует, а не гадать: strace -c -f -p $(pgrep nginx) & sleep 30 && kill %1 Вывод покажет список syscall’ов с количеством вызовов - только они идут в whitelist. Всё остальное блокируется. ⏺ Минимальный профиль для nginx на основе реального профилирования: { "defaultAction": "SCMP_ACT_ERRNO", "syscalls": [ { "names": [ "accept4", "bind", "close", "connect", "epoll_ctl", "epoll_wait", "epoll_create1", "exit_group", "fstat", "futex", "getdents64", "getrandom", "getsockname", "listen", "mmap", "mprotect", "munmap", "open", "openat", "read", "recvfrom", "sendfile", "sendto", "setsockopt", "socket", "stat", "write", "writev" ], "action": "SCMP_ACT_ALLOW" } ] } ⏺ Применяем к Docker-контейнеру: docker run --security-opt seccomp=/path/to/nginx-seccomp.json nginx ⏺ Для systemd-сервиса ещё проще - без внешнего файла: [Service] SystemCallFilter=read write open close fstat mmap socket connect accept SystemCallErrorNumber=EPERM ⏺Отладка, когда что-то сломалось после применения профиля: вместо SCMP_ACT_ERRNO ставим SCMP_ACT_LOG - профиль только логирует заблокированные вызовы без реальной блокировки, можно спокойно смотреть, что не хватает: journalctl -k | grep seccomp ausearch -m SECCOMP 🤖Бесплатный ChatGPT

