Docker&Kubernetes ❀ Docker Capabilities 容器进程能力权限与执行文件能力权限设置

Posted 无糖可乐没有灵魂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker&Kubernetes ❀ Docker Capabilities 容器进程能力权限与执行文件能力权限设置相关的知识,希望对你有一定的参考价值。

文章目录

1、权限设置


Docker Capabilities 容器权限:主要在于分割root用户的特权,即将root的特权分割成不同的能力,每种能力代表一定的特权操作;
例如:CAP_SYS_MODULE 表示用户能够加载(或卸载)内核模块的特权操作,而CAP_SETUID表示用户能够修改进程用户身份的特权操作,在Capbilities中系统将根据进程拥有的能力来进行特权操作的访问控制;

在容器权限中,只有进程和可执行文件才具有能力;

1.1 进程能力集

每个进程拥有三组能力集,分别称为cap_effective, cap_inheritable, cap_permitted(分别简记为:pE,pI,pP);

  • cap_permitted表示进程所拥有的最大能力集;
  • cap_effective表示进程当前可用的能力集,可以看做是cap_permitted的一个子集;
  • cap_inheitable则表示进程可以传递给其子进程的能力集;

系统根据进程的cap_effective能力集进行访问控制,cap_effective为cap_permitted的子集,进程可以通过取消cap_effective中的某些能力来放弃进程的一些特权;

1.2 执行文件能力集

可执行文件也拥有三组能力集,对应于进程的三组能力集,分别称为cap_effective, cap_allowed 和 cap_forced(分别简记为fE,fI,fP)

  • cap_allowed表示程序运行时可从原进程的cap_inheritable中集成的能力集;
  • cap_forced表示运行文件时必须拥有才能完成其服务的能力集;
  • cap_effective则表示文件开始运行时可以使用的能力;

Docker容器权限参数

[root@localhost ~]# docker run --cap-add
ALL                     CAP_BLOCK_SUSPEND       CAP_LINUX_IMMUTABLE     CAP_SYS_BOOT            CAP_SYS_RESOURCE        IPC_OWNER               PERFMON                 SYS_PACCT
AUDIT_CONTROL           CAP_BPF                 CAP_MAC_ADMIN           CAP_SYSLOG              CAP_SYS_TIME            LEASE                   RESET                   SYS_PTRACE
AUDIT_READ              CAP_CHECKPOINT_RESTORE  CAP_MAC_OVERRIDE        CAP_SYS_MODULE          CAP_SYS_TTY_CONFIG      LINUX_IMMUTABLE         SYS_ADMIN               SYS_RAWIO
BLOCK_SUSPEND           CAP_DAC_READ_SEARCH     CAP_NET_ADMIN           CAP_SYS_NICE            CAP_WAKE_ALARM          MAC_ADMIN               SYS_BOOT                SYS_RESOURCE
BPF                     CAP_IPC_LOCK            CAP_NET_BROADCAST       CAP_SYS_PACCT           CHECKPOINT_RESTORE      MAC_OVERRIDE            SYSLOG                  SYS_TIME
CAP_AUDIT_CONTROL       CAP_IPC_OWNER           CAP_PERFMON             CAP_SYS_PTRACE          DAC_READ_SEARCH         NET_ADMIN               SYS_MODULE              SYS_TTY_CONFIG
CAP_AUDIT_READ          CAP_LEASE               CAP_SYS_ADMIN           CAP_SYS_RAWIO           IPC_LOCK                NET_BROADCAST           SYS_NICE                WAKE_ALARM

Docker配置容器权限的方法

#添加/关闭某些权限
[root@localhost ~]# docker run --cap-add/drop ALL image_name bash
#特权模式(默认关闭)
[root@localhost ~]# docker run --privileged image_name  bash

2、实现机制


Linux内核从2.2版本开始,就加入了权限控制的概念与机制,并随着版本升高逐步得到改进,目前主要有29种权限(随版本而变化):

