Wyszukiwanie w witrynie

Jak zarządzać dziennikami systemowymi (konfigurować, obracać i importować do bazy danych) w RHEL 7 – część 5


Aby zapewnić bezpieczeństwo systemów RHEL 7, musisz wiedzieć, jak monitorować wszystkie działania mające miejsce w takich systemach, sprawdzając pliki dziennika. Dzięki temu będziesz mógł wykryć każdą nietypową lub potencjalnie złośliwą aktywność i rozwiązać problemy z systemem lub podjąć inne odpowiednie działanie.

W RHEL 7 demon rsyslogd jest odpowiedzialny za logowanie systemu i odczytuje jego konfigurację z /etc/rsyslog.conf (ten plik określa domyślną lokalizację wszystkich logów systemowych) i z plików wewnątrz /etc/rsyslog.d, jeśli istnieją.

Konfiguracja Rsyslogda

Na początek pomocne będzie szybkie sprawdzenie pliku rsyslog.conf. Plik ten jest podzielony na 3 główne sekcje: Moduły (ponieważ rsyslog ma konstrukcję modułową), dyrektywy Globalne (używane do ustawiania globalnych właściwości demona rsyslogd) i Zasady. Jak zapewne się domyślasz, ta ostatnia sekcja wskazuje, co jest rejestrowane lub pokazywane (znane również jako selektor) i gdzie, i na tym skupimy się w całym artykule.

Typowa linia w pliku rsyslog.conf wygląda następująco:

Na powyższym obrazku widać, że selektor składa się z jednej lub większej liczby par Facility:Priority oddzielonych średnikami, gdzie Facility opisuje typ wiadomości (zobacz sekcję 4.1.1 w RFC 3164, aby zobaczyć pełna lista udogodnień dostępnych dla rsyslog), a Priorytet wskazuje jego ważność, co może być jednym z następujących oczywistych słów:

  1. odpluskwić
  2. informacje
  3. ogłoszenie
  4. ostrzeżenie
  5. błądzić
  6. krytyka
  7. alarm
  8. wyłaniać się

Choć samo w sobie nie jest to priorytet, słowo kluczowe brak oznacza brak priorytetu dla danego obiektu.

Uwaga: dany priorytet oznacza, że wszystkie wiadomości o takim priorytecie i wyższym powinny być rejestrowane. Zatem linia w powyższym przykładzie instruuje demona rsyslogd, aby rejestrował wszystkie wiadomości o priorytecie info lub wyższym (niezależnie od obiektu) z wyjątkiem tych należących do mail, usługi authpriv i cron (żadne wiadomości przychodzące z tych obiektów nie będą brane pod uwagę) do /var/log/messages.

Możesz także zgrupować wiele obiektów za pomocą znaku dwukropka, aby zastosować do nich ten sam priorytet. Zatem linia:

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

Można przepisać jako

*.info;mail,authpriv,cron.none                /var/log/messages

Innymi słowy, funkcje mail, authpriv i cron są zgrupowane, a słowo kluczowe none jest stosowane do trzech z nich.

Tworzenie niestandardowego pliku dziennika

Aby logować wszystkie komunikaty demonów do /var/log/tecmint.log, musimy dodać następujący wiersz w rsyslog.conf lub w oddzielnym pliku (łatwiej zarządzać ) wewnątrz /etc/rsyslog.d:

daemon.*    /var/log/tecmint.log

Zrestartujmy demona (zwróć uwagę, że nazwa usługi nie kończy się na d):

systemctl restart rsyslog

I sprawdź zawartość naszego niestandardowego dziennika przed i po ponownym uruchomieniu dwóch losowych demonów:

W ramach samokształcenia polecam pobawić się udogodnieniami i priorytetami i albo zapisać dodatkowe komunikaty w istniejących plikach dziennika, albo utworzyć nowe, jak w poprzednim przykładzie.

Obracanie dzienników za pomocą Logrotate

Aby zapobiec ciągłemu powiększaniu się plików dziennika, narzędzie logrotate służy do obracania, kompresowania, usuwania i alternatywnie wysyłania dzienników, ułatwiając w ten sposób administrację systemami generującymi dużą liczbę plików dziennika.

Sugerowana lektura: Jak skonfigurować rotację dzienników i zarządzać nią za pomocą Logrotate w systemie Linux

Logrotate uruchamia się codziennie jako zadanie cron (/etc/cron.daily/logrotate) i odczytuje swoją konfigurację z /etc/logrotate .conf i z plików znajdujących się w /etc/logrotate.d, jeśli istnieją.

