Audyt plików w systemie Linux: jak oglądać drzewo katalogów pod kątem usuwania?

9

Mam skrypt forum działający na serwerze i jakoś mała liczba załączników zaczyna się gubić. Chcę dowiedzieć się, co je usuwa i o której godzinie. Jak mogę skonfigurować Linux auditd (auditctl), aby obserwował drzewo katalogów (załączniki są przechowywane w drzewie katalogów wielopoziomowych), aby sprawdzał tam usunięcie plików?

Może powinienem do tego użyć innego narzędzia?

Vladislav Rastrusny
źródło

Odpowiedzi:

8

Oto odpowiedź, którą napisałem na poprzednie pytanie:

Zasadniczo, jeśli chcesz wiedzieć, co robi proces / użytkownik / plik bez konieczności uruchamiania na nim lsof 24/7, korzystasz z audctl.

Zakładając, że masz ostatnio przeprowadzoną kontrolę jądra, powinna to być prosta operacja. (To jest w Debian-fu, jeśli korzystasz z tłumaczenia Red Hat odpowiednio)

# apt-get install auditd

Upewnij się, że działa (status /etc/init.d/auditd).

auditctl -a entry,always -F arch=b64 -S open -F pid=<process id>

Zamień b64 na b32, jeśli korzystasz z 32-bitowego archa, open można zastąpić dowolnym wywołaniem systemowym lub słowem „all”

Więcej informacji znajdziesz na stronie audytu.

Możesz użyć tej metody i poprosić ją o sprawdzenie wywołania systemowego „unlink”.

Parametr -w jest przydatny do oglądania plików / katalogów, ale jak wyjaśnia strona podręcznika, istnieją zastrzeżenia.

-w ścieżka Wstaw zegarek dla obiektu systemu plików w ścieżce. Nie można wstawić zegarka do katalogu najwyższego poziomu. Jest to zabronione przez jądro. Symbole wieloznaczne również nie są obsługiwane i wygenerują ostrzeżenie. Sposób działania zegarków polega na wewnętrznym śledzeniu i-węzła. Oznacza to, że jeśli umieścisz zegarek w katalogu, zobaczysz coś, co wydaje się zdarzeniami w pliku, ale tak naprawdę jest to tylko aktualizacja metadanych. W ten sposób możesz przegapić kilka wydarzeń. Jeśli chcesz oglądać wszystkie pliki w katalogu, zaleca się umieszczenie pojedynczego zegarka na każdym pliku. W przeciwieństwie do reguł inspekcji syscall, zegarki nie wpływają na wydajność na podstawie liczby reguł wysłanych do jądra.

Aaron Tate
źródło
Nie mogę :( Mam PHP działające w trybie CGI. Zawsze tam jest nowy proces. Nie chcę też oglądać jednego procesu, ale obserwuję zmiany w systemie plików.
Vladislav Rastrusny
Tak, zobacz edycję, zrobiłem, są parametry do oglądania katalogów systemu plików, ale z zastrzeżeniami lub plikami.
Aaron Tate
Istnieje około 1000 folderów i około 50 000 plików. To też nie zadziała ... :(
Vladislav Rastrusny
Zasadniczo, o ile wiesz o zastrzeżeniach, powinieneś być w stanie po prostu umieścić zegarek w katalogu najwyższego poziomu, który zawiera foldery, które chcesz obejrzeć.
Aaron Tate
Muszę zrobić to samo (obserwować folder pod kątem usuwania, aby znaleźć PID / nazwę procesu, która to zrobiła), ale wydaje się, że to nie działa (przynajmniej w jądrze 3.x). Jeśli uruchomię polecenie „auditctl -a, zawsze -F arch = b64 -S unlink -w / path / to / dir”, aby śledzić usunięcia, to otrzymam „nie można podać opcji oglądania z wywołaniem systemowym”. Czy ktoś ma jakieś pomysły?
IBBoard,
1

Może można zastosować incron ?

ptman
źródło
Nie pozwala oglądać drzewa w całości. Tylko dla katalogu, jak widzę.
Vladislav Rastrusny
0

Kilka pomysłów. Możesz użyć, straceaby zobaczyć, co robi twoja aplikacja, ale może wygenerować dziennik i spowolnić system.

Innym pomysłem jest użycie inotifywait, a następnie lsof/fuserw pliku, aby zobaczyć, co go używa. Możesz spróbować uruchomić ten skrypt z wysokim priorytetem (jeśli możesz), aby uzyskać informacje tak dokładne, jak to możliwe. Prawdopodobnie nie złapie unlinkpołączenia, ponieważ plik zostanie usunięty przed dostarczeniem zdarzenia.

Dan Andreatta
źródło
Nie mogę. Nie wiem, na którym procesie uruchomić strace, ponieważ po pewnym czasie znajduję usunięte pliki. Inotifywait nie będzie również działać, ponieważ PHP działa jako CGI i istnieje wiele procesów PHP z różnymi identyfikatorami.
Vladislav Rastrusny
Inotify służy do monitorowania systemu plików, a nie uruchomionych procesów. W celu śledzenia należy śledzić główny proces nadrzędny za pomocą -fflagi, aby podążać za dziećmi.
Dan Andreatta
0

Chociaż zalecana przez fenix rekomendacja wydaje się idealna, może się okazać, że system plików IDS, taki jak AIDE, jest pomocny. Niestety jest mało prawdopodobne, aby był wystarczająco drobnoziarnisty dla tego, co próbujesz izolować.

Często piszę skrypty jako rozwiązanie problemów takich jak to, co opisujesz. Jeśli nie możesz osiągnąć tego, co chcesz za pomocą zalecanych rozwiązań, napisz coś sam. Często nie jest to bardzo skomplikowane.

Warner
źródło
Wygląda na to, że służy tylko do lokalizowania zmian plików. Nie do monitorowania w czasie rzeczywistym.
Vladislav Rastrusny