Docker 设置容器权限白名单

0.1 背景知识

--privileged=true 的权限非常大,接近于宿主机的root 用户权限,为了防止用户的滥用,需要增加限制,只提供给容器必须的权限。所以 Docker 提供了权限白名单的机制,使用 --cap-add 来添加必要的权限。

为了能够修改 MAC 地址,我们给予新的容器 kcm_centos03 一个 NET_ADMIN 的权限。

1 创建容器

添加 --cap-add=NET_ADMIN

docker run -ti -h node113 --cap-add=NET_ADMIN --name kcm_centos03 --network host  centos:7.2.1511 /bin/bash

2 修改 MAC 地址

1、安装 iproute 软件包。

yum install iproute -y

2、查看容器的 IP 地址和 MAC 地址信息。

ip a

3、修改 mac 地址。

ip link set eno16777736 address 00:01:02:03:04:05

4、查看修改后的结果。

ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:01:02:03:04:05 brd ff:ff:ff:ff:ff:ff
    inet 192.168.40.111/24 brd 192.168.40.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe73:e151/64 scope link
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 500
    link/ether 52:54:00:62:ff:61 brd ff:ff:ff:ff:ff:ff
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:96:f5:99:ff brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:96ff:fef5:99ff/64 scope link
       valid_lft forever preferred_lft forever

3 查看容器权限的白名单

退出容器后,可以在docker container inspect命令中查看容器的必要配置:

docker container inspect -f {{.HostConfig.Privileged}} kcm_centos03

false

docker container inspect -f {{.HostConfig.CapAdd}} kcm_centos03

{[NET_ADMIN]}