Sådan styres systemlogfiler (konfigurer, roter og importer til en database) i RHEL 7 - Del 5


For at holde dine RHEL 7-systemer sikre, skal du vide, hvordan du overvåger alle de aktiviteter, der finder sted på sådanne systemer ved at undersøge logfiler. Således vil du være i stand til at opdage usædvanlig eller potentielt ondsindet aktivitet og udføre systemfejlfinding eller tage en anden passende handling.

I RHEL 7 er rsyslogd-dæmonen ansvarlig for systemlogning og læser dens konfiguration fra /etc/rsyslog.conf (denne fil angiver standardplaceringen for alle systemlogfiler) og fra filer inde i /etc/rsyslog.d, hvis nogen.

Rsyslogd-konfiguration

En hurtig inspektion af rsyslog.conf vil være nyttigt at starte. Denne fil er opdelt i 3 hovedafsnit: Moduler (da rsyslog følger et modulært design), Globale direktiver (bruges til at indstille globale egenskaber for rsyslogd-dæmonen) og Regler. Som du sandsynligvis vil gætte, angiver dette sidste afsnit, hvad der bliver logget eller vist (også kendt som vælgeren), og hvor, og vil være vores fokus i hele denne artikel.

En typisk linje i rsyslog.conf er som følger:

På billedet ovenfor kan vi se, at en vælger består af et eller flere par Facilitet: Prioritet adskilt af semikoloner, hvor Facility beskriver typen af meddelelse (se afsnit 4.1.1 i RFC 3164 for at se den komplette liste over faciliteter, der er tilgængelige for rsyslog) og Priority angiver dens sværhedsgrad, som kan være et af følgende selvforklarende ord:

  1. fejlretning
  2. info
  3. meddelelse
  4. advarsel
  5. fejler
  6. kritik
  7. alarm
  8. komme frem

Selvom det ikke selv er en prioritet, betyder nøgleordet ingen slet ingen prioritet for den givne facilitet.

Bemærk: At en given prioritet angiver, at alle meddelelser med en sådan prioritet og derover skal logges. Linjen i eksemplet ovenfor instruerer således rsyslogd-dæmonen om at logge alle beskeder med prioritetsinfo eller højere (uanset faciliteten) undtagen dem, der tilhører mail-, authpriv- og cron-tjenester (ingen meddelelser, der kommer fra disse faciliteter, vil blive taget i betragtning ) til/var/log/meddelelser.

Du kan også gruppere flere faciliteter ved hjælp af kolontegnet for at anvende den samme prioritet for dem alle. Således er linjen:

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

Kunne blive omskrevet som

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

Med andre ord er faciliteterne mail, authpriv og cron grupperet, og nøgleordet ingen anvendes på de tre af dem.

For at logge alle dæmonbeskeder til /var/log/tecmint.log, skal vi tilføje følgende linje enten i rsyslog.conf eller i en separat fil (lettere at administrere) inde i /etc/rsyslog.d:

daemon.*    /var/log/tecmint.log

Lad os genstarte dæmonen (bemærk at servicenavnet ikke ender med en d):

# systemctl restart rsyslog

Og tjek indholdet af vores brugerdefinerede log før og efter genstart af to tilfældige dæmoner:

Som en selvstudieøvelse vil jeg anbefale dig at lege med faciliteterne og prioriteterne og enten logge yderligere beskeder til eksisterende logfiler eller oprette nye som i det foregående eksempel.

Roterende logfiler ved hjælp af Logrotate

For at forhindre, at logfiler vokser uendeligt, bruges logrotate-værktøjet til at rotere, komprimere, fjerne og alternativt mail-logfiler, hvilket letter administrationen af systemer, der genererer et stort antal logfiler.

Logrotate kører dagligt som et cron-job (/etc/cron.daily/logrotate) og læser dets konfiguration fra /etc/logrotate.conf og fra filer, der findes i /etc/logrotate.d, hvis nogen.

Som med tilfældet med rsyslog, selv når du kan medtage indstillinger for specifikke tjenester i hovedfilen, vil oprettelse af separate konfigurationsfiler til hver enkelt hjælpe med at organisere dine indstillinger bedre.

Lad os se på et typisk logrotate.conf:

I eksemplet ovenfor udfører logrotate følgende handlinger for/var/loh/wtmp: forsøg kun at rotere en gang om måneden, men kun hvis filen er mindst 1 MB i størrelse, og opret derefter en helt ny logfil med tilladelsessæt til 0664 og ejerskab til brugerrod og gruppe utmp. Dernæst skal du kun opbevare en arkiveret log som specificeret i roteringsdirektivet:

Lad os nu overveje et andet eksempel som findes i /etc/logrotate.d/httpd:

Du kan læse mere om indstillingerne for logrotate på dets man-sider (man logrotate.conf). Begge filer leveres sammen med denne artikel i PDF-format for din læsning bekvemmelighed.

Som systemingeniør vil det være stort set op til dig at beslutte, hvor længe logfiler skal gemmes, og i hvilket format, afhængigt af om du har/var i en separat partition/logisk volumen. Ellers vil du virkelig overveje at fjerne gamle logfiler for at spare lagerplads. På den anden side kan du blive tvunget til at føre flere logfiler til fremtidig sikkerhedsrevision i henhold til din virksomheds eller klients interne politikker.

Selvfølgelig kan undersøgelse af logfiler (selv ved hjælp af værktøjer som grep og regulære udtryk) blive en ret kedelig opgave. Af den grund tillader rsyslog os at eksportere dem til en database (OTB-understøttet RDBMS inkluderer MySQL, MariaDB, PostgreSQL og Oracle.

Dette afsnit af selvstudiet forudsætter, at du allerede har installeret MariaDB-serveren og klienten i den samme RHEL 7-boks, hvor logfilerne administreres:

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

Brug derefter mysql_secure_installation -værktøjet til at indstille adgangskoden til rodbrugeren og andre sikkerhedsovervejelser:

Bemærk: Hvis du ikke vil bruge MariaDB-rodbrugeren til at indsætte logmeddelelser i databasen, kan du konfigurere en anden brugerkonto til at gøre det. At forklare, hvordan man gør det, er uden for denne tutorials omfang, men forklares detaljeret i MariaDB-vidensbasen. I denne vejledning bruger vi rodkontoen for enkelhed.

Derefter skal du downloade createDB.sql-scriptet fra GitHub og importere det til din databaseserver:

# mysql -u root -p < createDB.sql

Endelig tilføj følgende linjer til /etc/rsyslog.conf:

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

Genstart rsyslog og databaseserveren:

# systemctl restart rsyslog 
# systemctl restart mariadb

Udfør nu nogle opgaver, der vil ændre logfilerne (f.eks. Stoppe og starte tjenester), log derefter på din DB-server og brug standard SQL-kommandoer til at vise og søge i logfilerne:

USE Syslog;
SELECT ReceivedAt, Message FROM SystemEvents;

Resumé

I denne artikel har vi forklaret, hvordan man opretter systemlogning, hvordan man roterer logfiler, og hvordan man omdirigerer meddelelserne til en database for lettere søgning. Vi håber, at disse færdigheder vil være nyttige, når du forbereder dig på RHCE-eksamen og også i dit daglige ansvar.

Som altid er din feedback mere end velkommen. Du er velkommen til at bruge formularen nedenfor for at nå os.