はじめに
様々なサイトを参考にHomebrewでDocker for Macをインストールしました.
はじめは何も疑問を持たずに色々試していましたが,こちらの記事をきっかけに
セキュリティについて気にするようになりました.
そして,いろいろ調べるうちに気になる点が出てきたので質問させていただきます.
環境
$ sw_vers ProductName: Mac OS X ProductVersion: 10.14.4 BuildVersion: 18E226 $ docker --version Docker version 18.09.2, build 6247962
他に必要な情報があればコメントお願いします.
気になる点
1つ目
様々なサイトを見ていると例えば「sudo
なしでdocker
コマンドを実行する方法」のような記事を見かけます.
つまり通常docker
コマンドにはsudo
をつける必要があるような書き方です.
さらに中身を見てみると,「sudo
をつけるか,docker
グループに入れる」と書いてあります.
ここなんですが,Docker for Macをインストールした時から,すでにsudo
をつけずにdocker
コマンドを使えましたし,
cat /etc/group | grep docker
やdscl . list /Groups
でグループの確認を行なってもdocker
グループなるものは存在しません.
この状態は正しいのでしょうか?
2つ目
こちらの記事の最後の方に
これはdockerdの設定で変更可能ですが、--privilegedを付けて実行できなくなります。
とありますが,
dockerdとは何でしょうか?また,その設定はどこで行えるのか教えていただけると幸いです.
最後に
また,Dockerを使っていく上でセキュリティ上気をつけることがあれば,
余裕のある範囲で些細なことでも構わないので,コメントを是非お願いします.
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
ベストアンサー
こんばんは。3点あるうち、1、2についてコメントさせていただきます。
間違いもあるかと思いますが、ご容赦くださいませ。
Docker for Macは、実際はいろいろなツールが組み合わさって提供されています。
ちょっとわかりにくいかもしれませんが、公式サイトのこちらを読まれるといいと思います。
- Docker Desktop for Mac vs. Docker Toolbox (Docker Documentationサイト)
1. dockerコマンドの実行権限について
Docker for Macの場合は、dockerコマンドはMac上に直にインストールされています。
ls -lF
でコマンドの情報をチェックすると、シンボリックリンクで/Applications/Docker.app/Contents/Resources/bin/
以下に実際のコマンドが格納されているのがわかります。
また、実行権限は rwxr-xr-x 755で、本人は読み書き実行、グループは読み&実行、その他のユーザも読み&実行可能になっています。
source:bash
1% ls -lF /usr/local/bin/docker 2lrwxr-xr-x 1 ユーザ名 staff 54 9 6 2018 /usr/local/bin/docker@ -> /Applications/Docker.app/Contents/Resources/bin/docker 3% ls -la /Applications/Docker.app/Contents/Resources/bin/docker 4-rwxr-xr-x 1 ユーザ名 admin 60079680 5 8 00:31 /Applications/Docker.app/Contents/Resources/bin/docker
Docker for Macをインストールした時から,すでにsudoをつけずにdockerコマンドを使えました
とありますが、Docker for Macの場合はインストーラーがセットアップ時にこのように権限を設定しているので、結果的にrootにならずともコマンドが使えるようになっています。
これは、「Mac上で簡単にDocker環境を利用する」という利便性のためにそうなっているのだと思います。
一方で、CentOSやUbuntuといったLinuxマシンでは、yumやaptのようなパッケージでインストールしても、デフォルトではrootでしかdockerコマンドが実行できないようになっています。
sudoするか、dockerコマンドのパーミッションを確認し、グループに実行権限が付いていれば、そのグループにdockerコマンドを利用させたいユーザを所属させる...という作業を行います。
2. dockerdについて
少し理解が間違っている点あるかと思いますが、これも参照されているドキュメントが前提としている環境と、Docker for Macとでは少し違いますので、そのあたりについて書いてみます。
dockerdは、Dockerの機能を実現する一番大事な部分です。
イメージからコンテナを管理する、起動する、ボリュームを割り当てるといったコアの部分になります。
dockerdは、コマンドで指示があるまでは、待機状態になって起動しているプロセスです。(デーモンというものです)
dockerコマンドで司令を出す --> dockerd がコマンドを受け付けて処理を実施し結果を返す、という流れです。
さて、このdockerdですが、Docker for Macの場合は、Mac上に直に起動しているわけではありません。
Docker for Macでは、HyperKit
という軽量の仮装化ツールを使って、Docker用の仮想マシンを内部で起動させています。
この「仮想マシンの中」で、dockerdが起動しています。
結果的に、Macからのpsコマンドでは、直接dockerdを見つけることができません。
dockerコマンドでHyperKitの中のdockerdにAPI経由で司令を出す --> dockerdockerd がコマンドを受け付けて処理を実施し結果を返す
といった流れになります。
なお、Docker用の仮想マシンにアクセスする場合は、
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
とすると、中に入れます。
この仮想マシンの中では、dockerdがrootで起動されているのが分かります。
docker-desktop:~# ps -elf | grep dockerd 1677 root 0:18 /usr/local/bin/dockerd -H unix:///var/run/docker.sock --config-file /run/config/docker/daemon.json --swarm-default-advertise-addr=eth0 --userland-proxy-path /usr/bin/vpnkit-expose-port 2724 root 0:00 grep dockerd docker-desktop:~# uname -a Linux docker-desktop 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 Linux docker-desktop:~#
抜ける時は、 Ctrl-A k で。
追記:userns-remap の件
"userns-remap":"default"
でユーザ名前空間というものを使えるようなのですが,Docker for Macでどう適用するか教えてもらえないでしょうか?
この機能、あまり詳しくないのですが、せっかくですので試してみました。
以下のようにDaemon -> Advanced からJSONでuserns-remapの設定を追加して、Apply & Restartしてみたところ、起動に失敗しました。
質問者様も失敗した、とのことですが、最終的には工場出荷状態に戻しましたでしょうか?
json
1{ 2 "debug" : true, 3 "experimental" : true, 4 "userns-remap" : "default" 5}
失敗の理由
以下は、回答というより確認してみた結果です。求めている答えとは違うかもしれませんが、これもやはり「Docker for Macがそのような設定になっている」ということのようです。
userns-remapの設定について、日本語のドキュメントを見てみました。
"userns-remap":"default"
と設定すると、
Docker は dockermap というユーザ名とグループ名が存在しているかどうか確認し、無ければ作成します。
と書いてありますね。
上記に書いたとおり、実際の処理はMac上に直接ではなく仮想マシン内なので、screen ... で中に入って確認してみます。また、仮想マシン内で、ユーザの登録情報を見てみると、rootだけになっています。
bash
1docker-desktop:~# cat /etc/passwd 2root:x:0:0:root:/root:/bin/sh
dockermapというユーザやグループは存在しないので、では、「先に作っておこうかな」と考えて、adduserを実行してみると、こんなエラーになります。
bash
1docker-desktop:~# adduser dockermap 2adduser: /etc/passwd: Read-only file system
実のところ、このDocker for Mac (Docker Desktop for Mac)の利用する仮想マシンは、軽量Linuxマシンで、かつ、一部のファイルシステムはRead Onlyになって起動している状態です。
bash
1# mountコマンドを実行、Read Onlyのファイルシステムをgrepしてみる 2 3docker-desktop:~# mount | grep '(ro' 4/dev/sr0 on / type iso9660 (ro,relatime) 5/dev/sr2 on /containers/services/docker type iso9660 (ro,relatime)
/ (rootパーティション) がRead Onlyになっており、ユーザ情報やOSの設定情報が入った /etc 以下もRead Onlyなので、結局ユーザ追加のために/etc/passwdなどに書き込みしようとすると、エラーになってしまいます。
ちなみに、あまり意味はないかもしれませんが、"userns-remap":"default"
ではなく、"userns-remap":"root"
として、唯一存在しているuser: rootを指定してRestartすると、エラーにはなりません。
結局どうするのがいいの?使い分けは?
ここから先は個人の考えとか印象なので、参考までに。
Docker Desktop for Macは、GUIや便利ツールも含めて簡単にDocker環境を構築して検証するためのもの、と思ったほうがよさそうです。
また、Dockerホスト専用の軽量OSは、コンテナを格納する領域以外の大部分が読み込み専用となっているものが多いです。必要な機能はコンテナの起動で実現するため、ベースOS部分には変更を加える必要が無い、という前提でそうなっていると思います。
ある程度自由にパッケージを追加したり、ホストOS側でもDocker以外の何かを動かすことが前提の環境なら、複数ユーザがログインしたり複数サービスが起動したり、ファイルシステムへの書き込みが可能だったりということで、結果的に気をつけないといけない、ということは間違いないかと思っています。
もし、そういった点に注意して環境を作ってみたい、サーバを構築したいということであれば、Docker for Macではなく、実際のCentOSやUbuuntuなどのサーバを使うのがいいと思います。
また、Mac上にVMWareを入れて、そこでCentOSを立てて試す、というところまで実施すれば良いのかなと思います。
いろいろ分かっていない点もありますので、他の皆さんのコメントもあれば、ぜひ。
投稿2019/05/12 17:15
編集2019/05/14 11:48総合スコア1997
0
docker groupの話などは既に詳しく書かれているので、どうしてこうなっているかについて書いてみます。
docker daemonがroot権限を要求するのはセキュリティ上の懸念があるためです。公式の以下の記事で解説されています。
ここに書かれている1つ目の理由をかいつまむと、
- dockerはホストとコンテナでディレクトリを共有することができる
- なので、コンテナは制限なく共有されたディレクトリを変更することができる
- というわけで、信頼されたユーザのみにdockerを操作する権限を制限するべき
ということになります。
一方でDocker for Mac、今は名前が変わってDocker Desktop for Macですが、は基本的には開発用途で個人PCにインストールして使うことを想定されているので、特権がなくても使えるようにしていいという判断だと思います。これに関しては根拠を見つけられていないですが、そういうことではないでしょうか。
Docker Desktopは仮想化のオーバーヘッドがあったりもするので、実運用でDockerのホストとしてWindowsやmacOSを使うメリットはほとんどないと思います。
追記:と思ったら最初にセキュリティの話 ( https://qiita.com/kubosuke/items/5291439ad25313a6ed18 ) は書かれていましたね、すみません。
投稿2019/05/21 13:37
編集2019/05/21 13:42総合スコア121
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/05/13 11:29
2019/05/14 01:10
2019/05/14 11:49
退会済みユーザー
2019/05/14 13:52
2019/05/17 00:33