Logboeken houden bijna alles wat op een computersysteem gebeurd bij. De massa gegevens zorgen ervoor dat je belangrijke gegevens niet opmerkt. Je ziet m.a.w. door de bomen het bos niet meer.
Hulpprogramma's om relevante gegevens uit logboeken te halen zijn er in overvloed, maar je kunt dit ook eenvoudig zelf met een script maken. Je bepaalt dan zelf wat in jouw situatie relevant is.
We schrijven vandaag een script om op te zoeken of er gisteren in de loop van de dag een gebruiker werd aangemaakt. Dit script moet elke dag automatisch worden uitgevoerd en indien er iets te melden valt een bestand op het Bureaublad aanmaken met de melding(en).
Laten we als test eerst even een gebruiker aanmaken en terug verwijderen:
dany@pindabook:~>sudo useradd -m "PindaNet"
[sudo] wachtwoord voor root: dany@pindabook:~>sudo userdel -r "PindaNet"
no crontab for PindaNet
In openSUSE Leap 15.2 worden de meeste gegevens verzameld in het logbestand /var/log/messages. Dit bestand kan je raadplegen met de opdracht:
dany@pindabook:~> sudo cat /var/log/messages
...
2021-05-01T15:20:20.428116+02:00 pindabook sudo: dany : TTY=pts/1 ; PWD=/home/dany ; USER=root ; COMMAND=/usr/sbin/useradd -m PindaNet
2021-05-01T15:20:20.430158+02:00 pindabook sudo: pam_unix(sudo:session): session opened for user root by dany(uid=1000)
2021-05-01T15:20:20.442914+02:00 pindabook useradd[2735]: new user: name=PindaNet, UID=1001, GID=100, home=/home/PindaNet, shell=/bin/bash
2021-05-01T15:20:20.490816+02:00 pindabook nscd: 1143 er is geschreven naar gemonitord bestand '/etc/passwd'
2021-05-01T15:20:20.506912+02:00 pindabook nscd: 1143 gemonitord bestand '/etc/passwd' werd «moved into place»; wachter wordt toegevoegd
2021-05-01T15:20:20.592315+02:00 pindabook nscd: 1143 er is geschreven naar gemonitord bestand '/etc/group'
2021-05-01T15:20:20.593888+02:00 pindabook nscd: 1143 bestand '/etc/passwd' wordt gemonitord (8)
2021-05-01T15:20:20.594112+02:00 pindabook nscd: 1143 map '/etc' wordt gemonitord (2)
2021-05-01T15:20:20.595286+02:00 pindabook nscd: 1143 bestand '/etc/group' wordt gemonitord (3)
2021-05-01T15:20:20.595519+02:00 pindabook nscd: 1143 map '/etc' wordt gemonitord (2)
2021-05-01T15:20:20.608833+02:00 pindabook nscd: 1143 bestand '/etc/passwd' wordt gemonitord (8)
2021-05-01T15:20:20.609127+02:00 pindabook nscd: 1143 map '/etc' wordt gemonitord (2)
2021-05-01T15:20:20.610282+02:00 pindabook nscd: 1143 bestand '/etc/group' wordt gemonitord (3)
2021-05-01T15:20:20.610552+02:00 pindabook nscd: 1143 map '/etc' wordt gemonitord (2)
2021-05-01T15:20:20.613381+02:00 pindabook sudo: pam_unix(sudo:session): session closed for user root
2021-05-01T15:20:39.576883+02:00 pindabook sudo: dany : TTY=pts/1 ; PWD=/home/dany ; USER=root ; COMMAND=/usr/sbin/userdel -r PindaNet
2021-05-01T15:20:39.578826+02:00 pindabook sudo: pam_unix(sudo:session): session opened for user root by dany(uid=1000)
2021-05-01T15:20:39.598372+02:00 pindabook crontab[2745]: (root) DELETE (PindaNet)
2021-05-01T15:20:39.601993+02:00 pindabook userdel[2743]: delete user 'PindaNet'
2021-05-01T15:20:39.613599+02:00 pindabook nscd: 1143 er is geschreven naar gemonitord bestand '/etc/passwd'
2021-05-01T15:20:39.623599+02:00 pindabook nscd: 1143 gemonitord bestand '/etc/passwd' werd «moved into place»; wachter wordt toegevoegd
2021-05-01T15:20:39.658710+02:00 pindabook nscd: 1143 er is geschreven naar gemonitord bestand '/etc/group'
2021-05-01T15:20:39.706792+02:00 pindabook nscd: 1143 bestand '/etc/passwd' wordt gemonitord (9)
2021-05-01T15:20:39.707101+02:00 pindabook nscd: 1143 map '/etc' wordt gemonitord (2)
2021-05-01T15:20:39.708201+02:00 pindabook nscd: 1143 bestand '/etc/group' wordt gemonitord (3)
2021-05-01T15:20:39.708421+02:00 pindabook nscd: 1143 map '/etc' wordt gemonitord (2)
2021-05-01T15:20:39.709618+02:00 pindabook nscd: 1143 bestand '/etc/passwd' wordt gemonitord (9)
2021-05-01T15:20:39.709864+02:00 pindabook nscd: 1143 map '/etc' wordt gemonitord (2)
2021-05-01T15:20:39.711048+02:00 pindabook nscd: 1143 bestand '/etc/group' wordt gemonitord (3)
2021-05-01T15:20:39.711315+02:00 pindabook nscd: 1143 map '/etc' wordt gemonitord (2)
2021-05-01T15:20:39.713755+02:00 pindabook sudo: pam_unix(sudo:session): session closed for user root
2021-05-01T15:22:04.364720+02:00 pindabook sudo: dany : TTY=pts/1 ; PWD=/home/dany ; USER=root ; COMMAND=/usr/bin/cat /var/log/messages
2021-05-01T15:22:04.366703+02:00 pindabook sudo: pam_unix(sudo:session): session opened for user root by dany(uid=1000)
Dit bestand presenteert de gegevens in een vaste structuur, waardoor we deze op een relatief eenvoudige manier kunnen doorzoeken.
dany@pindabook:~> sudo grep -i "`date --date='today' '+%F'`" /var/log/messages | egrep -wi 'new user' 2021-05-01T15:20:20.442914+02:00 pindabook useradd[2735]: new user: name=PindaNet, UID=1001, GID=100, home=/home/PindaNet, shell=/bin/bash
En we hebben de regel met de vermelding van het aanmaken van een nieuwe gebruiker.
De grep
opdracht doorzoekt het logbestand naar meldingen die vandaag (today
) voorkwamen.
De datum wordt daarbij samengesteld zoals deze in het logbestand voorkomt, in het formaat JJJJ-MM-DD.
De regels met meldingen van vandaag worden doorgegeven aan de egrep
opdracht die de regels met de woorden 'new user
' eruit haalt.
#!/bin/bash # /opt/scripts/new-users.sh # Tel het aantal te rapporteren logboekmeldingen prev_count=0 count=$(grep -i "`date --date='yesterday' '+%F'`" /var/log/messages | egrep -wi 'new user' | wc -l) if [ "$prev_count" -lt "$count" ] ; then # Plaats een tekstbestand met een waarschuwing op het Bureaublad. BERICHT="/home/dany/Bureaublad/Waarschuwing.txt" GEBRUIKER=$(grep -i "`date --date='yesterday' '+%F'`" /var/log/messages | egrep -wi 'new user' | awk '{print $6}' | uniq | sed 's/,/ /') echo "ATTENTIE: Gebruiker ${GEBRUIKER#*=}aangemaakt op `date --date='yesterday' '+%e %b'`" >> $BERICHT fi
Pas in het script het pad aan naar het Bureaublad van jouw eigen Persooonlijke map, m.a.w. vervang in de variabele BERICHT
, dany
door uw eigen gebruikersnaam.
Let op het feit dat we hier de meldingen van gisteren (yesterday
) doorzoeken, wat ook de bedoeling was.
Om het script te testen, kan je beter werken met vandaag (today).
De variabele GEBRUIKER
halen we uit de melding met de awk
opdracht die er het zesde veld (door spaties gescheiden woorden) uithaalt.
Daar deze echter nog 'name=' bevat, verwijderen we dit gedeelte tijdens het wegschrijven naar het bestand op het Bureaublad.
Het gebruik van ${GEBRUIKER#*=})
zorgt ervoor dat enkel het gedeelte na het =-teken wordt weergegeven.
Het script test je met de opdracht:
dany@pindabook:~> sudo bash /opt/scripts/new-user.sh
[sudo] wachtwoord voor root:
Het volgende bestand met de volgende inhoud verschijnt op het Bureaublad:
Eerst maken we het script uitvoerbaar:
dany@pindabook:~> sudo chmod +x /opt/scripts/new-user.sh
Met systemd timers kunnen we taken dagelijks laten uitvoeren (zie Systemd Timers). Maak de volgende systemd service aan:
dany@pindabook:~> sudo nano /etc/systemd/system/new-user.service
Met de volgende inhoud:
# new-user.service [Unit] Description= Logboeken doorzoeken op het aanmaken van nieuwe gebruikers Documentation= https://linux.pindanet.be/faq/tips21/warning.html [Service] Type= simple ExecStart= /opt/scripts/new-user.sh [Install] WantedBy= multi-user.target
Test de nieuwe service door het vorige Bureaubladbestand te wissen, systemd services in te lezen en onze nieuwe service te starten:
dany@pindabook:~>sudo rm Bureaublad/Waarschuwing.txt
[sudo] wachtwoord voor root: dany@pindabook:~>sudo systemctl daemon-reload
dany@pindabook:~>sudo systemctl start new-user.service
dany@pindabook:~>sudo systemctl status new-user.service
● new-user.service - Logboeken doorzoeken op het aanmaken van nieuwe gebruikers Loaded: loaded (/etc/systemd/system/new-user.service; disabled; vendor preset: disabled) Active: inactive (dead) since Sat 2021-05-01 16:41:25 CEST; 26s ago Docs: https://linux.pindanet.be/faq/tips21/warning.html Process: 3699 ExecStart=/opt/scripts/new-user.sh (code=exited, status=0/SUCCESS) Main PID: 3699 (code=exited, status=0/SUCCESS) mei 01 16:41:25 pindabook systemd[1]: Started Logboeken doorzoeken op het aanmaken van nieuwe gebruikers.
Om deze service dagelijks te starten, maak je de volgende timer aan:
dany@pindabook:~> sudo nano /etc/systemd/system/new-user.timer
Met de volgende inhoud:
[Unit] Description=Run new-user daily [Timer] OnCalendar=daily Persistent=true [Install] WantedBy=timers.target
De Persistent=true
optie zorgt ervoor dat de taak wordt uitgevoerd bij de eerste start na het verstrijken van de uitvoertijd.
Start de timer met de opdrachten:
dany@pindabook:~>sudo systemctl daemon-reload
[sudo] wachtwoord voor root: dany@pindabook:~>sudo systemctl start new-user.timer
dany@pindabook:~>sudo systemctl status new-user.timer
● new-user.timer - Run new-user dayly Loaded: loaded (/etc/systemd/system/new-user.timer; disabled; vendor preset: disabled) Active: active (waiting) since Sat 2021-05-01 16:26:31 CEST; 22min ago Trigger: Sun 2021-05-02 00:00:00 CEST; 7h left mei 01 16:26:31 pindabook systemd[1]: Started Run new-user dayly. dany@pindabook:~>systemctl list-timers
NEXT LEFT LAST PASSED UNIT A> Sat 2021-05-01 17:00:00 CEST 10min left Sat 2021-05-01 16:00:04 CEST 49min ago snapper-timeline.timer s> Sun 2021-05-02 00:00:00 CEST 7h left Sat 2021-05-01 15:04:36 CEST 1h 44min ago logrotate.timer l> Sun 2021-05-02 00:00:00 CEST 7h left Sat 2021-05-01 15:04:36 CEST 1h 44min ago mandb.timer m> Sun 2021-05-02 00:00:00 CEST 7h left n/a n/a new-user.timer n> Sun 2021-05-02 00:31:29 CEST 7h left Sat 2021-05-01 15:04:36 CEST 1h 44min ago backup-sysconfig.timer b> Sun 2021-05-02 00:58:17 CEST 8h left Sat 2021-05-01 15:04:36 CEST 1h 44min ago backup-rpmdb.timer b> Sun 2021-05-02 01:56:24 CEST 9h left Sat 2021-05-01 15:04:36 CEST 1h 44min ago check-battery.timer c> Sun 2021-05-02 15:24:16 CEST 22h left Sat 2021-05-01 15:24:16 CEST 1h 25min ago snapper-cleanup.timer s> Sun 2021-05-02 15:29:16 CEST 22h left Sat 2021-05-01 15:29:16 CEST 1h 20min ago systemd-tmpfiles-clean.timer s> Mon 2021-05-03 00:00:00 CEST 1 day 7h left Sat 2021-05-01 15:04:36 CEST 1h 44min ago btrfs-balance.timer b> Mon 2021-05-03 00:00:00 CEST 1 day 7h left Mon 2021-04-26 19:00:08 CEST 4 days ago fstrim.timer f> Tue 2021-06-01 00:00:00 CEST 4 weeks 2 days left Sat 2021-05-01 15:04:36 CEST 1h 44min ago btrfs-scrub.timer b> 12 timers listed. Pass --all to see loaded but inactive timers, too.
De laatste opdracht toont welke timers uitgevoerd werden en wanneer ze terug uitgevoerd worden. Deze opdracht sluit je af door q te drukken. Uiteindelijk activeer je het automatisch starten van de timer met de opdracht:
dany@pindabook:~> sudo systemctl enable new-user.timer
Created symlink /etc/systemd/system/timers.target.wants/new-user.timer → /etc/systemd/system/new-user.timer.
Het spreekt voor zich dat je door het aanpassen van het script allerlei zaken in het oog kunt houden. Daarenboven kan je bij elke gevonden melding een actie laten uitvoeren. Naast het aanmaken van een opvallende melding op het Bureaublad, kan je een e-mail ontvangen of gerichte tegenmaatregelen treffen.
Alle onderdelen van dit artikel ruim je op met de volgende opdrachten:
dany@pindabook:~>sudo rm Bureaublad/Waarschuwing.txt
[sudo] wachtwoord voor root: dany@pindabook:~>sudo systemctl disable new-user.timer
Removed /etc/systemd/system/timers.target.wants/new-user.timer. dany@pindabook:~>sudo rm /etc/systemd/system/new-user.timer
dany@pindabook:~>sudo rm /etc/systemd/system/new-user.service
dany@pindabook:~>sudo rm /opt/scripts/new-user.sh