怎么配置audit来记录系统上所有打开的文件?
解决方法:

使用LAuS来生成记录系统上所有打开文件的audit记录,具体操作如下面所示。

  • 保存当前配置:
        # service audit stop
        # mv /etc/audit/filter.conf /etc/audit/filter.conf-default
  • 打开audit,只记录execve和open两个系统调用:

在/etc/autid/filter.conf里,加入下面几行:

       syscall execve = always && return(log-verbose);
       syscall open   = always && return(log-verbose);
       include "filesets.conf";

用aucat(1)来查看audit记录如下:

2005-04-22T17:06:35  19440   6058       -1 execve("/usr/bin/find", ["find", "/usr/lib", "-name", "*.jar"], [data, len=0])
2005-04-22T17:06:35  19441   6058       -1 open("/etc/ld.so.preload", O_RDONLY); result=-2 ["No such file or directory"]
2005-04-22T17:06:35  19442   6058       -1 open("/etc/ld.so.cache", O_RDONLY); result=3
2005-04-22T17:06:35  19443   6058       -1 open("/lib/tls/libc-2.3.2.so", O_RDONLY); result=3

第三列是进程id,每个正在运行的进程,每个二进制程序和打开文件都可以在这里观察到。

对于aucat输出,需要一个脚本或者程序来解析,(a)使用execve记录来映射进程id到可执行程序,(b)记录某些数据库中的与open()系统调用相关的进程/用户id。比如:

  • 调整在/etc/audit/audit.conf里的audit日志文件配置以支持大文件,对每个生成的日志文件运行这个分析脚本。

假设laus-0.1-70RHEL3或者更高的版本被安装(支持复杂的"notify"命令),这在RHEL-3-U5或者更高的系统里能找到。关于output的配置可以是这样的:

      output {
              mode            = bin;
              num-files       = 4;
              file-size       = 20M;
              file-name       = "/var/log/audit.d/bin";
              notify          = "/..path../analyser";

              current         = "/var/log/audit";

              sync            = no;

              error {
                      action {
                              type = syslog;
                              facility = security;
                              priority = crit;
                      };
              };
      };

然后,当bin.N已满能够被清除的时候,分析脚本(程序)"/..path../analyser"以/var/log/audit.d/bin.N的参数执行。这个分析器能够执行"aucat -f /var/log/audit.d/bin.N"来生成上面显示的字符的audit记录。处理完该文件后,分析器必须运行"/usr/sbin/audbin -C"来清理输出。

  • 恰当设置audit核心模块内核参数:
     # echo Ƈ' > /proc/sys/dev/audit/attach-all

这会增加核心audit消息缓冲,使得系统所有进程被审计,而不仅仅是这些做laus_attach()的进程。

把这些参数写入/etc/sysctl.conf文件,让它们在系统重启后也生效:

     dev.audit.max-messages = 32768
     dev.audit.attach-all = 1
  • 开始审计:
     # service audit start