Intereting Posts
Почему между каждым логическим разделом существует 2048 секторов свободного пространства? Сценарий процесса дампа и stdout Справедливая классификация трафика с использованием TC Импульсные аудио и роуминг-профили на CentOS 6 Как узнать, какая команда имеет самое длинное руководство в моей системе? Отложить неважные обновления ОС на Fedora (dnf) Как загрузить модуль на сервер PulseAudio? keepalived: как только понизить мастер, если резервная копия может взять на себя? Список серверов имен в Ubuntu 14.04 без NetworkManager Как получить часть строки в linux Я случайно ввел свой пароль в поле входа, он все еще безопасен? См. Разрешения для новых файлов в заданном каталоге Создание двоичного файла определенной длины AWK – как получить содержимое файла, указанное первым столбцом файла Сколько перезагрузок требуется для обновления обновления Solaris 10 для обновления 10?

Как я могу перечислить нефильтрованные системные вызовы Linux?

Каков наилучший способ перечислить все доступные системные вызовы Linux?

Чтобы уточнить, я спрашиваю, как узнать, какие системные вызовы фильтруются с помощью seccomp при работе в контейнерной среде.

Я нашел два возможных способа enums системных вызовов Linux. Один включает в себя однострочную версию bash , но зависит от вашего дистрибутива, который отправляет все соответствующие страницы. Другой, strace , инструмент, который можно использовать для обнаружения и отслеживания любых возможных системных вызовов.

Трассирование

strace можно найти на GitHub и GitLab . Я не могу поручиться за вашу среду, и если вы хотите проверить системные вызовы внутри контейнера, это решение не будет идеальным, однако оно работает лучше, чем однострочная shell bash, так как man-страницы могут быть не установлены.

Фильтровать по типу системного вызова:

 strace -e trace=%desc Trace all file descriptor related system calls. %file Trace all system calls which take a file name as an argument. %fstat Trace fstat and fstatat syscall variants. %fstatfs Trace fstatfs, fstatfs64, fstatvfs, osf_fstatfs, and osf_fstatfs64 system calls. %ipc Trace all IPC related system calls. %lstat Trace lstat syscall variants. %memory Trace all memory mapping related system calls. %network Trace all the network related system calls. %process Trace all system calls which involve process management. %pure Trace syscalls that always succeed and have no arguments. %signal Trace all signal related system calls. %stat Trace stat syscall variants. %statfs Trace statfs, statfs64, statvfs, osf_statfs, and osf_statfs64 system calls. %%stat Trace syscalls used for requesting file status. %%statfs Trace syscalls related to file system statistics. 

Однако, если у вас есть список определенных системных вызовов, которые вы хотите найти, вы можете использовать следующую команду:

 strace -e [syscall1],[syscall2],[syscall3],...,[syscalln] 

Я также включаю этот блог для получения дополнительной информации о strace.

Баш однострочный

Я буду ссылаться на справочную страницу по системным вызовам, ссылка 1, ссылка 2 , а также на эту веб-страницу с советами о том, как выполнить задачу enums всех доступных системных вызовов для данной системы Linux.

Человек на веб-странице предлагает вам ссылаться на свои man-страницы для получения полного списка системных вызовов. Этот пример дает вывод в аннотированном списке.

 ls /usr/share/man/man2 | sed -es/.2.gz//g | xargs man -s 2 -k | sort | grep -v 'unimplemented system calls' 

Заключение

Опять же, я хотел бы заметить, что если вашему дистрибутиву не удастся отгрузить все ваши пакеты со всеми их соответствующими страницами руководства, то однострочная shell bash потерпит неудачу. Если вывод аннотированного списка не нужен, и это решение не соответствует желаемому результату, пожалуйста, обновите ваш пост, чтобы лучше определить, какова ваша цель.

Я также включу ссылку на инструмент Python, используемый для поиска системных вызовов . Это может быть хорошим справочным материалом для сравнения обнаруженных системных вызовов с доступными.

Пожалуйста, прокомментируйте, если у вас есть какие-либо вопросы или проблемы с этим ответом. Я настоятельно рекомендую вам прочитать каждую ссылку, которую я предоставил, прежде чем пытаться выполнить команды. Я ценю обратную связь, чтобы исправить любые заблуждения и улучшить мои сообщения. Я могу обновить свой ответ по мере необходимости.

Удачи!