Wszyscy mamy w sobie mały pierwiastek administratora, który chce wiedzieć, co dzieje się na jego podwórku. Zostawiasz komputer włączony, wychodzisz po kawę, wracasz i zastanawiasz się, czy kot znów nie przeszedł po klawiaturze, wysyłając szefowi dziwne ciągi znaków. W systemach z rodziny Ubuntu sprawdzanie aktywności konta to chleb powszedni dbania o bezpieczeństwo, a wiedza o tym, kto i kiedy uzyskał dostęp do maszyny, pozwala trzymać rękę na pulsie i eliminować zagrożenia już w zarodku. Ślady pozostawiane w systemie są trudne do ukrycia dla przeciętnego śmiertelnika, więc jeśli ktoś próbował się wkraść, zapewne o tym będzie informacja.
Według raportu Verizon DBIR 2024, zdecydowana większość, bo aż blisko 80% naruszeń bezpieczeństwa w webowych aplikacjach wynika z użycia skradzionych poświadczeń. Zatem monitorowanie dostępu do systemu to konieczność, a nie tylko zabawa dla entuzjastów cyberbezpieczeństwa.
System notuje praktycznie każdy ruch, tworząc dzienniki zdarzeń. Twoim zadaniem jest umiejętne odczytanie ich. Ubuntu przechowuje informacje w specyficznych plikach, do których mamy wgląd za pomocą kilku komend w terminalu. Nie potrzebujesz do tego drogiego oprogramowania antywirusowego czy skomplikowanych skryptów. Wystarczy terminal i wiedza.
Dlaczego warto kontrolować historię logowania
Monitoring aktywności w systemie Linux ma wymiar przede wszystkim prewencyjny. Czasami problemem nie jest złośliwy haker z kapturem na głowie, siedzący w ciemnej piwnicy, lecz zapominalstwo. Może zostawiłeś otwartą sesję SSH na innym komputerze? A może kolega z pracy, któremu kiedyś dałeś hasło do Wi-Fi, nagle zaczął eksperymentować z logowaniem na Twoje konto? Wgląd w logowaniach użytkowników pozwala szybko wychwycić anomalie. Jeśli zazwyczaj logujesz się w godzinach pracy, a system odnotowuje udaną sesję o trzeciej nad ranem, wiedz, że coś się dzieje. Może to tylko aktualizacja automatyczna, ale może też ktoś właśnie kopiuje Twoje dane.
Wiedza o tym, jak wyświetlić log zdarzeń, pomaga także w zarządzaniu użytkownikami. Gdy administrujesz serwerem, na którym pracuje kilkanaście osób, musisz wiedzieć, czy konta dawnych pracowników są rzeczywiście nieaktywne. Polecenie wyświetli daty ich ostatnich wejść, co pozwala szybko zdecydować o zablokowaniu dostępu. Bezpieczeństwo systemu opiera się na zasadzie ograniczonego zaufania, a logi są najlepszym sposobem na weryfikację tego zaufania w praktyce.
Jak działa polecenie last w praktyce
Podstawowym narzędziem, po które sięgnie większość osób chcących sprawdzić historię logowania, jest komenda last. Działa ona w oparciu o pliki rejestru znajdujące się w katalogu /var/log/. Co ciekawe, próba otwarcia plików w edytorze tekstu może skończyć się wyświetleniem krzaczków, ponieważ do rejestrowania zdarzeń może być wykorzystany plik binarny. Polecenie last służy właśnie do tego, by przełożyć cyfrowy zapis na język zrozumiały dla człowieka. Wpisanie samej frazy last w oknie terminal spowoduje zalanie ekranu informacjami o wszystkich logowaniach od momentu utworzenia pliku logu. Lista najczęściej jest długa i przytłaczająca, dlatego warto od razu nauczyć się ją filtrować.
Wynik działania komendy jest podzielony na czytelne kolumny. Pierwsza z nich to nazwa użytkownika, kolejna informuje o terminalu (np. tty1, pts/0), a następna o adres ip lub nazwie hosta, z którego nastąpiło połączenie. Widzisz też datę i godzinę rozpoczęcia sesji, a w nawiasie czas jej trwania. Jeżeli sesja wciąż trwa, zamiast czasu zakończenia zobaczysz napis indicating still logged in.
Aby ograniczyć ilość danych i nie dostać oczopląsu, użyj parametru -n. Wpisanie last -n 5 ograniczy wynik do pięciu ostatnich wpisów. Możesz również filtrować po konkretnej osobie. Wpisując last nazwa_usera, zobaczysz wyłącznie historię konkretnego użytkownika. Jest to proste narzędzie i daje błyskawiczny wgląd w sytuację.
Uwaga! Czasami polecenia last nie znajdziesz domyślnie w systemie, w takiej sytuacji musisz doinstalować narzędzie poprzez sudo apt install wtmpd.

