Elkeid是由字节跳动开源的高性能终端安全响应(EDR)平台。对于希望定制化安全功能、集成私有检测逻辑或优化性能的开发者来说,搭建高效的二次开发环境至关重要。本文将详细指导如何配置开发工具、克隆代码库并成功编译Elkeid的核心组件。
Contents
1. 环境准备与先决条件
Elkeid主要使用Go语言编写,并依赖Protocol Buffers进行数据结构定义和RPC通信。以下是必备工具:
- 操作系统: Linux (推荐Ubuntu/CentOS)
- Go 语言: 1.20 或更高版本
- Git: 版本控制工具
- Make: 用于自动化构建
- Protobuf: 编译器及其Go插件
1.1 安装Go和Protobuf工具链
确保您的系统已安装Go。接着,我们需要安装
1 | protoc |
编译器以及Go语言所需的生成插件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 # 假设Go 1.20+ 已安装并配置好PATH
# 验证Go版本
go version
# 1. 安装 protoc 编译器 (根据您的OS选择安装方式)
# 例如在 Ubuntu 上
sudo apt update && sudo apt install -y protobuf-compiler
# 2. 安装 Go Protobuf/gRPC 插件
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
# 确保 $GOPATH/bin 位于您的 $PATH 中,否则 protoc 无法找到这些插件。
export PATH=$PATH:$(go env GOPATH)/bin
2. 获取Elkeid源码
我们将获取核心的Elkeid仓库,其中包含Agent、Server以及其他通用组件的代码。
1
2
3
4
5
6 mkdir -p ~/elkeid_dev
cd ~/elkeid_dev
# 克隆 Elkeid 主仓库
git clone https://github.com/bytedance/Elkeid.git
cd Elkeid
3. 处理依赖和Protobuf文件生成(关键步骤)
Elkeid的许多核心数据结构定义在
1 | .proto |
文件中。在进行任何代码修改之前,必须先生成对应的Go结构体代码 (
1 | .pb.go |
文件)。
3.1 获取Go模块依赖
1
2 # 拉取所有 Go 模块依赖
go mod tidy
3.2 运行 Protobuf 生成命令
Elkeid的
1 | Makefile |
中内置了生成Protobuf文件的便捷命令,这避免了手动指定复杂的
1 | protoc |
路径和参数。
1
2
3
4 # 执行 proto 生成任务
make proto
# 成功后,您可以看到如 pkg/proto/xxx/xxx.pb.go 等文件被生成或更新。
注意: 如果
1 | make proto |
报错,通常是由于 Protobuf 编译器版本不匹配或 Go 插件未正确安装/配置PATH。
4. 编译核心组件:以Elkeid Agent为例
现在开发环境已经就绪,我们可以尝试编译一个核心组件。Elkeid Agent是终端上运行的客户端,是二次开发中常见的修改目标(例如添加自定义探针或数据采集逻辑)。
4.1 编译 Agent
1
2
3
4
5
6
7
8 # 清理旧的编译结果(可选)
make clean
# 编译 Elkeid Agent (适用于 Linux x86_64)
make agent
# 或者编译 Server
# make server
编译成功后,可执行文件通常位于
1 | output/bin/ |
目录下:
1
2 # 检查编译结果
ls output/bin/elkeid-agent
4.2 编译 Docker 镜像 (可选)
如果您正在开发需要容器化部署的组件(例如Manager或Service),可以直接使用Makefile中的Docker目标:
1
2 # 编译 Server Docker 镜像
make docker_server
5. 开始二次开发
环境搭建完毕后,您就可以开始修改代码了。例如,如果您希望在Agent中添加一个新的采集模块 (Plugin),您通常会在
1 | agent/plugins/ |
目录下创建新的Go文件,并在
1 | agent/agent.go |
中注册您的新模块。
开发完成后,只需再次运行
1 | make agent |
或
1 | make server |
即可编译并测试您的自定义版本。这一流程为Elkeid的深度定制和集成打下了坚实的基础。
汤不热吧