Пытаюсь разобраться как работать с библиотекой libaudit, хочу написать службу на C/C++, которая будет получать события о действиях пользователя (какие файлы открывал, что запускал, что пытался изменить, пытался ли передать что-либо по сетевому соединению).
Например, для теста устанавливаю правило на отслеживание создание директории в /tmp:
int audit_fd = audit_open();
struct audit_rule_data *rule = (struct audit_rule_data *) malloc(sizeof(struct audit_rule_data));
memset(rule, 0, sizeof(struct audit_rule_data));
audit_rule_syscallbyname_data(rule, "mkdir");
audit_add_watch_dir(AUDIT_DIR, &rule, "/tmp");
audit_add_rule_data(audit_fd,
rule,
AUDIT_FILTER_USER,
AUDIT_ALWAYS);
int rc;
fd_set read_mask;
FD_ZERO(&read_mask);
FD_SET(audit_fd, &read_mask);
struct timeval t;
t.tv_sec = 0;
t.tv_usec = 300 * 1000;
do
{
rc = select(audit_fd+1, &read_mask, NULL, NULL, &t /*NULL*/);
struct audit_reply rep;
audit_get_reply(audit_fd, &rep, GET_REPLY_NONBLOCKING, 0);
if (rep != NULL)
{
printf("%s", rep.message);
break;
}
}
while (rc < 0);
audit_close(audit_fd);
Но задание правила аудита не срабатывает, кто-нибудь работал с этой библиотекой? Что не так? Или может есть другие способы получения событий о действиях пользователя?