Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
linux:aide [14.03.2025 09:58. ] – [Installation] django | linux:aide [14.03.2025 21:10. ] (aktuell) – [Ergebniskontrolle] django | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Host based Intrusion Detection System mit AIDE unter Arch ====== | + | ====== Host based Intrusion Detection System mit AIDE unter Arch Linux ====== |
===== HIDS - was ist das und wozu nutzt man es? ===== | ===== HIDS - was ist das und wozu nutzt man es? ===== | ||
Die Absicherung von Systemen ist eine der Grund- und Pflichtaufgaben eines jeden verantwortungsbewussten Systemadministrators und Administratorin. Dass dies ist kein einmaliger sondern stetig sich wiederholende Vorgang ist, versteht sich in aller Regel von selbst, so ist es unter anderem wichtig, dass regelmässig Systemüberprüfungen und Überwachung von Logmeldungen auf verdächtige und ungewöhnliche Ereignisse durchgeführt werden müssen. Zur Absicherung von Computersystem existieren unterschiedliche Ansätze. TLS-Transportverschlüsselung, | Die Absicherung von Systemen ist eine der Grund- und Pflichtaufgaben eines jeden verantwortungsbewussten Systemadministrators und Administratorin. Dass dies ist kein einmaliger sondern stetig sich wiederholende Vorgang ist, versteht sich in aller Regel von selbst, so ist es unter anderem wichtig, dass regelmässig Systemüberprüfungen und Überwachung von Logmeldungen auf verdächtige und ungewöhnliche Ereignisse durchgeführt werden müssen. Zur Absicherung von Computersystem existieren unterschiedliche Ansätze. TLS-Transportverschlüsselung, | ||
Zeile 422: | Zeile 422: | ||
<WRAP center round important 35%> | <WRAP center round important 35%> | ||
- | Bevor das Programm AIDE gestartet werden kann muss es allerdings konfiguriert werden! | + | Bevor das Programm AIDE gestartet werden kann muss es allerdings |
</ | </ | ||
Zeile 476: | Zeile 476: | ||
++++ | ++++ | ||
=== Programminfo === | === Programminfo === | ||
- | Bei Bedarf können wir uns alle Optionen mit denen das AIDE-Binary gebaut wurde zusammen mit den Default | + | Bei Bedarf können wir uns alle Optionen mit denen das AIDE-Binary gebaut wurde zusammen mit den Default |
++++ Ausgabe der Befehls aide -v | | ++++ Ausgabe der Befehls aide -v | | ||
Zeile 1576: | Zeile 1576: | ||
aide v0.18.8 | aide v0.18.8 | ||
++++ | ++++ | ||
+ | |||
+ | ==== Konfiguration ==== | ||
+ | Die Konfiguration wird über die Dateien **''/ | ||
+ | # cp -av / | ||
+ | |||
+ | So können wir später leichter Änderungen mit Hilfe von **'' | ||
+ | |||
+ | Anpassungen und Änderungen an der Konfiguration nehmen mit mit dem Editor unserer Wahl , wie z.B. **'' | ||
+ | # sudo vim / | ||
+ | |||
+ | <file bash / | ||
+ | # More information about configuration options available in the aide.conf manpage. | ||
+ | # Inspired from https:// | ||
+ | |||
+ | # ┌───────────────────────────────────────────────────────────────┐ | ||
+ | # │ CONTENTS OF aide.conf | ||
+ | # ├───────────────────────────────────────────────────────────────┘ | ||
+ | # │ | ||
+ | # ├──┐VARIABLES | ||
+ | # │ ├── DATABASE | ||
+ | # │ └── REPORT | ||
+ | # ├──┐RULES | ||
+ | # │ ├── LIST OF ATTRIBUTES | ||
+ | # │ ├── LIST OF CHECKSUMS | ||
+ | # │ └── AVAILABLE RULES | ||
+ | # ├──┐PATHS | ||
+ | # │ ├──┐EXCLUDED | ||
+ | # │ │ ├── ETC | ||
+ | # │ │ ├── USR | ||
+ | # │ │ └── VAR | ||
+ | # │ └──┐INCLUDED | ||
+ | # │ | ||
+ | # │ | ||
+ | # │ | ||
+ | # │ | ||
+ | # │ | ||
+ | # └─────────────────────────────────────────────────────────────── | ||
+ | |||
+ | # ################################################################ | ||
+ | |||
+ | # ################################ | ||
+ | |||
+ | @@define DBDIR / | ||
+ | @@define LOGDIR / | ||
+ | |||
+ | # The location of the database to be read. | ||
+ | database_in=file: | ||
+ | |||
+ | # The location of the database to be written. | ||
+ | # | ||
+ | # | ||
+ | database_out=file: | ||
+ | |||
+ | # Whether to gzip the output to database | ||
+ | gzip_dbout=yes | ||
+ | |||
+ | # ################################ | ||
+ | |||
+ | # Default. | ||
+ | log_level=warning | ||
+ | report_level=changed_attributes | ||
+ | |||
+ | report_url=file: | ||
+ | report_url=stdout | ||
+ | # | ||
+ | #NOT IMPLEMENTED report_url=mailto: | ||
+ | #NOT IMPLEMENTED report_url=syslog: | ||
+ | |||
+ | # ################################################################ | ||
+ | |||
+ | # ################################ | ||
+ | |||
+ | # These are the default parameters we can check against. | ||
+ | #p: | ||
+ | #i: | ||
+ | #n: | ||
+ | #u: user | ||
+ | #g: group | ||
+ | #s: size | ||
+ | #b: block count | ||
+ | #m: mtime | ||
+ | #a: atime | ||
+ | #c: ctime | ||
+ | #S: check for growing size | ||
+ | #acl: | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # ################################ | ||
+ | |||
+ | #md5: md5 checksum | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # ################################ | ||
+ | |||
+ | # These are the default rules | ||
+ | #R: | ||
+ | #L: | ||
+ | #E: Empty group | ||
+ | #>: | ||
+ | |||
+ | # You can create custom rules - my home made rule definition goes like this | ||
+ | ALLXTRAHASHES = sha1+rmd160+sha256+sha512+whirlpool+tiger+haval+gost+crc32 | ||
+ | ALLXTRAHASHES = sha1+rmd160+sha256+sha512+tiger | ||
+ | # Everything but access time (Ie. all changes) | ||
+ | EVERYTHING = R+ALLXTRAHASHES | ||
+ | |||
+ | # Sane, with multiple hashes | ||
+ | # NORMAL = R+rmd160+sha256+whirlpool | ||
+ | # NORMAL = R+sha256+sha512 | ||
+ | NORMAL = p+i+l+n+u+g+s+m+c+sha256 | ||
+ | |||
+ | # For directories, | ||
+ | DIR = p+i+n+u+g+acl+xattrs | ||
+ | |||
+ | # Access control only | ||
+ | PERMS = p+i+u+g+acl | ||
+ | |||
+ | # Logfile are special, in that they often change | ||
+ | LOG = > | ||
+ | |||
+ | # Just do sha256 and sha512 hashes | ||
+ | FIPSR = p+i+n+u+g+s+m+c+acl+xattrs+sha256 | ||
+ | LSPP = FIPSR+sha512 | ||
+ | |||
+ | # Some files get updated automatically, | ||
+ | # but we want to know when the data inside them changes | ||
+ | DATAONLY = p+n+u+g+s+acl+xattrs+sha256 | ||
+ | |||
+ | # ################################################################ | ||
+ | |||
+ | # Next decide what directories/ | ||
+ | |||
+ | # ################################ | ||
+ | |||
+ | # ################ | ||
+ | |||
+ | # Ignore backup files | ||
+ | !/etc/.*~ | ||
+ | |||
+ | # Ignore mtab | ||
+ | !/etc/mtab | ||
+ | |||
+ | # ################ | ||
+ | |||
+ | # These are too volatile | ||
+ | !/usr/src | ||
+ | !/usr/tmp | ||
+ | |||
+ | # ################ | ||
+ | |||
+ | # Ignore logs | ||
+ | !/ | ||
+ | !/ | ||
+ | !/ | ||
+ | !/ | ||
+ | !/ | ||
+ | !/ | ||
+ | |||
+ | # ################################ | ||
+ | |||
+ | # ################ | ||
+ | |||
+ | # Check only permissions, | ||
+ | /etc PERMS | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | |||
+ | # ################ | ||
+ | |||
+ | /usr | ||
+ | / | ||
+ | |||
+ | # ################ | ||
+ | |||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | |||
+ | # ################ | ||
+ | |||
+ | /boot NORMAL | ||
+ | /bin | ||
+ | /lib | ||
+ | / | ||
+ | /opt | ||
+ | /root NORMAL | ||
+ | </ | ||
+ | |||
+ | Wie eigentlich immer bei der Konfiguration von neuen Programmen lohnt es sich die zugehörige Konfigurationsdatei - in unserem Falle von **AIDE** die **''/ | ||
+ | |||
+ | * Die ersten Einstellungen die man sich überlegen sollte, wären wo die Datenbanken erstellt und vorgehalten werden sollen und ob diese gepackt werden sollen. | ||
+ | * Anschließend sollte man sich Gedanken machen, welche Hashingalgorithmen verwendet werden sollen. In den Standardeinstellungen bildet AIDE sieben verschiedene Checksummen für jede überwachte Datei. Zu beachten ist hierbei ggf. ob der bei der Erzeugung der Hash-Werte benötige Rechenaufwand gerechtfertigt ist, oder ob man auf einige davon aus Performancegründen besser verzichtet! In der Regel solten eigentlich zwei verschiedene Hash-Werte Pro Datei ausreichen. | ||
+ | * Ferner kann über Regelsätze definiert werden welche Eigenschaften (Parameter) von Verzeichnissen und/oder Dateien überwacht werden sollen. Hier können entsprechende Vorgaben in der Default-Konfigurationsdatei übernommen bzw. auch ganz eigene individiuelle Rule-Sets definiert werden. Folgende Parameter können dabei bei der Bewertung und Überwachung herangezogen werden: | ||
+ | * p: Überprüfen Sie die Dateiberechtigungen der ausgewählten Dateien oder Verzeichnisse. | ||
+ | * i: Überprüfen Sie die Inode-Nummer. Jeder Dateiname hat eine eindeutige Inode-Nummer, | ||
+ | * n: Überprüfen Sie die Anzahl der Links, die auf die betreffende Datei verweisen. | ||
+ | * u: Überprüfen Sie, ob sich der Eigentümer der Datei geändert hat. | ||
+ | * g: Überprüfen Sie, ob sich die Gruppe der Datei geändert hat. | ||
+ | * s: Überprüfen Sie, ob sich die Dateigröße geändert hat. | ||
+ | * b: Prüfen, ob sich die von der Datei verwendete Blockanzahl geändert hat. | ||
+ | * m: Prüfen, ob sich das Änderungsdatum der Datei geändert hat. | ||
+ | * c: Prüfen, ob sich die Zugriffszeit der Datei geändert hat. | ||
+ | * S: Auf eine geänderte Dateigröße prüfen. | ||
+ | * I: Änderungen des Dateinamens ignorieren. \\ Folgende Hash-Werte können bei der berechnung der Prüfsummen verwendet werden: | ||
+ | * md5: md5 Prüfsumme (Die Verwendung von sha256 oder sha512 ist hier empfohlen.) | ||
+ | * sha1: sha1 Prüfsumme (Die Verwendung von sha256 oder sha512 ist hier empfohlen.) | ||
+ | * sha256: sha256 Prüfsumme | ||
+ | * sha512: sha512 Prüfsumme | ||
+ | * rmd160: rmd160 Prüfsumme | ||
+ | * tiger: tiger Prüfsumme | ||
+ | * haval: haval Prüfsumme (MHASH only) | ||
+ | * gost: gost Prüfsumme (MHASH only) | ||
+ | * crc32: crc32 Prüfsumme (MHASH only) | ||
+ | * whirlpool: whirlpool Prüfsumme (MHASH only) | ||
+ | * Zum Schluß muss man sich noch Gedanken machen welche Dateien und Verzeichniss ggf. ausgenommen werden sollen und welche Dateien und Verzeichnisse man in welcher Tiefe überwachen möchte. Die manpage zu **'' | ||
+ | |||
+ | Ist man mit der Konfiguration von **AIDE** soweit zufrieden und fertig, ist man gut beraten mit Hilfe der Option **'' | ||
+ | # aide --config-check | ||
+ | |||
+ | ==== Betrieb ==== | ||
+ | === AIDE Command Options === | ||
+ | Bevor wir nun die AIDE-Datenbank initial erstellen, werfen wir noch kurz einen Blick auf die Optionen, die bei Aufruf von **'' | ||
+ | # aide --help | ||
+ | < | ||
+ | |||
+ | Usage: aide [options] command | ||
+ | |||
+ | Commands: | ||
+ | -i, --init Initialize the database | ||
+ | -n, --dry-init Traverse the file system and match each file against rule tree | ||
+ | -C, --check Check the database | ||
+ | -u, --update Check and update the database non-interactively | ||
+ | -E, --compare Compare two databases | ||
+ | |||
+ | Miscellaneous: | ||
+ | -D, | ||
+ | -p FILE_TYPE: | ||
+ | -v, | ||
+ | -h, | ||
+ | |||
+ | Options: | ||
+ | -c CFGFILE --config=CFGFILE Get config options from CFGFILE | ||
+ | -l REGEX --limit=REGEX Limit command to entries matching REGEX | ||
+ | -B " | ||
+ | -A " | ||
+ | -L LEVEL --log-level=LEVEL Set log message level to LEVEL | ||
+ | -W WORKERS --workers=WORKERS Number of simultaneous workers (threads) for file attribute processing (i.a. hashsum calculation) | ||
+ | </ | ||
+ | |||
+ | === Datenbank erstellen === | ||
+ | Zunächst erstellen wir initial unsere AIDE Datenbank entsprechend unserer [[# | ||
+ | [django@pml010074 ~]$ sudo aide --init | ||
+ | |||
+ | < | ||
+ | AIDE successfully initialized database. | ||
+ | New AIDE database written to / | ||
+ | |||
+ | Number of entries: | ||
+ | |||
+ | --------------------------------------------------- | ||
+ | The attributes of the (uncompressed) database(s): | ||
+ | --------------------------------------------------- | ||
+ | |||
+ | / | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | / | ||
+ | |||
+ | |||
+ | End timestamp: 2025-02-09 13:22:34 +0100 (run time: 4m 39s) | ||
+ | </ | ||
+ | |||
+ | === positive Prüfen des Filesystems gegen die Datenbank === | ||
+ | Mit der Option **'' | ||
+ | [django@pml010074 ~]$ sudo aide --check | ||
+ | < | ||
+ | AIDE found NO differences between database and filesystem. Looks okay!! | ||
+ | |||
+ | Number of entries: | ||
+ | |||
+ | --------------------------------------------------- | ||
+ | The attributes of the (uncompressed) database(s): | ||
+ | --------------------------------------------------- | ||
+ | |||
+ | / | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | End timestamp: 2025-02-09 16:53:10 +0100 (run time: 5m 40s) | ||
+ | </ | ||
+ | |||
+ | Die Zeile: | ||
+ | AIDE found NO differences between database and filesystem. Looks okay!! | ||
+ | zeigt uns an, dass es keine Änderungen im und am System gab. | ||
+ | |||
+ | === negative Prüfen des Filesystems gegen die Datenbank === | ||
+ | Im nächsten Beispiel kompromittieren wir unser System, in dem wir von einem bestehenden Binary einen vermeintlichen bösen Klone erstellen: | ||
+ | # cp /usr/bin/sg / | ||
+ | |||
+ | Führen wir erneut eine Überprüfung unseres Systems aus, sollte die neue unbekannte Datei entsprechend detektiert werden. | ||
+ | [django@pml010074 ~]$ sudo aide --check | ||
+ | |||
+ | < | ||
+ | AIDE found differences between database and filesystem!! | ||
+ | |||
+ | Summary: | ||
+ | Total number of entries: | ||
+ | Added entries: 1 | ||
+ | Removed entries: 1 | ||
+ | Changed entries: 5 | ||
+ | |||
+ | --------------------------------------------------- | ||
+ | Added entries: | ||
+ | --------------------------------------------------- | ||
+ | |||
+ | f+++++++++++++++: | ||
+ | |||
+ | --------------------------------------------------- | ||
+ | Removed entries: | ||
+ | --------------------------------------------------- | ||
+ | |||
+ | f---------------: | ||
+ | |||
+ | --------------------------------------------------- | ||
+ | Changed entries: | ||
+ | --------------------------------------------------- | ||
+ | |||
+ | d = ... mc.. : /root | ||
+ | d < ... mc.. : / | ||
+ | f > ... mci.H : / | ||
+ | f < ... mci.H : / | ||
+ | d > ... mc.. : /usr/bin | ||
+ | |||
+ | --------------------------------------------------- | ||
+ | Detailed information about changes: | ||
+ | --------------------------------------------------- | ||
+ | |||
+ | Directory: /root | ||
+ | | ||
+ | | ||
+ | |||
+ | Directory: / | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | File: / | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | File: / | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Directory: /usr/bin | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | --------------------------------------------------- | ||
+ | The attributes of the (uncompressed) database(s): | ||
+ | --------------------------------------------------- | ||
+ | |||
+ | / | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | End timestamp: 2025-02-09 18:15:03 +0100 (run time: 5m 51s) | ||
+ | </ | ||
+ | |||
+ | In der Zusammenfassung sehen wir also in Summe 470.065 Datenbankeinträge, | ||
+ | Total number of entries: | ||
+ | Added entries: | ||
+ | Removed entries: 1 | ||
+ | Changed entries: 5 | ||
+ | |||
+ | Die Datei **''/ | ||
+ | |||
+ | Im Abschnitt **'' | ||
+ | < | ||
+ | d < ... mc.. : / | ||
+ | f > ... mci.H : / | ||
+ | f < ... mci.H : / | ||
+ | d > ... mc.. : / | ||
+ | * In der ersten Spalte kennzeichnet ein **'' | ||
+ | * In der zweiten Spalte wird eine Änderung angezeigt, ob sich die Grösse einer Datei bzw. des Verzeichnisses geändert hat. **'' | ||
+ | * Die mit jedem Buchstaben verbundenen Attribute sind wie folgt: | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * Die folgenden Buchstaben sind nur verfügbar, wenn sie explizit mit „configure“ aktiviert werden: | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | |||
+ | Im Abschnitt **'' | ||
+ | |||
+ | === Update Database === | ||
+ | Nach Änderungen am System, z.B. bei Konfigurationsänderungen, | ||
+ | $ sudo aide --update | ||
+ | |||
+ | Alternativ kann man auch direkt die Datenbank neu initialisieren: | ||
+ | $ sudo aide --init | ||
+ | |||
+ | **'' | ||
+ | |||
+ | Ein anderer Ansatz wäre dann ein **'' | ||
+ | |||
+ | === tägliche checks enablen === | ||
+ | Wiederkehrende | ||
+ | |||
+ | [django@pml010074 ~] $ sudo systemctl enable --now aidecheck.timer | ||
+ | |||
+ | Created symlink '/ | ||
+ | |||
+ | Den Status können wir wie gewohnt via **'' | ||
+ | [django@pml010074 ~] $ sudo systemctl status aidecheck.timer | ||
+ | < | ||
+ | <font style=" | ||
+ | | ||
+ | | ||
+ | | ||
+ | Trigger: Mon 2025-02-10 05:00:00 CET; 14h left | ||
+ | | ||
+ | |||
+ | Feb 09 13:47:17 pml010074 systemd[1]: Started Aide check every day at 5AM.</ | ||
+ | </ | ||
+ | |||
+ | === jounald (tägliche) logs === | ||
+ | In der Konfigurationsdatei **''/ | ||
+ | |||
+ | # vim / | ||
+ | < | ||
+ | |||
+ | # Default | ||
+ | log_level=warning | ||
+ | report_level=changed_attributes | ||
+ | report_url=stdout | ||
+ | report_url=syslog: | ||
+ | |||
+ | ...</ | ||
+ | |||
+ | Somit können wir einfach die Logeinträge von AIDE einfach ausgeben. | ||
+ | # journalctl -f / | ||
+ | ++++ Ausgabe der AIDE Logeinträge im Journal | | ||
+ | < | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Number of entries: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | | ||
+ | --------------------------------------------------- | ||
+ | The attributes of the (uncompressed) database(s): | ||
+ | --------------------------------------------------- | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | Mar 14 16:20:38 pml010070 aide[102360]: | ||
+ | | ||
+ | End timestamp: 2025-03-14 16:20:38 +0100 (run time: 1m 41s) | ||
+ | |||
+ | </ | ||
+ | ++++ | ||
+ | ===== Orchestrierung - Installation und Konfiguration von AIDE mit Hilfe von Ansible | ||
+ | ==== Aufgabenstellung ==== | ||
+ | Natürlich wird man im Jahr 2025 nicht mehr ernsthaft, manuell Server aufsetzen und betreiben wollen. Vielmehr wird man auf ein Orchestrierungswerkzeug wie z.B. **[[linux: | ||
+ | |||
+ | In diesem Konfigurationsbeispiel gehen wir davon aus, dass wir auf zwei Hosts im Intranet AIDE installieren und konfigurieren möchten. Ferner holen wir uns das AIDE-Installationspaket von einem internen Repository-/ | ||
+ | |||
+ | Wir werden uns nun nachfolgend die Server-Installation und -konfiguration genauer betrachten. | ||
+ | |||
+ | ==== Lösung ==== | ||
+ | |||
+ | <WRAP center round tip 80%> | ||
+ | Der ungeduldigen Leser kann auch direkt zur Tat schreiten und das manuelle Anlegen der Inventory-Hülle, | ||
+ | |||
+ | < | ||
+ | -O - | tar -xz --strip-components=1 -C ~/ | ||
+ | |||
+ | Nach Anpassung der Daten im Inventory kann man anschliessend direkt **[[# | ||
+ | </ | ||
+ | |||
+ | === Vorbereitung - Daten im Inventory === | ||
+ | Bei unserem Konfigurationsbeispiel hier gehen wir von folgenden Parametern aus: | ||
+ | * **'' | ||
+ | * **'' | ||
+ | * **'' | ||
+ | |||
+ | Die Konfigurationsdatei unseres **inventory** in unsere, Ansible-Verzeichnis beinhaltet demnach unter anderem: | ||
+ | $ vim inventories/ | ||
+ | ++++ inventories/ | ||
+ | {{gh> https:// | ||
+ | ++++ | ||
+ | |||
+ | Für alle Host aus der Gruppe **'' | ||
+ | $ vim inventories/ | ||
+ | ++++ inventories/ | ||
+ | {{gh> https:// | ||
+ | ++++ | ||
+ | |||
+ | Die beiden Beispiel-Hosts aus der Gruppe|Zone **'' | ||
+ | * Der Host **'' | ||
+ | * Der Host **'' | ||
+ | |||
+ | Wir legen uns also nun die Definitionsdateien für die beiden Hosts im SOHO an. | ||
+ | $ vim inventories/ | ||
+ | ++++ inventories/ | ||
+ | {{gh> https:// | ||
+ | ++++ | ||
+ | |||
+ | $ vim inventories/ | ||
+ | ++++ inventories/ | ||
+ | {{gh> https:// | ||
+ | ++++ | ||
+ | |||
+ | Unser Beispiels-Inventory hat also nunmehr folgenden Aufbau: | ||
+ | < | ||
+ | ├── group_vars | ||
+ | │ └── arch | ||
+ | │ | ||
+ | ├── hosts | ||
+ | └── hosts_vars | ||
+ | ├── pml010070 | ||
+ | └── pml010074 | ||
+ | |||
+ | 4 directories, | ||
+ | |||
+ | === Rolle === | ||
+ | Für die Installation und Konfiguration von **aide** verwenden wir eine eigene Rolle **'' | ||
+ | $ cp -avr roles/ | ||
+ | ++++ Ausgabe von cp -avr roles/ | ||
+ | < | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | Bei Bedarf können wir uns später die Struktur, die somit angelegt wurde und die wir nun gleich mit Inhalten befüllen wollen, mit nachfolgendem Befehl anzeigen lassen. | ||
+ | $ tree roles/hids/ | ||
+ | ++++ Ausgabe von tree roles/hids/ | | ||
+ | < | ||
+ | ├── defaults | ||
+ | ├── files | ||
+ | ├── handlers | ||
+ | │ └── main.yml | ||
+ | ├── library | ||
+ | ├── lookup_plugins | ||
+ | ├── meta | ||
+ | ├── module_utils | ||
+ | ├── tasks | ||
+ | │ ├── config.yml | ||
+ | │ ├── install.yml | ||
+ | │ ├── main.yml | ||
+ | │ └── transfer.yml | ||
+ | ├── templates | ||
+ | │ ├── aide_config.j2 | ||
+ | │ └── systemd.j2 | ||
+ | └── vars | ||
+ | |||
+ | 11 directories, | ||
+ | </ | ||
+ | ++++ | ||
+ | == tasks == | ||
+ | Wie wir sehen ist die Rolle durchaus überschaubar, | ||
+ | $ vim roles/ | ||
+ | ++++ roles/ | ||
+ | {{gh> https:// | ||
+ | ++++ | ||
+ | |||
+ | Die Installation von AIDE wird in der ersten Task-Gruppe mit dem tag **'' | ||
+ | $ vim roles/ | ||
+ | ++++ roles/ | ||
+ | {{gh> https:// | ||
+ | ++++ | ||
+ | |||
+ | Die eigentliche Installation Konfiguration sowie das erstellen der initialen AIDE-Datenbank erfolgt im anschließenden Task **'' | ||
+ | $ vim roles/ | ||
+ | ++++ roles/ | ||
+ | {{gh> https:// | ||
+ | ++++ | ||
+ | |||
+ | Was nun noch fehlt ist das Kopieren der erstellten AIDE-Datenbank auf unseren internen Repository-/ | ||
+ | $ vim roles/ | ||
+ | ++++ roles/ | ||
+ | {{gh> https:// | ||
+ | ++++ | ||
+ | |||
+ | == templates == | ||
+ | Für die Erstellung der AIDE-Konfigurationsdatei **''/ | ||
+ | |||
+ | <WRAP center round tip 80%> | ||
+ | Damit nicht nun später alle unsere 42 VMs zum selben Zeitpunkt mit dem Check des jeweiligen Systems beginnen und somit einen vermeidbaren Peak auf unserem Repository-/ | ||
+ | </ | ||
+ | |||
+ | $ vim roles/ | ||
+ | ++++ roles/ | ||
+ | {{gh> https:// | ||
+ | ++++ | ||
+ | |||
+ | $ vim roles/ | ||
+ | ++++ roles/ | ||
+ | {{gh> https:// | ||
+ | ++++ | ||
+ | |||
+ | == handlers == | ||
+ | Sollte bei der Abarbeitung des Playbook die individuelle systemd-timer Konfigurationsdatei **''/ | ||
+ | |||
+ | Zu guter Letzt brauchen wir noch eine Konfiguration der Aufgaben die bei einem **'' | ||
+ | $ vim roles/ | ||
+ | ++++ roles/ | ||
+ | {{gh> https:// | ||
+ | ++++ | ||
+ | |||
+ | |||
+ | === Playbook === | ||
+ | Unser Playbook zum Installieren und Konfigurieren unseres HIDS auf Basis AIDE, ist wie immer schlank, unscheinbar und unspektakulär, | ||
+ | $ vim playbooks/ | ||
+ | ++++ playbooks/ | ||
+ | {{gh> https:// | ||
+ | ++++ | ||
+ | |||
+ | |||
+ | |||
+ | === Ausführung - Playbooklauf === | ||
+ | Die orchestrierte Variante der Installation und Konfiguration unseres **AIDE**-Daemons gestaltet sich ab sofort sehr einfach, brauchen wir doch lediglich die Konfigurationswerte im Inventory zu hinterlegen und zu pflegen und letztendlich das Playbook entsprechend aufzurufen, wenn z.B. gewollte Änderungen an einem System durch einen Admin bzw. durch den Lauf eines der Ansible-Playbooks erfolgten. | ||
+ | |||
+ | In nachfolgendem Beispiel installieren wir nun unseren AIDE-Daemon auf dem Host **'' | ||
+ | $ ansible-playbook playbooks/ | ||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== Ergebniskontrolle ==== | ||
+ | Bei einem Blick in unser System-Journal finden wir nun unter anderem zunächst einmal das Setzen des **'' | ||
+ | # journalctl -f / | ||
+ | < | ||
+ | Mar 14 14:40:36 pml010070 systemd[1]: Started Aide check every day at 05:51:00. | ||
+ | Mar 14 14:40:36 pml010070 systemd[1]: Started Aide Check.</ | ||
+ | |||
+ | Desweiteren finden wir auch Informationen zum initialen Erstellen der Aide-Datenbank. | ||
+ | # journalctl -f / | ||
+ | ++++ journal bei Erstellung der initialen Datenbank | | ||
+ | < | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | |||
+ | | ||
+ | The attributes of the (uncompressed) database(s): | ||
+ | | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | Mar 14 14:43:07 pml010070 aide[94384]: | ||
+ | |||
+ | End timestamp: 2025-03-14 14:43:07 +0100 (run time: 2m 31s) | ||
+ | Mar 14 14:43:07 pml010070 systemd[1]: aidecheck.service: | ||
+ | Mar 14 14:43:07 pml010070 systemd[1]: aidecheck.service: | ||
+ | ++++ | ||
+ | |||
+ | Täglich um **05:01** Uhr wird nun unser Host die aktuelle Datenbank gegen die bestehende AIDE-Datenbank auf unserem internen Repository-/ | ||
+ | # journalctl | ||
+ | ++++ journal beim täglichen check um 05:51 Uhr dieses Hosts | | ||
+ | < | ||
+ | Mar 15 05:51:27 pml010070 rtkit-daemon[1200]: | ||
+ | Mar 15 05:51:27 pml010070 rtkit-daemon[1200]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | | ||
+ | Total number of entries: | ||
+ | Added entries: | ||
+ | | ||
+ | | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | d = ... mc.. .. : /etc/cups | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | d = ... mc.. : /root | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | | ||
+ | The attributes of the (uncompressed) database(s): | ||
+ | | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | |||
+ | End timestamp: 2025-03-15 05:53:01 +0100 (run time: 1m 52s) | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 aide[57175]: | ||
+ | Mar 15 05:53:01 pml010070 systemd[1]: aidecheck.service: | ||
+ | Mar 15 05:53:01 pml010070 systemd[1]: aidecheck.service: | ||
+ | Mar 15 05:53:01 pml010070 systemd[1]: aidecheck.service: | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | ===== Fazit und Ausblick ===== | ||
+ | <WRAP center round tip 80%> | ||
+ | Mit **AIDE** haben wir nun ein Instrument an der Hand, mit der wir die Dateisysteme unserer Host einfach auf Anomalien hin überwachen kann. Mit Hilfe unseres Ansible-Playbooks können wir nun auch nicht nur die Installation und Konfiguration des Aide-Daemon erledigen, sondern auch einfach die jeweiligen AIDE-DAtenbanken der Hosts nach Änderungen durch den Admin bzw. bei Updates oder Ansible-Läufen, | ||
+ | |||
+ | In diesem Konfigurationsbeispiel wurde lediglich aufgezeigt, wie man einfach mit Hilfe von Ansible installieren, | ||
+ | noch im Detail ansehen! | ||
+ | </ | ||
+ | |||
+ | ====== Links ====== | ||
+ | * **[[linux: | ||
+ | * **=> [[linux: | ||
+ | * **[[linux: | ||
+ | * **[[wiki: | ||
+ | * **[[http:// | ||
+ | |||