blog · git · desktop · images · music · contact & privacy · gopher


lariza benutzt jetzt WebKitGTK-Sandboxing

2020-05-04

Okay, das ist jetzt erstmal der letzte langweilige Blogpost zu lariza. Geht aber um eine größere Änderung, die noch ein bisschen Erklärung braucht.

WebKitGTK-Sandboxing wird im nächsten Release aktiviert sein.

Im Prozessbaum sieht das dann so aus:

lariza(1030)─┬─WebKitNetworkPr(1035)───...
             ├─bwrap(1050)───bwrap(1051)───WebKitWebProces(1054)─┬─{WebKitWebProces}(1059)
             │                                                   ├─...
             │                                                   └─{WebKitWebProces}(4837)
             ├─bwrap(9975)───bwrap(9977)───WebKitWebProces(9978)─┬─{WebKitWebProces}(9979)
             │                                                   ├─...
             │                                                   └─{WebKitWebProces}(9986)
             └─...

bwrap zeigt an, dass bubblewrap benutzt wird, um jene Komponenten zu isolieren, die besonders verwundbar sind. Rendering und JavaScript-Verarbeitung passiert hier drin. Web Extensions laufen da auch. Solch eine Isolation ist eine recht gute Idee, würde ich sagen, und vermutlich auch längst überfällig.

bubblewrap sollte schon als Abhängigkeit von WebKitGTK installiert sein, zumindest ist das bei Arch Linux so. Man muss eigentlich nichts dafür tun, damit das läuft. Naja, eigentlich™.

Es wird zum Beispiel ähnlich eines chroot das Dateisystem isoliert. Die Prozesse brauchen natürlich weiterhin Zugriff auf manche Dinge, also gibt es dann einige Bind-Mounts. Die kann man sich im /proc-Dateisystem anschauen:

$ cat /proc/1054/mounts
...
/dev/sdb1 /usr/lib ext4 ro,nosuid,nodev,relatime 0 0
/dev/sdb1 /usr/share/zoneinfo/Europe/Berlin ext4 ro,nosuid,nodev,relatime 0 0
tmpfs /tmp/.X11-unix/X0 tmpfs rw,nosuid,nodev,relatime,size=31457280k 0 0
/dev/sdb1 /home/tux/.Xauthority ext4 ro,nosuid,nodev,relatime 0 0
...

Ich erwähne das, weil darunter auch sowas zu finden ist:

/dev/sdb1 /home/tux/.config/fontconfig ext4 ro,nosuid,nodev,relatime 0 0
/dev/sdb1 /home/tux/.fontconfig ext4 ro,nosuid,nodev,relatime 0 0
/dev/sdb1 /home/tux/.fonts ext4 ro,nosuid,nodev,relatime 0 0

Deine Config-Dateien. Jenachdem, wie die eingerichtet sind, muss man das nun anpassen. Zum Beispiel war mein ~/.config/fontconfig/fonts.conf ein Symlink zu einer Datei in meinem Repo ~/work/dotfiles-pub. Das geht dann natürlich kaputt, weil dieses Zielverzeichnis im isolierten Prozess nicht verfügbar ist. In diesem konkreten Fall war dann die Qualität der gerenderten Fonts ziemlich im Eimer. Bei solchen oder ähnlichen Dingen muss man dann sein Setup anpassen.

Es ist schade, dass wir pledge(2) und unveil(2) nicht auf Linux haben. Ich mutmaße, dass derartige Prozessisolation dann deutlich verbreiteter wäre, weil diese beiden Syscalls wesentlich einfacher zu benutzen sind als alles, was wir derzeit unter Linux haben.

Comments?