Wazuh system call monitoring with Linux Audit

Wazuh system call monitoring with Linux Audit shows who ran which commands, who gained elevated rights and who touched sensitive files on your Linux hosts. This page explains the design choices, setup sequence, risks and volume controls.

On this page

Wazuh system call monitoring with Linux Audit: what it answers for your team

Wazuh system call monitoring with Linux Audit gives your team a searchable record of which commands ran, which processes were started with elevated privileges, and which sensitive files were opened or changed on Linux servers. Teams need it when an investigation must reconstruct privileged activity after the fact, or when a control requires evidence that such activity is recorded and reviewed. The Linux Audit subsystem is the kernel-level auditing facility of Linux. Administrators define audit rules that select system calls, file accesses and other events, and the kernel writes matching records to an audit log. Wazuh does not replace that facility. It collects those records from the endpoint and turns them into alerts that your team can search and act on.

Four Wazuh components carry this work. The Wazuh agent on each Linux server reads the audit log and forwards events. The Wazuh server receives that data and applies decoders, which extract fields from raw records, and rules, which decide what deserves an alert. The Wazuh indexer stores alerts and makes them searchable, and the Wazuh dashboard gives analysts the views they use to triage and investigate. Each component has its own sizing and access decisions, so plan them together. The exact rule and decoder behavior, including which audit keys, rule identifiers and field mappings ship with the product, must be confirmed against the Wazuh documentation for the 4.14 release line before you build on them, because these details change between releases.

The first decision is scope. Recording every system call on a busy server produces a volume of events that is expensive to store, slow to review and hard to act on. Most teams start with a narrow set: commands run by privileged accounts, process execution that changes user identity, and reads or writes under paths that hold credentials, keys and regulated data. Decide who approves changes to that rule set, how long alerts stay in the indexer, and which hosts are in the first wave. Ask your team to measure audit log growth on a representative host during a pilot, because log volume depends on your workload and your rules alone. Plan for disk space on each endpoint as well as storage on the central side.

Before go-live, run a verification pass that a reviewer can repeat. On a staging host, perform a few known actions: run a command as a privileged user, change a file under a monitored path, and attempt a privilege change through an approved method. Confirm that each action produces an audit record on the endpoint, reaches the Wazuh server, is decoded into the expected fields, and appears in the dashboard with the expected rule. Record the results with the rule version and release line in your evidence file. If any step fails, check the audit rule syntax, agent configuration and decoder output in the Wazuh documentation for your release before changing thresholds. Ask any implementation partner to show this test as part of the written scope.

Which audit scopes to monitor and when each fits

This table compares four Linux Audit rule scopes used with Wazuh, showing the security question each answers, where its noise usually comes from and which team should own tuning. Enable one scope at a time on a pilot host and measure event volume there first, because load depends on your workloads and rule set.

Audit scopeSecurity question it answersTypical noise sourceWho owns the tuning
Process execution (commands run by users and services)Which commands ran, under which account, and did a service launch an unexpected binary?Cron jobs, configuration management runs, package updates and frequent health checksDetection engineering with the Linux platform team, using baselines per host role
Privilege changes (setuid use, sudo, identity file changes)Was privilege gained or identity data changed, and was the change authorized?Routine sudo by administrators, automation accounts and scheduled jobs that elevate privilegeSecurity operations, with the identity team reviewing changes to account and group files
Sensitive file and directory watchesDid someone read or change keys, certificates, application secrets or audit configuration?Application logs, temporary files and package managers touching watched pathsApplication owners for their own paths, with the platform team approving each watch list
Network or syscall-level rulesDid a host make unexpected connections or use low-level calls linked to tampering or evasion?Busy services, container runtimes and syscall activity from normal application behaviorNetwork security and detection engineering, reviewed on a pilot host before production

How Linux Audit events reach the Wazuh server

The data path starts on each monitored host, where audit rules decide which events the Linux audit subsystem records. A rule can match a system call such as execve, a write or attribute change on a sensitive file path, or a privileged action tied to a user ID. Every matching event is written to the Linux audit log. The Wazuh server can only classify what reaches it, so the first decision is which rules belong on which host classes, written down before any agent starts forwarding. Confirm on a test host that the rules load and that the audit log receives the expected records.

The Wazuh agent is the link between that log and the server. The agent reads the audit log through its log collection settings and forwards the records to the Wazuh server over the agent channel. The exact collection configuration, including the log path and any required format settings, depends on the agent version in use, so confirm it in the documentation for that version rather than copying settings from an older deployment. The same applies to the rules bundled with Wazuh for audit records: confirm which rule files ship with your version, which rule IDs and groups they use, and whether they match your host operating system and audit configuration.

