AUDITPIPE(4) FreeBSD Kernel Interfaces Manual AUDITPIPE(4)
NAME
auditpipe - pseudo-device for live audit event tracking
SYNOPSIS
options AUDIT
DESCRIPTION
While audit trail files generated with audit(4) and maintained by
auditd(8) provide a reliable long-term store for audit log information,
current log files are owned by the audit daemon until terminated making
them somewhat unwieldy for live monitoring applications such as host-
based intrusion detection. For example, the log may be cycled and new
records written to a new file without notice to applications that may be
accessing the file.
The audit facility provides an audit pipe facility for applications
requiring direct access to live BSM audit data for the purposes of real-
time monitoring. Audit pipes are available via a clonable special
device, /dev/auditpipe, subject to the permissions on the device node,
and provide a "tee" of the audit event stream. As the device is
clonable, more than one instance of the device may be opened at a time;
each device instance will provide independent access to all records.
The audit pipe device provides discrete BSM audit records; if the read
buffer passed by the application is too small to hold the next record in
the sequence, it will be dropped. Unlike audit data written to the audit
trail, the reliability of record delivery is not guaranteed. In
particular, when an audit pipe queue fills, records will be dropped.
Audit pipe devices are blocking by default, but support non-blocking I/O,
asynchronous I/O using SIGIO, and polled operation via select(2) and
poll(2).
Applications may choose to track the global audit trail, or configure
local preselection parameters independent of the global audit trail
parameters.
Audit Pipe Queue Ioctls
The following ioctls retrieve and set various audit pipe record queue
properties:
AUDITPIPE_GET_QLEN Query the current number of records
available for reading on the pipe.
AUDITPIPE_GET_QLIMIT Retrieve the current maximum number of
records that may be queued for reading on
the pipe.
AUDITPIPE_SET_QLIMIT Set the current maximum number of records
that may be queued for reading on the
pipe. The new limit must fall between
the queue limit minimum and queue limit
maximum queryable using the following two
ioctls.
AUDITPIPE_GET_QLIMIT_MIN Query the lowest possible maximum number
of records that may be queued for reading
on the pipe.
AUDITPIPE_GET_QLIMIT_MAX Query the highest possible maximum number
of records that may be queued for reading
on the pipe.
AUDITPIPE_FLUSH Flush all outstanding records on the
audit pipe; useful after setting initial
preselection properties to delete records
queued during the configuration process
which may not match the interests of the
user process.
AUDITPIPE_GET_MAXAUDITDATA Query the maximum size of an audit
record, which is a useful minimum size
for a user space buffer intended to hold
audit records read from the audit pipe.
Audit Pipe Preselection Mode Ioctls
By default, the audit pipe facility configures pipes to present records
matched by the system-wide audit trail, configured by auditd(8).
However, the preselection mechanism for audit pipes can be configured
using alternative criteria, including pipe-local flags and naflags
settings, as well as auid-specific selection masks. This allows
applications to track events not captured in the global audit trail, as
well as limit records presented to those of specific interest to the
application.
The following ioctls configure the preselection mode on an audit pipe:
AUDITPIPE_GET_PRESELECT_MODE Return the current preselect mode on
the audit pipe. The ioctl argument
should be of type int.
AUDITPIPE_SET_PRESELECT_MODE Set the current preselection mode on
the audit pipe. The ioctl argument
should be of type int.
Possible preselection mode values are:
AUDITPIPE_PRESELECT_MODE_TRAIL Use the global audit trail
preselection parameters to select
records for the audit pipe.
AUDITPIPE_PRESELECT_MODE_LOCAL Use local audit pipe preselection;
this model is similar to the global
audit trail configuration model,
consisting of global flags and
naflags parameters, as well as a set
of per-auid masks. These parameters
are configured using further ioctls.
After changing the audit pipe preselection mode, records selected under
earlier preselection configuration may still be in the audit pipe queue.
The application may flush the current record queue after changing the
configuration to remove possibly undesired records.
Audit Pipe Local Preselection Mode Ioctls
The following ioctls configure the preselection parameters used when an
audit pipe is configured for the AUDITPIPE_PRESELECT_MODE_LOCAL
preselection mode.
AUDITPIPE_GET_PRESELECT_FLAGS Retrieve the current default
preselection flags for attributable
events on the pipe. These flags
correspond to the flags field in
audit_control(5). The ioctl
argument should be of type
au_mask_t.
AUDITPIPE_SET_PRESELECT_FLAGS Set the current default preselection
flags for attributable events on the
pipe. These flags correspond to the
flags field in audit_control(5).
The ioctl argument should be of type
au_mask_t.
AUDITPIPE_GET_PRESELECT_NAFLAGS Retrieve the current default
preselection flags for non-
attributable events on the pipe.
These flags correspond to the
naflags field in audit_control(5).
The ioctl argument should be of type
au_mask_t.
AUDITPIPE_SET_PRESELECT_NAFLAGS Set the current default preselection
flags for non-attributable events on
the pipe. These flags correspond to
the naflags field in
audit_control(5). The ioctl
argument should be of type
au_mask_t.
AUDITPIPE_GET_PRESELECT_AUID Query the current preselection masks
for a specific auid on the pipe.
The ioctl argument should be of type
struct auditpipe_ioctl_preselect.
The auid to query is specified via
the ap_auid field of type au_id_t;
the mask will be returned via
ap_mask of type au_mask_t.
AUDITPIPE_SET_PRESELECT_AUID Set the current preselection masks
for a specific auid on the pipe.
Arguments are identical to
AUDITPIPE_GET_PRESELECT_AUID, except
that the caller should properly
initialize the ap_mask field to hold
the desired preselection mask.
AUDITPIPE_DELETE_PRESELECT_AUID Delete the current preselection mask
for a specific auid on the pipe.
Once called, events associated with
the specified auid will use the
default flags mask. The ioctl
argument should be of type au_id_t.
AUDITPIPE_FLUSH_PRESELECT_AUID Delete all auid specific
preselection specifications.
EXAMPLES
The praudit(1) utility may be directly executed on /dev/auditpipe to
review the default audit trail.
SEE ALSO
poll(2), select(2), audit(4), dtaudit(4), audit_control(5), audit(8),
auditd(8)
HISTORY
The OpenBSM implementation was created by McAfee Research, the security
division of McAfee Inc., under contract to Apple Computer Inc. in 2004.
It was subsequently adopted by the TrustedBSD Project as the foundation
for the OpenBSM distribution.
Support for kernel audit first appeared in FreeBSD 6.2.
AUTHORS
The audit pipe facility was designed and implemented by Robert Watson
<rwatson@FreeBSD.org>.
The Basic Security Module (BSM) interface to audit records and audit
event stream format were defined by Sun Microsystems.
BUGS
See the audit(4) manual page for information on audit-related bugs and
limitations.
The configurable preselection mechanism mirrors the selection model
present for the global audit trail. It might be desirable to provide a
more flexible selection model.
The per-pipe audit event queue is fifo, with drops occurring if either
the user thread provides in sufficient for the record on the queue head,
or on enqueue if there is insufficient room. It might be desirable to
support partial reads of records, which would be more compatible with
buffered I/O as implemented in system libraries, and to allow
applications to select which records are dropped, possibly in the style
of preselection.
FreeBSD 13.1-RELEASE-p6 April 28, 2019 FreeBSD 13.1-RELEASE-p6
man2web Home...