root権限不要でセキュアに使える、Docker の rootless モードを試してみた。
Contents
イントロ
様々なデーモンを気軽に、独立に試せるよう、Docker コンテナを扱ってみる。
Docker は前から少しまともに使ってみたいと思っていたものの、
その恩恵を存分に受けられる、差し迫った必要性がなかったため、
なかなか手を出せないでおり、随分出遅れた自覚はある。
そこで、せっかくならやや先進的な(?) rootless モードを試してみることにした。
という訳で、私は Docker エキスパートでも何でもないことをご留意ください。
なお、ホスト環境は別記事にもしている、現在整備中の Ubuntu Server 20.04 x86_64。
今後、以下のソフトウェアの試験、導入に展開する予定。
- [Done] GitLab CE
- [Done] WordPress (+ Nginx, MariaDB)
- Nextcloud (+ ONLYOFFICE?)
Rootless Docker
Docker
詳しく正確な説明は、他所に譲るとして、私の言葉でいうと、
アプリケーションやライブラリ毎に最小限の環境(コンテナ)が気軽に利用できる。
また設定やデータなど、必要なファイル群はホスト側を参照させることができ、
バージョンの組み合わせ、個別アップデートなど気軽に組み替えて試すことができる。
またDockerコンテナが動く環境さえあれば、ホスト環境に依らずを同じ動作を期待できる。
ちょうど小さな仮想環境のようなものだろうか。
このような使い勝手の良い環境を、
ホストを汚さずクリーンに比較的少ない計算資源で利用できるため、
Docker のようなコンテナ技術は、登場以来急速に発達してきたようだ。
'Rootless' な Docker
そんな Docker だが、その便利な機能故に、root権限とは密接にリンクしており、
登場して間もないころは数々のセキュリティ上の問題があったようだ。
今ではコンテナ側が正しく設定いれば、大きな問題はないようではあるが、
それでもコンテナ側が設定を間違えると、ホストがリスクに晒されるのは避けられない。
そこで登場したのが、non-root な一般権限で動く、rootlessモードな Docker である。
root でない一般権限で動くなら、必然的にホスト側の root を危険に晒すことはなくなる。
また、インストールに管理者権限が不要となるため、
共用サーバーなど管理者権限を持たない環境でも、
個人レベル、一般権限のみで Docker を入れて利用することができる。
もちろん一般権限で動く故の制限は多少はあるが、
上記のメリットを考えると、少なくとも個人の試験目的なら大変重宝しそうである。
rootless-docker のインストール
基本的にはオフィシャルのドキュメントを参照する。
まだ開発環境等を揃えていない Ubuntu Server 20.04 環境では以下のとおり。
まず uidmap を入れる。
1 |
$ sudo apt install uidmap |
次にインストールスクリプトをダウンロード、実行する。
オフィシャルにある通りそのまま実行すると、
Docker関係の実行ファイルを
${HOME}/bin下に展開する。
私は自前ビルドやユーザー環境は
${HOME}/local下に置くようにしているので、
スクリプトを実行する前に少し編集する。
1 2 3 |
$ curl -sSL -O https://get.docker.com/rootless --> BIN="${DOCKER_BIN}: -${HOME}/local/rootless-docker/bin}" $ sh ./rootless |
インストールが無事成功すると、PATH などを適切設定しろと言われるので、
言われたとおりに .bashrc 等に反映させる (
PATH, DOCKER_HOST)。
ログイン、システム起動時の自動実行
Ubuntu等では
~/.config/systemd/user/docker.service を作成してくれる。
$ sytemctl —user xxx docker (xxx: start, stop, status 等) で Docker service を制御できる。
以下のようにするとログイン時に自動実行される。
1 2 |
$ systemctl --user daemon-reload $ systemctl --user enable docker |
加えて以下のようにするとサーバー起動時に自動実行されるようになる。
1 |
$ sudo loginctl enable-linger ${USER} |
なお、まず始めに試しに
$ adduser testuser でテストユーザーを作成して実行したが、
このユーザーにGUIログインせずに、ターミナルから su でユーザーだけ変えて行うと、
systemd 周りの設定がうまくいかなかった。
GUI/デスクトップにログイン後、再トライするとうまく設定された。
(option) Docker Compose のインストール
この rootless な Docker は、Docker Compose とも組み合わせられるので、
Docker Compose を同じく一般ユーザー環境下にインストールする。
やはり基本的にはオフィシャルの記載の通り。
ただし、この手順はシステムにインストールするためのものなので、
以下のようにして一般ユーザー環境下にインストールした。
1 2 |
$ curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o ~/local/rootless-docker/bin/docker-compose $ chmod a+x somewhere/to/docker-compose |
Rootless Docker の利用
冒頭に述べた通り、以下の用途に利用する予定。
記事が用意でき次第、リンクを貼っていく。
- GitLab CE
- WordPress (+ Nginx, MariaDB)
- Nextcloud (+ ONLYOFFICE?)