On the Wazuh server, decoders parse each raw audit record into named fields such as the executable, the working directory, the user and the audit key. Rules then evaluate those fields and assign severity and grouping, and only matching events become alerts. The Wazuh indexer stores those alerts as a full-text and analytics store, and the Wazuh dashboard queries the indexer to show them. The data path has several places where volume can be shaped, so know which layer you are tuning when an alert count changes. Test a sample event through each layer and record what the dashboard shows at the end.

The Wazuh server can run as a cluster for horizontal scaling, and it manages agent configuration remotely. This matters for audit work because a change to a collection setting or a rule file is a fleet-wide change, and a poorly scoped audit rule can flood the server with events from many hosts at once. Plan rule changes through agent groups, roll them to a small staging group first, and watch event volume and alert volume before widening the scope. Ask your implementation partner or your own team to document how the remote configuration process behaves in your cluster layout, including what happens to agents that are offline during a change.

Setup sequence for Linux Audit rules with Wazuh agents

This sequence takes a small Linux Audit rule set from a chosen risk area to alerts in the Wazuh dashboard. Each stage closes with a check, so a pilot group proves the collection path before the rules reach the wider fleet.

  1. Confirm platform, agent and distribution versions

    The platform owner records the Wazuh server and indexer version, the agent version on each pilot host, and the Linux distributions and kernel families in scope. Confirm that the agent version is supported by the server release in use, and check the Wazuh release notes for any audit-related changes. Ask the vendor or your own support contact to confirm compatibility for any distribution outside your standard build. The step is done when a written compatibility table lists every pilot host and its versions, and nobody has found a mismatch.

  2. Check auditd health on pilot hosts

    The Linux administrator confirms that the auditd package is installed, the service is running and enabled at boot, and audit logs are written to the expected path, usually under /var/log/audit. Check that the audit backlog and log rotation settings are in place so that events are not lost during bursts. Also confirm that existing audit rules, if any, load cleanly with the audit rule tools. The step is done when every pilot host reports a running auditd service, a readable audit log, and a rule load with no errors.

  3. Write a small rule set for one risk area

    The security engineer selects one risk area, such as privileged command execution or reads of sensitive files, and writes a short set of audit rules for it. Keep the set small so that each rule has a named purpose, a filter for the users or paths it covers, and a key that identifies it in later searches. Review the rules with the operations team to agree which events are expected noise. The step is done when the rule file loads on a test host and each rule produces a visible audit record when triggered manually.

  4. Configure agent collection through server-managed settings

    The Wazuh administrator adds the audit log as a localfile source in the agent configuration that the server manages for the pilot group, instead of editing agents one by one. Confirm the log path for each distribution and keep the change in version control if your organization stores configuration that way. Confirm that the server-side decoders and rules for audit records are present in the release you run. The step is done when the agents in the pilot group report the new configuration as applied and the audit log appears in the agent's collection status.

  5. Deploy to a pilot group

    The team assigns the rules and the collection configuration to a small pilot group of hosts that represent the distributions and roles in scope. Watch agent connectivity, host CPU use and audit log growth for a period agreed by the operations team, and record any rule that produces unexpected volume. Adjust filters before going further, not after alert fatigue has set in. The step is done when the pilot hosts run stably under the agreed watch period and the volume of audit records is recorded per host.

  6. Trigger known test actions and confirm alerts

    The tester performs known actions on a pilot host, such as running a command with sudo and reading a watched file as a non-privileged user. Search the Wazuh dashboard for the matching alerts and confirm the rule, the user, the command or file path, and the host name appear in the alert. Repeat the test on each distribution in the pilot group. The step is done when each test action produces the expected alert on every pilot host, and any missing alert has a documented cause and fix.

  7. Expand rules by host group

    After the pilot passes, the team adds hosts in groups, starting with the ones closest to the risk area, and repeats the volume and alert checks for each group. Keep a record of the rules and agent groups deployed, the test results, and the owner for each group. Pause expansion if a group produces volume that the analysts cannot review. The step is done when every host group in scope shows the expected alerts, the volume is within the level the analysts agreed to review, and the deployment record is complete.

Security and operational risks of audit monitoring

Audit monitoring creates its own attack surface and operational risk. The records are only useful if they cannot be altered, the rules stay in place through troubleshooting, and the people and systems that change them are controlled. Each card below names one risk and the control to plan for it before rules are deployed.

Audit log tampering or loss