Podobnie jak w przypadku rsyslog, nawet jeśli możesz zawrzeć ustawienia konkretnych usług w pliku głównym, utworzenie oddzielnych plików konfiguracyjnych dla każdego z nich pomoże lepiej uporządkować ustawienia.

Rzućmy okiem na typowy plik logrotate.conf:

W powyższym przykładzie logrotate wykona następujące działania dla /var/loh/wtmp: spróbuje wykonać rotację tylko raz w miesiącu, ale tylko wtedy, gdy plik ma co najmniej 1 MB, a następnie utwórz zupełnie nowy plik dziennika z uprawnieniami ustawionymi na 0664 i własnością przyznaną użytkownikowi root i grupie utmp. Następnie przechowuj tylko jeden zarchiwizowany dziennik, zgodnie z dyrektywą o rotacji:

Rozważmy teraz inny przykład znaleziony w /etc/logrotate.d/httpd:

Możesz przeczytać więcej o ustawieniach logrotate na jego stronach podręcznika (man logrotate i man logrotate.conf). Obydwa pliki są dostarczane wraz z tym artykułem w formacie PDF, dla wygody czytania.

Jako inżynier systemu będziesz w dużej mierze decydować, jak długo i w jakim formacie będą przechowywane logi, w zależności od tego, czy plik /var znajduje się na osobnej partycji /< wolumin logiczny. W przeciwnym razie naprawdę warto rozważyć usunięcie starych dzienników, aby zaoszczędzić miejsce na dysku. Z drugiej strony możesz być zmuszony do przechowywania kilku dzienników na potrzeby przyszłego audytu bezpieczeństwa, zgodnie z wewnętrznymi zasadami Twojej firmy lub klienta.

Zapisywanie logów do bazy danych

Oczywiście sprawdzanie logów (nawet przy pomocy narzędzi takich jak grep i wyrażeń regularnych) może stać się dość żmudnym zadaniem. Z tego powodu rsyslog pozwala nam wyeksportować je do bazy danych (RDBMS obsługiwane przez OTB obejmują MySQL, MariaDB, PostgreSQL i Oracle.

W tej części samouczka założono, że masz już zainstalowany serwer i klienta MariaDB w tym samym urządzeniu RHEL 7, w którym zarządzane są dzienniki:

yum update && yum install mariadb mariadb-server mariadb-client rsyslog-mysql
systemctl enable mariadb && systemctl start mariadb

Następnie użyj narzędzia mysql_secure_installation, aby ustawić hasło dla użytkownika root i inne względy bezpieczeństwa:

Uwaga: jeśli nie chcesz używać użytkownika root MariaDB do wstawiania komunikatów dziennika do bazy danych, możesz skonfigurować inne konto użytkownika aby to zrobić. Wyjaśnienie, jak to zrobić, wykracza poza zakres tego samouczka, ale zostało szczegółowo wyjaśnione w bazie wiedzy MariaDB. W tym samouczku dla uproszczenia użyjemy konta root.

Następnie pobierz skrypt createDB.sql z GitHub i zaimportuj go na serwer bazy danych:

mysql -u root -p < createDB.sql

Na koniec dodaj następujące wiersze do pliku /etc/rsyslog.conf:

$ModLoad ommysql
$ActionOmmysqlServerPort 3306
*.* :ommysql:localhost,Syslog,root,YourPasswordHere

Uruchom ponownie rsyslog i serwer bazy danych:

systemctl restart rsyslog 
systemctl restart mariadb

Wysyłanie zapytań do dzienników przy użyciu składni SQL

Teraz wykonaj kilka zadań, które zmodyfikują dzienniki (na przykład zatrzymanie i uruchomienie usług), następnie zaloguj się do serwera DB i użyj standardowych poleceń SQL, aby wyświetlić i przeszukać dzienniki:

USE Syslog;
SELECT ReceivedAt, Message FROM SystemEvents;

Streszczenie

W tym artykule wyjaśniliśmy, jak skonfigurować logowanie systemowe, jak zmieniać logi i jak przekierowywać wiadomości do bazy danych, aby ułatwić wyszukiwanie. Mamy nadzieję, że te umiejętności będą pomocne w przygotowaniach do egzaminu RHCE, a także w codziennych obowiązkach.

Jak zawsze, Twoja opinia jest więcej niż mile widziana. Aby się z nami skontaktować, skorzystaj z poniższego formularza.