Analiza pliku auth log dla zaawansowanych
Komendy konsolowe są świetne, bo ładnie formatują dane, ale czasami trzeba zajrzeć pod maskę i pobrudzić sobie ręce czytaniem surowego tekstu. W Ubuntu, jak i w wielu innych dystrybucjach opartych na Debianie, główny plik przechowujący informacje o autoryzacji to /var/log/auth.log. Znajdziesz tam znacznie więcej detali niż w wynikach prostych komend. Zapisywane są tam nie tylko logowania sesyjne, ale też użycia komendy sudo, komunikaty CRON-a czy informacje z serwera SSH dotyczące kluczy publicznych.
Do przeglądania pliku najlepiej użyć komendy less /var/log/auth.log lub, jeśli chcesz śledzić zdarzenia na bieżąco, tail -f /var/log/auth.log.
Druga opcja jest świetna, gdy testujesz połączenie i chcesz widzieć, co system „myśli” w czasie rzeczywistym. Analizując plik, możesz zobaczyć komunikaty takie jak „Accepted publickey” lub „authentication failure”. Właśnie tutaj administratorzy szukają przyczyn problemów, gdy użytkownik twierdzi, że wpisuje dobre hasło, a system uparcie odmawia dostępu. Pamiętaj, że logi są rotowane (archiwizowane), więc starsze dane znajdziesz w plikach z rozszerzeniami takimi jak .1, .gz itp. Odczytanie spakowanych logów wymaga użycia zcat lub zless.
Kto jest w systemie teraz
Historia to jedno, ale teraźniejszość bywa równie interesująca. Aby sprawdzić, kto aktualnie jest zalogowany i co robi, mamy do dyspozycji komendę „w” (czyli who). Wpisanie w konsoli litery w i naciśnięcie Enter wyświetla nagłówek z informacją o czasie pracy systemu (uptime), obciążeniu procesora (load average) oraz listę zalogowanych osób. Zobaczysz tam nazwę użytkownik, z jakiego adresu IP się łączy (lub ekranu), godzinę logowania oraz, co ciekawe, informację o tym, co aktualnie wykonuje np. /usr/libexec/gnome-sess.
Polecenie przydaje się w momentach, gdy system nagle zwalnia. Być może inny użytkownik właśnie uruchomił kompilację dużego programu albo odpalił „koparkę” w tle, licząc, że nikt nie zauważy. Komenda „w” daje same suche fakty o sesjach bez informacji o szczegółowym obciążeniu czy aktywnych procesach. Dla szybkiego rzutu oka obie sprawdzają się znakomicie. Warto wiedzieć, że każda sesja graficzna i każde otwarte okno terminala mogą być traktowane jako osobne wpisy.
Kilka słów o numerach UID i systemowych kontach
Przeglądając plik /etc/passwd lub wyniki logowań, natkniesz się na identyfikatory numeryczne, zwane UID (User ID). W systemie Linux użytkownik root zawsze ma UID równy 0. Zwykli użytkownicy zazwyczaj zaczynają się od UID 1000. Wszystko pomiędzy to zazwyczaj konta systemowe i usługowe. Dlaczego o tym wspominam w kontekście historii logowania? Czasami w logach zamiast nazwy możesz zobaczyć numer, szczególnie jeśli konto zostało już usunięte z systemu, a logi pozostały.
Jeśli widzisz aktywność na kontach z niskimi numerami UID (innymi niż root), które nie powinny mieć dostępu do powłoki (zwykle mają ustawione /bin/false lub /usr/sbin/nologin), jest to poważny sygnał ostrzegawczy. Monitorowanie, czy usługi np. www-data (serwer webowy) nie próbują uzyskać dostępu do miejsc, do których nie powinny, jest elementem zaawansowanej ochrony. Chociaż polecenie last rzadko pokazuje aktywność takich kont, analiza surowych plików auth.log może ujawnić próby eskalacji uprawnień właśnie z poziomu usług systemowych.
Na koniec warto pamiętać, że logi są edytowalne przez osobę z uprawnieniami roota. Jeśli intruz zdobędzie pełną władzę nad maszyną, pierwszą rzeczą, którą zrobi, będzie wyczyszczenie śladów swojej obecności z plików wtmp czy auth.log. Dlatego w profesjonalnych środowiskach stosuje się logowanie na zewnętrzny, zdalny serwer (syslog server), do którego atakujący nie ma łatwego dostępu. Dla domowego użytku i małych firm lokalne sprawdzanie za pomocą powyższych komend jest w zupełności wystarczającą, pierwszą linią obrony i diagnostyki.







