构建变体与能力矩阵

MiBee Steward 以单一二进制、多种构建变体发布。默认构建零特权、零内核依赖:Go 能编译的平台就能跑,不需要任何 capability;所有特权能力都被编译为 no-op stub,因此没有"降级失败"一说。可选能力通过构建标签引入,每个标签都有明确的特权代价。

变体总览

变体 标签 产物 运行时特权
default — mibee-steward-linux-<arch>、Docker 镜像、OpenWrt 软件包 无
full WITH_LLDP,WITH_CDP,WITH_ARPSCAN mibee-steward-linux-<arch>-full(发布附件,#502) CAP_NET_RAW
eBPF WITH_EBPF 仅本地构建(make build-with-ebpf)——构建期需要 clang ≥14 root,或 ambient CAP_BPF + CAP_NET_ADMIN(因内核而异,见 ebpf.md)
单能力 单独 WITH_LLDP / WITH_CDP / WITH_ARPSCAN 本地构建(make build-with-lldp 等) CAP_NET_RAW

所有变体均 CGO-free、可干净交叉编译;可选源全部为纯 Go 实现(经 syscall 的原始套接字),这也是它们构建期仅限 Linux 的原因。

校验和:发布附件中的 SHA256SUMS.center 覆盖两个变体的全部 center 二进制,文件名全部平铺——sha256sum -c SHA256SUMS.center 在任意下载目录可用(与 agent 的 SHA256SUMS.agent-rs 同一规则)。

每个标签换到什么

标签 能力 需要 内核 产出的数据 配置
WITH_LLDP 被动 LLDPDU 监听(ethertype 0x88cc) CAP_NET_RAW(AF_PACKET) Linux lldp_frame 源:邻居边 → device_neighbors,下次扫描物化为拓扑边;系统名/描述证据。已知缺口:邻居行要求本机设备行带 MAC(#522) scanner.discovery.lldp_interfaces(空 = 所有 UP 接口)
WITH_CDP 被动 Cisco CDP 监听(ethertype 0x2000) CAP_NET_RAW(AF_PACKET) Linux cdp_frame 源:邻居边 + Device ID / Platform / 软件版本证据(与 LLDP 同一本地锚点缺口,#522) 与 LLDP 同一接口列表
WITH_ARPSCAN 主动 ARP 扫描:对网络 CIDR 内每个 IP 发 who-has,以应答发现主机 CAP_NET_RAW(原始套接字) Linux 每个应答主机一个 NewHostEvent——唯一无需路由器访问就能覆盖整个广播域的源 scanner.discovery.arp_scan.enabled + scanner.arp_scan.interface
WITH_EBPF TC 被动观测器:8 种协议签名(banner、WS-Discovery、DHCP、TLS SNI、mDNS、SSDP) root 或 ambient caps Linux ≥ 6.6(TCX) passive:ebpf:tc 证据行,驱动指纹分类 scanner.ebpf.enabled + scanner.ebpf.interfaces——详见 ebpf.md

ARP 扫描语义(启用前值得了解):扫描对 network.cidr 内每个地址广播 ARP who-has 请求,跟随 discovery 服务的节奏——每个 discovery 轮次触发一次,并非常驻泛洪。任何有网络栈的主机都会应答 ARP,包括丢弃一切入站探测的被防火墙保护的主机,这正是它的价值。流量可见性为每轮每地址一个广播帧。

授予 CAP_NET_RAW

systemd 部署加一个 drop-in(systemctl edit mibee-steward):

[Service]
AmbientCapabilities=CAP_NET_RAW

Docker:docker run --cap-add=NET_RAW …(host compose profile 才用得上)。

缺少该 capability 时,full 二进制只是在源注册时跳过特权源(日志说明原因);服务本体与全部默认源照常工作。mibee-steward doctor 逐源报告状态:ok(已构建且 capability 在位)、warn(已构建但缺 capability,或已配置但未构建)、skip(未构建 / 未启用 / 非 Linux)。

为什么 eBPF 不在发布矩阵里

eBPF 观测器的 BPF 对象在构建期由 bpf2go 从 bpf/tc_ingress.c 编译——该步骤需要 clang ≥ 14,发布 runner 未安装。make build-with-ebpf 可在任意 OS 本地完成并内嵌对象;产物与默认构建同样可移植(CO-RE free,无内核 BTF 也能加载)。见 ebpf.md。