sockstat: Wenn der Kernel im Jail älter ist als im Host

Arbeiten mit Jails ist gut, keine Frage. Passiert da was: Löschen und neu. Bricht jemand ein, ist nur dieses Jail betroffen. Diese kleinen virtuellen Systeme sind ein Segen.

Was aber, wenn der Host ein Update bekommt, das Jail aber – warum auch immer – nicht? Dann bekommt man die Quittung in Form von Fehlermeldungen, wenn man auf Dinge zugreifen will, die eigentlich dem Host “gehören”.

sockstat ist so ein Problemfall. In diesem Fall läuft das Jail mit FreeBSD 11.3, der Host aber mit 12.1. Will man sich nun die offenen Sockets ansehen, bekommt man statt der Liste folgendes:

root@host / % jexec jail
root@jail / % sockstat
sockstat: struct xinpgen size mismatch
root@jail / % 

Na, Ahoi. Da wir aber natürlich keine Lust haben, zu Raten, welche Sockets offen sind und wer wo lauscht, hilft ein kleiner Kniff. Man nehme einfach das sockstat vom Host! Aber Vorsicht: Es muss eine Kopie sein, da ein Jail natürlich keinen Symlinks aus dem Host folgen darf und kann.

Also erzeugen wir erst ein Backup der Version im Jail und kopieren dann die Version aus dem Host darüber.

root@host / % jexec jail
root@jail / % cp /usr/bin/sockstat /usr/bin/sockstat.bak
root@jail / % exit
root@host / % cp /usr/bin/sockstat /pfad/zum/jail/usr/bin

Fertig. Startet man nun sockstat im Jail bekommt man wieder das, was man erwartet.

root@jail / % netstat
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS
www      nginx      57942 6  tcp46  *:80                  *:*
www      nginx      57942 7  tcp46  *:443                 *:*
…
root@jail / %

Kommentar verfassen