新闻详情

新闻详情

首页 / 资讯中心 / 详情

Wazuh Command Wodle 完整指南:定时命令执行、校验与事件上报

发布时间:2026/9/14 13:21:06来源:尧图网络
Wazuh Command Wodle 完整指南:定时命令执行、校验与事件上报
Wazuh Command Wodle 完整指南定时命令执行、校验与事件上报【免费下载链接】wazuhWazuh - The Open Source Security Platform. Unified XDR and SIEM protection for endpoints and cloud workloads.项目地址: https://gitcode.com/GitHub_Trending/wa/wazuhWazuh 的 Command 模块wodle namecommand允许在 Agent 或 Manager 上按计划执行自定义操作系统命令与脚本并把输出作为结构化事件上报给分析端适用于原生采集器覆盖不到的周期性命令遥测、自定义监控脚本、审计脚本与数据采集器集成场景。本文以 Command Module 文档 与 Command Module Configuration Reference 为主体结合 wm_command.c 源码实现完整讲解其运行机制、全部配置项、调度模型、哈希校验、事件格式、集中式配置安全限制、执行环境、性能与排障方法让读者既能照着配置落地也能理解底层实现原理。模块定位与运行载体Command 模块以wodle namecommand的身份运行在两类进程中Agent 端运行于wazuh-modulesd守护进程内配置位于ossec.conf根标签ossec_config日志写入/var/ossec/logs/ossec.logManager 端运行于wazuh-manager-modulesd内配置位于etc/wazuh-manager.conf根标签wazuh_config日志写入/var/wazuh-manager/logs/wazuh-manager.log。模块执行的是配置所在主机本地的命令即命令在 Agent 上执行则读取 Agent 本地的ossec.conf或agent.conf在 Manager 上执行则读取 Manager 自身的配置文件。从源码看该模块在 wm_command.c 中通过WM_COMMAND_CONTEXT注册进 wmodules 框架其.name command、.start指向wm_command_main主循环并提供了wm_command_read用于解析 XML 配置、wm_command_dump用于输出运行状态、wm_command_destroy用于释放资源。每个wodle namecommand块相互独立允许在同一个配置中定义多个命令实例各自拥有独立的调度与执行线程。工作原理与执行流程根据文档描述并结合wm_command_main的实现见 wm_command.c模块主循环对每个配置的命令 wodle 依次执行以下步骤读取配置从ossec.conf或 Manager 的wazuh-manager.conf以及集中式配置agent.conf中解析wodle namecommand块构建调度计划基于interval、day、wday、time生成scan_config通过共享的 Wazuh 模块调度器决定下一次执行时刻可选校验可执行文件当配置了verify_md5/verify_sha1/verify_sha256时先解析命令首 token 对应的可执行文件路径并校验哈希validate_command_checksums执行命令调用wm_exec执行完整命令行并受timeout限制超时返回WM_ERROR_TIMEOUT上报事件当ignore_output为no时通过wm_sendmsg把结构化 JSON 事件写入本地队列LOCALFILE_MQ路由标签固定为command用户配置的tag值作为事件负载中的tags字段携带。代码中的几处细节可印证上述流程模块启动时若command-enabled为假会打印Module command:%s is disabled. Exiting.后直接退出线程主循环使用sched_scan_get_time_until_next_scan计算休眠时间并通过wm_sleep_until_interruptible等待下一个调度点每次执行前先调用get_iso8601_utc_time记录event.start时间戳再执行命令命令执行失败或超时WM_ERROR_TIMEOUT时status被置为-1并记录Timeout overtaken或Command %s failed.日志。配置方法与完整参数参考在ossec_config块内配置模块。一个最小可用的 Linux 示例wodle namecommand disabledno/disabled tagperiodic-whoami/tag command/usr/bin/whoami/command interval2m/interval ignore_outputno/ignore_output run_on_startyes/run_on_start timeout30/timeout /wodle带 SHA1 校验的 Windows 示例注意 Windows 路径使用双反斜杠wodle namecommand disabledno/disabled tagperiodic-whoami/tag commandC:\\Windows\\System32\\whoami.exe/command interval2m/interval ignore_outputno/ignore_output run_on_startyes/run_on_start timeout30/timeout verify_sha19746e91bfc629d3a2e1fe6289b549c0452702004/verify_sha1 /wodle配置项总表以下表格汇总全部配置项默认值与允许值均已对照解析器与源码确认OptionRequiredDefaultDescriptiondisabledNono设为yes时禁用该命令实例。tagNoEmpty自定义标签写入生成事件并用于模块日志标识。commandYesNot set要执行的命令行首 token 视为可执行文件用于哈希校验与进程元数据。intervalNo2s两次执行之间的时间间隔支持s、m、h、d、w、M后缀最小1s。dayNoNot set月内某天执行取值1–31不能与wday同时使用。wdayNoNot set周内某天执行取值sunday–saturday不能与day同时使用。timeNoNot set一天内某时刻执行HH:MM24 小时制格式。ignore_outputNono设为yes时执行命令但不发送输出事件。run_on_startNoyes模块启动时立即执行一次。timeoutNo0命令最大执行时长秒0表示不设超时。verify_md5NoNot set可执行文件的期望 MD5 哈希必须为 32 个十六进制字符。verify_sha1NoNot set可执行文件的期望 SHA1 哈希必须为 40 个十六进制字符。verify_sha256NoNot set可执行文件的期望 SHA256 哈希必须为 64 个十六进制字符。skip_verificationNono设为yes时校验失败仅记录警告并继续执行。从源码的wm_command_read解析逻辑与 wm_command.h 结构体可以看出这些参数被映射为wm_command_t的字段tag、command、full_command校验后重建的完整命令行、三个哈希字符串、enabled/run_on_start/ignore_output/agent_cfg/skip_verification位标志、timeout整型以及sched_scan_config scan_config调度配置。其中interval的默认值2s对应头文件中的WM_COMMAND_DEFAULT_INTERVAL 2常量。调度模型interval / time / wday / day 的组合规则Command 模块复用 Wazuh 模块共享调度器sched_scan_*系列函数其组合语义如下interval周期性执行命令这是最基础的调度方式time在一天内的指定时刻执行若interval不是以天为单位非1d会被归一化为1d并输出警告wday在指定星期几执行若interval不是以周为单位非1w会被归一化为1w并输出警告day在指定月内某天执行若interval不是以月为单位非1M会被归一化为1M并输出警告。run_on_start决定首次执行时机为yes时模块启动立即执行一次为no时首次执行需等待第一个调度点到来。主循环中command-state.next_time用于跨重启持久化下一次扫描时间通过wm_state_io读写状态文件避免重启后调度漂移。哈希校验机制、边界与平台细节哈希校验针对command首 token 解析出的可执行文件命令参数在拼接时被原样保留但不参与哈希计算。当配置了verify_md5、verify_sha1、verify_sha256中任意一个时模块依次执行拆分命令行识别可执行文件w_strtok切分Windows 下采用专用逻辑并先归一化双反斜杠解析可执行文件的绝对路径get_binary_path失败时报Cannot check binary: %s. Cannot stat binary file.并退出线程校验每一个已配置的哈希validate_command_checksums内部调用wm_validate_command分别比对 MD5 / SHA1 / SHA256用解析出的完整路径替换原命令首 token、保留原始参数重建full_command见 wm_command.c其中会处理带空格路径的引号包裹除非skip_verification为yes否则每次计划执行前都会重新校验哈希防止脚本在运行期间被篡改。Windows 平台在解析与校验可执行文件时模块会调用SafeWow64DisableWow64FsRedirection禁用 WOW64 文件系统重定向确保访问到 64 位系统目录下的真实文件。校验失败时命令不会执行若skip_verification为yes则仅打印* checksum verification failed for command ... Skipping...警告并继续。对应的校验失败日志格式MD5/SHA1/SHA256 均可替换为SHA1 checksum verification failed for command command.集中式配置与远程命令安全开关Command 模块可以通过agent.conf进行集中式部署但远程命令默认被禁用。当某个 command wodle 来自集中式配置时Agent 只有在内部选项wazuh_command.remote_commands开启的情况下才会真正执行它# Allow remote commands from centralized configuration (0no, 1yes, default: 0) wazuh_command.remote_commands0该选项可写入internal_options.conf或local_internal_options.conf。源码侧的逻辑位于 wm_command.c当command-agent_cfg为真且getDefine_Int_default(wazuh_command, remote_commands, 0, 1, 0)返回 0 时打印警告Remote commands are disabled. Ignoring tag.后直接退出该模块实例pthread_exit。注意这里的第三个参数0正是默认值与 etc/internal_options.conf 中wazuh_command.remote_commands0的出厂配置一致。因此如果管理员希望通过集中式配置向 Agent 下发命令 wodle必须先在 Agent 端显式开启该选项未开启时该命令会被记录为忽略。事件格式与字段说明当ignore_output为no时模块生成一个包含命令元数据与输出的 JSON 事件。示例{ event: { module: wazuh-wodle-cmd, start: 2026-05-11T12:00:00Z }, tags: [periodic-whoami], process: { args: [], name: whoami, path: /usr/bin/whoami, command_line: /usr/bin/whoami, hash: { sha1: 9746e91bfc629d3a2e1fe6289b549c0452702004 }, exit_code: 0, io: { text: wazuh\n } } }事件字段含义如下FieldDescriptionevent.module固定模块标识wazuh-wodle-cmd。event.start命令执行前捕获的 UTC 时间戳。tags数组包含配置的tag未配置tag时为空字符串。process.args命令参数不含可执行文件。process.name可执行文件名。process.path可解析时的可执行文件绝对路径。process.command_line实际执行的完整命令行。process.hash配置的校验哈希仅配置了校验时出现。process.exit_code命令退出码超时与执行失败时为-1。process.io.text捕获的命令输出。该 JSON 结构与 wm_command.c 中wm_command_build_event_payload的组装逻辑一一对应event子对象固定写入wazuh-wodle-cmd与启动时间tags数组携带用户 tagprocess子对象包含args从argv[1]起、name从路径末段提取、path、command_line、可选hash子对象以及exit_code、io.text。输出超长处理当命令输出过大无法放入单条队列消息时模块会基于OS_MAXSTR与路由头计算可用长度先尝试截断process.io.text并重新构建事件最多 4 次折半尝试覆盖 JSON 转义导致的长度膨胀见WM_COMMAND_TRUNCATE_MAX_ATTEMPTS若截断后仍放不下则发送一个输出字段为空的仅元数据事件并记录Command output is too long to fit in a single message.警告源码路径见 wm_command.c。执行环境与输出处理工作目录命令在 Agent 的工作目录下执行Linux/Unix/var/ossec/WindowsC:\Program Files (x86)\ossec-agent\运行权限命令以与 Wazuh Agent 相同的权限运行Linux/Unixwazuh用户若 Agent 以 root 运行则为 rootWindowsSYSTEM 账户环境变量与输出流向命令可访问标准环境变量如需自定义变量建议在包装脚本中设置stdout默认转发给 Managerignore_outputyes时不转发stderr仅记录在本地日志不转发给 Manager退出码记录用于调试非零退出码会生成警告源码中status 0时打印Command %s returned exit code %d.。旧式文本输出格式除结构化 JSON 事件外Manager 侧还兼容解析传统文本格式便于用自定义规则分析命令输出ossec: output: command-tag: command output示例ossec: output: system-check: Disk usage: 75% ossec: output: system-check: Memory available: 2.5GB ossec: output: audit-check: WARNING: Unusual login pattern detected处理要点命令输出的每一行都会生成独立事件事件携带tag用于标识Manager 规则可以基于这些输出行触发告警。实战配置示例以下示例直接取自配置参考文档并可按需组合使用。默认配置——每 5 分钟执行一次系统检查脚本wodle namecommand disabledno/disabled tagsystem-check/tag command/usr/local/bin/check.sh/command interval5m/interval run_on_startyes/run_on_start timeout30/timeout /wodle带哈希校验——每小时执行审计脚本并用 SHA256 校验完整性wodle namecommand disabledno/disabled tagaudit-check/tag command/usr/local/bin/audit.sh/command interval1h/interval verify_sha256e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/verify_sha256 skip_verificationno/skip_verification timeout60/timeout /wodle每日定时执行——每天凌晨 2 点生成报告wodle namecommand disabledno/disabled tagdaily-report/tag command/usr/local/bin/report.sh/command interval1d/interval time02:00/time timeout300/timeout /wodle每周执行——每周一凌晨 3 点清理wodle namecommand disabledno/disabled tagweekly-cleanup/tag command/usr/local/bin/cleanup.sh/command interval1w/interval wdaymonday/wday time03:00/time /wodle每月执行——每月 1 日零点备份wodle namecommand disabledno/disabled tagmonthly-backup/tag command/usr/local/bin/backup.sh/command interval1M/interval day1/day time00:00/time /wodle仅执行不转发输出——只利用命令副作用如清缓存wodle namecommand disabledno/disabled tagcache-clear/tag command/usr/local/bin/clear-cache.sh/command interval1h/interval ignore_outputyes/ignore_output /wodle高频监控——每 30 秒执行一次服务监控脚本wodle namecommand disabledno/disabled tagservice-monitor/tag command/usr/local/bin/monitor-service.sh/command interval30s/interval run_on_startyes/run_on_start timeout10/timeout /wodle多命令实例——同一配置中定义多个相互独立的 command wodlewodle namecommand disabledno/disabled tagdisk-check/tag command/usr/local/bin/disk-check.sh/command interval10m/interval timeout30/timeout /wodle wodle namecommand disabledno/disabled tagnetwork-check/tag command/usr/local/bin/network-check.sh/command interval5m/interval timeout15/timeout /wodle wodle namecommand disabledno/disabled tagsecurity-scan/tag command/usr/local/bin/security-scan.sh/command interval1d/interval time01:00/time timeout600/timeout /wodle安全注意事项脚本完整性生产环境脚本务必使用哈希校验先计算再配置# Generate SHA256 hash sha256sum /usr/local/bin/script.shverify_sha256abc123.../verify_sha256文件权限确保脚本权限合适# Set ownership to root (or wazuh user) chown root:root /usr/local/bin/script.sh # Set permissions (readable and executable by owner only) chmod 700 /usr/local/bin/script.sh输入校验与注入防护脚本若接受参数须校验所有输入以防注入避免把用户可控数据直接拼进 shell 命令所有外部命令使用绝对路径反面示例eval $USER_INPUT严禁使用正面示例/usr/bin/command --option$VALIDATED_INPUT。最佳实践清单命令与脚本一律使用绝对路径实现完善的错误处理记录脚本全部动作以便审计先在预发环境测试再上生产定期复查与更新脚本权限持续监控命令执行日志中的异常。性能与资源管理执行频率取舍高频 1 分钟适合关键服务监控脚本需足够快建议 5 秒并持续关注资源消耗中频1–30 分钟适合大多数场景允许更复杂的脚本逻辑低频每小时/每天适合资源密集型操作、报告与合规检查。超时设置建议快速检查 30 秒timeout30/timeout复杂操作1–5 分钟timeout300/timeout长时任务 5 分钟timeout600/timeout资源监控运行多个 command wodle 时注意资源占用# View running command processes ps aux | grep -E wodle|command # Monitor CPU/memory usage top -p $(pgrep -d, wazuh-modulesd)故障排查与日志监控查看模块日志grep wazuh-modulesd:command /var/ossec/logs/ossec.log常见日志消息及其含义MessageMeaningRemote commands are disabled. Ignoring tag.命令来自集中式配置但远程命令开关未开启。Cannot check binary: binary. Cannot stat binary file.哈希校验时无法解析可执行文件。SHA1 checksum verification failed for command command.可执行文件哈希与verify_sha1配置值不一致。Timeout overtaken.命令执行超过配置的timeout。Command output is too long to fit in a single message.输出过长已被截断或降级为仅元数据事件。常见问题定位命令未执行核对配置、检查模块日志、确认脚本可执行、确认disabled为nogrep -A10 wodle name\command\ /var/ossec/etc/ossec.conf tail -f /var/ossec/logs/ossec.log | grep command ls -l /usr/local/bin/script.sh test -x /usr/local/bin/script.sh echo Executable || echo Not executable grep -A2 wodle name\command\ /var/ossec/etc/ossec.conf | grep disabled哈希校验失败重新计算哈希并与配置比对同时检查脚本是否被改动sha256sum /usr/local/bin/script.sh echo EXPECTED_HASH /usr/local/bin/script.sh | sha256sum -c stat /usr/local/bin/script.sh命令超时调大timeout、实测脚本耗时并优化脚本time /usr/local/bin/script.sh输出未出现确认ignore_output为no、本地直接执行脚本验证输出、在 Manager 侧检索对应 tagtail -f /var/wazuh-manager/logs/alerts/alerts.log | grep command-tag权限错误检查脚本属主与权限、确认 SELinux 上下文ls -l /usr/local/bin/script.sh ls -Z /usr/local/bin/script.sh chmod 750 /usr/local/bin/script.sh chown root:wazuh /usr/local/bin/script.sh日常监控# View all command wodle activity tail -f /var/ossec/logs/ossec.log | grep wazuh-modulesd:command # View specific command tag tail -f /var/ossec/logs/ossec.log | grep system-check # View command output locally grep output: /var/ossec/logs/ossec.log # Count executions of a specific command grep Executing command /var/ossec/logs/ossec.log | grep system-check | wc -l # Search for command errors / timeouts grep -i error\|fail /var/ossec/logs/ossec.log | grep command grep timeout /var/ossec/logs/ossec.log | grep command高级用法条件执行利用包装脚本实现条件执行例如只在工作时间9–17 点运行检查#!/bin/bash # Only run during business hours (9 AM - 5 PM) hour$(date %H) if [ $hour -ge 9 ] [ $hour -lt 17 ]; then /usr/local/bin/actual-check.sh fi参数化命令通过环境变量向包装脚本传参wodle namecommand disabledno/disabled tagparametric-check/tag command/usr/local/bin/wrapper.sh/command interval10m/interval /wodle#!/bin/bash export CHECK_THRESHOLD80 export CHECK_TYPEdisk /usr/local/bin/actual-check.sh延伸阅读Command Module 配置参考 —— 全部配置项的默认值、允许值与逐项说明Log Collector 配置参考 —— 若只需简单命令输出可用localfile配合log_formatcommand作为替代方案Agent 配置参考 与 Manager 配置参考 —— 全部 Agent / Manager 配置项核心实现源码 wm_command.c 与 wm_command.h —— 事件组装、哈希校验与调度逻辑出厂内部选项 etc/internal_options.conf ——wazuh_command.remote_commands的默认值定义。【免费下载链接】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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

