古いサーバーを廃止できるかどうかを調べようとしています。そこで実行されている自動プロセスに関する情報が必要です。これまでに、次のことを試しました。
auditctl -a exit,always -F arch=b64 -S execve -k any-commands
ログ分析の段階で、2 つのコンテキストが欠落していることを発見しました。
- これらのプログラムはどのように実行されたのでしょうか? 親プロセスは何で、その argv は何でしたか?
- stdin/stdout はどこに行ったのでしょうか? 理想的には、シェル コマンドが再構築されるのを見たいのですが、おそらく要求しすぎだとは思います。少なくともパイプ記述子 ID があれば十分です (そうすれば、独自のスクリプトで再構築を試みることができます)。
このような問題にはどのように対処すればよいでしょうか?
答え1
システムexecve
コールは現在のプロセスを置き換えます。プログラムが別のプログラムを開始した後も制御を保持する場合は、最初に (fork
またはを使用してvfork
) 新しいプロセスを作成し、次に を呼び出す必要がありますexecve
。
開いているファイル記述子と権限は、プログラム イメージが で置き換えられるときに引き継がれますexecve
(フラグでマークされているものを除くCLOEXEC
)。そのため、開いているファイルは の間に親プロセスから継承されfork
、次にfork
との間で変更されexecve
(たとえば を使用dup2
)、最後に のexecve
呼び出しの間にフィルタリングされます。
したがって、監査データから全体像を把握することは困難です。