🐋
Docker上のGUIアプリをセキュアにするx11docker
出来ること
- アプリごとに別々のXサーバを立てて、各アプリを分離する
- コンテナに付与される権限を最小化してくれる
- 長いコマンドを打たなくても良くなる。
背景
Docker上でGUIアプリを実行する際、多くは環境変数$DISPLAY
をコンテナに共有して画面を表示しています。この方法だと、ホストのXサーバをすべてのアプリで共有する形になり、セキュアではありません。アプリごとにXサーバを立ててくれるようにするツールx11-dockerを見つけたので簡単にまとめておきます。
概要
ざっくりとした仕組み
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