CAP_CHOWN:修改文件属主的权限
CAP_DAC_OVERRIDE:忽略文件的DAC访问限制
CAP_DAC_READ_SEARCH:忽略文件读及目录搜索的DAC访问限制
CAP_FOWNER:忽略文件属主ID必须和进程用户ID相匹配的限制
CAP_FSETID:允许设置文件的setuid位
CAP_KILL:允许对不属于自己的进程发送信号
CAP_SETGID:允许改变进程的组ID
CAP_SETUID:允许改变进程的用户ID
CAP_SETPCAP:允许向其他进程转移能力以及删除其他进程的能力
CAP_LINUX_IMMUTABLE:允许修改文件的IMMUTABLE和APPEND属性标志
CAP_NET_BIND_SERVICE:允许绑定到小于1024的端口
CAP_NET_BROADCAST:允许网络广播和多播访问
CAP_NET_ADMIN:允许执行网络管理任务
CAP_NET_RAW:允许使用原始套接字
CAP_IPC_LOCK:允许锁定共享内存片段
CAP_IPC_OWNER:忽略IPC所有权检查
CAP_SYS_MODULE:允许插入和删除内核模块
CAP_SYS_RAWIO:允许直接访问/devport,/dev/mem,/dev/kmem及原始块设备
CAP_SYS_CHROOT:允许使用chroot()系统调用
CAP_SYS_PTRACE:允许跟踪任何进程
CAP_SYS_PACCT:允许执行进程的BSD式审计
CAP_SYS_ADMIN:允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等
CAP_SYS_BOOT:允许重新启动系统
CAP_SYS_NICE:允许提升优先级及设置其他进程的优先级
CAP_SYS_RESOURCE:忽略资源限制
CAP_SYS_TIME:允许改变系统时钟
CAP_SYS_TTY_CONFIG:允许配置TTY设备
CAP_MKNOD:允许使用mknod()系统调用
CAP_LEASE:允许修改文件锁的FL_LEASE标志

3、案例演示


#创建普通权限容器
[root@localhost ~]# docker run -it --name test-001 -d centos /bin/bash
ac970528f00a7c09d94911243a7d0fb4b580e5e6a0cacf097f174ff4b937dacf

#创建加入网络管理员权限的容器
[root@localhost ~]# docker run -it --name test-002 -d --cap-add NET_ADMIN -d centos /bin/bash
d5da2659d4666f73fdfbefd03791e0350f7e67541f54460176bc070321c88daa

#验证普通权限容器打开iptables列表失败
[root@localhost ~]# docker exec -it test-001 /bin/bash
[root@ac970528f00a /]# yum install -y iptables
Complete!
[root@ac970528f00a /]# iptables -L
iptables v1.8.4 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)

#验证加入网络管理员权限的容器打开iptables列表成功
[root@localhost ~]# docker exec -it test-002 /bin/bash
[root@d5da2659d466 /]# yum install -y iptables
Complete!
[root@d5da2659d466 /]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

#创建特权模式容器(管理员权限全部打开)
[root@localhost ~]# docker run -it --name test-002 -d --privileged -d centos /bin/bash

4、Compose使用案例


[root@localhost ~]# cat docker-compose.yaml
version: '2'
    containers:
      - name: snake
        image: docker.io/kelysa/snake:lastest
        imagePullPolicy: Always
        securityContext:
          privileged: true
          capabilities:
            add: ["NET_ADMIN","NET_RAW"]

以上是关于Docker&Kubernetes ❀ Docker Capabilities 容器进程能力权限与执行文件能力权限设置的主要内容,如果未能解决你的问题,请参考以下文章

Docker&Kubernetes ❀ Docker 容器技术笔记链接梳理

Docker&Kubernetes ❀ Kubernetes集群实践与部署笔记知识点梳理

Docker&Kubernetes ❀ Kubernetes集群安装部署过程与常见的错误解决方法

Docker&Kubernetes ❀ Kubernetes集群安装部署过程与常见的错误解决方法

Docker&Kubernetes ❀ Kubernetes集群实践与部署笔记知识点梳理

Docker&Kubernetes ❀ Docker 容器技术笔记链接梳理