Systemd Path Units zum Überwachen von Dateien und Verzeichnissen verwenden
Test der neuen Path Unit
Nun läuft unsere neue Path Unit und überwacht unsere Datei. Wenn ein Benutzer hinzugefügt, gelöscht oder geändert wird, wird die Datei /etc/passwd geändert. Die Path Unit erkennt diese Änderung und aktiviert die Service Unit.
Wir wollen also einmal einen Benutzer hinzufügen und sehen, was passiert.
[savona@putor ~]$ date Sat 25 Jan 2020 02:27:12 PM EST [savona@putor ~]$ sudo useradd test
Wir können nun in den Logs sehen, dass die Service Unit erfolgreich ausgeführt wurde.
Jan 25 14:27:19 putor systemd[1]: Started "Run script to send email alert". Jan 25 14:27:19 putor systemd[1]: passwd-mon.service: Succeeded.
In den Postfix-Logs können wir ferner sehen, dass die E-Mail erfolgreich gesendet wurde.
Jan 25 14:27:19 putor postfix/pickup[1491]: D25F02E15BB: uid=0 from=<root> Jan 25 14:27:19 putor postfix/cleanup[4293]: D25F02E15BB: message-id=<20200125192719.D25F02E15BB@putor> Jan 25 14:27:19 putor postfix/qmgr[1492]: D25F02E15BB: from=<root@putor>, size=3826, nrcpt=1 (queue active) Jan 25 14:27:20 putor postfix/smtp[4294]: D25F02E15BB: to=<*********@********.net>, relay=mail.******.net[*.*.*.*]:465, delay=0.64, delays=0.05/0.01/0.43/0.14, dsn=2.0.0, status=sent (250 OK id=1ivR5U-002kSc-Cq) Jan 25 14:27:20 putor postfix/qmgr[1492]: D25F02E15BB: removed
Sieht aus, als hätte alles ohne Probleme geklappt.
Ansehen der Path Unit-Logs mit Journalctl
Einer der Vorteile der Nutzung von Systemd Path (oder Timer) Units ist, dass sie wie normale Services arbeiten. Das bedeutet, dass man sie mit systemctl steuern kann. Zudem sind ihre Logs im Systemd-Journal mittels journalctl
verfügbar.
Um die entsprechenden Log-Einträge anzusehen, verwendet man journalctl
mit der Option -u
.
[savona@putor ~]$ sudo journalctl -u passwd-mon.path -- Logs begin at Fri 2019-11-08 00:08:01 EST, end at Sun 2020-01-26 02:43:59 EST. -- Jan 25 13:10:57 putor systemd[1]: Started "Monitor the /etc/passwd file for changes". Jan 25 13:30:00 putor systemd[1]: passwd-mon.path: Succeeded. ...OUTPUT TRUNCATED...
Man kann journalctl auch verwenden, um die Service-Unit zu betrachten. Für weitere Informationen zur Verwendung von journalctl kann man zum Beispiel »Viewing logs with journaltcl« lesen.
Fazit
In diesem Beispiel haben wir eine Systemd Path Unit eingerichtet, um die Datei /etc/passwd auf Änderungen zu überwachen. Wir haben eine Service Unit angelegt, die ein Skript startet, um eine E-Mail zu senden, wenn sich die Datei ändert.
In allen meinen Tests hat dies großartig funktioniert. Es sollte aber eines betont werden: Auch wenn das Beispiel die Datei /etc/passwd überwacht, sollte man dies nicht als Sicherheitsmaßnahme verstehen. Um unerwartete Änderungen an Dateien zu erkennen, gibt es weit bessere Werkzeuge. Ein solches Programm ist beispielsweise aide.
Es gibt realistischere Beispiele, wie man Path Units einsetzen kann. Ich habe zum Beispiel ein Skript angelegt, das alle fünf Minuten schaut, ob es in einem bestimmten Verzeichnis eine Datei gibt, und diese dann verarbeitet. Eine Path Unit wäre in diesem Fall sinnvoller.
Hinweis
Der Artikel wurde ursprünglich auf putorius.net veröffentlicht. Übersetzung und Veröffentlichung mit freundlicher Genehmigung des Autors.