当一个新的根进程生成时,我想执行一个脚本。(在Linux上)我怎么能这样做呢?
谢谢
发布于 2011-02-02 16:34:50
这听起来是个完美的审计工作。一旦您运行了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.
因此,每当叉或克隆系统调用退出时,始终为此操作写出记录。
最后一个选项可以看作是一个过滤器字符串,在我们的使用中,-F uid=0只是将我们限制在进程所有者的uid为0的情况下。
请注意,通过确保auditd配置正确并添加规则,可以在运行时执行此规则。
-a task,always -F uid=0
到发行版的相关文件中,很可能是/etc/audit/audit.rules。
请记住,这将是相当嘈杂的,谁在做你的日志评论将需要为它做准备。
发布于 2020-11-05 08:28:19
您可以使用exec(基于ebpf)、跟踪点、审计、netlink进程连接器和其他一些机制来完成这一任务。我在这里写了所有方法的比较。
发布于 2010-11-10 20:55:45
我能想到的最好的方法是构建史努比库。史努比是一个非常小的共享库,它被连接到/etc/ld.so.preload并包装在execve()系统调用上。它可以配置为记录所有的exec()'s,或者仅仅是根用户的日志。在当前的版本中,每当匹配的事件( syscall到execve())发生时,史努比都会登录到syslog。不过,它不是一个大型程序(最多几百行代码),可以在不需要(或除了记录活动)之外执行脚本时进行修改。
有几件事要注意:
https://serverfault.com/questions/199654
复制相似问题