DevQualityEval 报告解读:claude-instant-1.0 在 v0.5.0 基准下的评估结果与分级机制 2026/9/14 14:09:15

DevQualityEval 报告解读:claude-instant-1.0 在 v0.5.0 基准下的评估结果与分级机制

DevQualityEval 报告解读:claude-instant-1.0 在 v0.5.0 基准下的评估结果与分级机制 【免费下载链接】Qwen3-Coder Qwen3-Coder is the code version of Qwen3, the large language model series developed by Qwen team. 项目地址: https://gitcode.com/GitHub_…

阅读更多 →
经销商订货商城定制推荐:先看定制深度、交付流程与源码边界,再谈推荐谁 2026/9/14 14:09:15

经销商订货商城定制推荐:先看定制深度、交付流程与源码边界,再谈推荐谁

经销商订货商城定制推荐:先看定制深度、交付流程与源码边界,再谈推荐谁经销商订货商城定制,最怕两句话:一句是「什么都支持」,一句是「跟标准产品差不多」。真正靠谱的定制,是把标准产品的能力边界、定制比…

阅读更多 →
惠州企业的GEO建议——2026年电子与新能源供应商用GEO优化服务商让大模型替自己说话 2026/9/14 14:09:15

惠州企业的GEO建议——2026年电子与新能源供应商用GEO优化服务商让大模型替自己说话

