GNU/Linux >> Linux の 問題 >  >> Linux

ルートプロセスのスポーンを監視する簡単な方法を知っている人はいますか

解決策 1:

これは、auditd にとって完璧な仕事のように思えます。最新の RedHat ベースのシステムのデフォルト サービスである auditd を実行したら、次のコマンドを実行して、必要な処理を正確に実行するルールを作成できます

auditctl -a task,always -F uid=0

このコマンド ルールを分解し、man ページを過度に使用すると、次のことがわかります。

   -a list,action
          task       Add  a  rule to the per task list. This rule list is used
                     only at the time a task is created -- when fork() or
                     clone() are called by the parent task. When using this
                     list, you should only use fields that are known at task
                     creation time, such as the uid, gid, etc.
          always     Allocate an audit context, always fill it in at syscall 
                     entry time, and always write out a record at syscall exit
                     time.

そのため、fork または clone システム コールが終了するたびに、常にこのアクションのレコードを書き出してください。

最後のオプションは、-F uid=0 を使用する場合のフィルター文字列と考えることができます。 プロセス所有者の uid が 0 の場合に限定するだけです。

auditd が適切に構成されていることを確認し、ルールを追加することで、このルールを実行時に実行できることに注意してください。
-a task,always -F uid=0
ディストリビューションの関連ファイルに、おそらく /etc/audit/audit.rules

これは非常にうるさいので、ログのレビューを行っている人は誰でも準備する必要があることに注意してください.

解決策 2:

カーネルを CONFIG_PROC_EVENTS および/または CONFIG_KPROBES で再コンパイルせずにこれを行うクリーンな方法はないと思います(ただし、それを行う方法があるかどうか知りたいので、質問に賛成しました)。

/proc内のディレクトリ作成にiwatch/inotifyを使用するという考えはありましたが、機能していないようで、auditctlも同様でした。汚れていますが、スクリプトからの変更について ps を継続的に解析することが最善の選択のようです。次の Perl コードはそれを行いますが、一部を見逃す傾向があり、ps を無視します。 (それ以外の場合はそれ自体がトリガーされます):

perl -e 'my %pids; while(1) { my @pids = `ps -U root -u root`; foreach (@pids) { next if /ps$/; ($pid) = /^\s*(\d+)\D/; if (!$pids{$pid}) { $pids{$pid}++; print "Process $pid created (" . `cat /proc/$pid/cmdline` . ")\n"; } } }

Linux
  1. Linux –Setuidが機能しないのはなぜですか??

  2. プロセス置換を実現するためのポータブル(posix)の方法?

  3. Node.JS でアプリケーション ルートに関連するファイルを参照する適切な方法

  1. Systemdはまだランレベルについて知っていますか?

  2. Bashは、どのように呼び出されているかをどのように知っていますか?

  3. プロセスを聞く方法はありますか?

  1. Linux Setuidが機能しませんか?

  2. Psの出力にはどういう意味がありますか?

  3. カットの逆コマンドは存在しますか?