web-dev-qa-db-ja.com

フィルタリングされていないLinuxシステムコールを列挙するにはどうすればよいですか?

利用可能なすべてのLinuxシステムコールを列挙するための最良の方法は何ですか?

明確にするために、コンテナ化された環境で実行しているときに、seccompによってフィルタリングされているシステムコールを見つける方法を尋ねています。

2
Mick

Linuxシステムコールを列挙するための2つの可能な方法を見つけました。 1つは bash one-liner を含みますが、関連するすべてのマンページを出荷するディストリビューションに依存します。もう1つは、 strace で、考えられるすべてのシステムコールを検出して追跡するために使用できるツールです。

strace

straceGitHub および GitLab にあります。私はあなたの環境を保証することはできません。コンテナ内のシステムコールをチェックしたい場合、このソリューションは理想的ではありませんが、マンページがインストールされていない可能性があるため、bashワンライナーよりもうまく機能します。

システムコールの種類でフィルタリング:

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 、および このWebページ を参照して、すべてを列挙するタスクを完了する方法についてアドバイスします。特定のLinuxシステムで利用可能なシステムコール。

Webページの担当者は、syscallの完全なリストについては、マンページを参照できることを示唆しています。この例では、注釈付きリストに出力を示します。

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

結論

繰り返しになりますが、ディストリビューションがすべてのパッケージを関連するすべてのマンページとともに出荷できない場合、bashワンライナーは不十分になることに注意してください。注釈付きリストの出力が不要で、このソリューションが目的の出力に適合しない場合は、投稿を更新して、目標をより適切に定義してください。

syscallの検索に使用されるpythonツール へのリンクも含めます。これは、検出したsyscallと利用可能なsyscallを比較するための良いリファレンスになる可能性があります。

この回答に関して質問や問題がある場合はコメントしてください。コマンドを試す前に、私が提供した各リンクをよく読んでおくことを強くお勧めします。誤解を正し、投稿を改善するためのフィードバックに感謝します。必要に応じて回答を更新できます。

幸運を祈ります!

2
kemotep