Linux Capability

Capabilitiy はプロセスやファイルに対して,権限を細分化して適用できる. chroot システムコールを使うには特権が必要だが,root ユーザでなくとも CAP_SYS_CHROOT というCapabilityが与えられているなら使用することができる. root ユーザはすべてのCapability を持つ. Docker はホストに危険な影響を及ぼすような Capability は与えられていない.

pscap のインストール

pscap はプロセスに与えられている capability を確認できるコマンドである.

Ubuntuの場合

sudo apt-get install libcap-ng-utils

Fedoraの場合

sudo dnf install libcap-ng-utils

コンテナ内で実行したプロセスの Capability を見る

docker container run -d fedora sleep 5 >/dev/null; pscap | grep sleep

CAP_NET_BIND_SERVICE を drop して nginx を実行

docker container run --cap-drop=net_bind_service --net=host nginx

ping をコンテナ内で実行

CAP_NET_RAW がある状態

docker container run -it \
    guni1192/debug-tools:latest \
    ping contianer-workshop.guni.dev

CAP_NET_RAW を drop した場合

docker container run --cap-drop=net_raw -it \
    guni1192/debug-tools:latest \
    ping contianer-workshop.guni.dev