6.5.1. Defining Audit Rules with auditctl

The auditctl command allows you to control the basic functionality of the Audit system and to define rules that decide which Audit events are logged.

Note

All commands which interact with the Audit service and the Audit log files require root privileges. Ensure you execute these commands as the root user. Additionally, CAP_AUDIT_CONTROL is required to set up audit services and CAP_AUDIT_WRITE is required to log user messages.

Defining Control Rules

The following are some of the control rules that allow you to modify the behavior of the Audit system:

-b

sets the maximum amount of existing Audit buffers in the kernel, for example:

~]# auditctl -b 8192

-f

sets the action that is performed when a critical error is detected, for example:

~]# auditctl -f 2

The above configuration triggers a kernel panic in case of a critical error.

-e

enables and disables the Audit system or locks its configuration, for example:

key_name is an optional string that helps you identify which rule or a set of rules generated a particular log entry.

Example 6.1. File System Rules

To define a rule that logs all write access to, and every attribute change of, the /etc/passwd file, execute the following command:

~]# auditctl -w /etc/passwd -p wa -k passwd_changes

Note that the string following the -k option is arbitrary.

To define a rule that logs all write access to, and every attribute change of, all the files in the /etc/selinux/ directory, execute the following command:

~]# auditctl -w /etc/selinux/ -p wa -k selinux_changes

To define a rule that logs the execution of the /sbin/insmod command, which inserts a module into the Linux kernel, execute the following command:

~]# auditctl -w /sbin/insmod -p x -k module_insertion

Defining System Call Rules

To define a system call rule, use the following syntax:

auditctl -a action,filter -S system_call -F field=value -k key_name

where:

action and filter specify when a certain event is logged. action can be either always or never. filter specifies which kernel rule-matching filter is applied to the event. The rule-matching filter can be one of the following: task, exit, user, and exclude. For more information about these filters, see the beginning of Section 6.1, “Audit System Architecture”.

system_call specifies the system call by its name. A list of all system calls can be found in the /usr/include/asm/unistd_64.h file. Several system calls can be grouped into one rule, each specified after its own -S option.

field=value specifies additional options that further modify the rule to match events based on a specified architecture, group ID, process ID, and others. For a full listing of all available field types and their values, see the auditctl(8) man page.

key_name is an optional string that helps you identify which rule or a set of rules generated a particular log entry.

Example 6.2. System Call Rules

To define a rule that creates a log entry every time the adjtimex or settimeofday system calls are used by a program, and the system uses the 64-bit architecture, execute the following command:

Note that the -F auid!=4294967295 option is used to exclude users whose login UID is not set.

It is also possible to define a file system rule using the system call rule syntax. The following command creates a rule for system calls that is analogous to the -w /etc/shadow -p wa file system rule:

~]# auditctl -a always,exit -F path=/etc/shadow -F perm=wa

6.5.2. Defining Executable File Rules

action and filter specify when a certain event is logged. action can be either always or never. filter specifies which kernel rule-matching filter is applied to the event. The rule-matching filter can be one of the following: task, exit, user, and exclude. For more information about these filters, see the beginning of Section 6.1, “Audit System Architecture”.

system_call specifies the system call by its name. A list of all system calls can be found in the /usr/include/asm/unistd_64.h file. Several system calls can be grouped into one rule, each specified after its own -S option.

path_to_executable_file is the absolute path to the executable file that is audited.

key_name is an optional string that helps you identify which rule or a set of rules generated a particular log entry.

Example 6.3. Executable File Rules

To define a rule that logs all execution of the /bin/id program, execute the following command:

To define Audit rules that are persistent across reboots, you must either directly include them in the /etc/audit/audit.rules file or use the augenrules program that reads rules located in the /etc/audit/rules.d/ directory. The /etc/audit/audit.rules file uses the same auditctl command line syntax to specify the rules. Empty lines and text following a hash sign (#) are ignored.

The auditctl command can also be used to read rules from a specified file using the -R option, for example:

~]# auditctl -R /usr/share/doc/audit/rules/30-stig.rules

Defining Control Rules

A file can contain only the following control rules that modify the behavior of the Audit system: -b, -D, -e, -f, -r, --loginuid-immutable, and --backlog_wait_time. For more information on these options, see the section called “Defining Control Rules”.

The Audit rules have a numbering scheme that allows them to be ordered. To learn more about the naming scheme, see the /usr/share/doc/audit/rules/README-rules file.

Using augenrules to Define Persistent Rules

The augenrules script reads rules located in the /etc/audit/rules.d/ directory and compiles them into an audit.rules file. This script processes all files that ends in .rules in a specific order based on their natural sort order. The files in this directory are organized into groups with following meanings:

10 - Kernel and auditctl configuration

20 - Rules that could match general rules but you want a different match

30 - Main rules

40 - Optional rules

50 - Server-specific rules

70 - System local rules

90 - Finalize (immutable)

The rules are not meant to be used all at once. They are pieces of a policy that should be thought out and individual files copied to /etc/audit/rules.d/. For example, to set a system up in the STIG configuration, copy rules 10-base-config, 30-stig, 31-privileged, and 99-finalize.

Once you have the rules in the /etc/audit/rules.d/ directory, load them by running the augenrules script with the --load directive:

Where did the comment section go?

Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.