KasperskyOS Community Edition 1.2

Пример включения в решение системной программы KlogStorage, выполняющей запись данных аудита в файл

Исходный код программы

klog_storage/src/klog_storage_entity.c

#include <klog_storage/server.h> #include <klog_storage/file_storage.h> #include <ping/KlogStorageEntity.edl.h> int main(int argc, char *argv[]) { /* В результате вызова этой функции будет запущен цикл обработки IPC-запросов. * Данные аудита будут записываться в файл /etc/klog_storage.log, который может * вместить не более 100 записей. При полном заполнении файла предыдущие * записи будут заменяться новыми с начала файла. Если в последнем параметре * функции указано значение, отличное от 1, программа KlogStorage при запуске * откроет существующий файл и начнет запись данных аудита с той позиции, * которая была установлена в файле после предыдущей записи. Если в последнем * параметре функции указано значение 1, будет создан новый пустой файл. * (Константы ping_KlogStorageEntity_klogStorage_iidOffset и * ping_KlogStorageEntity_klogStorage_storage_iid определены в заголовочном * файле KlogStorageEntity.edl.h, который содержит автоматически сгенерированный * транспортный код.) */ return klog_storage_file_storage_run(KLOG_STORAGE_SERVER_CONNECTION_ID, "/etc/klog_storage.log", ping_KlogStorageEntity_klogStorage_iidOffset, ping_KlogStorageEntity_klogStorage_storage_iid, 100, 0); }

Сборка программы

CMake-команды для сборки программы KlogStorage, выполняющей запись данных аудита в файл, отличаются от CMake-команд для сборки версии этой программы, направляющей данные аудита в стандартный вывод ошибок, следующим изменением:

klog_storage/CMakeLists.txt

... # При создании исполняемого файла программы KlogStorage нужно # выполнить компоновку с библиотекой klog_storage_file_storage. target_link_libraries (KlogStorageEntity ${klog_storage_FILE_STORAGE_LIB}) ...

Словарь процесса программы в шаблоне init-описания

einit/src/init.yaml.in

... - name: ping.KlogStorageEntity connections: - target: file_vfs.FileVfs id: {var: _VFS_CONNECTION_ID, include: vfs/defs.h} ...

Описание политики безопасности для программы

Описание политики для программы KlogStorage, выполняющей запись данных аудита в файл, отличается от описания политики для версии этой программы, направляющей данные аудита в стандартный вывод ошибок, следующим дополнением:

einit/src/security.psl.in

... use EDL file_vfs.FileVfs ... use vfs._ ...

einit/src/vfs.psl

... /* Взаимодействие с программой VFS */ request dst=file_vfs.FileVfs { match src=ping.KlogStorageEntity { grant () } } response src=file_vfs.FileVfs { match dst=ping.KlogStorageEntity { grant () } } error src=file_vfs.FileVfs { match dst=ping.KlogStorageEntity { grant () } } ...

Передача данных аудита другим программам

Чтобы передавать через IPC данные аудита, записанные в файл, программа KlogStorage предоставляет интерфейсные методы read и readRange, определенные в файле sysroot-*-kos/include/kl/KlogStorage.idl из состава KasperskyOS SDK.

Исполняемый файл программы, которой требуется получать данные аудита, должен быть скомпонован с клиентской библиотекой программы KlogStorage:

klog_reader/CMakeLists.txt

# Импорт библиотек KlogStorage из состава # KasperskyOS SDK find_package (klog_storage REQUIRED) include_directories (${klog_storage_INCLUDE}) ... # Создание исполняемого файла программы, которой требуется # получать данные аудита от программы KlogStorage. add_executable (KlogReader "src/klog_reader.c") target_link_libraries (KlogReader ${klog_storage_CLIENT_LIB}) ...

Исходный код для получения данных аудита от программы KlogStorage:

klog_reader/src/klog_reader.c

#include <klog_storage/client.h> ... int main(int argc, char *argv[]) { ... struct Klog_storage_ctx *storage = klog_storage_init(KLOG_STORAGE_SERVER_CONNECTION_ID); struct kl_KlogStorage_Entry first_entries[10], latest_entries [10]; /* Чтение десяти первых записей */ int f_count = klog_storage_read_range(klog_storage_IKlog_storage(storage), 1, 10, first_entries); /* Чтение десяти последних записей */ int l_count = klog_storage_read(klog_storage_IKlog_storage(storage), 10, latest_entries); ... }