🐋

Docker上のGUIアプリをセキュアにするx11docker

2021/12/17に公開

出来ること

  • アプリごとに別々のXサーバを立てて、各アプリを分離する
  • コンテナに付与される権限を最小化してくれる
  • 長いコマンドを打たなくても良くなる。

背景

Docker上でGUIアプリを実行する際、多くは環境変数$DISPLAYをコンテナに共有して画面を表示しています。この方法だと、ホストのXサーバをすべてのアプリで共有する形になり、セキュアではありません。アプリごとにXサーバを立ててくれるようにするツールx11-dockerを見つけたので簡単にまとめておきます。

概要

https://github.com/mviereck/x11docker

ざっくりとした仕組み

x11dockerなし

x11dockerあり

コンテナ毎にXサーバを立てるということです。

ハンズオン

インストール

環境はArch Linuxです。
非常に詳しいwikiに各distroの依存関係が書いてあるので環境が異なる方は参照してください。

curl -fsSL https://raw.githubusercontent.com/mviereck/x11docker/master/x11docker | sudo bash -s -- --update
sudo pacman -S xpra xorg-server-xephyr xorg-xinit xorg-xauth xclip xorg-xhost xorg-xrandr xorg-xdpyinfo
sudo pacman -S weston xorg-server-xwayland xdotool
sudo pacman -S xorg-server-xvfb

x11dockerでコンテナ実行

実行前に.X11-unixディレクトリ確認

$ ll /tmp/.X11-unix/
total 0
srwxr-xr-x 1 ys  users 0 Dec 16 19:48 X0
srwxr-xr-x 1 ys  users 0 Dec 16 19:48 X1
srwxr-xr-x 1 gdm gdm   0 Dec 16 19:48 X1024
srwxr-xr-x 1 gdm gdm   0 Dec 16 19:48 X1025

コマンドは"x11docker [IMAGE] [COMMAND]"という書き方になります。

$ x11docker x11docker/fvwm xterm &


xtermが起動しました。

$ ll /tmp/.X11-unix/
total 0
srwxr-xr-x 1 ys  users 0 Dec 16 19:48 X0
srwxr-xr-x 1 ys  users 0 Dec 16 19:48 X1
srwxrwxrwx 1 ys  users 0 Dec 17 16:22 X102 <==増えている
srwxr-xr-x 1 gdm gdm   0 Dec 16 19:48 X1024
srwxr-xr-x 1 gdm gdm   0 Dec 16 19:48 X1025

このようにコンテナを起動するたびにXサーバが増えていきます。

x11docker --desktop --size 320x240 x11docker/lxde

とすると小さいデスクトップが現れました。

まとめ

セキュアになるだけでなく、バインド関係のオプションをツール側で付与してくるのでコマンドがとても短くなりいい感じです。ただ、ホストのXサーバとネイティブにつなぐよりは、起動が遅くなります。

Discussion