Linux Audit writes events to a log path on each host, and the Wazuh agent reads from that path to forward them. If an attacker with root access can truncate, edit or stop the audit daemon, they can remove evidence of the activity you meant to watch. Plan log protection before enabling rules: restrict write access to the audit log directory, confirm how the agent handles log rotation, and decide where copies are forwarded. Test that a deliberate stop of the audit service produces an alert.

Monitoring gaps from removed rules

During troubleshooting, engineers often delete or disable audit rules that generate noisy events, such as on a busy service account or a high-frequency file path. Those rules can stay disabled long after the incident closes, and nothing in the stack reports the gap. Plan change control for audit rule files: keep them in version control, require a reviewed change to remove a rule, and periodically compare the loaded rules against the approved set.

Sensitive data in command arguments

Execution monitoring records command lines, so a password, token or connection string passed as an argument can end up in alert data and in the indexer. Review which commands your rules capture and which arguments are stored, and identify any tools in your environment that accept secrets on the command line. Plan an approach before rollout, such as restricting which fields are retained, changing how tools receive credentials, or limiting who can read the raw events.

Dashboard access to host activity

The Wazuh dashboard gives users a searchable history of commands, file access and privilege changes across many hosts, which makes it a sensitive system in its own right. Users who can query these records can map administrative activity and find sensitive paths. Plan access roles that separate viewing alerts from administering the stack, connect the dashboard to your identity provider where possible, and review who holds administrator rights on a set schedule.

Agent configuration pushed from the server

The Wazuh server can manage agent configuration remotely, so a change made on the server reaches many endpoints at once. An error or unauthorized edit in shared configuration can disable audit collection across a fleet. Plan change control for the central configuration: stage changes on a small group of test hosts first, record who approved each change, and check after each push that agents still report audit events.

Retention and storage of audit events

Audit rules on busy hosts can produce large event volumes, and the indexer stores every alert it receives. Storage pressure can cause old events to be removed sooner than your investigation or evidence requirements allow. Plan retention settings against the periods your policies require, size the indexer for the event rate you measure in a pilot, and confirm how old data is archived or deleted before it is needed for review.

Keeping Wazuh audit rule volume under control

Audit rule volume grows for a few predictable reasons, and the first control is to find them before they reach the Wazuh server. Broad rules that match every process execution on busy build or application hosts generate most of the noise. Watches on high-traffic directories, such as temporary paths, spool directories or large log directories, add events that rarely matter for security. Rules that repeat what journald, syslog or an application already records also multiply the same activity across two pipelines. Each audit event travels from the Linux audit subsystem through the Wazuh agent to the Wazuh server, where decoders and rules run, and then into the Wazuh indexer. Volume becomes a problem at every one of those stages, so the review should cover all of them.

Scope is the first decision. Assign audit rules by host group and role, so a database server, a CI runner and a bastion host each receive only the rules their risk profile justifies. Within a rule set, prefer specific path and action filters over broad ones. For example, watching write and attribute changes on named files such as the sudoers configuration is far more contained than watching an entire directory tree. Keep a short register for each rule that records the owner, the reason it exists, the host groups it applies to and the Wazuh rule IDs it feeds. A rule without a stated reason is the first candidate for removal during a pilot review.

Separate the rules used for alerting from the rules used to retain evidence. Alerting rules should be narrow enough that each match is worth a person's attention, and they should map to Wazuh rule levels that match your escalation process. Evidence rules can be broader, but they should be kept on a deliberate retention plan so that investigators can reconstruct activity without every broad event triggering an alert. Where known benign activity creates repeat alerts, such as a scheduled backup job or a configuration management run, use the suppression or rule-level tuning methods described in the Wazuh documentation for your release. Confirm the exact syntax for your version, and store each change in version control with an owner and a review date.

Review volume after every change to a rule, host group or Wazuh rule file. Measure audit events per agent over a representative period, alert counts by Wazuh rule ID, and growth in indexer storage before and after the change. Thresholds for alert levels, event rates and storage capacity should come from measured pilot data gathered on hosts that represent your production roles, not from assumptions about what a typical server produces. Ask the team that operates the platform to confirm the sizing method in writing before the rule set goes into production, and repeat the measurement whenever a new application or host role is added.

Limits to confirm in your environment before rollout

Wazuh system call monitoring depends on several components that each carry their own limits: the agent release, the Linux distribution and audit subsystem on each host, the update path, the indexer's storage and the compliance mapping your assessors will read. The cards below list what to confirm, where to find the answer and what a pilot should measure before you widen the rule set.

Distribution and auditd support

