Wiem, że mogę przeglądać otwarte pliki procesu używającego lsof
w tym momencie na moim komputerze z systemem Linux. Jednak proces może otwierać, modyfikować i zamykać plik tak szybko, że nie będę go widział podczas monitorowania go przy użyciu standardowych skryptów powłoki (np. watch
), Jak wyjaśniono w „monitorowaniu otwartych plików procesu w systemie Linux” (w czasie rzeczywistym) ” .
Tak więc myślę, że szukam prostego sposobu przeprowadzenia audytu procesu i zobaczenia, co zrobiło z upływem czasu. Byłoby wspaniale, gdyby można było również zobaczyć, jakie połączenia sieciowe nawiązał (próbował) i rozpocząć audyt, zanim proces uzyskał czas na uruchomienie bez rozpoczęcia audytu.
Idealnie chciałbym to zrobić:
sh $ audit-lsof /path/to/executable
4530.848254 OPEN read /etc/myconfig
4530.848260 OPEN write /var/log/mylog.log
4540.345986 OPEN read /home/gert/.ssh/id_rsa <-- suspicious
4540.650345 OPEN socket TCP ::1:34895 -> 1.2.3.4:80 |
[...]
4541.023485 CLOSE /home/gert/.ssh/id_rsa <-- would have missed
4541.023485 CLOSE socket TCP ::1:34895 -> 1.2.3.4:80 | this when polling
Czy byłoby to możliwe przy użyciu strace
niektórych flag, aby nie wyświetlały się wszystkie wywołania systemowe?
źródło
Odpowiedzi:
Uruchamianie z
prawdopodobnie byłby wystarczający.
Musisz użyć
-o
opcji, aby umieścić wyjście strace w innym miejscu niż konsola, jeśli proces może wydrukować na stderr. Jeśli proces się rozwiąże, będziesz potrzebować również-f
lub-ff
.Aha, możesz też chcieć
-t
, abyś mógł zobaczyć, kiedy nastąpiły połączenia.Uwaga: może być konieczne dostosowanie listy wywołań funkcji w zależności od tego, co robi Twój proces - musiałem
getdents
na przykład dodać , aby uzyskać lepszą próbkę, używającls
:źródło
-o
do wypchnięcia danych wyjściowych do pliku (ów). Następnie możesz uruchomićtail -F strace.output
w innym terminalu, aby uzyskać aktualizację „na żywo”.strace
do uruchomionego procesu z-p PID
opcją.-y
do „[p] ścieżek rint powiązanych z argumentami deskryptora pliku”