有谁知道监控 root 进程产生的简单方法吗

有谁知道监控 root 进程产生的简单方法吗

我想在新的根进程产生时执行一个脚本。(在 Linux 上)我怎样才能简单地做到这一点?

谢谢

答案1

这听起来像是 auditd 的完美工作。一旦运行了 auditd(现代 RedHat 系统上的默认服务),您就可以制定一条规则,通过执行以下代码来执行您想要的操作

auditctl -a task,always -F uid=0

分解此命令规则,过度使用手册页,我们发现:

   -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 重新编译内核,就没有干净的方法可以做到这一点(尽管我很想知道是否有办法做到这一点,所以我对你的问题投了赞成票)。

我确实想过使用 iwatch/inotify 在 /proc 内创建目录,但似乎行不通,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"; } } }

答案3

您可以使用 exec-snoop(基于 ebpf)、跟踪点、审计、netlink 进程连接器和一些其他机制来执行此操作。我在这里写了所有方法的比较。

答案4

我能想到的最好的办法就是史努比库。snoopy 是一个非常小的共享库,它被挂接到系统调用中/etc/ld.so.preload并环绕execve()系统调用。它可配置为记录所有exec(),或仅记录来自 root 的调用。在当前版本中,每次execve()发生匹配事件(对 的系统调用)时,snoopy 都会记录到 syslog 中。不过,它不是一个大程序(最多几百行代码),并且可以毫不费力地修改它以执行脚本,而不是(或除了)记录活动。Snoopy 是用 C 编写的。

需要注意以下几点:

  • 如果每次生成根进程时都运行一个脚本,那么您的脚本将成为根进程,需要再次生成该脚本,这将是另一个根进程,等等。请小心不要陷入循环。
  • 在典型的 Linux 机器上,有许多进程以 root 身份运行,并定期生成。例如,cron 可能每分钟或几分钟以 root 身份生成系统 cronjobs。如果您只是希望在用户以 root 身份登录时发生这种情况,那么工作量会更大。

相关内容