摘要:中国互联网络信息中心(CNNIC)发布的系列报告持续显示,生成式人工智能已深入用户日常信息获取;艾瑞咨询等行业资料也指出,采购决策与供应链调研正加速向AI搜索和大模型推荐倾斜。对于电子信息元件、新能…

阅读更多 →
Activepieces QuickBooks Desktop Conductor 桥接实战:租户接入、同步排障与源码级原理 2026/9/14 14:09:15

Activepieces QuickBooks Desktop Conductor 桥接实战:租户接入、同步排障与源码级原理

Activepieces QuickBooks Desktop Conductor 桥接实战:租户接入、同步排障与源码级原理 【免费下载链接】activepieces AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Work…

阅读更多 →
Pairwise Comparison Evaluation 2026/9/14 14:09:15

Pairwise Comparison Evaluation

Pairwise Comparison Evaluation 【免费下载链接】Agent-Skills-for-Context-Engineering A comprehensive collection of Agent Skills for context engineering, multi-agent architectures, and production agent systems. Use when building, optimizing, or debugging age…

阅读更多 →
MATLAB实现机器人运动学与动力学建模全流程 2026/9/14 14:06:14

MATLAB实现机器人运动学与动力学建模全流程

1. 项目概述:机器人运动学与动力学建模的核心价值在工业自动化与智能机器人快速发展的今天,精确的机器人运动控制已成为智能制造的核心技术之一。作为一名长期从事机器人控制系统开发的工程师,我深刻体会到运动学与动力学建模在实际项目中的关…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