Перед тем, как будет разрешен доступ к объекту, производится запрос к средствам Access Control Decision (ADF). Решение о разрешении и запрете доступа принимается в зависимости от типа запроса и цели.
Запросы RSBAC и его системные вызовы описаны в следующей таблице. Обратите пожалуйста внимание, что некоторые запросы составлены в соответствии с некоторыми условиями, например EXECUTE только из mmap(), если запрос нацелен на режим EXEC. Также, некоторые вызовы зависимы от установок конфигурации ядра, например поддержка сети в RSBAC.
Некоторые вызовы выполнены со вспомогательными функциями, например do_fork(). Эти функции также производят уведомляющий вызов rsbac_adf_set_attr() для запросов, маркированных при помощи *.
В добавок, некоторые запросы предоставляют дополнительные данные со встроенными типами атрибутов ядра. Этими атрибутами являются: A_group, A_sockaddr_p, A_signal, A_mode, A_nlink, A_switch_target, A_mod_name, A_request, A_ms_segment, A_trace_request, A_auth_add_f_cap, A_auth_remove_f_cap, A_auth_get_caplist, A_prot_bits. Ознакомьтесь пожалуйста с ними в include/rsbac/types.h.
Запрос | Описание | Допустимые Типы Объектов | Системные вызовы и функции |
ADD_TO_KERNEL | Добавить модуль ядра | NONE | create_module(NONE), init_module(NONE) |
ALTER | Изменить контрольную информацию IPC | IPC | msgctl(IPC), shmctl(IPC) |
APPEND_OPEN | Открыть для дополнения | FILE, DEV, IPC | open(FILE,DEV)*, msgsnd(IPC)*, sendto(IPC)*, sendmsg(IPC)* |
CHANGE_GROUP | Сменить активную группу | IPC, PROCESS, NONE | setgid(PROC), setregid(PROC), setresgid(PROC), setgroups(PROC), setfsgid(NONE) (for DAC only), shmctl(IPC), msgctl(IPC) |
CHANGE_OWNER | Сменить владельца | FILE, DIR, FIFO, IPC, PROCESS, NONE | chown(FILE, DIR, FIFO), lchown(FILE, DIR, FIFO), fchown(FILE, DIR, FIFO), setuid(PROC)*, setreuid(PROC)*, setresuid(PROC)*, setfsuid(NONE) (for DAC only), shmctl(IPC), msgctl(IPC) |
CHDIR | Сменить рабочий каталог | DIR | chdir(DIR), fchdir(DIR), chroot(DIR) |
CLONE | Разветвить/дублировать процесс | PROCESS | fork(PROC)*, vfork(PROC)*, clone(PROC)* |
CLOSE | Закрыть открытый файл. Должно быть всегда разрешено. | FILE, DIR, FIFO, DEV, IPC | close(FILE, DIR, FIFO, DEV, IPC), shmdt(IPC)*, msgrcv(IPC)*, msgsnd(IPC)*, send(IPC)*, sendto(IPC)*, sendmsg(IPC)*, recv(IPC)*, recvfrom(IPC)*, recvmsg(IPC)* |
CREATE | Создать объект | DIR (где), IPC | creat(DIR, IPC)*, open(DIR, IPC)*, mknod(DIR)*, mkdir(DIR)*, symlink(DIR)*, shmget(IPC)*, msgget(IPC)*, socket(IPC)*, accept(IPC)* |
DELETE | Удалить объект | FILE, DIR, FIFO, IPC | unlink(FILE, DIR, FIFO)*, rmdir(DIR)*, msgctl(IPC)*, shmctl(IPC)*, shutdown(IPC)*. close(IPC)* |
EXECUTE | Выполнить файл или библиотечный код из файла или выполнить другой код (цель NONE) | FILE, NONE | exec(FILE)*, mmap(FILE) (EXEC mode), mprotect(FILE, NONE) (EXEC mode) |
GET_PERMISSION_DATA | Считать права доступа Unix (режим) | FILE, DIR, FIFO | access(FILE, DIR, FIFO) |
GET_STATUS_DATA | Получить статус (stat() подобный) | FILE, DIR, FIFO, IPC, SCD | open_port(SCD) (/dev/kmem etc.), open_kcore(SCD) (/proc/kcore), stat(FILE, DIR, FIFO, IPC), newstat(FILE, DIR, FIFO, IPC), lstat(FILE, DIR, FIFO, IPC), newlstat(FILE, DIR, FIFO, IPC), fstat(FILE, DIR, FIFO, IPC), newfstat(FILE, DIR, FIFO, IPC), stat64(FILE, DIR, FIFO, IPC), lstat64(FILE, DIR, FIFO, IPC), fstat64(FILE, DIR, FIFO, IPC), statfs(FILE, DIR, FIFO), fstatfs(FILE, DIR, FIFO), rsbac_stats(SCD), rsbac_check(SCD), rsbac_stats_pm(SCD), rsbac_stats_rc(SCD), rsbac_stats_acl(SCD), rsbac_log(SCD), (access to RSBAC proc-files(SCD)) |
LINK_HARD | Жесткая ссылка | FILE, DIR, FIFO | link(FILE, DIR, FIFO) |
MODIFY_ACCESS_DATA | Изменить информацию доступа, например время, дату | FILE, DIR, FIFO | utimes(FILE, DIR, FIFO) |
MODIFY_ATTRIBUTE | Изменить значение атрибутов RSBAC | Цели всех типов | (специфический запрос необходимый для различных моделей безопасности) |
MODIFY_PERMISSIONS_DATA | Изменить права доступа Unix | FILE, DIR, FIFO, SCD | ioperm(SCD), iopl(SCD), chmod(FILE, DIR, FIFO) , fchmod(FILE, DIR, FIFO) |
MODIFY_SYSTEM_DATA | Изменить системные установки | SCD | stime(SCD), settimeofday(SCD), adjtimex(SCD), sethostname(SCD), setdomainname(SCD), setrlimit(SCD), syslog(SCD), sysctl(SCD), swapon(SCD), swapoff(SCD), rsbac_log(SCD) |
MOUNT | Смонтировать файловую систему | DIR, DEV | mount(DIR, DEV) (раздельные уведомления монтирования для структур данных) |
READ | Читать из DIR. Дополнительно: читать из других объектов | DIR (Дополнительно: FILE, FIFO, DEV, IPC) | read(FILE, FIFO, DEV, IPC)*, readv(FILE, FIFO, DEV, IPC)*, pread(FILE, DEV, IPC)*, readdir(DIR), open(DIR) |
READ_ATTRIBUTE | Считать значение атрибута RSBAC | Цели всех типов | (специфический запрос необходимый для различных моделей безопасности) |
READ_OPEN | Открыть для чтения | FILE, FIFO, DEV, IPC | open(FILE, FIFO, DEV, IPC)*, shmat(IPC)*, msgrcv(IPC)*, recv(IPC)*, recvfrom(IPC)*, recvmsg(IPC)* |
READ_WRITE_OPEN | Открыть для чтения и записи | FILE, FIFO, DEV, IPC | open(FILE, FIFO, DEV, IPC)*, shmat(IPC)*, bind(IPC)*, connect(IPC)*, listen(IPC)* |
REMOVE_FROM_KERNEL | Удалить модуль ядра | NONE | delete_module(NONE) |
RENAME | Переименовать | FILE, DIR, FIFO | rename(FILE, DIR, FIFO) (идентификация RSBAC при переименовании не меняется) |
SEARCH | Поиск в каталоге из ядра для доступа с полным именем пути | DIR | (встроенные функции lookup_dentry(DIR) / path_walk(DIR) / lookup_hash(DIR)) |
SEND_SIGNAL | Послать сигнал | PROCESS | kill(PROC) |
SHUTDOWN | Останов/Перезагрузка системы | NONE | reboot(NONE) |
SWITCH_LOG | Изменить установки RSBAC | NONE | rsbac_adf_log_switch(NONE) |
SWITCH_MODULE | Включить/Выключить модуль принятия решений | NONE | rsbac_switch(NONE) |
TERMINATE | Закончить вызов процесса, для очистки атрибутов. Должно быть всегда разрешено. | PROCESS | exit(PROC) |
TRACE | Отслеживать процесс | PROCESS | ptrace(PROC) (архитектурозависимо) |
TRUNCATE | Усечь | FILE | open(FILE)*, truncate(FILE)*, ftruncate(FILE)*, truncate64(FILE)*, ftruncate64(FILE)* |
UMOUNT | Размонтировать файловую систему | DIR, DEV | umount(DIR, DEV) (раздельные уведомления де-монтирования для структур данных) |
WRITE | Запись в каталог или SCD. Используется для перемещения объектов в целевой каталог. Дополнительно: запись в файл | DIR, SCD (Дополнительно: FILE, FIFO, DEV, IPC-sock) | write(FILE, FIFO, IPC, DEV)*, writev(FILE, FIFO, IPC, DEV)*, pwrite(FILE, IPC, DEV)*, rename(DIR), rsbac_write(SCD) |
WRITE_OPEN | Открыть для записи | FILE, FIFO, DEV, IPC | open(FILE, FIFO, DEV, IPC)* |
Обратите внимание, что некоторые модели (RC, ACL) контроля доступа имеют встроенное изменение целей NONE на SCD-цель <<other>>.