我正在尝试使用 auditd (audit 4.0.1) 记录文件操作,并遇到了移动文件的问题。如果我在目标中包含文件名:
mv /mnt/user/home/file.txt /mnt/user/home/Folder1/file.txt
我明白了:
type=SYSCALL msg=audit(1723755217.700:367): syscall=264 success=yes exit=0 a0=ffffff9c a1=7ffcad79d745 a2=ffffff9c a3=7ffcad79d763 items=4 ppid=402506 pid=763811 comm="mv" exe="/bin/mv" SYSCALL=renameat
type=CWD msg=audit(1723755217.700:367): cwd="/usr/local"
type=PATH msg=audit(1723755217.700:367): item=0 name="/mnt/user/home/Folder1/" inode=11540474087238444 nametype=PARENT
type=PATH msg=audit(1723755217.700:367): item=1 name="/mnt/user/home/" inode=11540474084530994 nametype=PARENT
type=PATH msg=audit(1723755217.700:367): item=2 name="/mnt/user/home/file.txt" inode=652740471477682549 nametype=DELETE
type=PATH msg=audit(1723755217.700:367): item=3 name="/mnt/user/home/Folder1/file.txt" inode=652740471477682549 nametype=CREATE
type=PROCTITLE msg=audit(1723755217.700:367): proctitle=mv /mnt/user/home/file.txt /mnt/user/home/Folder1/file.txt
type=EOE msg=audit(1723755217.700:367):
但如果我只包含目标文件夹:
mv /mnt/user/home/file.txt /mnt/user/home/Folder1/
我得到两个系统调用:
type=SYSCALL msg=audit(1723755697.454:465): syscall=257 success=yes exit=3 a0=ffffff9c a1=7ffc55b2276c a2=210000 a3=0 items=1 comm="mv" exe="/bin/mv" SYSCALL=openat
type=CWD msg=audit(1723755697.454:465): cwd="/usr/local"
type=PATH msg=audit(1723755697.454:465): item=0 name="/mnt/user/home/Folder1/" inode=11540474087238444 nametype=NORMAL
type=PROCTITLE msg=audit(1723755697.454:465): proctitle=mv /mnt/user/home/file.txt /mnt/user/home/Folder1/
type=EOE msg=audit(1723755697.454:465):
type=SYSCALL msg=audit(1723755697.455:466): syscall=264 success=yes exit=0 a0=ffffff9c a1=7ffc55b2274a a2=3 a3=4270fa items=4 comm="mv" exe="/bin/mv" SYSCALL=renameat
type=CWD msg=audit(1723755697.455:466): cwd="/usr/local"
type=PATH msg=audit(1723755697.455:466): item=0 name="/usr/local" inode=11540474087238444 nametype=PARENT
type=PATH msg=audit(1723755697.455:466): item=1 name="/mnt/user/home/" inode=11540474084530994 nametype=PARENT
type=PATH msg=audit(1723755697.455:466): item=2 name="/mnt/user/home/file.txt" inode=652740471477682549 nametype=DELETE
type=PATH msg=audit(1723755697.455:466): item=3 name="file.txt" inode=652740471477682549 nametype=CREATE
type=PROCTITLE msg=audit(1723755697.455:466): proctitle=mv /mnt/user/home/file.txt /mnt/user/home/Folder1/
type=EOE msg=audit(1723755697.455:466):
使用目录作为目标并且不包含文件名意味着它将仅保留相同的文件名,但我不确定如何解析这种情况。第一种情况很简单,项目 2 和 3 是源和目标。第二种情况创建一个openat
系统调用,然后创建一个renameat
系统调用,并且renameat
系统调用的结构不同。所有项目都没有目标目录;那是在openat
系统调用中。我本来不打算将其包括openat
在我的审计规则中,因为我不需要它,而且无论如何都有太多的调用。但现在我必须弄清楚如何处理这种奇怪的情况。我还没有找到可能遇到过这种情况的其他人的任何解决方案。这是我使用的规则,也是唯一的规则:
-a always,exit -F arch=b64 -S all -F dir=/mnt/user/home/ -F success=1
我必须将其扩展以进行故障排除,因为正如我所说,我并不是在寻找openat
系统调用。我能想到的唯一方法是包含openat
并以某种方式链接和openat
系统renameat
调用,过滤掉任何openat
不匹配的调用。但问题是我的脚本目前基于每个事件工作,而这是两个事件。我确信还有更多我甚至没有想到的问题。有什么关于如何处理这个问题的想法吗?