Hvordan administrere systemlogger (konfigurere, rotere og importere til databasen) i RHEL 7 - del 5


For å holde RHEL 7-systemene dine sikre, må du vite hvordan du overvåker alle aktivitetene som finner sted på slike systemer ved å undersøke loggfiler. Dermed vil du kunne oppdage enhver uvanlig eller potensielt ondsinnet aktivitet og utføre systemfeilsøking eller ta en annen passende handling.

I RHEL 7 er rsyslogd-demonen ansvarlig for systemlogging og leser konfigurasjonen fra /etc/rsyslog.conf (denne filen spesifiserer standardplasseringen for alle systemlogger) og fra filer inne i /etc/rsyslog.d, hvis noen.

Rsyslogd-konfigurasjon

En rask inspeksjon av rsyslog.conf vil være nyttig å starte. Denne filen er delt inn i 3 hovedseksjoner: Moduler (siden rsyslog følger en modulær design), Globale direktiver (brukes til å angi globale egenskaper for rsyslogd-demonen), og regler. Som du sikkert vil gjette, indikerer denne siste delen hva som blir logget eller vist (også kjent som velgeren) og hvor, og vil være vårt fokus gjennom denne artikkelen.

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

I bildet ovenfor kan vi se at en velger består av ett eller flere par Facility:Priority atskilt med semikolon, der Facility beskriver typen melding (se avsnitt 4.1.1 i RFC 3164 for å se den komplette listen over tilgjengelige fasiliteter for rsyslog) og Priority indikerer alvorlighetsgraden, som kan være ett av følgende selvforklarende ord:

  1. feilsøk
  2. info
  3. varsel
  4. advarsel
  5. feil
  6. krit
  7. varsel
  8. dukker opp

Selv om det ikke er en prioritet i seg selv, betyr nøkkelordet ingen ingen prioritet i det hele tatt av det gitte anlegget.

Merk: At en gitt prioritet indikerer at alle meldinger med slik prioritet og høyere skal logges. Linjen i eksemplet ovenfor instruerer rsyslogd-demonen til å logge alle meldinger med prioritert info eller høyere (uavhengig av anlegget) bortsett fra de som tilhører e-post-, authpriv- og cron-tjenester (ingen meldinger som kommer fra disse fasilitetene vil bli tatt i betraktning ) til /var/log/messages.

Du kan også gruppere flere fasiliteter ved å bruke kolontegnet for å bruke samme prioritet på dem alle. Dermed er linjen:

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

Kan skrives om som

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

Med andre ord, fasilitetene mail, authpriv og cron er gruppert og nøkkelordet ingen brukes på de tre av dem.

For å logge alle daemon-meldinger til /var/log/tecmint.log, må vi legge til følgende linje enten i rsyslog.conf eller i en separat fil (enklere å administrere) inne i /etc/rsyslog.d:

daemon.*    /var/log/tecmint.log

La oss starte demonen på nytt (merk at tjenestenavnet ikke slutter med en d):

# systemctl restart rsyslog

Og sjekk innholdet i vår egendefinerte logg før og etter omstart av to tilfeldige demoner:

Som en selvstudieøvelse vil jeg anbefale deg å leke deg med fasilitetene og prioriteringene og enten logge ytterligere meldinger til eksisterende loggfiler eller lage nye som i forrige eksempel.

Rotere logger ved hjelp av Logrotate

For å forhindre at loggfiler vokser uendelig, brukes logrotate-verktøyet til å rotere, komprimere, fjerne og alternativt e-postlogger, og dermed lette administrasjonen av systemer som genererer et stort antall loggfiler.

Logrotate kjører daglig som en cron-jobb (/etc/cron.daily/logrotate) og leser konfigurasjonen fra /etc/logrotate.conf og fra filer som ligger i /etc/logrotate.d, hvis noen.

Som med tilfellet med rsyslog, selv når du kan inkludere innstillinger for spesifikke tjenester i hovedfilen, vil opprettelse av separate konfigurasjonsfiler for hver enkelt hjelpe til med å organisere innstillingene dine bedre.

La oss ta en titt på en typisk logrotate.conf:

I eksemplet ovenfor vil logrotate utføre følgende handlinger for /var/loh/wtmp: prøv å rotere bare en gang i måneden, men bare hvis filen er minst 1 MB stor, så lag en helt ny loggfil med tillatelser satt til 0664 og eierskap gitt til brukerrot og gruppe utmp. Deretter beholder du bare én arkivert logg, som spesifisert av rotasjonsdirektivet:

La oss nå vurdere et annet eksempel som finnes i /etc/logrotate.d/httpd:

Du kan lese mer om innstillingene for logrotate på man-sidene (man logrotate.conf). Begge filene leveres sammen med denne artikkelen i PDF-format for enkelhets skyld.

Som systemingeniør vil det stort sett være opp til deg å bestemme hvor lenge logger skal lagres og i hvilket format, avhengig av om du har /var i en egen partisjon/logisk volum. Ellers vil du virkelig vurdere å fjerne gamle logger for å spare lagringsplass. På den annen side kan du bli tvunget til å føre flere logger for fremtidig sikkerhetsrevisjon i henhold til bedriftens eller kundens interne retningslinjer.

Selvfølgelig kan det å undersøke logger (selv ved hjelp av verktøy som grep og regulære uttrykk) bli en ganske kjedelig oppgave. Av den grunn lar rsyslog oss eksportere dem til en database (OTB-støttede RDBMS inkluderer MySQL, MariaDB, PostgreSQL og Oracle.

Denne delen av opplæringen forutsetter at du allerede har installert MariaDB-serveren og -klienten i den samme RHEL 7-boksen der loggene blir administrert:

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

Bruk deretter mysql_secure_installation-verktøyet for å angi passordet for root-brukeren og andre sikkerhetshensyn:

Merk: Hvis du ikke vil bruke MariaDB-rotbrukeren til å sette inn loggmeldinger til databasen, kan du konfigurere en annen brukerkonto til å gjøre det. Å forklare hvordan du gjør det er utenfor omfanget av denne opplæringen, men er forklart i detalj i MariaDB kunnskapsbase. I denne opplæringen vil vi bruke root-kontoen for enkelhets skyld.

Deretter laster du ned createDB.sql-skriptet fra GitHub og importerer det til databaseserveren din:

# mysql -u root -p < createDB.sql

Til slutt legger du til følgende linjer i /etc/rsyslog.conf:

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

Start rsyslog og databaseserveren på nytt:

# systemctl restart rsyslog 
# systemctl restart mariadb

Utfør nå noen oppgaver som vil endre loggene (som å stoppe og starte tjenester, for eksempel), logg deretter på DB-serveren og bruk standard SQL-kommandoer for å vise og søke i loggene:

USE Syslog;
SELECT ReceivedAt, Message FROM SystemEvents;

Sammendrag

I denne artikkelen har vi forklart hvordan du setter opp systemlogging, hvordan du roterer logger og hvordan du omdirigerer meldingene til en database for enklere søk. Vi håper at disse ferdighetene vil være nyttige når du forbereder deg til RHCE-eksamenen og i ditt daglige ansvar også.

Som alltid er tilbakemeldingen din mer enn velkommen. Bruk gjerne skjemaet under for å nå oss.