デフォルトユーザがroot
でないコンテナで、sudo
コマンドも無い場合にコンテナ内でroot
ユーザになる方法。
docker composeの-uオプション
docker compose exec
コマンドに-u
オプションをつけるとroot
ユーザーでコンテナにログインできる。
$ docker compose exec -u root サービス名 sh
実験
実験で使うコンテナイメージ
prom/prometheus
はnobody
ユーザーで実行されており、
sudo
コマンドも無い。
このイメージを使って実験する。
version: '2'
services:
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
起動とログイン
上記docker-compose.yml
を作成し、docker-compose
で起動する。
$ docker compose up -d
...
✔ Network docker-nginx_default
✔ Container docker-nginx-prometheus-1 Started
まずはdocker compose exec
コマンドでユーザを指定せずにログインしてみる。
ログインユーザはnobody
となっている。
$ docker compose exec prometheus sh
/prometheus $ id
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody)
sudo
コマンドも無い。
/prometheus $ sudo su -
sh: sudo: not found
su
コマンドによるroot
ユーザーへの切り替えも許可されていない。
/prometheus $ su
su: must be suid to work properly
rootユーザーでログイン
-u
オプションをつけてroot
ユーザーでログインする。
$ docker compose exec -u root prometheus sh
/prometheus # id
uid=0(root) gid=0(root) groups=0(root),10(wheel)
sh以外のコマンドもrootで実行できる
sh
以外のコマンドも-u
オプションをつけてroot
ユーザーで実行できる。
例えば/root
ディレクトリはroot
ユーザーのホームディレクトリなので、root
以外ではアクセスできない。
以下のように-u root
オプションをつけた上で実行すると閲覧が可能となる。
$ docker compose exec -u root prometheus ls -a /root
. .. .ash_history
\第一線のプログラマーの行動原理を学べる!/