怎么配置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