ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Wazuh Authd 注册服务深度解析:Agent 入网机制、TLS 证书与强制定制化配置指南

Wazuh Authd 注册服务深度解析:Agent 入网机制、TLS 证书与强制定制化配置指南 Wazuh Authd 注册服务深度解析Agent 入网机制、TLS 证书与强制定制化配置指南【免费下载链接】wazuhWazuh - The Open Source Security Platform. Unified XDR and SIEM protection for endpoints and cloud workloads.项目地址: https://gitcode.com/GitHub_Trending/wa/wazuhwazuh-manager-authd简称 authd是 Wazuh 管理端的 Agent 注册Enrollment服务负责在 TLS 加密通道上受理 Agent 的入网请求、校验身份凭证、生成加密密钥并将注册结果写入管理端密钥库。本文以 docs/ref/modules/authd/README.md 为骨架结合 authd 配置参考 与 src/os_auth/ 源码实现系统讲解其工作原理、线程模型、存储结构、强制重注册force规则及完整配置示例帮助你从会用端口 1515进阶到真正理解并掌控 Agent 入网全流程。模块总览与源码布局authd 是 Wazuh 5.x 管理端Manager-only的内置注册服务源码位于 src/os_auth/对应二进制名wazuh-manager-authd由 CMakeLists.txt 中的ARGV0宏定义。其核心职责一句话概括监听 TLS 上的 Agent 注册请求 → 校验凭证 → 生成随机密钥对 → 将条目写入 Agent 密钥库keystore。从 src/os_auth/CMakeLists.txt 的构建配置可以看到模块的两个关键设计除main-server.c之外的源文件被打包为静态库authd_lib并支持WAZUH_UNIT_TESTING宏导出内部静态函数供单元测试使用见 src/unit_tests/os_auth/该可执行文件仅面向 Unix 服务端构建server-only, no WindowsWindows Agent 不包含此模块。工作原理一次完整的 Agent 入网请求README 给出了一次注册请求的完整生命周期src/os_auth/src/main-server.c 中的process_message()与 src/os_auth/src/auth.c 的w_auth_parse_data()提供了逐行级的实现印证。请求流程7 步Agent 通过 TLS 连接到 1515 端口远端服务器线程run_remote_server在epoll事件循环中accept新连接为每个客户端分配struct client保存 socket、IP、SSL 对象、读写缓冲等状态见 src/os_auth/include/auth.h随后异步完成SSL_accept握手handle_ssl_handshake。共享密码校验可选但默认开启若启用use_password新安装默认启用Agent 必须先发送OSSEC PASS: password。管理端在首次启动时自动生成随机密码并持久化到authd.passAgent 必须在注册前拿到该密码。src/os_auth/src/auth.c 中解析逻辑要求密码后必须紧跟空格再跟动作指令密码错误直接返回ERROR: Invalid password并关闭连接。双向 TLS 证书校验可选配置了ssl_agent_ca时握手完成后调用check_x509_cert(client-ssl, client-ip)校验 Agent 客户端证书handle_ssl_handshake中实现若同时开启ssl_verify_host还会校验证书 CN 与 Agent IP 一致。Agent 发送注册请求握手与鉴权通过后Agent 发送形如OSSEC A:agent_name V:version的请求。源码还支持可选的G:groups集中式分组字段。handle_ssl_read以换行符\n作为消息结束标志随后触发process_message。authd 校验与密钥生成w_auth_validate_data校验 Agent 名称合法性OS_IsValidName、版本兼容性compare_wazuh_versions受allow_higher_versions控制、检查是否已有同名注册并按force规则处理随后w_auth_add_agent生成随机密钥对OS_GenerateKey将条目加入内存中的插入队列add_insert。后台写入线程落盘Writer 线程被条件变量cond_pending唤醒OS_WriteKeys将内存密钥队列批量刷新到/var/wazuh-manager/etc/client.keys同时调用wdb_insert_agent写入 Wazuh DB 并同步 Agent 分组。TLS 连接上返回结果成功时 authd 回复OSSEC K:id name ip keyAgent 据此保存自身密钥失败时回复错误消息ERROR: ...。注意enqueue_pending_key中有一个回滚保护若密钥已入库但响应写入失败SSL 写错误master 会调用OS_DeleteKey删除该条目避免产生孤儿密钥。集群环境下的差异process_message中对主节点master与工作节点worker走完全不同的路径master本地完成w_auth_validate_data→w_auth_add_agent全流程写入本机密钥库worker将请求转发给 masterw_request_agent_add_clustered由 master 决策并生成密钥worker 不直接落盘注释明确The force registration settings are ignored for workers. The master decides.。若响应写入失败worker 还会请求 master 删除该 Agentw_request_agent_remove_clustered。线程模型四个线程各司其职README 的线程表对应 src/os_auth/src/main-server.c 中main()创建的四条工作线程线程角色源码位置与说明Remote server在 1515 端口接受 TLS 连接当remote_enrollment为yesrun_remote_server基于epoll事件循环非阻塞处理握手/读/写连接池上限为AUTH_POOL超限时直接Too many connections. Rejecting.Local server通过本地 Unix 套接字queue/sockets/authAUTH_LOCAL_SOCK处理注册run_local_server见 src/os_auth/src/local-server.c使用selectaccept模型响应为 JSON 格式错误码范围 9001–9015如 9013 Maximum number of agents reached、9015 Cannot execute this request on a worker nodeWriter周期性地把内存密钥队列刷新到磁盘client.keysrun_writer等待cond_pending条件变量OS_WriteKeys写client.keys、OS_WriteTimestamps写时间戳随后逐条执行wdb_insert_agent/wdb_remove_agent与分组同步Authpass watcher仅 worker监听 master 同步来的authd.pass文件变化并热加载run_authpass_watcher通过File_DateofChange检测 mtimew_authd_read_password重读密码使 worker 无需重启即可获取/轮换密码补充说明各工作线程通过authd_sigblock()屏蔽SIGTERM/SIGHUP/SIGINT信号统一由handler处理向 stop pipe 写入字节唤醒 epoll 循环置running 0实现优雅退出Writer 线程仅在 master 上启动if (!config.worker_node)worker 的密钥写入由 master 统一完成密码加载策略严格区分主从master 用w_authd_load_password读取或生成并持久化文件存在但为空/非法时拒绝启动fail-closedworker 用w_authd_read_password只读、绝不生成缺失时注册请求被拒直到文件同步到位。存储三份关键文件文件内容/var/wazuh-manager/etc/client.keys每个 Agent 一行id name ip key/var/wazuh-manager/etc/agents-timestamp每个 Agent 的注册时间戳/var/wazuh-manager/etc/authd.pass注册密码首次启动自动生成默认必需对应源码中的KEYS_FILE、时间戳文件与AUTHD_PASS宏。写入是异步批量的内存中维护插入队列queue_insert与删除队列queue_remove两条链表Writer 线程每次被唤醒时复制队列、落盘并清理节点避免高频注册时反复同步写盘。删除 Agent 时 Writer 还会依次执行delete_diff清理差量文件、OS_RemoveCounter、OS_RemoveAgentTimestamp、wdb_remove_agent并通过 router 向 inventory-sync 发送{command: delete_agent, agent_id: ...}消息确保索引器数据同步删除见send_agent_delete_to_inventory_sync。Force 重注册规则何时允许覆盖已有注册force子块控制 Agent 在何种条件下可以覆盖已存在的注册条目。四个子选项的默认值与语义如下默认值与 src/config/src/authd-config.c 的初始化代码一致子选项默认值语义enabledyes是否允许强制覆盖key_mismatchyes仅当 Agent 携带的密钥哈希与已存密钥不匹配时才覆盖disconnected_time1henabledyes覆盖前 Agent 至少已断线时长enabled属性控制该检查是否生效after_registration_time1h距上次注册至少经过的时长防止 Agent 刚注册就被顶替disconnected_time与after_registration_time均支持s、m、h、d后缀的时间值由get_time_interval解析见 src/config/src/authd-config.c。配置写法示例!-- 启用检查要求断线至少 2 小时 -- disconnected_time enabledyes2h/disconnected_time !-- 完全禁用该检查 -- disconnected_time enabledno0/disconnected_time实现层面w_auth_replace_agentsrc/os_auth/include/auth.h负责判断旧 Agent 是否可被替换并移除它会比较请求携带的密钥哈希与client.keys中的记录再结合force_optionsauthd_force_options_t逐项判定。需要留意的是key_mismatch场景在集群环境下要求 Agent 与 master 的密钥哈希计算口径一致因此 master 与 Agent 两端使用相同的哈希算法MD5见OS_GenerateKey相关调用链。配置参考auth区块全参数详解配置文件为/var/wazuh-manager/etc/wazuh-manager.confXML 区块为auth模块仅存在于 Manager内部选项前缀为authd.*。完整参数表如下全部继承自 configuration.md并补充实现细节参数默认值允许值说明disablednoyes/no完全禁用注册服务auth块存在但未设置时服务正常启动port15151–65535注册服务监听端口对应DEFAULT_PORT宏ipv6noyes/no启用 IPv6 支持use_source_ipnoyes/no使用源 IP 注册 Agent 而非any启用后 Agent 只能从其注册时的 IP 连接purgenoyes/no同名 Agent 重新注册时清除其旧密钥use_passwordno安装脚本默认写yesyes/no要求 Agent 提供共享注册密码remote_enrollmentyesyes/no接受网络注册置no则仅允许本地 socket 注册ciphersHIGH:!ADH:!EXP:!MD5:!RC4:!3DES:!CAMELLIA:STRENGTH任意合法 OpenSSL 密码套件串应用于 TLS 会话ssl_agent_ca无不校验 Agent 证书PEM CA 证书路径双向 TLS 时用于校验 Agent 客户端证书启动时检查存在性ssl_verify_hostnoyes/no校验 Agent 证书 CN 与 IP 匹配需配合ssl_agent_cassl_manager_certetc/sslmanager.cert相对安装目录解析PEM 证书路径管理端向 Agent 出示的 TLS 证书ssl_manager_keyetc/sslmanager.keyPEM 私钥路径与ssl_manager_cert对应的私钥ssl_auto_negotiatenoyes/no允许 TLS 握手自动选择最高协议版本force见上节—强制重注册规则子块agents/allow_higher_versionsnoyes/no接受版本高于管理端的 Agent 注册use_source_ip、remote_enrollment等布尔参数在 src/config/src/authd-config.c 中通过 XML 解析逐一映射到config.flags位域命令行参数-p、-c、-v、-s、-x、-k、-a、-P等会在读取配置文件后覆盖对应项见 main-server.c 的getopt处理因此 CLI 与 XML 两套入口行为一致。密码管理与轮换启用use_password后密码读自/var/wazuh-manager/etc/authd.pass单行文件不存在 →wazuh-authd启动时生成随机密码写入该文件后续启动复用文件存在但为空或非法 →authd 拒绝启动集群中密码归属 master自动分发到 workerworker 在收到文件前会拒绝注册请求有专门的run_authpass_watcher线程负责热加载每次启动复用已有密码时会在INFO级别记录日志。Agent 端配置密码由于use_password默认开启Agent 必须提供注册密码。先从管理端读取sudo cat /var/wazuh-manager/etc/authd.pass推荐的安装期注入方式是使用WAZUH_REGISTRATION_PASSWORD安装变量自动写入etc/authd.pass并设置属主与权限WAZUH_MANAGERmanager-ip WAZUH_REGISTRATION_PASSWORDpassword apt install ./wazuh-agent.deb对已安装的 Agent 可手动写入密码文件。注意wazuh-agentd以wazuh用户运行文件必须对该用户可读echo password | sudo tee /var/ossec/etc/authd.pass sudo chown root:wazuh /var/ossec/etc/authd.pass sudo chmod 640 /var/ossec/etc/authd.passAgent 在启动时从安装目录下的etc/authd.pass典型路径/var/ossec/etc/authd.pass读取密码。密码轮换生成的密码跨重启持久化。如需轮换如安全事件后在 master 上删除/var/wazuh-manager/etc/authd.pass并重启wazuh-authd新随机密码会自动生成、持久化并同步到 worker无需逐台手动修改。版本门控一个容易踩坑的配置点agents/allow_higher_versions控制的是注册门authd1515 端口。还有一个同名但独立的选项位于remoteagents下控制连接门remoted1514 端口。两处都必须设为yes更高版本的 Agent 才能既完成注册又能正常通信若只开注册不开连接会出现Agent 拿到了密钥却无法通信这类难以排查的问题agents allow_higher_versionsno/allow_higher_versions /agents从 src/os_auth/src/auth.c 可以看到该选项在协议解析层的落地if (!config.allow_higher_versions compare_wazuh_versions(__wazuh_version, version, false) 0)版本不兼容时返回HC_INVALID_VERSION_RESPONSE错误。内部选项Internal Options额外设置写入/var/wazuh-manager/etc/wazuh-manager-internal-options.conf# Auth daemon debug level (0-2) authd.debug0 # Timeout for agent enrollment requests (seconds) auth.timeout_seconds1 # Timeout for agent enrollment requests (microseconds) auth.timeout_microseconds0 # Maximum number of agents allowed (0 unlimited) authd.max_agents0建议使用wazuh-manager-internal-options.conf而非直接修改默认配置以便在升级时保留自定义设置。authd.debug的读取逻辑在 main-server.c 中通过getDefine_Int_default(authd, debug, 0, 2, 0)实现0–2 级逐级开启nowDebug()。配置示例五种典型部署场景1. 基础配置密码保护的标准注册auth disabledno/disabled port1515/port use_passwordyes/use_password force enabledyes/enabled key_mismatchyes/key_mismatch disconnected_time enabledyes1h/disconnected_time after_registration_time1h/after_registration_time /force /auth2. 安全加固双向 TLS 客户端证书校验auth disabledno/disabled port1515/port use_passwordyes/use_password ssl_agent_ca/var/wazuh-manager/etc/rootCA.pem/ssl_agent_ca ssl_verify_hostyes/ssl_verify_host ssl_manager_cert/var/wazuh-manager/etc/sslmanager.cert/ssl_manager_cert ssl_manager_key/var/wazuh-manager/etc/sslmanager.key/ssl_manager_key ssl_auto_negotiateyes/ssl_auto_negotiate ciphersHIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4/ciphers force enabledyes/enabled key_mismatchyes/key_mismatch disconnected_time enabledyes2h/disconnected_time after_registration_time2h/after_registration_time /force /auth3. 严格 IP 绑定源 IP 注册 清除旧密钥auth disabledno/disabled port1515/port use_source_ipyes/use_source_ip use_passwordyes/use_password purgeyes/purge force enabledno/enabled /force /auth4. 允许更高版本 Agent 注册auth disabledno/disabled port1515/port use_passwordyes/use_password agents allow_higher_versionsyes/allow_higher_versions /agents force enabledyes/enabled key_mismatchyes/key_mismatch disconnected_time enabledyes1h/disconnected_time after_registration_time1h/after_registration_time /force /auth5. 仅本地注册关闭网络注册通道auth disabledno/disabled port1515/port remote_enrollmentno/remote_enrollment use_passwordyes/use_password force enabledyes/enabled /force /auth6. 开发/测试配置禁止用于生产auth disabledno/disabled port1515/port use_passwordno/use_password purgeyes/purge force enabledyes/enabled key_mismatchyes/key_mismatch disconnected_time enabledno0/disconnected_time after_registration_time0/after_registration_time /force /auth命令行接口与运维提示wazuh-manager-authd还支持一组命令行参数help_authd输出见 main-server.c适合调试与证书生成场景-d调试模式可多次使用提升调试级别-t测试配置后退出校验wazuh-manager.conf合法性-f前台运行-g group/-D dir指定运行组与工作目录默认wazuh-manager组与安装目录-p port覆盖监听端口-c ciphers覆盖 TLS 密码套件-v path/-s指定 CA 证书路径并启用源主机校验-x path/-k path指定服务端证书与私钥-a自动选择 SSL/TLS 方法默认仅 TLS v1.2-C/-B/-K/-X/-S用于生成自签名证书的批量参数有效期天数、密钥位数、密钥/证书输出路径、证书主题组合使用可直接生成管理端证书。证书生成逻辑位于 src/os_auth/src/generate_cert.c当-C、-B、-K、-X、-S五参数齐全时main()会先校验参数完整性任一缺失即报错退出再调用generate_cert()。关键源文件速查文件用途src/os_auth/src/main-server.c主循环、线程管理远程/本地/写入/密码监视、客户端连接池、协议消息处理src/os_auth/src/auth.c协议解析OSSEC PASS:/OSSEC A:...、Agent 名称与版本校验、密钥生成与添加src/os_auth/src/local-server.c本地 Unix socket 注册处理JSON 接口、9001–9015 错误码src/os_auth/src/config.c配置加载入口调用authd_read_configsrc/config/src/authd-config.cauthXML 区块解析与默认值初始化src/os_auth/include/auth.h模块公共头文件数据结构、线程接口、配置结构体声明src/unit_tests/os_auth/模块单元测试通过WAZUH_UNIT_TESTING导出内部函数关联阅读Auth Daemon 配置参考本文参数详解的完整版出处客户端配置Agent 端注册相关设置注册服务器、密码文件、证书;远程连接配置Agent 连接门1514 端口配置与注册门配套使用Agent 管理Agent 生命周期管理密钥、分组、升级。【免费下载链接】wazuhWazuh - The Open Source Security Platform. Unified XDR and SIEM protection for endpoints and cloud workloads.项目地址: https://gitcode.com/GitHub_Trending/wa/wazuh创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表