Chciałbym uzyskać dziennik wszystkich procesów uruchomionych wraz z czasem, w którym zostały uruchomione, oraz argumentami, z którymi zostały uruchomione. Czy to możliwe w Linuksie?
55
Punktem wyjścia powinien być audyt.
Wypróbuj coś takiego:
apt-get install auditd
auditctl -a task,always
ausearch -i -sc execve
The audit system is disabled
Gdzie mogę to włączyć?chmod 0750 /sbin/audispd
ale wciąż nie działa (Debian Wheezy)Unable to set audit pid, exiting
ale wydaje mi się, że prawdziwym problemem będzie to, że system działa w kontenerzeMusiałem to zrobić, z wyjątkiem tego, że (1) nie potrzebowałem czasu i (2) interesowałem się tylko procesami, które są uruchamiane przez dany proces oraz jego potomkami i późniejszymi potomkami. Również w środowisku używałem, to nie było możliwe, aby uzyskać
auditd
alboaccton
, ale nie byłovalgrind
.W wierszu komend wpisz następujący proces:
Potrzebne informacje znajdą się w danych wyjściowych dziennika wyświetlanych w STDERR.
źródło
memcheck
narzędziem. Aby wyłączyć narzędzie i związanego rejestrowanie i drukować tylko tworzenie nowych poleceń (oprócz zwykłego wyjścia programu), należy użyć następującego polecenia zamiast:valgrind --tool=none --trace-children=yes [command and args here]
. Za każdym razem, gdy podproces jest spawnowany, Valgrind rejestruje pełne polecenie, łącznie z przekazanymi mu argumentami.Możesz użyć do tego snoopy .
Jest bardzo prosty w instalacji, a od wersji 2.x może rejestrować dowolne dane (argumenty, zmienne środowiskowe, cwd itp.).
Ujawnienie: Opiekun Snoopy tutaj.
źródło
Możesz uruchomić startmon i postępować zgodnie ze standardowym wyjściem, Ctrl-C po zakończeniu. Oto jak skompilować i uruchomić startmon na ostatnich dystrybucjach pochodzących z Red Hata (RHEL, Fedora, CentOS):
W Debianie (i Ubuntu itp.) Pierwsza linia powyższego zmienia się na:
Alternatywnie możesz wypróbować
execsnoop
skrypt w perf-tools, zobacz tę odpowiedź . Domyślnie wyświetlane jest tylko pierwszych 8 argumentów (9 łącznie z nazwą programu); możesz to zwiększyć poprzezJeśli nie masz dostępu do systemu root, najlepiej możesz nadal odpytywać
/proc
i mieć nadzieję, że wyłapie wszystko (czego nie zrobi), ale dla kompletności oto skrypt do zrobienia tego (umieściłem usuwanie duplikatów w celu uproszczenia danych wyjściowych) - chociaż nie jest to tak dobre, jak ich prawidłowe śledzenie za pomocą jednej z powyższych metod, ma niewielką zaletę jednoznacznego wyświetlania separatorów między argumentami wiersza polecenia, na wypadek, gdybyś kiedykolwiek musiał powiedzieć różnica między spacjami wewnątrz argumentu a spacją między argumentami. Ten skrypt jest nieefektywny, ponieważ używa procesora (cóż, jednego z jego rdzeni) przez 100% czasu.Możesz także załatać,
execsnoop
aby powiedzieć ci, który argument jest który:grep -v sub.*arg < execsnoop > n && chmod +x n && mv n execsnoop
źródło
CONFIG_FTRACE
iCONFIG_KPROBES
przezbrendangregg/perf-tools
Na innej powłoce:
Pierwsza powłoka pokazuje dane formatu:
CONFIG_PROC_EVENTS
Przykładowa sesja:
CONFIG_PROC_EVENTS
udostępnia zdarzenia do użytkownika przez gniazdo netlink .proc_events.c zaadaptowano z: https://bewareofgeek.livejournal.com/2945.html
Upatream GitHub .
Nie sądzę jednak, aby można było uzyskać dane procesowe, takie jak UID i argumenty procesowe, ponieważ
exec_proc_event
zawiera tak mało danych: https://github.com/torvalds/linux/blob/v4.16/include/uapi/linux/cn_proc .h # L80 Moglibyśmy spróbować odczytać go natychmiast/proc
, ale istnieje ryzyko, że proces się skończy, a inny przejmie PID, więc nie byłby wiarygodny.Testowane w Ubuntu 17.10.
źródło
Możesz także użyć atop do przeglądania wykorzystania zasobów przez procesy. Jest to przydatne narzędzie do rejestrowania i analizowania zużycia zasobów w każdej części czasu
źródło
Możesz spróbować
cat ~/.bash_history
Jestsystem log viewer
, to może ci pomóc.źródło
~/.bash_history
najwyraźniej zawiera tylko polecenia, które wykonałem w terminalu. Szukam dziennika wszystkich wykonanych programów, na przykład kiedy klikam ikonę, aby otworzyć klienta poczty e-mail, gedit lub otwieram przeglądarkę, a moja przeglądarka sama wykonuje inny proces. Odpowiedź new123456 załatwiła sprawę.history
jest zwykłym sposobem uzyskiwania dostępu do tych informacji.