Próbuję znaleźć sposób zarejestrowania określonej instancji, rrdtool
aby sprawdzić, czy ścieżka, którą otrzymuje, jest niepoprawna.
Wiem, że mógłbym owinąć plik wykonywalny w skrypcie powłoki, który rejestrowałby parametry, ale zastanawiałem się, czy istnieje bardziej specyficzny sposób monitorowania tego przez jądro, być może wywołanie zwrotne systemu plików, które widzi, kiedy określony / proc / pid / exe pasuje do danego pliku binarnego?
auditd
nagranie argumentów wiersza poleceń oraz uruchomienia programu? serverfault.com/questions/765179/…Odpowiedzi:
Tak, istnieje narzędzie jądra: podsystem kontroli.
auditd
Demon robi rejestrowanie, a komendaauditctl
ustawia zasady rejestrowania. Możesz rejestrować wszystkie połączenia do określonego systemu alls, z pewnym filtrowaniem. Jeśli chcesz zarejestrować wszystkie wykonane polecenia i ich argumenty, zarejestrujexecve
wywołanie systemowe:Aby w szczególności śledzić wywołanie określonego programu, dodaj filtr do pliku wykonywalnego programu:
Dzienniki pojawiają się w
/var/log/audit.log
dowolnym miejscu w Twojej dystrybucji. Musisz być rootem, aby kontrolować podsystem kontroli.Po zakończeniu badania użyj tego samego wiersza polecenia
-d
zamiast zamiast,-a
aby usunąć regułę rejestrowania lub uruchom,auditctl -D
aby usunąć wszystkie reguły kontroli.W celu debugowania zastąpienie programu skryptem opakowania zapewnia większą elastyczność w rejestrowaniu takich rzeczy, jak środowisko, informacje o procesie nadrzędnym itp.
źródło
-F path=/ust/bin/rrdtool
? Nie rozumiem, w jaki sposóbrrdtool
jest nawet powiązane oprogramowanie.rrdtool
. Jeśli chcesz rejestrować wywołania wszystkich programów, upuść-F path=…
część (oczywiście otrzymasz wiele dzienników).auditctl
polecenie działa tylko do momentu ponownego uruchomienia?auditctl
tylko przetrwa do momentu ponownego uruchomienia, ale to i tak dobra uwaga, dodałem instrukcje dotyczące ich usuwania bez ponownego uruchamiania do mojej odpowiedzi.Możesz użyć snoopy .
Snoopy jest bardziej lekkim rozwiązaniem, ponieważ nie wymaga współpracy jądra. Wszystko czego potrzeba to dynamiczny moduł ładujący (dl), który wstępnie ładuje bibliotekę snoopy, do której ścieżka jest określona w
/etc/ld.so.preload
.Ujawnienie: Jestem obecnym opiekunem snoopy.
źródło
Podsystem „audytu” jądra systemu Linux może wykonać to, czego potrzebujesz.
np. jeśli uruchomisz następujące polecenia:
Następnie każde zdarzenie wykonania jest rejestrowane i wokół niego znajduje się wiele informacji
np. to jest wynik mojego działania
tail /var/log/audit/audit.log
Istnieje kilka interesujących wartości, które można zobaczyć; np. „auid” to 500, co jest moim identyfikatorem logowania, mimo że „uid” wynosi zero (bo pod którym pracuję
su
). Więc nawet jeśli użytkownik mógł zmienić kontosu
lubsudo
nadal możemy wyśledzić jego „identyfikator kontroli”Teraz te
auditctl
polecenia zostaną utracone przy ponownym uruchomieniu. Możesz umieścić je w pliku konfiguracyjnym (np. W/etc/audit/rules.d/
katalogu na CentOS 7). Dokładna lokalizacja zależy od wersji systemu operacyjnego. Stronaauditctl
podręcznika powinna tutaj pomóc.Uważaj jednak ... spowoduje to wygenerowanie wielu komunikatów dziennika. Upewnij się, że masz wystarczająco dużo miejsca na dysku!
W razie potrzeby reguły można ograniczyć do określonego użytkownika lub określonego polecenia.
A także strzeżcie się; jeśli użytkownik wprowadzi hasło do wykonania polecenia (np.
mysql --user=username --password=passwd
), zostanie ono zarejestrowane.źródło