auditobj 子例程

用途

获取或设置系统数据对象的审计方式。

标准 C 库 (libc.a)

语法

#include <sys/audit.h>
int auditobj ( Command Obj_Events ObjSize)
int Command;
struct o_event *Obj_Events;
int ObjSize;

描述

auditobj 子例程查询或设置要通过访问所选对象生成的审计事件。 对于文件系统名称空间中的每个对象,可以指定为每种访问方式生成的事件。 通过使用 auditobj 子例程,管理员可以在系统中定义与对指定对象的访问相对应的新审计事件。 这些事件与系统定义的事件处理方式相同。

不需要启用系统审计来设置或查询对象审计事件。 可以使用 AUDIT_RESET 命令来指示 audit 子例程,以清除对象审计事件的定义。

参数

描述
命令 指定是读取还是写入对象审计事件列表。 在 sys/audit.h 文件中为 Command 参数定义的有效值为:
AUDIT_SET
在先清除所有先前定义之后,设置对象审计事件的列表。
AUDIT_GET
查询对象审计事件的列表。
审计锁定
查询对象审计事件列表,并阻止任何其他进程尝试设置或锁定审计事件列表。 当挂起锁定的进程在 Command 参数设置为 AUDIT_SET的情况下死亡或调用 auditobj 子例程时,将释放锁定。
对象事件 指定 AUDIT_SET 操作或 AUDIT_GETAUDIT_LOCK 操作之后的 o_event 结构的数组。 o_event 结构在 sys/audit.h 文件中定义,并包含以下成员:
o_type
在命名空间方面,指定对象的类型。 目前,仅支持一个对象命名空间:
AUDIT_FILE
表示文件系统命名空间。
 
o_name
指定对象的名称。
o_event
指定访问对象时要生成的任何事件名称数组。 请注意,事件名称当前限制为 16 个字节,包括尾部空值。 此数组中事件名称的索引对应于访问方式。 有效索引在 audit.h 文件中定义,并包含以下内容:
  • 审计阅读
  • AUDIT_WRITE
  • AUDIT_EXEC
注: C++ 编译器将生成一条警告,指示 o_event 既定义为结构,也定义为该结构中的字段。 虽然可以在 C++ 中使用 o_event 字段,但可以通过定义 O_EVENT_RENAME来绕过警告。 这会将 o_event 字段替换为 o_event_arrayo_event 是缺省字段。
ObjSize 对于 AUDIT_SET 操作, ObjSize 参数指定数组中由 Obj_Events 参数指向的对象审计事件定义数。 对于 AUDIT_GET AUDIT_LOCK 操作, ObjSize 参数指定 Obj_Events 参数指向的缓冲区大小。

返回值

如果 auditobj 子例程成功完成,那么如果 Command 参数为 AUDIT_GETAUDIT_LOCK,那么将返回对象审计事件定义数。 如果 Command 参数为 AUDIT_SET,那么将返回值 0。 如果调用失败,则返回值为-1并设置errno全局变量来指示错误。

错误代码

如果下列任何一项为 true ,那么 auditobj 子例程将失败:

描述
Efault Obj_Events 参数指向进程的地址空间外部。
Efault Command 参数为 AUDIT_SET,一个或多个o_name成员指向进程的地址空间外。
Efault Command 参数为 AUDIT_GETAUDIT_LOCK,并且 Obj_Events 参数的缓冲区大小不足以容纳整数。
EINVAL Command 参数的值不是 AUDIT_SETAUDIT_GETAUDIT_LOCK
EINVAL Command 参数为 AUDIT_SET,以及一个或多个o_type成员不是 AUDIT_FILE
EINVAL 事件名称的长度超过 15 个有效字符。
ENOENT Command 参数为 AUDIT_SET,并且其中一个文件系统对象的父目录不存在。
ENOSPC Command 参数的值为 AUDIT_GETAUDIT_LOCK,并且由 ObjSize 参数指定的缓冲区大小不足以容纳事件结构和名称列表。 如果发生此情况,那么缓冲区的第一个字将设置为所需的缓冲区大小。
ENOMEM 分配内存失败。
EBUSY 另一个进程使用 AUDIT_LOCK调用了 auditobj 子例程。
EPERM 调用者没有 root 用户权限。