コンテナの起動ユーザを一般ユーザにすることが大事です。
これはコンテナプロセスがrootで起動している際に乗っ取られると、root相当の行為が行われる場合があるためです。
ではどのようにすればコンテナ(ここではDocker)を一般ユーザで起動できるのかについて解説します。
- Dockerfileでの指定
- docker runコマンドでの指定
Dockerfileでの指定
# cat Dockerfile FROM centos:latest RUN useradd -m test USER test1 CMD ["sleep", "300"]
このようにDockerfileを作成し
# docker build -t test . # docker run test
としましょう。そしてps -ef |grep test1
と叩きましょう。
するとこのように見えます。
test1 7468 7443 0 10:32 pts/2 00:00:00 sleep
この時、気をつけたいのはpsによって表示されているユーザ名はOSの/etc/passwd
に書かれているものです。コンテナでユーザを追加するとUID1000のユーザが追加されますが、同様にOS上でUIDが1000のユーザ名が表示されます。
仮にOS上にUID1000をもつユーザがいなければこのように表示されます。
1000 7468 7443 0 10:32 pts/2 00:00:00 sleep
docker runコマンドでの指定
docker runコマンドでの指定の場合はコマンドラインオプションで指定します。
# cat Dockerfile FROM centos:latest RUN useradd -m test #USER test1 ←これを削除or無効化する CMD ["sleep", "300"]
このようにDockerfileを作成し起動すると同様にtest1で起動します。
# docker build -t test . # docker run test -u test1