非 root ユーザーで Docker コンテナを実行したときのケーパビリティー

非 root ユーザーで Docker コンテナを実行したときにそもそもケーパビリティーがあったかの確認メモ。

準備

イメージを作成する。

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 の場合も同じだったかは確認したい。