Hallo zusammen,
nachdem ich den Verinice-Client unter FreeBSD zum Laufen bekommen habe, dachte ich, teile ich meine kleine Wochenendbastelei mal mit dem Forum und stelle ein paar Fragen dazu, die ich noch habe.
Hintergrund: Ich arbeite für ein Hosting-Unternehmen, welches sich in Richtung Grundschutz bewegen möchte. Nach unserer Recherche haben wir der Führung Verinice vorgeschlagen und bewilligt bekommen. Für uns waren vor allem drei Dinge maßgeblich: Selbst-hostbar, Open-Source, deutscher Hersteller. Teil unserer Firmenkultur ist der Ansatz „jedem Mitarbeiter des richtige Werkzeug“, weshalb wir - nach gewissen Richtlinien - relativ freie Wahl hinsichtlich des Betriebssystems haben.
FreeBSD ist ein Open-Source Betriebssystem und ein direkter Abkömmling des ursprünglichen Unix. Außerhalb von Servern oder dem Embedded-Einsatz ist es zugegebenermaßen ein Exot, aber man kann damit durchaus auch seine Arbeitsstation betreiben, wenn man möchte. Es bringt den sogenannten „Linuxulator“ mit, ein System, um durch Übersetzen der Syscalls Linux-Programme ausführen zu können. Da es ein natives Linux-Binary von Verinice gibt, ist dies meine erste Anlaufstation.
Ausführen von Verinice
Beim Versuch, das Programm einfach auszuführen, passiert typischerweise dies:
ELF binary type „0“ not known.
./verinice: Exec format error. Falsche Architektur.
% file verinice
verinice: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=b621fbc20e80d7ac375ece11a5775fc6686b71c7, with debug_info, not stripped
Standardmäßig kann FreeBSD Programmdateien von Fremdsystemen nicht ausführen.
Linuxulator aktivieren und Kernelmodule laden
# sysrc linux_enable="YES"
# vi /etc/rc.conf
Hinzufügen von „linux“ zum Array „kld_list“. System neustarten. Anschließend führt der nächste Versuch zu dieser Fehlermeldung
ELF interpreter /lib64/ld-linux-x86-64.so.2 not found, error 2
Der Hintergrund ist, daß nun zwar das Programm im Linux-Mode ausgeführt werden kann, aber die benötigten Linux-Bibliotheken nicht vorhanden sind.
Linux-Bibliotheken installieren
# pkg install linux_base-c7
Sobald die grundlegendsten Bibliotheken von CentOS 7 vorhanden sind, passiert beim Ausführen dies:
OpenJDK 64-Bit Server VM warning: Can’t detect primordial thread stack location - find_vma failed
Linux verwendet das /proc-Dateisystem exzessiv und sehr viele Programme funktionieren nicht ohne.
Linux Proc-Dateisystem zur Verfügung stellen
Wie von der Installationsnachricht des Paketes empfohlen, stellt man der Linux-Umgebung ein Proc-Dateisystem zur Verfügung:
# echo "linprocfs /compat/linux/proc linprocfs rw 0 0" > /etc/fstab
# mount /compat/linux/proc
Die ebenfalls erwähnten linsysfs und tmpfs werden für Verinice vermutlich nicht unbedingt benötgt.
Nun läßt sich das Programm starten, bricht aber mit dieser Meldung ab:
Ein Fehler ist aufgetreten. Informationen hierzu enthält die Protokolldatei
/usr/home/benutzername/verinice/workspace/.metadata/.log
Im Log findet sich u.a. diese Zeile:
java.lang.UnsatisfiedLinkError: org.eclipse.swt.internal.gtk.OS._cachejvmptr()V
Linux-GTK+3 zur Verfügung stellen
# pkg install linux-c7-gtk3
Anschließend startet Verinice, kann sich zum Server verbinden, usw.
Probleme
Auf der Konsole werden verschiedene Warnungen ausgegeben. Z.B. diese:
(verinice:23365): dbind-WARNING **: 19:20:26.430: Couldn’t register with accessibility bus: Did not receive a reply. Possible causes include: the remote applic
ation did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
Frage an die Entwickler: Wofür wird dbus von Verinice genutzt? Muß ich mit dem Fehlen wichtiger Funktionalität rechnen, wenn der Dienst nicht zur Verfügung steht?
log4j:WARN File option not set for appender [FILE].
log4j:WARN Are you using FileAppender instead of ConsoleAppender?
Diese Warnungen können vermutlich ignoriert werden. Oder gibt es diesbezüglich Handlungsbedarf?
SCHWERWIEGEND: Unable to set localhost. This prevents creation of a GUID. Cause was: meinhostname.meinedomain: meinhostname.meinedomain: Der Name oder der Dienst ist nicht bekannt
java.net.UnknownHostException: meinhostname.meinedomaiin: meinhostname.meinedomain: Der Name oder der Dienst ist nicht bekannt
at java.net.InetAddress.getLocalHost(InetAddress.java:1506)
Das sieht nicht so schön aus. Dazu muß ich mir nochmal das Linux-Kompatibilitätssystem ansehen, da vermutlich dort die Definition von Localhost irgendwo eingetragen werden muß. Wofür nutzt Verinice die generierte GUID?
Gtk-WARNING **: 09:10:05.514: Could not load a pixbuf from /org/gtk/libgtk/theme/Adwaita/assets/bullet-symbolic.svg.
This may indicate that pixbuf loaders or the mime database could not be found.
Tatsächlich fehlt das shared-mime-info-Paket für den Linux-Modus, weshalb z.B. die kleinen schwarzen Pfeilchen zum Aufklappen von Items nicht angezeigt werden können. Hier muß ich nochmal ran und ggf. einen Port schreiben, welcher das Paket zur Verfügung stellt.
Aublick
Sollte ich für eines oder mehrere der genannten Probleme eine Lösung finden, teile ich sie hier mit. Mittelfristig will ich allerdings ausprobieren, ob ich aus dem Quellcode eine native FreeBSD-Version von Verinice bauen kann. Leider ist Java so gar nicht meine Welt, weshalb das Experiment nicht unter dem besten Stern steht.
In jedem Fall einfach mal ein „Dankeschön!“ an das Team von SerNet! Verinice macht uns in jedem Fall die Arbeit leichter.