Provided by: selinux-utils_3.5-2ubuntu5_amd64 

ИМЯ
selabel_db - интерфейс проставления меток SELinux в пространстве пользователя и формат файла конфигурации
для внутренней службы контекстов объектов RDBMS (реляционная СУБД)
ОБЗОР
#include <selinux/label.h>
int selabel_lookup(struct selabel_handle *hnd,
char **context,
const char *object_name, int object_type);
int selabel_lookup_raw(struct selabel_handle *hnd,
char **context,
const char *object_name, int object_type);
ОПИСАНИЕ
Внутренняя служба контекста базы данных сопоставляет имя и класс объекта с контекстами безопасности. Это
действие позволяет найти правильный контекст для объектов базы данных при повторном проставлении меток
для определённой базы данных. Необходимо освободить возвращённый context с помощью freecon(3).
selabel_lookup(3) описывает функцию с её возвращаемыми значениями и кодами ошибок.
object_name должно быть полным именем, которое использует иерархию объектов базы данных. Например,
таблица pg_class в базе данных postgres и схема pg_catalog должны быть указаны следующим образом:
postgres.pg_catalog.pg_class
В разделе ПРИМЕЧАНИЯ доступны более подробные сведения о поддержке баз данных для иерархий пространства
имён.
Для аргумента object_type должно быть установлено одно из следующих значений:
SELABEL_DB_DATABASE
Аргумент object_name определяет имя самой базы данных, например, "postgres".
SELABEL_DB_SCHEMA
Аргумент object_name определяет имя объекта схемы, например, "postgres.public".
SELABEL_DB_TABLE
Аргумент object_name определяет имя объекта таблицы, например, "postgres.public.my_table"
SELABEL_DB_COLUMN
Аргумент object_name определяет имя объекта столбца, например,
"postgres.public.my_table.user_id"
SELABEL_DB_TUPLE
Аргумент object_name определяет имя объекта таблицы, содержащей кортежи, для которых
требуется повторно проставить метки, например, "postgresql.public.my_table". Следует
учитывать, что нет способа идентифицировать отдельные объекты кортежа (за исключением
условия WHERE для инструкций DML), потому что у них нет имён.
SELABEL_DB_PROCEDURE
Аргумент object_name определяет имя объекта процедуры, например, "postgres.public.my_func".
Следует учитывать, что поиск отдельных контекстов безопасности для процедур с одинаковыми
именами, но разными аргументами не поддерживается.
SELABEL_DB_SEQUENCE
Аргумент object_name определяет имя объекта последовательности, например,
"postgres.public.my_seq".
SELABEL_DB_BLOB
Аргумент object_name определяет имя большого объекта, например, "postgres.16308". Следует
учитывать, что у большого объекта нет имени, поэтому он идентифицируется по значению
соответствующего идентификатора.
SELABEL_DB_VIEW
Аргумент object_name определяет имя объекта просмотра, например, "postgres.public.my_view".
SELABEL_DB_LANGUAGE
Аргумент object_name определяет имя объекта языка, например, "postgres.public.tcl".
SELABEL_DB_EXCEPTION
Аргумент object_name определяет имя объекта исключения.
SELABEL_DB_DATATYPE
Аргумент object_name определяет имя объекта типа или домена, например,
postgres.public.my_type.
Все сообщения, созданные с помощью selabel_lookup(3), по умолчанию отправляются в stderr. Это поведение
можно изменить с помощью selinux_set_callback(3).
selabel_lookup_raw(3) работает аналогично selabel_lookup(3), но не выполняет преобразование контекста.
В разделе ФАЙЛЫ приводится описание файлов конфигурации, которые используются для определения контекста
объекта базы данных.
ПАРАМЕТРЫ
Помимо глобальных параметров, описание которых приведено в selabel_open(3), эта внутренняя служба
распознаёт следующие параметры:
SELABEL_OPT_PATH
Значение этого параметра, отличное от null, определяет путь к файлу, который будет открыт
вместо стандартного файла контекста базы данных. По умолчанию параметр пытается открыть
файл спецификации, предназначенный для SE-PostgreSQL; если этот интерфейс используется
другой реляционной СУБД, параметр должен явно объявить файл спецификации, предназначенный
для такой реляционной СУБД (подробные сведения см. в разделе ФАЙЛЫ).
ФАЙЛЫ
То, какой файл контекстов базы данных будет использоваться для получения контекста, зависит от параметра
SELABEL_OPT_PATH, переданного в selabel_open(3). Если NULL, то значением SELABEL_OPT_PATH по умолчанию
станет расположение контекстов базы данных активной политики (возвращённое
selinux_sepgsql_context_path(3)). В ином случае будет использоваться фактическое указанное значение
SELABEL_OPT_PATH (этот вариант необходимо использовать для поддержки баз данных, отличных от SE-
PostgreSQL).
Файл контекстов объекта базы данных по умолчанию:
/etc/selinux/{SELINUXTYPE}/contexts/sepgsql_context
Где {SELINUXTYPE} - запись из файла конфигурации selinux config (см. selinux_config(5)).
Записи внутри файла контекстов базы данных показаны в разделах Значения строки имени объекта и ФОРМАТ
ФАЙЛА.
Значения строки имени объекта
Имена строк, назначенные аргументам object_type, которые могут присутствовать в файле контекстов базы
данных:
┌──────────────────────┬───────────────┐
│ object_type │ Текстовое имя │
├──────────────────────┼───────────────┤
│ SELABEL_DB_DATABASE │ db_database │
├──────────────────────┼───────────────┤
│ SELABEL_DB_SCHEMA │ db_schema │
├──────────────────────┼───────────────┤
│ SELABEL_DB_VIEW │ db_view │
├──────────────────────┼───────────────┤
│ SELABEL_DB_LANGUAGE │ db_language │
├──────────────────────┼───────────────┤
│ SELABEL_DB_TABLE │ db_table │
├──────────────────────┼───────────────┤
│ SELABEL_DB_COLUMN │ db_column │
├──────────────────────┼───────────────┤
│ SELABEL_DB_TUPLE │ db_tuple │
├──────────────────────┼───────────────┤
│ SELABEL_DB_PROCEDURE │ db_procedure │
├──────────────────────┼───────────────┤
│ SELABEL_DB_SEQUENCE │ db_sequence │
├──────────────────────┼───────────────┤
│ SELABEL_DB_BLOB │ db_blob │
├──────────────────────┼───────────────┤
│ SELABEL_DB_EXCEPTION │ db_exception │
├──────────────────────┼───────────────┤
│ SELABEL_DB_DATATYPE │ db_datatype │
└──────────────────────┴───────────────┘
ФОРМАТ ФАЙЛА
Каждая строка внутри файла контекстов базы данных имеет следующий вид:
object_type object_name context
Где:
object_type
Строковое представление типа объекта, показанное в разделе Значения строки имени объекта.
object_name
Ключ, который используется для получения контекста на основе object_type.
Запись может содержать подстановочные знаки '*' или '?' для выполнения сопоставления с
дополнением или подстановкой.
Следует учитывать, что при использовании '*' важен порядок записей в файле. '*' в отдельном
виде используется для того, чтобы обеспечить назначение резервного контекста по умолчанию,
это должна быть последняя запись в блоке object_type.
context
К объекту будет применён этот контекст безопасности.
Далее приведён пример для SE-PostgreSQL:
# ./contexts/sepgsql_contexts file
# object_type object_name context
db_database my_database system_u:object_r:sepgsql_db_t:s0
db_database * system_u:object_r:sepgsql_db_t:s0
db_schema *.* system_u:object_r:sepgsql_schema_t:s0
db_tuple row_low system_u:object_r:sepgsql_table_t:s0
db_tuple row_high system_u:object_r:sepgsql_table_t:s0:c1023
db_tuple *.*.* system_u:object_r:sepgsql_table_t:s0
ПРИМЕЧАНИЯ
1. Для целевой реляционной СУБД необходимо записать подходящий файл контекстов базы данных и
использовать для его загрузки параметр SELABEL_OPT_PATH в selabel_open(3).
2. Иерархия пространства имён для объектов базы данных зависит от реляционной СУБД, но интерфейсы
selabel* не предусматривают какой-либо особой поддержки иерархии пространства имён.
В иерархии пространства имён SE-PostgreSQL объектом верхнего уровня является база данных, объектом
следующего уровня - схема. На следующем после объекта схемы уровне могут находиться другие типы
объектов, например, таблицы и процедуры. Эта иерархия поддерживается следующим образом:
Если для таблицы "my_table" в схеме "public" внутри базы данных "postgres" требуется контекст
безопасности, то параметрами selabel_lookup(3) для object_type будет SELABEL_DB_TABLE, для
object_name - "postgres.public.my_table", контекст безопасности (если доступно) будет
возвращён в context.
3. Если контексты должны быть проверены, необходимо указать глобальный параметр SELABEL_OPT_VALIDATE
перед вызовом selabel_open(3). Если этот параметр не указан, может быть возвращён недействительный
контекст.
СМОТРИТЕ ТАКЖЕ
selinux(8), selabel_open(3), selabel_lookup(3), selabel_stats(3), selabel_close(3),
selinux_set_callback(3), selinux_sepgsql_context_path(3), freecon(3), selinux_config(5)
АВТОРЫ
Перевод на русский язык выполнила Герасименко Олеся <gammaray@basealt.ru>.
Security Enhanced Linux 01 декабря 2011 selabel_db(5)