2011-08-03 18 views
8

Szukam wskazówek, jak dowiedzieć się, który użytkownik zmodyfikował określony plik. Podczas gdy inotify jest świetny, aby otrzymać powiadomienie, gdy dany plik zostanie dotknięty, jak mogę się dowiedzieć, który użytkownik zmodyfikował ten plik? Mogę myśleć o użyciu lsof, ale obawiam się, że może nie być tak "realtime", jak chcę i/lub może to być zbyt duży podatek od zasobów. W ujęciu realnym mam na myśli to, że jeśli użytkownik po prostu wykona polecenie w pliku touch, do czasu uruchomienia pliku lsof może nie zostać odebrany przez lsof.inotify - jak dowiedzieć się, który użytkownik zmodyfikował plik?

Odpowiedz

11

Można użyć audit deamon:

sudo apt-get install auditd 

Wybierz plik do monitorowania

touch /tmp/myfile 

Dodaj badania do zapisu i zmiany atrybutów (-p wa):

sudo auditctl -w /tmp/myfile -p wa -k my-file-changed 

Plik dotknięciu przez jakiegoś użytkownika:

touch /tmp/myfile 

kłody Sprawdź kontrolne:

sudo ausearch -k my-file-changed | tail -1 

Można zobacz UID użytkownika, który uruchomić komendę na wyjściu

type = syscall msg = audyt (1313055675.066: 57): arch = syscall c000003e = 2 sukces = Tak wyjście = 3 a0 = 7ffffb6744dd a1 = a2 = 1B6 941 a3 = 7ffffb673bb0 pozycji = 1 ppid = 3428 PID = 4793 auid = 4294967295 UID = 1000 GID = 1000 euid = 1000 suid = 1000 fsuid = 1000 egid = 1000 sgid = 1000 fsgid = 1000 tty = pts1 ses = 4294967295 comm = "dotyk" exe = "/ bin/dotyk" key = "my-file-changed"

Aby uzyskać szczegółowe informacje na temat użycia, patrz man pages lub ten sample guide.

+0

niesamowite! wielkie dzięki. – user837208

2

Jeśli dodasz opcję -i we wcześniejszym poleceniu, otrzymasz wynik w formacie bardziej czytelnym dla człowieka. Otrzymasz identyfikator UID przekonwertowany na prawdziwą nazwę użytkownika na serwerze.

ausearch -k my-file-changed -i | ogon -1

Powiązane problemy