Confirm that each Linux distribution and kernel in your fleet is listed as supported for the Wazuh agent release you plan to deploy, and that the auditd version on those hosts behaves as the release documentation describes. Audit rule syntax and log output can differ between versions, so a host that works in staging may not match production. Check the Wazuh documentation for the release in use, then run the agent on one host from each image family in a pilot before the rollout date is set.

Offline rule and decoder updates

Hosts or networks without internet access need the offline installation path, and that path changes how rule and decoder updates reach the Wazuh server. Confirm how you will import new rule files and decoders into an environment that cannot pull updates directly, who approves each import and how a rule change is tested before it reaches production agents. The Wazuh offline installation guide for the release in use is the source to check for each step.

Indexer retention for your evidence period

Audit events are stored in the Wazuh indexer, so the retention you configure decides how far back an investigator or assessor can search. Compare the period your framework or internal policy requires with the storage you have allocated, including replicas and growth from audit-heavy hosts. Confirm how index lifecycle and backup options work in the release you run, and test a restore of older events. Ask your compliance lead which period applies to each log category.

Compliance framework mapping gaps

The Wazuh dashboard includes prebuilt views for frameworks such as PCI DSS, GDPR, HIPAA and NIST 800-53, but those views do not show that a system call rule satisfies a specific control. Map each control you must evidence to the rules that generate events for it, and list requirements with no matching rule. Where a gap exists, decide whether a custom rule, a different log source or a documented compensating process closes it. Confirm the final mapping with your assessor before relying on it.

Agent CPU and disk overhead

Each audit rule adds work for the kernel audit subsystem and writes records that the agent forwards, so overhead grows with the rule set and with activity on each host. Measure agent CPU, memory and disk use on your busiest build, database and bastion hosts with the planned rules enabled, and compare the results with the limits you set for those hosts. Confirm the audit backlog and log rotation settings so records are not lost under load, and let the pilot measurements decide the final rule scope.

How to verify that audit alerts fire end to end

An audit rule set only protects you if each risk area produces an alert that reaches the Wazuh dashboard, so verify the full chain on a pilot host before production relies on it. Use a host that matches production in its auditd configuration, Wazuh agent version and log paths. For each risk area in scope, command execution, privilege escalation and sensitive file access, run one controlled action that a specific rule should catch. For example, an illustrative test could run a harmless binary from a watched directory, invoke sudo from a dedicated test account, or read a file on your watch list. Write down the action, the test account, the expected rule and the time you performed it. Label the host and the account clearly so the resulting events are easy to find during review.

Each test event should be checked at four points. First, confirm the raw audit record exists on the endpoint and carries the audit key and fields you expected. Second, confirm the Wazuh agent read and forwarded that record, using the agent's own logs and, if you archive events, the archive on the server. Third, confirm the server decoded the record into fields and matched a rule, using the server's log test tool if your release provides one (confirm this in the documentation for your version). Fourth, confirm the alert appears in the Wazuh indexer and dashboard with the correct agent name, rule description and severity. Record the first checkpoint that fails. In practice, breaks tend to appear at decoding or where audit field names do not match what the rule expects, so note the exact field that differed.

Measure the time from the controlled action to the alert timestamp, and record the gap at each checkpoint so you can see where latency accumulates. Agree on an acceptable delay with the security operations team before testing starts, and record it in the test plan, so the result is judged against a pre-agreed expectation. Then run the negative test. Generate the routine activity this host normally produces, such as scheduled package updates, backup jobs, routine service restarts and ordinary administrator logins, and confirm that the alerts raised stay within the volume and severity your threshold allows. If benign activity triggers the rules at a level that would flood analysts, the rule scope needs adjusting before go-live, because the alert path would be working but unusable.

Keep these tests as a repeatable check rather than a one-time exercise. Store the test definitions, expected outcomes, audit rule file checksum, and the agent and server versions in version control, so each run is reproducible. Re-run the full routine after every Wazuh agent upgrade, every server or indexer upgrade, and every change to the audit rules. Before scheduling upgrades, read the release notes for each patch to see which components changed, and decide which tests cover those changes. A passing run on the previous version proves little about the new one. Keep the pilot host one step ahead of production in the upgrade order, and retain each run's results as change records for later review.

What does Wazuh audit monitoring cost and take to implement?

Does self-hosted Wazuh have a license fee for audit monitoring?

No license fee applies to the self-hosted Wazuh software, which is open source under the GNU General Public License version 2 with a linking exception for OpenSSL. The cost of audit monitoring is therefore made up of three parts: the infrastructure that runs the Wazuh indexer, server and dashboard, the staff time to design rules and roll out agents, and any outside services you choose to buy. Wazuh Cloud is a separate, managed offering with its own plans, so confirm which model you are pricing before comparing numbers. Your quote should separate these components so you can see what you pay once and what recurs.

