Skip to content

Docker 容器权限设置 --cap-add, --cap-drop, --privileges

在 Docker 容器中,可以通过 --cap-add--cap-drop 来添加和删除容器的权限,或者用 --privileged 来赋予容器扩展权限。

bash
--cap-add list                   # Add Linux capabilities # 添加某些权限
--cap-drop list                  # Drop Linux capabilities # 关闭权限
--privileged                     # Give extended privileges to this container # default false

示例

docker run 命令中使用示例:

bash
# 细粒度权限控制
docker run --cap-add NET_ADMIN --cap-add NET_RAW myimage
docker run --cap-drop SETUID --cap-drop SETGID myimage
# 添加所有权限
docker run --privileged myimage

在 docker-compose.yml 中使用示例:

yaml
services:
  myservice:
    image: myimage
    securityContext:
      privileged: true  # 添加所有权限
      capabilities:     # 细粒度权限控制
        add: ["NET_ADMIN", "NET_RAW"]
        drop: []        # 关闭不必要的权限

关于 Linux Capabilities

Linux Capabilities 是 Linux 内核提供的一种安全机制,用于细粒度控制进程的权限。

Linux Capabilities 简介capabilities(7) — Linux manual page

Capability 名称描述
CAP_AUDIT_CONTROL启用和禁用内核审计;改变审计过滤规则;检索审计状态和过滤规则
CAP_AUDIT_READ允许通过 multicast netlink 套接字读取审计日志
CAP_AUDIT_WRITE将记录写入内核审计日志
CAP_BLOCK_SUSPEND使用可以阻止系统挂起的特性
CAP_CHOWN修改文件所有者的权限
CAP_DAC_OVERRIDE忽略文件的 DAC 访问限制
CAP_DAC_READ_SEARCH忽略文件读及目录搜索的 DAC 访问限制
CAP_FOWNER忽略文件属主 ID 必须和进程用户 ID 相匹配的限制
CAP_FSETID允许设置文件的 setuid 位
CAP_IPC_LOCK允许锁定共享内存片段
CAP_IPC_OWNER忽略 IPC 所有权检查
CAP_KILL允许对不属于自己的进程发送信号
CAP_LEASE允许修改文件锁的 FL_LEASE 标志
CAP_LINUX_IMMUTABLE允许修改文件的 IMMUTABLE 和 APPEND 属性标志
CAP_MAC_ADMIN允许 MAC 配置或状态更改
CAP_MAC_OVERRIDE覆盖 MAC(Mandatory Access Control)
CAP_MKNOD允许使用 mknod() 系统调用
CAP_NET_ADMIN允许执行网络管理任务
CAP_NET_BIND_SERVICE允许绑定到小于 1024 的端口
CAP_NET_BROADCAST允许网络广播和多播访问
CAP_NET_RAW允许使用原始套接字
CAP_SETGID允许改变进程的 GID
CAP_SETFCAP允许为文件设置任意的 capabilities
CAP_SETPCAP参考 capabilities man page
CAP_SETUID允许改变进程的 UID
CAP_SYS_ADMIN允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等
CAP_SYS_BOOT允许重新启动系统
CAP_SYS_CHROOT允许使用 chroot() 系统调用
CAP_SYS_MODULE允许插入和删除内核模块
CAP_SYS_NICE允许提升优先级及设置其他进程的优先级
CAP_SYS_PACCT允许执行进程的 BSD 式审计
CAP_SYS_PTRACE允许跟踪任何进程
CAP_SYS_RAWIO允许直接访问 /devport、/dev/mem、/dev/kmem 及原始块设备
CAP_SYS_RESOURCE忽略资源限制
CAP_SYS_TIME允许改变系统时钟
CAP_SYS_TTY_CONFIG允许配置 TTY 设备
CAP_SYSLOG允许使用 syslog() 系统调用
CAP_WAKE_ALARM允许触发一些能唤醒系统的东西(比如 CLOCK_BOOTTIME_ALARM 计时器)

Released under the MIT License.