跳到主要内容
版本:main

自定义规则

vArmor 支持用户基于 enforcer 的语法,在 EhanceProtect 模式的 VarmorPolicyVarmorClusterPolicy 对象中自定义访问控制规则。

注:BPF enforcer 支持的语法在持续开发中。

AppArmor enforcer

AppArmor enforcer 支持用户根据 AppArmor 的语法定制策略。

请参见此 文档.spec.policy.enhanceProtect.appArmorRawRules 字段中设置自定义规则。请确保每条规则以 ',' 结尾。

示例:

policy:
enforcer: AppArmor
mode: EnhanceProtect
enhanceProtect:
# Audit the actions that violate the mandatory access control rules.
# Any detected violation will be logged to /var/log/varmor/violations.log file in the host.
# It's disabled by default.
auditViolations: true
attackProtectionRules:
- rules:
- disable-chmod
- rules:
- mitigate-sa-leak
targets:
- "/bin/bash"
- "/bin/dash"
- "/bin/sh"
appArmorRawRules:
- rules: |
audit deny /etc/hosts r,
audit deny /etc/shadow r,
- rules: "audit deny /etc/hostname r,"
targets:
- "/bin/bash"

Seccomp enforcer

Seccomp enforcer 支持用户根据 OCI 规范的语法定制策略。

请参见此 文档.spec.policy.enhanceProtect.syscallRawRules 字段中设置自定义的系统调用规则。

示例:

policy:
enforcer: Seccomp
mode: EnhanceProtect
enhanceProtect:
syscallRawRules:
# disallow chmod +x XXX, chmod 111 XXX, chmod 001 XXX, chmod 010 XXX...
- names:
- fchmodat
action: SCMP_ACT_ERRNO
args:
- index: 2
value: 0x40 # S_IXUSR
valueTwo: 0x40
op: SCMP_CMP_MASKED_EQ
- index: 2
value: 0x8 # S_IXGRP
valueTwo: 0x8
op: SCMP_CMP_MASKED_EQ
- index: 2
value: 1 # S_IXOTH
valueTwo: 1
op: SCMP_CMP_MASKED_EQ

BPF enforcer

BPF enforcer 支持用户根据语法定制策略。每类规则的数量上限为 50 条。每个节点支持最多对 100 个容器开启沙箱。

请参考以下语法在 .spec.policy.enhanceProtect.bpfRawRules 中设置自定义规则。

  • File Permission

    权限缩写隐含权限备注
    readr-
    rename
    hard link
    禁止读
    禁止利用 rename oldpath newpath 绕过 oldpath 的读限制
    禁止利用 ln TARGET LINK_NAME 绕过 TARGET 的读限制
    writew-
    append
    rename
    hard link
    symbol link
    chmod
    chown
    禁止写
    禁止利用 O_APPEND flag 绕过 map_file_to_perms() 实现追加写操作
    禁止利用 rename oldpath newpath 绕过 newpath 的写限制
    禁止利用 ln TARGET LINK_NAME 绕过 LINK_NAME 的写限制
    禁止利用创建软链接(符号链接)绕过目标文件的写限制
    WIP
    WIP
    execx-禁止执行
    appenda-禁止追加写
  • File Globbing Syntax

    BPF enfocer 支持根据路径 Pattern 对文件进行匹配,并支持两种匹配模式(精确匹配、通配匹配),匹配 Pattern 的最大长度限制为 64 字节。

    通配符语法样例备注
    *- 仅用于匹配叶子结点的文件名
    - 匹配 dot 文件,但不匹配 . 和 .. 文件
    - 仅支持单个 *,且不支持 ** 和 * 一起出现
    - fi* 代表匹配任意以 fi 开头的文件名
    - *le 代表匹配任意以 le 结尾的文件名
    - *.log 代表匹配任意以 .log 结尾的文件名
    此通配符的行为可能会在后续版本中发生改变
    **- 在多级目录中,匹配零个、一个、多个字符
    - 匹配 dot 文件,但不匹配 . 和 .. 文件
    - 仅支持单个 **,且不支持 ** 和 * 一起出现
    - /tmp/**/33 代表匹配任意以 /tmp 开头,且以 /33 结尾的文件,包含 /tmp/33
    - /tmp/** 代表匹配任意以 /tmp 开头的文件、目录
    - /tm** 代表匹配任意以 /tm 开头的文件、目录
    - /t**/33 代表匹配任意以 /t 开头,以 /33 结尾的文件、目录
  • Network Permission

    • 当前 vArmor 支持对指定的 IP 地址、IP 地址块(CIDR 块)、端口进行外联访问控制。
    • 当指定了 IP 地址、IP 地址块,但未指定端口时,默认对所有端口生效。
    • 具体请参见 NetworkEgressRule

示例:

policy:
enforcer: BPF
mode: EnhanceProtect
enhanceProtect:
# Audit the actions that violate the mandatory access control rules.
# Any detected violation will be logged to /var/log/varmor/violations.log file in the host.
# It's disabled by default.
auditViolations: true
bpfRawRules:
processes:
- pattern: "**ping"
permissions:
- exec
network:
egresses:
- ip: fdbd:dc01:ff:307:9329:268d:3a27:2ca7
- ipBlock: 192.168.1.1/24 # 192.168.1.0 to 192.168.1.255
port: 80
sockets:
- protocols:
- "udp"