Wazuh-Indexer auf gehärteten Systemen und die /tmp Falle
Werden IT-Infrastrukturen und deren Linux Distributionen basierend auf den weltweit anerkannten
CIS-Benchmarks™
gehärtet, stößt man bei der Implementierung von
Wazuh SIEM
und dessen Wazuh-Indexer (basierend auf OpenSearch 2.19.4) auf ein kritisches Problem.
Die gängigen CIS-Benchmarks™ wie z. B. der "CIS Ubuntu Linux 24.04 LTS Benchmark v1.0.0" vom 08.26.2024, fordern bereits im Level-1 Server Profil restriktive Mount-Optionen um sich vor schädlichen Binaries und Malware besser zu schützen.
Besonders die Option
noexec
auf der
/tmp
Partition dient dazu, auf dieser "für alle zugänglichen" Partition, eine Ausführung von Binaries und Skripten zu unterbinden. Allerdings sorgt diese Sicherheitseinstellung auch, dass der Wazuh-Indexer den Dienst quittiert.
Die Ursache: JNA und noexec
Der Wazuh-Indexer nutzt u. a. Java und die
JNA (Java Native Access)
Library, um native Systemfunktionen aufzurufen. Zur Laufzeit entpackt JNA native Bibliotheken (.so-Dateien) in das durch die JVM definierte temporäre Verzeichnis ➸ standardmäßig
/tmp.
Ist
/tmp
gemäß CIS-Vorgaben mit
noexec gemountet, verhindert der Kernel das Mapping dieser Dateien in den Adressraum des Prozesses. Der Wazuh-Indexer bricht den Bootstrap-Vorgang sofort ab.
Fehleranalyse im JSON-Log
Da der Wazuh-Indexer seine Logs auch im JSON-Format schreibt, lässt sich der Fehler effizient mit
jq
extrahieren. Ein typischer Fehlerbericht in der
wazuh-cluster_server.json
sieht wie folgt aus:
jq 'select(.stacktrace[]? | contains("UnsatisfiedLinkError"))' /var/log/wazuh-indexer/wazuh-cluster_server.json
{
"type":"server",
"timestamp":"2026-01-27T17:19:25,773Z",
"level": "WARN",
"component": "o.o.b.Natives",
"cluster.name":"wazuh-cluster",
"node.name": "wazuh-indexer",
"message": "unable to load JNA native support library, native methods will be disabled.",
"stacktrace": [
"java.lang.UnsatisfiedLinkError: /tmp/opensearch-abc123/jna321.tmp: /tmp/opensearch-abc123/jna321.tmp: failed to map segment from shared object",
"..."
]
},
{
"type": "server",
"timestamp": "2026-01-27T17:19:45,052Z",
"level":
"ERROR",
"component":"o.o.b.OpenSearchUncaughtExceptionHandler",
"cluster.name": "wazuh-cluster",
"node.name": "wazuh-indexer",
"message":
"fatal error in thread [opensearch[wazuh-indexer][scheduler][T#1]], exiting",
"stacktrace": [
"java.lang.NoClassDefFoundError: Could not initialize class com.sun.jna.Native",
"..."
"Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.UnsatisfiedLinkError: /tmp/opensearch-abc123.tmp: /tmp/opensearch-abc123/jna321.tmp: failed to map segment from shared object [in thread \"main\"]",
"..."
]
}
Die Pfadangabe mit "/tmp/opensearch-" und die Meldung
"failed to map segment from shared object"
ist das eindeutige Indiz für eine durch
noexec
blockierte Ausführung.
Die Lösung: Umleitung des java.io.tmpdir
Um die CIS-Compliance für
/tmp
nicht aufweichen zu müssen, wird der JVM ein dediziertes temporäres Verzeichnis zugewiesen. Dieses sollte auf einer Partition liegen, auf der die Ausführung von Code erlaubt ist (z. B.
/var), und muss restriktive Zugriffsberechtigungen besitzen.
Umsetzung
- Dediziertes Verzeichnis erstellen:
Wir nutzen/var/lib/wazuh-indexer/tmp, da /var in der Regel die notwendigen Berechtigungen besitzt und der Speicherplatz für die Indizierung ohnehin dort liegt.
mkdir -p /var/lib/wazuh-indexer/tmp
chown wazuh-indexer:wazuh-indexer /var/lib/wazuh-indexer/tmp
chmod 750 /var/lib/wazuh-indexer/tmp - JVM-Konfiguration anpassen:
Die Konfiguration erfolgt direkt über die JVM-Optionen des Indexers. Editieren Sie die Datei /etc/wazuh-indexer/jvm.options:
vim /etc/wazuh-indexer/jvm.options
Fügen Sie am Ende die folgende Zeile hinzu:
# CIS Hardening has noexec on /tmp, so we give him another path.
-Djava.io.tmpdir=/var/lib/wazuh-indexer/tmp - systemd Unit File anpassen:
Ratsam ist es auch, das SystemdD Unit File vom Wazuh-Indexer anzupassen und dort die Umgebungsvariable OPENSEARCH_TMPDIR zu hinterlegen:
[Service]
...
Environment="OPENSEARCH_TMPDIR=/var/lib/wazuh-indexer/tmp" - Dienst neustarten:
systemctl daemon-reload && systemctl restart wazuh-indexer
Mit klassischen Tools prüfen, ob der Wazuh-Indexer Prozess auch den neuen tmp Pfad übernommen hat:
ps aux | grep wazuh-indexer | grep -i '\-Djava.io.tmpdir='
Sicherheit durch Härtung darf die Funktionalität kritischer SIEM-Systeme nicht behindern. Durch die gezielte Umleitung des
java.io.tmpdir
bleibt die
/tmp-Partition gemäß CIS-Benchmark mit
noexec
abgesichert, während der Wazuh-Indexer stabil läuft. Der Platzbedarf für dieses Verzeichnis ist mit weniger als
100 MB minimal, da dort lediglich kleine Shared Objects für den JNA-Betrieb abgelegt werden.
Meine Dienstleistungen für Sie: SIEM-Systeme, Systemhärtung und Compliance-Anforderungen
Als Wazuh-Experte und
offizieller Wazuh Ambassador, biete ich mit meinem Unternehmen
Gray-Hat IT-Security Consulting
professionelle Unterstützung bei der Implementierung von
Wazuh SIEM
in Ihrer IT-Infrastruktur an. Meine Expertise umfasst nicht nur die fachgerechte Etablierung eines SIEM-Systems, sondern auch die
systematische Härtung Ihrer Server und Netzwerke, sodass selbst produktive Umgebungen optimal geschützt sind. Dabei berücksichtige ich wichtige Compliance-Anforderungen wie
ISO 27001:2022
und
NIS-2, um sicherzustellen, dass Ihre IT-Infrastruktur nicht nur sicher, sondern auch mit Ihrer Compliance bzw. ISMS konform sind.
Falls Sie ebenfalls Ihre Sicherheitslage mit Wazuh optimieren, Ihre Systeme härten oder spezifische Compliance-Anforderungen erfüllen möchten, unterstütze ich Sie gerne mit meiner Erfahrung und einem umfassenden Angebot an Lösungen.
