非 root ユーザーで Docker コンテナを実行したときにそもそもケーパビリティーがあったかの確認メモ。
- Docker の capability --cap-add 及び --cap-drop オプションについて調べた
- https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities
準備
イメージを作成する。
cat << EOF > Dockerfile FROM ubuntu RUN apt-get update && apt-get install -y \ libcap-ng-utils EOF
docker build -t pscap-ubuntu .
root ユーザー
コマンドを直接実行すると何も出なかった。
$ docker run --rm -it pscap-ubuntu pscap -a sotosugi@a483e7dfd6ad:~/temp $
そのためシェルを起動してから確認する。
$ docker run --rm -it pscap-ubuntu /bin/bash root@d34942bc7179:/# pscap -a ppid pid name command capabilities 0 1 root bash chown, dac_override, fowner, fsetid, kill, setgid, setuid, setpcap, net_bind_service, net_raw, sys_chroot, mknod, audit_write, setfcap root@d34942bc7179:/#
root ユーザー + --privileged
$ docker run --privileged --rm -it pscap-ubuntu /bin/bash root@b625b9fd08a9:/# pscap -a ppid pid name command capabilities 0 1 root bash chown, dac_override, dac_read_search, fowner, fsetid, kill, setgid, setuid, setpcap, linux_immutable, net_bind_service, net_broadcast, net_admin, net_raw, ipc_lock, ipc_owner, sys_module, sys_rawio, sys_chroot, sys_ptrace, sys_pacct, sys_admin, sys_boot, sys_nice, sys_resource, sys_time, sys_tty_config, mknod, lease, audit_write, audit_control, setfcap, mac_override, mac_admin, syslog, wake_alarm, block_suspend, audit_read root@b625b9fd08a9:/#
非 root ユーザー
$ docker run --user nobody --rm -it pscap-ubuntu /bin/bash nobody@c3bee3f5f933:/$ pscap -a nobody@c3bee3f5f933:/$
非 root ユーザー + --privileged
$ docker run --privileged --user nobody --rm -it pscap-ubuntu /bin/bash nobody@3125c31b4e07:/$ pscap -a nobody@3125c31b4e07:/$
まとめ
非 root ユーザーで実行している場合はそもそもケーパビリティーがなかった。なのでわざわざ Drop を書く必要はない。少なくとも docker run
の場合は。Kuberentes や Fargate の場合も同じだったかは確認したい。