Объекты и субъекты доступа в RSBAC

Rule Set Based Access Control (RSBAC) для Linux. Переводы документации, описаний и статьи по данной теме.

[ALT Linux Team]

Перевод: Александр Блохин  ]

Цели

RSBAC разграничивает доступ от субъектов к объектам. Субъектом всегда является процесс, действующий со стороны пользователя с определенными атрибутами. Объекты в RSBAC называются Target (Цель). Определяются следующие типы объектов:

FILE Файлы, включая специальные файлы устройств. Идентифицируются по устройствам и номерам inode.
DIR Каталоги, идентифицированные по устройствам и номерам inode.
FIFO (впервые появились в v1.1.1) специальные файлы FIFO.
DEV Устройства, различаемые по типу (char или block), значениям major и minor.
IPC InterProcess Communication: Semaphores (sem), Messages (msg), Shared Memory (shm), Sockets (sock) и FiFo (fifo, удалено в 1.1.1).
SCD System Control Data: Объекты затрагивающие всю систему. Цели этого типа являются единственными с фиксированным числом объекта, идентифицируемому по по номеру (смотри ниже).
USER Пользователи как объекты, в основном для информации контроля доступа (ACI).
PROCESS Процессы как объекты.
NONE Нет объектов, ассоциированных с этим запросом. В некоторых моделях (RC, ACL) это приравнено к SCD-цели "other".
FD (Только в пользовательской области): Позволяет средствам командной строки делать различие между типами FILE и DIR.

Цели System Control Data (SCD) выглядят следующим образом:

time_strucs Системный таймер
clock Системные время и дата
host_id Имя машины
net_id Имя домена
ioports Access Control для прямого доступа к оборудованию
rlimit Установка ограничения ресурсов процесса
swap Контроль свопирования
syslog Системный журнал регистрации событий
rsbac Данные RSBAC в /proc
rsbaclog Собственный журнал регистрации событий RSBAC
kmem Прямой доступ к памяти ядра через proc или устройство
other (только встроенное в RC и ACL): Подстановка для цели NONE
auth_administration (только в RC и ACL): AUTH-модель администрирования

Запросы

Перед тем, как будет разрешен доступ к объекту, производится запрос к средствам 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>>.



[Источник ALT Linux Team]

[ опубликовано 22/10/2001 ]

ALT Linux Team - Объекты и субъекты доступа в RSBAC   Версия для печати