如何在 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权限但是没有崩溃,只是什么都没报告。
上一个问题显示了 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权限但是没有崩溃,只是什么都没报告。