Motomichi Works Blog

モトミチワークスブログです。その日学習したことについて書いている日記みたいなものです。

任意のユーザーを一時的にdockerグループに所属させる(カレントグループの確認と変更)

参考にさせて頂いたページ

gpasswdについて

newgrpについて

usermodとgroupsについて

groupの一覧を確認する

はじめに

今回のhostのOSはcentos7です。

docker-composeを使うにあたって、一時的に(今だけ)sudo無しでdockerコマンドを実行したい。ということが今回の目的です。

Dockerでユーザーをdockerグループに追加することの危険性を理解しよう - Qiita によると、sudo無しでdockerを実行できるとhostのroot権限まで与えることになってしまうとのことです。

以前macで試したときはnewgrpでうまくできたと思うのですが、今回はうまくいかないのでgpasswdを使ってグループにhogeユーザーを追加して、終わったらhogeユーザーを削除します。

ログイン中のユーザーの所属グループを確認する

例えばhogeユーザーでログインしている場合以下のコマンドで確認できます。

$ groups hoge

以下のようにhoge wheelの2つに所属していることがわかりました。

hoge: hoge wheel

dockerグループがあるか確認する

今日の環境はcentos7なのですが、以下のコマンドで確認できました。

$ cat /etc/group

sudo無しで実行してみる

一度dockerコマンドを実行してみます。

$ docker version

以下のように表示されてdockerのサーバーの実行権限が無いことが確認できました。

Client:
 Version:      17.05.0-ce
 API version:  1.29
 Go version:   go1.7.5
 Git commit:   89658be
 Built:        Thu May  4 22:06:25 2017
 OS/Arch:      linux/amd64
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.29/version: dial unix /var/run/docker.sock: connect: permission denied

dockerグループに追加してdockerコマンドが実行できることを確認する

Dockerコマンドをsudoなしで実行する方法 - Qiita にならってやってみます。

例えばhogeユーザーでログイン中に以下のコマンドでdockerグループに所属させます。

$ sudo gpasswd -a hoge docker

以下のコマンドで確認します。

$ groups hoge

以下のように表示されて、hogeユーザーがdockerグループにも所属しているのがわかります。

hoge : hoge wheel docker

以下のコマンドでdockerデーモンを再起動します。 (CentOS7の場合)

$ sudo systemctl restart docker

この段階ではまだdockerコマンドは実行できないので、一度サーバーからログアウトします。

$ exit

もう一度サーバーにsshでログインして、sudo無しでバージョン確認をしてみます。

$ docker version

以下のように表示されて、sudo無しでdockerコマンドを実行できることが確認できました。

Client:
 Version:      17.05.0-ce
 API version:  1.29
 Go version:   go1.7.5
 Git commit:   89658be
 Built:        Thu May  4 22:06:25 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.05.0-ce
 API version:  1.29 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   89658be
 Built:        Thu May  4 22:06:25 2017
 OS/Arch:      linux/amd64
 Experimental: false

dockerグループから削除してdockerコマンドが実行できないことを確認する

以下のコマンドでdockerグループからhogeユーザーを削除します。

$ sudo gpasswd -d hoge docker

以下のコマンドでhogeユーザーが所属しているグループの一覧を表示してみます。

$ groups hoge

以下のように表示されて、hogeユーザーがdockerグループに所属していないことが確認できました。

hoge : hoge wheel

以下のコマンドでもう一度dockerデーモンを再起動します。 (CentOS7の場合)

$ sudo systemctl restart docker

ただ先ほどと同様、この段階ではまだdockerコマンドは実行できてしまうので、一度サーバーからログアウトします。

$ exit

もう一度サーバーにsshでログインして、sudo無しでバージョン確認をしてみます。

$ docker version

以下のように表示されてdockerのサーバーの実行権限が無いことが確認できました。

Client:
 Version:      17.05.0-ce
 API version:  1.29
 Go version:   go1.7.5
 Git commit:   89658be
 Built:        Thu May  4 22:06:25 2017
 OS/Arch:      linux/amd64
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.29/version: dial unix /var/run/docker.sock: connect: permission denied