Estou tentando registrar operações de arquivos usando auditd (auditoria 4.0.1) e me deparei com um problema ao mover arquivos. Se eu incluir o nome do arquivo no destino:
mv /mnt/user/home/file.txt /mnt/user/home/Folder1/file.txt
Eu entendo isso:
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):
Mas se eu incluir apenas a pasta de destino:
mv /mnt/user/home/file.txt /mnt/user/home/Folder1/
Eu recebo duas syscalls:
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):
Usar um diretório como destino e não incluir um nome de arquivo significa que ele manterá o mesmo nome de arquivo, mas não tenho certeza de como analisar esse cenário. O primeiro cenário é fácil, os itens 2 e 3 são a origem e o destino. O segundo cenário cria um openat
syscall e depois um renameat
syscall e o renameat
syscall é estruturado de forma diferente. Nenhum dos itens possui o diretório de destino; isso está no openat
syscall. Eu não estava planejando incluir openat
em minhas regras de auditoria porque não precisava disso e, de qualquer maneira, há muitas chamadas. Mas agora tenho que descobrir como lidar com esse cenário estranho. Não consegui encontrar nenhuma solução de outras pessoas que possam ter encontrado isso. Aqui está a regra que usei, a única:
-a always,exit -F arch=b64 -S all -F dir=/mnt/user/home/ -F success=1
Tive que ampliá-lo para solucionar problemas porque, como disse, não estava procurando openat
syscalls. A única coisa que consigo pensar é incluir openat
e de alguma forma vincular as chamadas openat
e renameat
syscalls, filtrando quaisquer openat
chamadas que não correspondam. Mas o problema é que meus scripts atualmente funcionam por evento, e são dois eventos. Tenho certeza de que há mais questões nas quais nem pensei. Alguma idéia de como lidar com isso?
Acho que seja intencional ou não, é assim que funciona. Eu consideraria isso um bug, mas postei na página do github sobre isso, então não acho que haja nada a ser feito.