What makes a Linux Audit monitoring project larger or smaller?

The main drivers are the number of hosts, how alike or different they are, and how much of the audit ruleset you intend to use. A fleet of identical build servers is far simpler than a mix of web, database, jump and legacy hosts, each with its own privileged commands and file paths. Other effort drivers include:

  • Rule scope: how many system calls, users and file paths you watch, and how noisy the output is.
  • Compliance mapping: whether events must line up with named framework controls and be documented as evidence.
  • Change control: how audit rule changes are reviewed, tested and rolled back.
  • Existing logging: how audit events reach your current SIEM, log platform or alerting tools.
What do we need to provide before an audit monitoring project starts?

Most of the delay in these projects comes from client-side inputs, so plan for them early. You will need named owners for each host group who can confirm what is normal on their systems, a pilot group of representative hosts, and access to the Wazuh environment, including the server, indexer and dashboard, with the permissions needed to change agent configuration. You also need someone who can approve the rule scope, because what gets watched determines alert volume and storage. Agree on who signs off each change before work begins, so decisions do not stall the rollout.

Can our internal team set up Linux Audit monitoring alone?

Yes, for a small pilot, an internal team with Linux and Wazuh experience can usually handle it, provided the results are documented. Start with a limited host group, write down each audit rule and the reason for it, record which alerts were tuned and why, and keep the configuration under version control. A larger rollout across many host types benefits from a written plan that sets rule scope, ownership, testing and rollback before any production change. That plan is also what makes outside help easier to scope if you decide to bring in a partner later.

How does DeployOpen scope and price a Wazuh audit monitoring engagement?

DeployOpen works from a written scope. Most engagements are fixed scope, with deliverables and timelines agreed in writing before work starts, and DeployOpen does not publish a price list. The scope usually covers the hosts in the pilot, the rule set and its mapping to your requirements, the documentation handover and any integration with your existing logging. Ongoing support, upgrades and testing can be taken on as retainers if you want them. Ask for the quote to state exactly what is included and excluded, so you can compare it with your internal estimate line by line.

What should we ask for in a quote for this work?

Ask for a quote that ties each line to a deliverable. Useful requests include:

  • The list of hosts or host groups in scope and the count of each type.
  • The rule scope, with the system calls, users and file paths covered.
  • Which compliance mapping, if any, is delivered and in what form.
  • What is one-time work and what is recurring support or upgrades.
  • Which infrastructure costs the quote assumes you will carry.
  • What you must provide, such as owners, access and approvals, and the effect of delays on the timeline.
  • How rule changes are tested and how acceptance is decided.
What ongoing effort does Wazuh audit monitoring need after go-live?

Audit monitoring needs continuing attention because systems, software and staff change. Expect recurring effort for reviewing alert volume, tuning rules that fire too often, adding rules for new software or services, and applying Wazuh patch releases. The Wazuh 4.14 line has seen patch releases roughly every one to two months, so plan a regular window to test and deploy updates. Ask any partner to state whether this recurring work is included, how it is requested, and how it is billed, so the running cost is visible before you commit.

How DeployOpen scopes, delivers and supports Wazuh audit monitoring

DeployOpen plans and builds Wazuh system call monitoring with Linux Audit inside infrastructure you control, so the audit rules, Wazuh decoders and alert handling are designed for your hosts before they reach production. Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts. Ongoing rule tuning and upgrades can be covered by a retainer.

How we scope

  • The written scope names the hosts, distributions and Linux Audit rule sets in and out of monitoring for Wazuh.
  • Scope covers which commands, privilege changes and sensitive paths generate events, and which are excluded as noise.
  • Fixed-scope terms set deliverables and timelines in writing; ongoing tuning can sit under a retainer.

How we build

  • Audit rules are added in stages, starting with command execution, then privilege escalation and file access.
  • Test hosts show how many events each rule generates before any rule reaches production endpoints.
  • Wazuh decoders and rules are tested against sample audit records so alerts map to the right events.

How we hand over

  • Handover includes the rule files, decoder and agent configuration, and a record of each rule's purpose and owner.
  • Runbooks cover changing rules, checking audit backlog and tracing an alert back to its source record.
  • Deliverables are listed in the written scope, so you can check each one before acceptance.

How we support

  • Retainers can cover rule tuning, Wazuh version upgrades and review of audit volume as your hosts change.
  • Wazuh 4.14 patch releases come roughly every one to two months, so audit rule checks follow each one.
  • DeployOpen prepares evidence of the monitoring setup, but independent auditors issue any audit report or attestation.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.