Категорії
FreeBSD Solaris

[dtrace] Протоколируем удалённые файлы

Ниже будет приведён скрипт, который позволяет перехватить удаление файла и вывести сообщение на консоль. При этом, на место блока /* INSERT HERE */ можно вставить свои обработчики, которые будут выполняться каждый раз, когда кто-то захочет удалить файл.

#!/usr/sbin/dtrace -s

#pragma D option quiet
#pragma D option destructive

BEGIN
{
  self->interested =0;
}

proc:::exec-success
/(execname =="rm") && (self->interested == 0) && (dirname(curpsinfo->pr_psargs) != ".")/
{
  self->interested = 1 ;
  printf("Someone is trying to delete %s/%s at %d\n",dirname(curpsinfo->pr_psargs+3),basename(curpsinfo->pr_psargs),`time);
  /* INSERT HERE */
  stop();
  system("prun %d", pid);
}

proc:::exec-success
/(execname =="rm") && (self->interested == 0) && (dirname(curpsinfo->pr_psargs) == ".")/
{
  self->interested = 1 ;
  printf("Someone is trying to delete %s/%s at %d\n",cwd,basename(curpsinfo->pr_psargs+3),`time);
  /* INSERT HERE */
  stop();
  system("prun %d", pid);
}

После запуска увидим такое:

# ./zfs_snap_rm.d
Someone is trying to delete /export/home/skeletor/scripts/1.txt at 1353942723

Время указано в UnixTimeStamp. Для конвертации можно использовать команду

$perl -e 'print localtime(1353942723) . "\n";'

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff