参考にさせて頂いたページ
gpasswdについて
newgrpについて
- Dockerでユーザーをdockerグループに追加することの危険性を理解しよう - Qiita
- http://www.turbolinux.co.jp/products/server/10s/manual/command_guide/command_guide/newgrp.html
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