Nie zamierzam korzystać ze skomplikowanych narzędzi, takich jak tryb skarg AppArmor, potrzebuję łatwych narzędzi, aby powiedzieć mi, do których plików dostęp ma dany program.
linux
files
process
open-files
Boll19
źródło
źródło
fstat()
lublstat()
informacje itp.Odpowiedzi:
Według Chrisa Down możesz użyć
strace -p
do zbadania już uruchomionego procesu, aby zobaczyć, jakie pliki otwiera od teraz, aż do momentu zakończenia śledzenia lub samego procesu.Jeśli chcesz, aby pliki były otwarte przez cały czas trwania procesu, od samego początku użyj
strace
nazwy pliku wykonywalnego. Dodanie-f
gwarantuje, że raportowane będą również wszelkie rozwidlone podprocesy. PrzykładUżywanie
lsof
do sprawdzania, jakie pliki aktualnie otwiera procesJeśli masz SystemTap, możesz monitorować cały host pod kątem otwierania plików.
źródło
open
to nie jedyne odpowiednie wywołanie systemowe. Na przykład możliwe jest przekazywanie deskryptorów plików między procesami przez gniazdo unix, i istniejeopenat
wywołanie systemowe, które może również otworzyć plik.strace
, patrz wiersze ENOENT w przykładzie.Możesz skorzystać
opensnoop
z BCC, który korzysta z eBPF pod maską:Jest to dość wydajne, ponieważ używa kprobes zamiast restartować syscalls, podobnie jak
strace
robi.Możesz to również zrobić za pomocą
strace
(potencjalnie z-f
podążaniem za potomkami śledzonego procesu), ale jego sposób działania, polegający na ponownym uruchomieniu wywołań systemowych w ramach ptrace , nieco spowolni twoją aplikację:Możesz również uruchomić aplikację w ten sposób, jeśli chcesz, używając
strace [executable]
lubstrace -f [executable]
.źródło
Moim ulubionym narzędziem do monitorowania, które pliki otwiera aplikacja, jest potężne środowisko monitorowania
sysdig
.Do monitorowania wszystkich otwartych plików otwartych przez program o nazwie
exe_file
:Monitorowanie wszystkich plików otwartych na serwerze:
Tworzenie pliku śledzenia, który będzie zawierał tylko zdarzenia zapisu w katalogach domowych (które możemy później sprawdzić
sysdig -r writetrace.scap.gz
):Widząc wszystko na poziomie syscall, proces o nazwie
exe_file
wykonuje:Sysdig ma wiele dłut, sprawdź ciekawsze rzeczy, które może zrobić:
Przykłady Sysdig
Jak monitorować i rozwiązywać problemy z serwerem Linux za pomocą sysdig
Masz również to,
dtrace
że nie jest zbyt często używane w Linuksie, ale nadal jest dużo używane w systemach operacyjnych * BSD:Poza tym
sysdig
,strace
idtrace
, również mamltrace
, które rekordy / przechwytuje sygnały / biblioteki dynamiczne / wywołania systemowe, które są nazywane / otrzymane w procesie:Jeśli program jest mały, możesz również rozważyć jego dezasemblację
objdump -d exe_file
lub deasemblację / dekompilacjęHopper
, aby zobaczyć wszystkie pliki , z którymi ma do czynienia.Aby uzyskać więcej informacji, zobacz: Zrozumienie, co robi plik binarny systemu Linux
Jako pierwsze podejście zrobiłbym również:
Jest to podejście tanie, a przy odrobinie szczęścia niektóre nazwy plików mogą po prostu być obecne w trybie ASCII w pliku binarnym przy odrobinie szczęścia.
Zobacz także pokrewną odpowiedź Dlaczego prawda i fałsz są tak duże?
Jeśli pliki binarne / pliki dostarczane z dystrybucją można również pobrać źródła ze źródłowych repozytoriów dystrybucji lub oficjalnych repozytoriów rzeczywistego narzędzia.
Jako ostatni zasób możesz zawsze używać narzędzi takich jak gdb lub rr do debugowania pliku binarnego w czasie rzeczywistym.
źródło
sysdig
błędu (czy używasz ARM?), Proszę o nowe pytanie.