Jak rejestrować wszystkie wywołania systemowe wykonane przez proces i wszystkich jego potomków za pomocą audd


13

mogę zrobić

auditctl -a always,exit -S all -F pid=1234

Aby zarejestrować wszystkie wywołania systemowe wykonane przez pid 1234 i:

auditctl -a always,exit -S all -F ppid=1234

Dla swoich dzieci, ale jak mam objąć wnuki i ich dzieci (obecne i przyszłe)?

Nie mogę polegać na (e) uid / (e) gid, które się zmieniają.

(pamiętaj, że używanie również stracenie jest opcją)


4
omg, omg, omg, Stephane zadaje pytanie ... (Przyszedłem tu tylko z tytułu, myśląc strace -s^^, ale potem zobaczyłem, kto pyta i od razu wiedziałem „on już to wie!”) ... Stephane, możesz może: 1) zbudować listę pidów, używając opcji „drzewa” ps, 2) uruchomić audctl (s) na wszystkich pidach wymienionych w drzewie? (tj. czy możesz mieć wiele „pid = ....”? lub wiele auditctl, każdy na jednym?) lub „głupi” sposób: auditctl wszystko, i jakiś egrep na „pid | pid | pid” jeśli pojawiają się w każdej linii?) (zastrzeżenie: nie mam dostępu do bankomatu Linuksa, więc nie mam pojęcia, jak wyglądają informacje)
Olivier Dulac

sztuczka, której mógłbyś użyć (jeszcze raz, nie znam specyfiki audytu, ani nie mogę w tej chwili spróbować): podać konkretną zmienną środowiskową podczas uruchamiania najwyższego rodzica i skontrolować wszystkie procesy z tą zmienną ustawioną?
Olivier Dulac

@OlivierDulac, oznaczanie procesu w jakiś sposób (dziedziczony przez dzieci) to jedna z rzeczy, o których myślę. Ale lista rzeczy, z którymi reguły kontroli mogą się zgadzać, jest dość cienka (nawet sid, pgid ...). Może te SELinuksa, ale nie wiem o pierwszej rzeczy na temat SELinuksa. Może przetwarzać przestrzenie nazw?
Stéphane Chazelas

może najwyższy rodzic może być we własnej grupie procesów? ( en.wikipedia.org/wiki/Process_group )
Olivier Dulac

2
Pomyślałem, że może uruchom twój program w określonym kontenerze, jeśli jest to opcja dla ciebie. Jeśli dobrze rozumiem ten wątek błędu , powinien on działać z jądrem ≥3,13. Poza tym nie widzę żadnej metody innej niż SELinux i identyfikator UID kontroli . Czy AUID będzie miał zastosowanie do Twojego przypadku użycia?
Gilles „SO- przestań być zły”

Odpowiedzi:


1

Po prostu proponuję coś bez możliwości wypróbowania tego teraz ... ale zgaduję na podstawie samego postu

Oto propozycja rozwiązania:

Zakładając, że najwyższy identyfikator procesu znajduje się w $ pid, i to również w Linuksie ps -Tdaje drzewo procesów (w tej chwili nie mam dostępu do linux)

for eachpid in $(ps -T "$pid" | awk '{print $1}' | grep -v 'PID')
do
   auditctl -a always,exit -S all -F pid=$eachpid  >somelog_${eachpid}.log 2>&1
done

Oczywiście zamień ps -T "$pid"na ekwiwalent linuksa, jeśli ten nie działa na linuksie (lub znajdź go poprzez przebudzenie wyjścia „pstree -p”, pid będzie między nawiasami)


2
Dzięki, ale to nie obejmuje „przyszłych” dzieci, a uruchamianie tego w pętli często nie obejmuje krótkotrwałych procesów. Ponowne użycie pid również stanowiłoby problem.
Stéphane Chazelas

wszystkie ważne punkty ... Zatem uważam, że to, czego chcesz, jest prawdopodobnie „najbardziej pożądaną” funkcją, a zatem może już być obecne na poziomie audytu (ale z pewnością nie pojawia się teraz na stronie podręcznika): może mieć do zaproponowania (lub ... napisania) do przyszłej wersji. Nie przypominam sobie żadnego sposobu, aby „podążać za drzewem” procesów ... ale możesz zaimplementować jeden po drugim), że jakiś skrypt wykonuje regularne odpowiedniki „ps -T”, 2) inny skrypt zabija pierwszy, gdy tylko pid umiera 3) za każdym razem, gdy zmienia się lista pid z 1), dodaj / usuń auditctl dla tych pid? (nie jest to zbyt trudne)
Olivier Dulac

1
(mój ostatni komentarz nie rozwiązuje pb dla bardzo krótkotrwałych procesów ... może to wymagać czegoś na poziomie samego jądra i nie wiem wystarczająco dużo, aby powiedzieć, czy coś istnieje. Może być warte pytania listy mailingowe jądra)
Olivier Dulac
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.