Korzystając z Linuksa, chciałbym śledzić pliki wykonywalne wykonywane w moim imieniu, w tym całą linię poleceń (w praktyce każdy exec * () wykonywany jako mój własny użytkownik). Program, którego nie kontroluję, ma na celu wykonanie zadania, które przekazuję, ale chcę się upewnić, że to robi, i jakich opcji używa. Program, którego nie kontroluję, jest podstępny i wydaje się zmieniać zachowanie w zależności od nazwy programu, który ma wykonać dla zadania, więc nie mogę przekazać skryptu powłoki, który zarejestrowałby informacje i wywołałby prawdziwe program.
Czy mogę otrzymywać informacje o wszystkich exec * () wykonanych jako mój użytkownik w systemie Linux, w tym o pełnej linii poleceń? ps
To znaczy, że brakuje biegu w pętli. Wolę to zrobić bezpośrednio w systemie, na którym pracuję, i nie wymagam dostępu do roota, ale w razie potrzeby mogę spawnować system, do którego mam dostęp root, zainstalować programy i tam zbadać.
Korzystanie z Ubuntu 12.4 LTS.
źródło
audit
daje odpowiedź , ale „cała linia poleceń” w powłoce może również wpływać na proces potomny za pomocą ustawień przekierowania / potoku i envvar, a także zawierających podstawienia / rozszerzenia, nieistotne cytowanie i odstępy i struktury kontrolnedoa && dob
, i nie dostaniesz ich.Odpowiedzi:
Musisz skonfigurować,
auditd
aby rejestrowaćexecve
zdarzenia. Przykład na RHEL5:Ignoruję ostrzeżenie o łuku i wydaje się, że to nie ma znaczenia, ale możesz go użyć
-F arch=b64
lub-F arch=b32
ustawić, jeśli chcesz.Wynikiem powyższego jest:
To oczywiście szybkie i brudne, ale to podstawy tego, jak to robisz. To, co musisz zrobić dokładnie, prawdopodobnie zależy w dużej mierze od tego, co chcesz dokładnie zrobić. Możesz ograniczyć przepływ inspekcji za pomocą różnych filtrów w
auditctl
poleceniu, ale nie znam żadnej z tych informacji, więc nie wiem, co uwzględnić. Jeśli potrzebujesz czegoś bardziej konkretnego, sugeruję sprawdzenie strony podręcznika lub opublikowanie komentarza do tej odpowiedzi, a ja ją zaktualizuję.Mam nadzieję, że pomożesz we właściwym kierunku.
EDYTOWAĆ:
Ponieważ twoje pytanie dotyczy konkretnego użytkownika, mogę ci pokazać, że:
Identyczny z powyższym, ale rejestrowany jest tylko
execve
przez osobę działającą z efektywnym identyfikatorem użytkownika16777216
. Jeśli musisz podać wartość użytkownikaloginuid
(którego początkowo zalogował się w systemie jako),auid
zamiast tego filtruj według :Filtry AUID / loginuid byłyby przydatne na przykład, jeśli użytkownik zrobi a
su
lub rootowaćsudo
. W tej sytuacji będzie wiele rzeczy działających jako root, ale martwisz się tylko o rzeczy, które zostały wyrzucone przez danego użytkownika.auditctl
umożliwia także układanie filtrów w stos, dzięki czemu możesz filtrować według obu tych elementóweuid
iauid
:źródło
Zadałeś coś prostego. Zrobiłem przykład,
mplayer
ale myślę, że można go dostosować do innych sytuacji:Jak widać, jest to bardzo proste: parsuje pierwszy argument, ponieważ jest to plik, dziennik jest tworzony w pliku centralnym
$LOG
i łączony w plik (który ma zawsze tę samą nazwęmplayer.log
w tym samym katalogu.Tak więc użytkownik może uzyskać najnowszy film, który przeczytał w każdym katalogu.
źródło