Fedora – ClamAV 0.99.3 installieren

Es kam gestern doch sehr überraschend in den Medien, daß ClamAV ein Rudel Schwachstellen hat und auf keinem normalen Weg wurde darüber informiert. Es gab weder eine Meldung über die CERTs, noch auf der Redhat Security Mailingliste. Die Schwachstelle ist so gravierend, daß auf unserer Serverfarm sämtliche ClamAVds bis zum Patch deaktiviert wurden.

Abhilfe schaffen

Derzeit gibt es in de Repos noch keine gepatchte Version, obwohl Sie bereits zur Verfügung steht. Wer den Early-Alpha-Beta-Test mitmachen will, der findet die Pakete für Fedora hier : https://koji.fedoraproject.org/

Folgende Pakete solltet Ihr dann downloaden:

clamav
clamav-data
clamav-filesystem
clamav-lib
clamav-server
clamav-update

installiert wird das dann mit „rpm -Uv /pfad/zu/den/rpms/clam*rpm„. Fertig.

 

Kernel 4.14.14 OOPSt rum

Heute soll es einen kleinen Bericht aus der Praxis mit den neuen Kernelpatchen geben. Seit 2 Wochen bauen die Kernelentwickler an den Patches für Spectre & Meltdown rum. Vermutlich schon länger, aber seit 2 Wochen sind die Ergebnisse im Umlauf 😉 Nach anfänglichen Erfolgen gegen den Angriff, wurden schnell die Probleme zu Tage gefördert, die durch den Patch verursacht werden.

Massenbetatests

Da ich auf unserer Serverfarm die neuen Kernel ausprobiert habe, habe ich die gefundenen Fehler an Redhat gemeldet. Das war vor 14 Tagen, als die Patche rauskamen. Seitdem sind „wir“ (an dem Bugreport sind viele Leute beteiligt) im ständigen Dialog und testen die neuen Kernel unter „real“(tm) Bedingungen aus.

Stand ist, die Kernel funktionieren soweit stabil. Aber einzelne Prozesse in der Virtualisierung und bei JAVA führen immer wieder zu Fehlern. Zwei von den vielen Fehlern, habe ich Euch mal mitgebracht:

