Nie możesz naprawić tego, czego nie widzisz.
– Klasyk cyberbezpieczeństwa (i każdego sysadmina)
Czym jest ps? – Stary, dobry status procesów
ps (process status) to narzędzie, które pokaże Ci migawkę wszystkich uruchomionych procesów. Jest wszechobecne, lekkie i dostępne praktycznie w każdym środowisku Linuksowym. To podstawa, od której zaczynamy nasze śledztwo.
Podstawowe użycie: Migawka systemu
# Standardowy widok (tylko procesy z bieżącego terminala)
ps
# Pokaż wszystkie procesy wszystkich użytkowników, z procesami bez terminala (`a`),
# użytkownikami i procesami niepowiązanymi z terminalem (`x`)
ps aux
# Bardziej uniksowy format, z hierarchią i pełnymi ścieżkami (dość czytelny)
ps -ef
# Pokaż pełne polecenie (bez obcinania, `-ww` to taka turbo-wersja)
ps -efwwRozumienie wyników ps aux: Co te kolumny oznaczają?
Kiedy uruchomisz ps aux, dostajesz tabelę pełną cyfr i liter. Co to wszystko znaczy?
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2384 1464 ? Ss Feb18 0:05 /sbin/init
ubikone 12345 5.3 12.1 123456 45678 ? Sl 09:30 0:15 /usr/bin/firefox- USER – Kto jest właścicielem tego procesu? (np. root, ubikone)
- PID – Process ID. Unikalny numer identyfikujący proces (np. 1, 12345). Klucz do interakcji z procesem!
- %CPU – Ile procent mocy obliczeniowej procesora zużywa ten proces? (np. 0.0, 5.3)
- %MEM – Ile procent całkowitej pamięci RAM zużywa ten proces? (np. 0.0, 12.1)
- VSZ – Virtual Size. Całkowita wirtualna pamięć, której proces używa (w KB).
- RSS – Resident Set Size. Faktyczna fizyczna pamięć (RAM) używana przez proces (w KB).
- TTY – Terminal, z którego proces został uruchomiony (np. ? dla procesów systemowych, pts/0 dla terminala).
- STAT – Status procesu. To bardzo ważne!
- R = Running (biegnie)
- S = Sleeping (uśpiony, czeka na coś)
- D = Uninterruptible Sleep (nieprzerwany sen, czeka na I/O, np. dysk – czerwona flaga!)
- Z = Zombie (proces-duch, umarł, ale jego rodzic nie odebrał statusu zakończenia – czerwona flaga!)
- T = Stopped (zatrzymany, np. przez Ctrl+Z)
- + = Proces działa w tle
- l = Proces wielowątkowy (np. Sl jak w Firefoxie)
- s = Lider sesji (np. Ss jak w init)
- START – Kiedy proces został uruchomiony.
- TIME – Całkowity czas CPU zużyty przez proces.
- COMMAND – Pełne polecenie, które uruchomiło proces.
Filtrowanie procesów: Szukaj igły w stogu siana!
Gdy masz setki procesów, grep staje się Twoim najlepszym przyjacielem.
# Szukaj wszystkich procesów związanych z `nginx`
ps aux | grep nginx
# Pokaż tylko procesy należące do konkretnego użytkownika (np. "ubikone")
ps -u ubikone
# Pokaż 10 procesów, które najbardziej obciążają CPU (sortuj malejąco `-` od `%cpu`)
ps aux --sort=-%cpu | head -10
# Pokaż 10 procesów, które najbardziej zżerają pamięć RAM
ps aux --sort=-%mem | head -10Zabijanie procesów: Gdy proces się zbuntuje!
Czasem trzeba być brutalnym. kill wysyła sygnał do procesu, a kill -9 to jak strzał w łeb – zabija natychmiast.
# Zabij proces o konkretnym PID (domyślnie wysyła SIGTERM, który pozwala procesowi się 'posprzątać')
kill 12345
# Zabij WSZYSTKIE procesy o danej nazwie (np. `nginx`). Używaj z rozwagą!
killall nginx
# Zabij proces siłą (`-9` to sygnał SIGKILL, nie da się go zignorować)
kill -9 12345
# Zabij wszystkie procesy należące do danego użytkownika (np. "ubikone")
pkill -u ubikoneCzym jest htop? – top na sterydach!
htop to interaktywna, kolorowa alternatywa dla top. Daje znacznie więcej informacji w znacznie przyjemniejszej formie. Paski postępu CPU/RAM, łatwe sortowanie, filtrowanie, a nawet drzewo procesów – to wszystko w jednym, wygodnym widoku.
Instalacja: Must-have dla każdego!
sudo apt install htop # Debian/Ubuntu
sudo dnf install htop # RHEL/FedoraNawigacja w htop: Klient dla wygodnych
# Uruchom `htop` i ciesz się pięknym widokiem!
htop
# Najważniejsze klawisze:
# F1 - Pomoc (nigdy nie zaszkodzi)
# F2 - Setup (skonfiguruj kolumny, kolory, widok – dopasuj do swoich potrzeb!)
# F3 - Szukaj procesu (jak `grep`, ale interaktywnie)
# F4 - Filtr (pokaż tylko procesy spełniające warunki)
# F5 - Drzewo procesów (super do śledzenia zależności!)
# F6 - Sortuj (po PID, CPU, MEM – jak chcesz)
# F7/F8 - Zmień nice (priorytet procesu – daj kopa lub uspokój)
# F9 - Kill procesu (wyślij sygnał do procesu)
# q - Wyjście z `htop`Przydatne opcje htop: Użyj smartfona, nie cegły!
# Pokaż tylko procesy konkretnego użytkownika
htop -u ubikone
# Włącz tryb drzewa od razu po uruchomieniu
htop -t
# Tryb "standalone" (bez ncurses) – odświeża się co 5 sekund
htop -d 5PRO TIP: W htop naciśnij F5 (lub t na klawiaturze), aby przełączyć widok na drzewo procesów. To nieocenione, gdy próbujesz zrozumieć, który proces jest rodzicem, a który dzieckiem i dlaczego coś się uruchomiło. Super przydatne w śledztwach!
Praktyczne przykłady z bezpieczeństwa: Zostań procesowym detektywem!
Znajdź podejrzane procesy: Kto tu gra na zwłokę?
# Procesy otwierające połączenia sieciowe (potencjalne backdoory, malware)
ps auxww | grep -E 'tcp|udp|socket'
# Procesy z nietypowo wysokim zużyciem CPU (np. koparki kryptowalut, źle napisany kod)
ps aux | awk '$3 > 50 {print $0}' # pokaż procesy zużywające > 50% CPU
# Ukryte procesy (z pustą linią poleceń) – czasem to próba ukrycia działalności
ps aux | grep '^$'Wykryj reverse shelle: Gdy serwer dzwoni do domu atakującego!
Reverse shell to koszmar każdego admina. To proces na Twoim serwerze, który sam łączy się ZEWNĄTRZ do atakującego.
# Procesy nasłuchujące na sieci (szukaj nieznanych `LISTEN`)
ss -tulpn | grep LISTEN
# Procesy używające `/dev/tcp` lub `/dev/udp` (często używane przez proste reverse shelle w bashu)
ps aux | grep '/dev/tcp'
# Procesy uruchomione z `/tmp` (tymczasowy katalog to ulubione miejsce na malware)
ps aux | grep /tmpMonitoruj konkretny proces: Masz na oku swojego ulubieńca!
# Użyj `watch` do ciągłego monitorowania zużycia CPU/MEM konkretnego procesu (np. PID 1234)
watch -n 1 'ps -p 1234 -o %cpu,%mem,cmd'
# Lub prosta pętla w bashu
while true; do ps -p 1234 -o %cpu,%mem; sleep 1; doneZombie hunting: Polowanie na procesy-duchy!
Proces zombie to proces, który umarł, ale jego rodzic nie odebrał jego statusu zakończenia. Zombie nie zużywają CPU ani pamięci, ale zapychają tabelę procesów i są czerwoną flagą dla niestabilnego systemu lub źle napisanego oprogramowania.
# Znajdź wszystkie procesy zombie
ps aux | grep zombie
# lub
ps -eo pid,ppid,state,cmd | grep Z
# Aby "zabić" zombie, musisz zabić jego PROCES RODZICA (`PPID`)
kill -9 <PPID_procesu_rodzica>Podsumowanie: Zaglądaj pod maskę regularnie!
ps i htop to Twoje podstawowe narzędzia do zrozumienia, co dzieje się w sercu systemu. Jeden daje surowe dane, drugi – piękny, interaktywny widok. Razem tworzą zgrany duet!
Kluczowe punkty do zapamiętania:
- ps – szybka migawka procesów, niezastąpiony w skryptach.
- htop – interaktywny monitor, rewelacyjny do szybkiej diagnostyki “na żywo”.
- Naucz się interpretować kolumny (USER, PID, %CPU, %MEM, STAT).
- Umiej filtrować (grep), sortować (–sort) i zabijać (kill).
- Zwracaj uwagę na podejrzane procesy (wysokie CPU/MEM, /tmp, /dev/tcp).
# Twój nowy zestaw do szybkiego sprawdzania topowych zżeraczy CPU:
ps aux --sort=-%cpu | head -10OSTATNIE SŁOWO: Podejrzane procesy z wysokim CPU/pamięcią, zombie, lub te z STAT=D (nieprzerwany sen) to ZAWSZE znak, że trzeba działać. Następnym razem użyjemy strace, żeby zobaczyć, co one naprawdę robią.
Kolejny odcinek: strace – zobaczymy, co proces naprawdę robi (wywołania systemowe). Zostań z nami!