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 -efww

Rozumienie 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 -10

Zabijanie 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 ubikone

Czym 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/Fedora

Nawigacja 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 5

PRO 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 /tmp

Monitoruj 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; done

Zombie 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 -10

OSTATNIE 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!