フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

コンテナの起動ユーザについて

Docker

コンテナの起動ユーザを一般ユーザにすることが大事です。

これはコンテナプロセスがrootで起動している際に乗っ取られると、root相当の行為が行われる場合があるためです。

ではどのようにすればコンテナ(ここではDocker)を一般ユーザで起動できるのかについて解説します。

  1. Dockerfileでの指定
  2. 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