Jan 21 06:04:21 xxx kernel: BUG: unable to handle kernel NULL pointer dereference at 0000000000000003
Jan 21 06:04:21 xxx kernel: IP: 0x99cf048
Jan 21 06:04:21 xxx kernel: PGD 461b067 P4D 461b067 PUD 57fd067 PMD 0
Jan 21 06:04:21 xxx kernel: Oops: 0002 [#3] SMP NOPTI
Jan 21 06:04:21 xxx kernel: Modules linked in: nfsv3 nfs fscache fuse nfsd auth_rpcgss nfs_acl lockd grace xt_owner xt_multiport ip6table_filter ip6_tables cfg80211 rfkill xenfs xen_privcmd sunrpc edac_mce_amd crct10dif_pclmul crc32_pclmul ghash_clmulni_intel xen_netfront xen_blkfront crc32c_intel
Jan 21 06:04:21 xxx kernel: CPU: 0 PID: 6020 Comm: xenstore-read Tainted: G D W 4.14.14-201.fc26.x86_64 #1
Jan 21 06:04:21 xxx kernel: task: ffff880005708000 task.stack: ffffc90000d18000
Jan 21 06:04:21 xxx kernel: RIP: e030:0x99cf048
Jan 21 06:04:21 xxx kernel: RSP: e02b:ffffc90000d1bfd0 EFLAGS: 00010206
Jan 21 06:04:21 xxx kernel: RAX: 0000000000000003 RBX: 0000000000000003 RCX: 00000000099cf048
Jan 21 06:04:21 xxx kernel: RDX: 0000000000000002 RSI: 00000000099cf048 RDI: 0000000000000000
Jan 21 06:04:21 xxx kernel: RBP: 00000000ffddc0a8 R08: 0000000000000000 R09: 0000000000000000
Jan 21 06:04:21 xxx kernel: R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
Jan 21 06:04:21 xxx kernel: R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
Jan 21 06:04:21 xxx kernel: FS: 00007f8761262b40(0000) GS:ffff88007f400000(0000) knlGS:0000000000000000
Jan 21 06:04:21 xxx kernel: CS: e033 DS: 002b ES: 002b CR0: 0000000080050033
Jan 21 06:04:21 xxx kernel: CR2: 0000000000000003 CR3: 0000000003556000 CR4: 0000000000000660
Jan 21 06:04:21 xxx kernel: Call Trace:
Jan 21 06:04:21 xxx kernel: ? switch_to_thread_stack+0x21/0x40
Jan 21 06:04:21 xxx kernel: Code: Bad RIP value.
Jan 21 06:04:21 xxx kernel: RIP: 0x99cf048 RSP: ffffc90000d1bfd0
Jan 21 06:04:21 xxx kernel: CR2: 0000000000000003
Jan 21 06:04:21 xxx kernel: ---[ end trace 50c257ff957ddb5b ]---
Jan 21 08:17:31 xxx kernel: invalid opcode: 0000 [#4] SMP NOPTI
Jan 21 08:17:31 xxx kernel: Modules linked in: nfsv3 nfs fscache fuse nfsd auth_rpcgss nfs_acl lockd grace xt_owner xt_multiport ip6table_filter ip6_tables cfg80211 rfkill xenfs xen_privcmd sunrpc edac_mce_amd crct10dif_pclmul crc32_pclmul ghash_clmulni_intel xen_netfront xen_blkfront crc32c_intel
Jan 21 08:17:31 xxx kernel: CPU: 0 PID: 7087 Comm: xenstore-read Tainted: G D W 4.14.14-201.fc26.x86_64 #1
Jan 21 08:17:31 xxx kernel: task: ffff88007a873c00 task.stack: ffffc900008c8000
Jan 21 08:17:31 xxx kernel: RIP: e030:0xffd9af11
Jan 21 08:17:31 xxx kernel: RSP: e02b:ffffc900008cbfd0 EFLAGS: 00010206
Jan 21 08:17:31 xxx kernel: RAX: 0000000000000004 RBX: 0000000000000003 RCX: 00000000ffd9af11
Jan 21 08:17:31 xxx kernel: RDX: 0000000000000022 RSI: 00000000ffd9af11 RDI: 0000000000000000
Jan 21 08:17:31 xxx kernel: RBP: 00000000ffd99b58 R08: 0000000000000000 R09: 0000000000000000
Jan 21 08:17:31 xxx kernel: R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
Jan 21 08:17:31 xxx kernel: R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
Jan 21 08:17:31 xxx kernel: FS: 00007f2cc2baeb40(0000) GS:ffff88007f400000(0000) knlGS:0000000000000000
Jan 21 08:17:31 xxx kernel: CS: e033 DS: 002b ES: 002b CR0: 0000000080050033
Jan 21 08:17:31 xxx kernel: CR2: 00000000088bb004 CR3: 0000000079d66000 CR4: 0000000000000660
Jan 21 08:17:31 xxx kernel: Call Trace:
Jan 21 08:17:31 xxx kernel: ? switch_to_thread_stack+0x21/0x40
Jan 21 08:17:31 xxx kernel: Code: Bad RIP value.
Jan 21 08:17:31 xxx kernel: RIP: 0xffd9af11 RSP: ffffc900008cbfd0
Jan 21 08:17:31 xxx kernel: ---[ end trace 50c257ff957ddb5c ]---

Die sind vom Kernel 4.14.14, also von gestern 🙂 und wie man an dem Datum sehen kann, sind die Kernel OOPS von heute morgen. Die Beschreibungen die gleich kommen, sind extra simple gehalten, da wohl die wenigsten wissen, was ein IP oder eine NULL POINTER Dereferenz ist. Wer schonmal in Assembler programmiert hat, dem wird das sofort was sagen, dem Rest eher nicht 🙂

Ein Opcode ist eine definierte Bitfolge, welche die CPU als Assemblerbefehl interpretiert und dann macht, was der Befehl meint.

„invalid opcode: 0000 [#4] SMP NOPTI“

Meint, daß die CPU über eine Anweisung gestolpert ist, die nicht definiert ist, in dem Fall eine 0x0000 = 0W . 0W meint den Wert Null (0) auf einer Bitbreite von 16 Bit (= 1 WORD daher das W von 0W => 00000000 00000000. 0L wäre Null(0) auf 32bit auch bekannt als LONGWORD = 00000000 00000000 00000000 00000000).

Das kann nur passieren, wenn ein IP ( Instruction Pointer ) im Speicher wohin gezeigt hat, wo „NICHTS“ war. Das da NICHTS war, war gut so, weil sonst hätte die CPU womöglich die dortigen Bits&Bytes als Befehle interpretiert und wäre Amok gelaufen.

Trivia: Wenn man eine CPU dazu bekommt, so einen Fehler zumachen während sie einen fremden Prozess(z.b. für root) ausführt UND bestimmen kann, WO im Speicher weitergemacht wird, hat man einen EXPLOIT geschafft, also einen ANGRIFF durchgezogen. Das ist dann immer das, was in den Medien landet 🙂

NULL pointer dereference

kernel: BUG: unable to handle kernel NULL pointer dereference at 0000000000000003
kernel: IP: 0x99cf048
kernel: Oops: 0002 [#3] SMP NOPTI

Das ist eine NULL POINTER Exception. Da ist die CPU über einen falschen IP(siehe oben) zu einer Adresse im Speicher gesprungen, wo ein weiterer Zeiger(Pointer) hätte sein sollen, es stand aber nur „0L“  dort.

Das ist eigentlich ein Programmierfehler, denn man müßte Zeiger genau auf „0L“ prüfen, bevor man sie benutzt. Da stellt sich jetzt die Frage, reagiert der Kernel seit den Patchen empfindlicher auf den Fehler ( der womöglich schon seit Jahren da war) oder ist der Fehler durch den Patch entstanden?

IMHO:

Es zeigen sich jetzt lustige Programmierfehler in allen möglichen Sachen/Kernel, weil der schlampige Stil jetzt nicht mehr hinhaut 😀 In C und C++, worin die Masse des Kernelcodes und der Anwendungen geschrieben ist, gibt es das Konstrukt des Doppelzeigers, also einem Zeiger auf einen Zeiger. Natürlich gibt es dafür eine Abkürzung im C Code die auch gern genommen wird, nur daß dabei der Code nicht prüft, ob da 0 als Zeiger steht. Das würde nämlich Performance kosten und genau die will man ja damit erreichen. Der Code geht also davon aus, daß die Zeiger immer stimmen, also optimistische Grundeinstellung des Entwicklers. Seit dem Patch kann man sich da wohl nicht mehr drauf verlassen.

Fazit

Aber zurück zur Situation, wenn man unbedingt muß, kann man die 64Bit Kernel benutzen. Für daheim ist das eh kein Problem, so weit ich das von meiner Serverfarm ableiten kann, betrifft es nur VM und JAVA Prozesse (z.b. Jitsi / Tomcat usw.). Die 32Bit Kernel sind besonders anfällig und derzeit noch nicht zu empfehlen, aber wer braucht auch noch 32bit ?

Die meisten werden die neuen Kernel also ohne Probleme fahren können.

Wer den 4.14.14 Kernel für Fedora 26 haben will :  https://koji.fedoraproject.org/koji/taskinfo?taskID=24303894

Eure Distros werden ähnliche Buildumgebungen haben, wo die aktuellen Testkernel gebaut werden.

 

Linux – Tilix – GTK – D und Wischiwaschi

Supi, Neues Jahr, neue Software zum Testen. Diesmal „Tilix“ . Ein Terminalprogramm das nach Human-Interface-Paradigma  von GTK entworfen wurde. Und leider sieht es auch genauso aus 🙂

Um was geht es eigentlich ?

So sieht unser Testobjekt aus :

leeres Tilix TerminalTilix ist das neue Fedora 27 Standard Terminalprogramm und löst damit GNOME-Terminal ab. Das führte bei einer frischen Installation von Fedora 27 dann natürlich zu diversen Problemen, denn es reagiert komplett anders als GNOME-Terminal (ab jetzt nur noch „GT“ genannt). Man könnte argumentieren, daß es sich bestimmte Shortcuts jetzt so verhalten, wie man das „erwarten“ würde. Dazu muß man allerdings wissen, daß Tilix krampfhaft versucht das Terminalfenster auf genau der offenen Größe zu belassen und dabei möglichst viel Inhalt da reinzuquetschen.

Beispiel:

Am sieht ein Tilix Fenster in dem viele,viele Terminalfenster kaskadisch immer kleiner angezeigt werden.

Wie man hier sehen kann, ist das u.U. nicht besonders sinnvoll. Verantwortlich für diese lustige Anordnung sind die beiden „plus“ Knöpfe neben der Sessionauswahl links oben, das ist die mit dem „3/3“ Text.

Im ersten Moment fand ich die Funktion geckisch, aber nüchtern betrachtet, macht die so nur Sinn, wenn man das Fenster auf Fullscreengröße geöffnet hat.  Das eingebaute Tiling wird vermutlich viele Freunde finden. Ganz abgeneigt bin ich dem nicht, aber ich ziehe die Einrastfunktion von Cinnamon für ganze Fenster vor. Zwischen den Fenstern kann dann nämlich mit ALT-TAB wechseln.

Die Menüs entsprechen den GTK Vorgaben und sind damit derzeit „das dämlichste was man haben kann“. Der Trend, Context-Menü-Container zu recyclen, also beim Aufruf von Untermenüs kein neues Containerfenster , sondern das vom Menü dadrüber zu recyclen aka nur den Inhalt des Menücontainers zu tauschen, entspricht nicht meinem persönlichen Geschmack.

Auch die Option „Show File Browser“ ist vollkommen Ga-Ga und hat dort nichts zu suchen :

komplett fehl am PlatzWas genau soll so eine Funktion an der Stelle bitte tun ? Ich habs natürlich ausprobiert und kann sagen: Nichts. Denn statt mit dem PDF irgendwas zu machen, z.b. den Filelink in das Terminal zu kopieren, passiert … na ? …. wer räts ? … Genau das nicht! Es ist gar kein Filerequester, es ist gleich ein neues Fenster von Nemo/Nautilus, also genau das was da steht: Mach den Filebrowser auf!  WARUMMMMMMMM!?!!?!!!?!!!!!!!!!!

Phobos – altgriechisch für „Furcht, panische Angst“

Schauen wir nach dem Exkurs in den Wahnsinn mal, auf was Tilix eigentlich aufbaut :

Installieren:
tilix x86_64 1.6.4-5.fc26 updates 724 k
Installiere Abhängigkeiten:
gtkd x86_64 3.6.6-2.fc26 updates 8.5 M
ldc-druntime x86_64 1:1.3.0-1.fc26 updates 550 k
ldc-phobos x86_64 1:1.3.0-1.fc26 updates 2.0 M

Es wird uns also bei der Installation eine Laufzeitumgebung von … taterata… D installiert und gleich noch Phobos dazu.

Praktisch alle Nicht-Programmierer und vermutlich selbst von den Middleaged DevOps kennen D nur die wenigsten. D wurde Ende der 90er!!! Jahre im OOP Hype als auf C-basierendem OOP Ersatz zu C++ entwickelt. Als wenn E und F aus den 80ern nicht schon gereicht hätten 🙂

Über D … man kann es hier prima verwenden -> 😀

D war nicht in den Heise Top 10 für 2017 ,
ist keine POP ( Problem Orientierte Programmiersprache —- Ich weiß!!! ich weiß!!! 😀 ) und damit trendy,
in den Stackoverflow TOP 20 der meistgehassten Programmiersprachen kommt es auch nicht vor,
und in den Top 20 der JAX für 2017 kommt D auch nicht  vor.  Da selbst PERL noch in deren TOP 20 ist und das verdammt lange tod ist, lasse ich mich dazu verleiten D auch als irrelevante Größe zu bezeichnen aka tod.

Ein Programm in einer toten Programmiersprache und auf Basis von panischer Furcht , das kann kein gutes Omen sein. Und genau in dem Geiste scheint Phobos gemacht worden zu sein, denn es beschreibt sich so :

„Each module in Phobos conforms as much as possible to the following design goals. These are goals rather than requirements because D is not a religion, it’s a programming language, and it recognizes that sometimes the goals are  contradictory and counterproductive in certain situations, and programmers have jobs that need to get done“

Kurzform „WischiWaschi“

Das will man über eine wichtige Komponente seines Rechners nicht lesen.. Übersetzung:

Jedes Modul in Phobos entspricht so weit wie möglich den folgenden Designzielen. Diese Ziele sind eher Ziele als Anforderungen, denn D ist keine Religion, es ist eine Programmiersprache, und es erkennt, dass die Ziele manchmal widersprüchlich und kontraproduktiv in bestimmten Situationen sind, und Programmierer haben Jobs, die erledigt werden müssen“. ( Danke an Deepl.com )
(An.d.R. die Designziele werden gar nicht in der dnf info von phobos genannt k.a. wieso die die dann erwähnen.)

Natürlich hat ein Programm klare Ziele:

  1. Es muß eine bestimmte Funktion erfüllen
  2. Es darf keine Fehler enthalten
  3. Es darf bei Design keine Sicherheitslücken enthalten
  4. Es muß bedienbar bleiben

Die Formulierung wie „Aber manchmal haben Programmierer Jobs, die erledigt werden müssen.“ lassen mich an der Qualität des Codes schon von vornherein zweifeln. „D sein keine Religion“ als wenn Ziele eine Religion bräuchten ? Das ist so typischer „Ich weiß alles besser als Ihr“ Manifestsülz. Glauben gehört in die Kirche und Ziele im Leben sind ein Eigenschaft von Menschen. Und wenn ich das Ziel habe, das coolste, aber total unsicherste Programm des Planeten zu bauen, dann tue ich das, weil ich ein Mensch bin. Macht das Sinn , Nö, aber Spaß 😀  Programmierer, deren Software für andere Gedacht ist, sollten andere Maßstäbe haben: Sicherheit, Stabilität, Benutzbarkeit.

Wie Ihr hier lesen könnte, kommt „Design“ in der kurzen Liste nicht vor.  Firmenchefs und Designer sehen das natürlich anders, weil EyeCandy verkauft sich gut, aber man kann Design auch an Platz 4 der Liste haben und ein sicheres Programm trotzdem gut aussehen lassen 😉

Fazit

Die vielen unnötigen Ebenen des Terminalseins ( da gibts 4 von in Tilix ) haben keinen brauchbaren Vorteil (für mich), der Unterbau macht mir Angst, die wenig bis gar nicht auditierte Programmiersprache nebst Compiler, sinnlose Features und ein grässliches Design lassen für mich nur eine Option zu:

dnf erase tilix -y

und danach die Platte desinfizieren 😉