デフォルトでは、Docker コンテナーは root 権限で実行され、コンテナー内で実行されるアプリケーションも同様です。ハッカーは、コンテナー内で実行されているアプリケーションをハッキングすることで、Docker ホストへのルート アクセスを取得できるため、これはセキュリティの観点から見たもう 1 つの大きな懸念事項です。
方法 1 – ユーザーを Docker グループに追加する
1. 非 root ユーザーとして Docker を実行するには、ユーザーを docker グループに追加する必要があります。
2. Docker グループがない場合は作成します。
$ sudo groupadd docker
3. ユーザーを docker グループに追加します:
$ sudo usermod -aG docker [non-root user]
4. ログアウトして再度ログインし、グループ メンバーシップが再評価されるようにします。
方法 2 – Dockerfile を使用する (USER 命令)
Docker は、コンテナーの権限を root 以外のユーザーに変更して、Docker ホストへの悪意のある root アクセスを阻止するためのシンプルかつ強力なソリューションを提供します。 root 以外のユーザーへのこの変更は、-u を使用して実行できます。 または –ユーザー docker run サブコマンドのオプションまたは USER Dockerfile 内の命令
1. 次に示すように、非ルート権限ユーザーを作成する Dockerfile を編集し、デフォルトのルート ユーザーを新しく作成された非ルート権限ユーザーに変更します。
########################################## # Dockerfile to change from root to # non-root privilege ########################################### # Base image is CentOS 7 FROM Centos:7 # Add a new user "john" with user id 8877 RUN useradd -u 8877 john # Change to non-root privilege USER john
2. 次に示すように、「docker build」サブコマンドを使用して Docker イメージのビルドに進みます。
$ sudo docker build -t nonrootimage .
3. 最後に、docker run サブコマンドで id コマンドを使用して、コンテナの現在のユーザーを確認しましょう:
$ sudo docker run --rm nonrootimage id uid=8877(john) gid=8877(john) groups=8877(john)
明らかに、コンテナーのユーザー、グループ、およびグループは非 root ユーザーに変更されています。