如何在 linux 中使用审计来使用 libaudit 监控文件

how to use audit in linux to monitor a file using libaudit

上一个问题显示了 libaudit 的代码

但答案并不是一个完整的例子。我添加了包含文件来创建 mwe,但它不起作用。在这种情况下,我正在监视一个文件,并期望每当文件发生更改时都会回调监视函数。我尝试触摸并附加到文件,但没有任何反应。谁能发现我做错了什么?

#include <stdio.h>
#include <libaudit.h>
#include <unistd.h>
#include <ev.h>

int fd;

void monitoring(struct ev_loop *loop, struct ev_io *io, int revents) {
    struct audit_reply reply;

    audit_get_reply(fd, &reply, GET_REPLY_NONBLOCKING, 0);

    if (reply.type != AUDIT_EOE &&
            reply.type != AUDIT_PROCTITLE &&
            reply.type != AUDIT_PATH) {
        printf("Event: Type=%s Message=%.*s\n",
                     audit_msg_type_to_name(reply.type),
                     reply.len,
                     reply.message);
    }
}

int main() {
    fd = audit_open();
    struct audit_rule_data* rule = new audit_rule_data();

    // what directory we will follow.
    //  audit_add_watch_dir(AUDIT_DIR, &rule, "foo");

    audit_add_watch(&rule, "foo/test.txt");

    // setting rule.
    audit_add_rule_data(fd, rule, AUDIT_FILTER_USER, AUDIT_ALWAYS);
    struct ev_io monitor;
    audit_set_pid(fd, getpid(), WAIT_YES);

    audit_set_enabled(fd, 1);
    struct ev_loop *loop = ev_default_loop(EVFLAG_NOENV);

    ev_io_init(&monitor, monitoring, fd, EV_READ);
    ev_io_start(loop, &monitor);

    ev_loop(loop, 0);

    audit_close(fd);
    return 0;
}

原来我忘了运行用sudo,这只能运行有root权限但是没有崩溃,只是什么都没报告。